版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选文档班级:B12数信班 姓名:岁梦 学号:1205025106试验6 函数、编译预处理试验目的:1把握函数的定义、函数的说明和调用方法;2把握函数实参与形参的对应关系以及“值传递”的方式和函数值的正确返回;3把握函数的嵌套调用和递归调用的方法;4把握数组做函数参数的用法;5把握全局变量、局部变量、动态变量、静态变量的概念和使用方法;6把握宏定义、文件包含处理和条件编译的方法;7学习对多文件程序的编译和运行。试验内容:1程序阅读理解训练。1) 输入并运行下面的程序,分析输出的结果。#include void try(int,int,int);void main( ) int x=2,y=3,
2、z=4;printf(1) x=%d y=%d z=%dn,x,y,z);try(x,y,z);printf(4) x=%d y=%d z=%dn,x,y,z);void try(int x,int y,int z)printf(2) x=%d y=%d z=%dn,x,y,z);z=x+y;x=x*x;y=y*y;printf(3) x=%d y=%d z=%dn,x,y,z);2) 输入并运行下面的程序,分析输出的结果。#include void swap(int,int);void main( ) int x=10,y=20;printf(1) x=%d y=%dn,x,y);swap(
3、x,y);printf(4) x=%d y=%dn,x,y);void swap(int a,int b)int t;printf(2) a=%d b=%dn,a,b);t=a;a=b;b=t;printf(3) a=%d b=%dn,a,b);3) 输入并运行下面的程序,分析输出的结果。#include int a=3,b=5,c; void f(int b)c=a+b;printf(%d %d %dn,a,b,c); void main()int a=8;f(3);printf(%d %d %dn,a,b,c); 4) 输入并运行下面的程序,分析输出的结果。#include int f1(
4、int n) static int f=1; f=f*n; return(f); void main() int i; for(i=1;i=4;i+) printf(%5d,f1(i); printf(n);5) 输入并运行下面的程序,说明程序及其ispring函数的功能。运行程序时,分别输入数据:17、34、2,1、0,检查结果是否正确,假如结果不正确,请修改。(娴熟把握该程序)#include int isprime(int);void main( ) int x;printf(Enter a integer number:);scanf(%d,&x);if(isprime(x)print
5、f(%d is prime.n,x);elseprintf(%d is not prime.n,x);int isprime(int a)int i;for(i=2;i=sqrt(double)a);i+)if(a%i=0)return 0;return 1;6) 输入并运行下面的程序,说明函数fun的功能。#include int fun(int num)int k=1; dok*=num%10;num/=10;while(num);return k; void main()int n=26;printf(%dn,fun(n);思考:假如将函数fun中的变量k初始化为0,并将语句“k*=nu
6、m%10;”改为“k+=num%10;”,函数fun的功能变为什么?7) 输入并运行下面的程序,说明函数fun的功能。(娴熟把握该程序)#include void dtob(int n) int i; if(n1)i=n%2;dtob(n/2); elsei=n; printf(%d,i); void main() int i=11; printf(%d-,i); dtob(i); printf(2)n); 2程序填空(依据题意在空白处填入适当的内容,使程序变得完整,并上机进行调试验证) 1) 程序说明:下面程序将输入的十进制数 n 转换为 b 进制数,并将转换结果输出。转换的方法是:除 b
7、取余法。#include stdio.h void transfer(int m,int k) int a20,i; for(i=0; m; i+) ai= ;m/=k; for(;i=0;i-)printf(%d,ai); void main() int b,n; scanf(%d%d, ); ;修改:#include stdio.h void transfer(int m,int k) int a20=0,i; for(i=0; i=0;i-)printf(%d,ai); void main() int b,n; scanf(%d%d,&b,&n); transfer(n,b);2) 程序
8、说明:歌德巴赫猜想指出:任何一个充分大的偶数都可以表示为两个素数之和,例如 4=2+2 6=3+3 8=3+5 50=3+47。下面程序将 4-50 之间的全部偶数用两个素数之和表示,推断一个整数是否为素数用函数 prime 完成。#include stdio.h int prime(int x)int k,flag=1; for(k=2;k=x/2;k+) if( ) flag=0; break; return( ); void main() int m,n,k; for(m=4;m=50;m+) for(n=2;nm-1;n+) if(prime(n)& ) printf(%d=%d+%d
9、n, );break; 修改:#include stdio.h int prime(int x)int k,flag=1; for(k=2;k=x/2;k+) if(x%k=0) flag=0; break; return(flag); void main() int m,n,k; for(m=4;m=50;m+) for(n=2;nm-1;n+) if(prime(n)&prime(m-n) printf(%d=%d+%dn,m,n,m-n);break; 3) 程序说明:用一个一维数组存放 10 个同学的成果,写一个函数求出平均分、最高分和最低分。#include stdio.h floa
10、t max=0;min=0; float average(float score,int n) int i; float ave,sum=score0; max=min= ; for(i=1;imax) max=scorei; else if( )min=scorei; sum=sum+scorei; ave=sum/10; return ; void main() float ave,score10; int i; for(i=0;i10;i+) scanf(%f, ); ave=average( ); printf(max=%6.2f min=%6.2f average=%6.2fn,ma
11、x,min,ave); 修改:#include stdio.h float max=0,min=0; float average(float score,int n) int i; float ave,sum=score0; max=min=score0; for(i=1;imax) max=scorei; else if(scoreimin)min=scorei; sum=sum+scorei; ave=sum/10; return ave; void main() float ave,score10; int i; for(i=0;i10;i+) scanf(%f,&scorei); av
12、e=average(score,10); printf(max=%6.2f min=%6.2f average=%6.2fn,max,min,ave); 4) 程序说明:在主函数中读入一字符串,再读入一字符,然后调用函数delete在字符串中查找并删除该字符,最终输出该字符串。#include stdio.h void delete(char p,char ch)int i=0,j;while( ) if(pi=ch)for(j=i;j ;j+)pi=pi+1;elsei+; void main() char p80,ch;int i=0,j;scanf(%s,p);scanf(%c,&ch)
13、;delete( );printf(%s, ); 修改:#include stdio.h void delete(char p,char ch) /asd aint i=0,j;while(pi!=0) /aif(pi=ch)for(j=i;j80;j+)pi=pi+1;elsei+; void main() char p80,ch;int i=0,j;scanf(%s,p);scanf( %c,&ch); delete(p,ch);printf(%s,p); 5) 程序说明:输入10 个同学的学号及单科成果,然后求出最高分的学号、最低分的学号以及超过平均分的人数。#include stdio
14、.hint high_num, low_num; int over_aver(int score,int n) int i, imax, imin, over_num; float aver; imax=0; imin=0; aver=0; for(i=0;iscoreimax) imax=i; if(scoreiscoreimin) imin=i; aver/=n; over_num=0; for(i=0;i=aver)over_num+; _; _; return over_num; void main() int i, over_num, a10; printf(n input a:);
15、 for(i=0;i10;i+)scanf(%d,&ai);over_num=_; printf(n high_num,low_num=%d,%d, high_num, low_num); printf(n over_num=%d,over_num); 修改:#include stdio.hint high_num, low_num; /全局变量int over_aver(int score,int n) int i, imax, imin, over_num; float aver; imax=0; imin=0; aver=0; for(i=0;iscoreimax) imax=i; if
16、(scoreiscoreimin) imin=i; aver/=n; over_num=0; for(i=0;i=aver)over_num+; high_num=imax; low_num=imin; return over_num; void main() int i, over_num, a10; printf(n input a:); for(i=0;i10;i+)scanf(%d,&ai);over_num=over_aver(a,10); printf(n high_num,low_num=%d,%d, high_num, low_num); printf(n over_num=%
17、d,over_num); 3程序设计(依据题意编写程序并上机进行调试)1) 用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”。n的位数不确定,可以是任意的整数。# includevoid convert(int n) int i; /定义整数变量if (i=n/10)!=0)/*假如整数i除以10后不为0,说明高位还有值,需要更多字符来表示*/convert(i);/调用自身,使用除以10后的i值putchar(n%10+0);/打印余数,余数是1则打印字符1,以此类推int main() int number;/定义整数变量printf(输入一个数:);/输出信息s
18、canf(%d,&number);/让用户输入一个整数printf(输出:);/输出信息if (number0)/假如是负数 putchar(-);/打印负号number=-number;/负数变为正数convert(number); /执行递归函数printf(n);return 0;2) 求两个整数的最大公约数和最小公倍数。用一个函数求最大公约数,用另一函数依据求出的最大公约数求最小公倍数。要求:求最大公约数用递归方法实现,递归公式为(r=m%n): 不用全局变量,分别用两个函数求最大公约数和最小公倍数。两个整数在主函数中输人,并传送给函数l,求出的最大公约数返回主函数,然后再与两个整数一
19、起作为实参传递给函数2,以求出最小公倍数,再返回到主函数输出最大公约数和最小公倍数。# includeint gcd(int m,int n)int r,max_gys;r=m%n;if (r=0) max_gys=n; return max_gys; else gcd(n,r); int gbs(int m,int n,int l)int a,b,c;a=m/l;b=n/l;c=a*b*l;return c; int main() int m,n,x,y,t;printf(输入两个需要求最大公约数和最小公倍数的数:n);scanf(%d%d,&m,&n);if (mn) t=m;m=n;n=
20、t; x=gcd(m,n);y=gbs(m,n,x);printf(最大公约数是%dt最小公倍数的数是%dn,x,y);return 0; 用全局变量的方法,分别用两个函数求最大公约数和最小公倍数,但其值不由函数带回。将最大公约数和最小公倍数都设为全局变量,在主函数中输出它们的值。# includeint x,y;void gcd(int m,int n)int r,max_gys;r=m%n;if (r=0) x=n; else gcd(n,r); void gbs(int m,int n)int a,b;a=m/x;b=n/x;y=a*b*x; int main() int m,n,t;printf(输入两个需要求最大公约数和最小公倍数的数:n);scanf(%d%d,&m,&n);if (mn) t=m;m=n;n=t; gcd(m,n);gbs(m,n);printf(最大公约数是%dt最小公倍数的数是%dn,x,y);return 0;3) 三角形的面积为其中,为三角形的边长,。编写程序求面积。要求:定义两个带参数的宏,一个用来求,另一个用来求,在程序中用带参数的宏名来求面积。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高职(钢结构工程技术)钢结构工程施工试题及答案
- 2025年高职食品营养与检测(营养配餐设计)试题及答案
- 2025年本科云计算与大数据技术(云计算架构设计)试题及答案
- 2025年大学城市轨道交通工程技术(城轨工程设计)试题及答案
- 2025年高职临床医学基础(临床基础理论)试题及答案
- 内墙施工方案八局-中国建设银行济南分行泺源大街办公楼装修改造项目
- 河北省秦皇岛市2025年八年级上学期期末考试物理试题附答案
- 近七年北京中考语文试题及答案2025
- 2026年汕头招商局港口集团有限公司招聘备考题库参考答案详解
- 养老院老人生活设施定期检查制度
- 北京市租赁房屋治安责任书
- 2026年北京市公务员录用考试申论试题及答案
- 医院门诊部2025年度工作总结及2026年工作计划
- 2025年医院停电应急预案演练脚本
- AI在医疗质量控制中的指标优化
- 2、公安检查站治安管控系统解决方案
- 停车场电车起火应急预案
- DB1310-T 369-2025 化学分析实验室玻璃仪器使用规
- 2025年四川蜀道高速公路集团有限公司招聘工作人员考试笔试备考题库及答案
- GB/T 25630-2010透平压缩机性能试验规程
- GB/T 19610-2004卷烟通风的测定定义和测量原理
评论
0/150
提交评论