ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:405.83KB ,
资源ID:14022078      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-14022078.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验06 函数编译预处理.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

实验06 函数编译预处理.docx

1、实验06 函数编译预处理班级:B12数信班 :岁梦 学号:1205025106实验6 函数、编译预处理实验目的:1掌握函数的定义、函数的说明和调用方法;2掌握函数实参与形参的对应关系以及“值传递”的方式和函数值的正确返回;3掌握函数的嵌套调用和递归调用的方法;4掌握数组做函数参数的用法;5掌握全局变量、局部变量、动态变量、静态变量的概念和使用方法;6掌握宏定义、文件包含处理和条件编译的方法;7学习对多文件程序的编译和运行。实验容:1程序阅读理解训练。1) 输入并运行下面的程序,分析输出的结果。#include void try(int,int,int);void main( ) int x=2

2、,y=3,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=

3、%dn,x,y); swap(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) 输入并运行下面的

4、程序,分析输出的结果。#include int f1(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:); s

5、canf(%d,&x); if(isprime(x) printf(%d is prime.n,x); else printf(%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; do k*=num%10; num/=10; while(num); return k; void main() int n=26; prin

6、tf(%dn,fun(n);思考:如果将函数fun中的变量k初始化为0,并将语句“k*=num%10;”改为“k+=num%10;”,函数fun的功能变为什么?7) 输入并运行下面的程序,说明函数fun的功能。(熟练掌握该程序)#include void dtob(int n) int i; if(n1) i=n%2; dtob(n/2); else i=n; printf(%d,i); void main() int i=11; printf(%d-,i); dtob(i); printf(2)n); 2程序填空(根据题意在空白处填入适当的容,使程序变得完整,并上机进行调试验证) 1) 程序

7、说明:下面程序将输入的十进制数 n 转换为 b 进制数,并将转换结果输出。转换的方法是:除 b 取余法。#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 mai

8、n() int b,n; scanf(%d%d,&b,&n); transfer(n,b);2) 程序说明:歌德巴赫猜想指出:任何一个充分大的偶数都可以表示为两个素数之和,例如 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

9、;m+) for(n=2;nm-1;n+) if(prime(n)& ) printf(%d=%d+%dn, ); 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、数组存放 10 个学生的成绩,写一个函数求出平均分、最高分和最低分。#include stdio.h float 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=

11、average( ); printf(max=%6.2f min=%6.2f average=%6.2fn,max,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

12、ave,score10; int i; for(i=0;i10;i+) scanf(%f,&scorei); ave=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; else

13、i+; void main() char p80,ch; int i=0,j; scanf(%s,p); scanf(%c,&ch); delete( ); printf(%s, ); 修改:#include stdio.h void delete(char p,char ch) /asd a int i=0,j; while(pi!=0) /a if(pi=ch) for(j=i;j80;j+) pi=pi+1; else i+; void main() char p80,ch; int i=0,j; scanf(%s,p); scanf( %c,&ch); delete(p,ch); pr

14、intf(%s,p); 5) 程序说明:输入10 个学生的学号及单科成绩,然后求出最高分的学号、最低分的学号以及超过平均分的人数。#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(scoreiscoreimin) imin=i; aver/=n; over_num=0; for(i=0;i=aver) over_nu

15、m+; _; _; return over_num; void main() int i, over_num, a10; printf(n input a:); 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,

16、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+; 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

17、_aver(a,10); printf(n high_num,low_num=%d,%d, high_num, low_num); printf(n over_num=%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值

18、 putchar(n%10+0);/打印余数,余数是1则打印字符1,以此类推int main() int number;/定义整数变量 printf(输入一个数:);/输出信息 scanf(%d,&number);/让用户输入一个整数 printf(输出:);/输出信息 if (number0)/如果是负数 putchar(-);/打印负号 number=-number;/负数变为正数 convert(number); /执行递归函数 printf(n); return 0;2) 求两个整数的最大公约数和最小公倍数。用一个函数求最大公约数,用另一函数根据求出的最大公约数求最小公倍数。要求:求最

19、大公约数用递归方法实现,递归公式为(r=m%n):1不用全局变量,分别用两个函数求最大公约数和最小公倍数。两个整数在主函数中输人,并传送给函数l,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给函数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

20、; return c; int main() int m,n,x,y,t; printf(输入两个需要求最大公约数和最小公倍数的数:n); scanf(%d%d,&m,&n); if (mn) t=m;m=n;n=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_

21、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) 三角形的面积为其中,为三角形的边长,。编写程序求面积。要求:定义两个带参数的宏,一个用来求

22、,另一个用来求,在程序中用带参数的宏名来求面积。# include# include#define S(a,b,c) 1.0/2.0*(a+b+c)#define AREA(a,b,c) sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(S(a,b,c)-c)int main() float a, b, c, area; printf(输入三角形的三边:); scanf(%f%f%f, &a, &b, &c); if (a+bc&a+cb&b+ca) area=AREA(a,b,c); printf(三角形的面积是%0.2fn,area); else print

23、f(这三个数不能构成三角形!); return 0;4) 用条件编译方法实现以下功能:输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下一字母(如a变成b,z变成a),其他非字母字符不变。用#define命令来控制是否要译成密码。例如:#define CHANGE 1输出密码#define CHANGE 0按原码输出#define CHANGE 1输出密码# include# define CHANGE 1按原码输出int main() char a1000; int i; printf(输入一串字符:n); scanf(%s,&a); if (CHANGE) for (i=0;i=a&ai=A & aiZ) ai+=1; if (ai=z|ai=Z) ai-=25; printf(输出密码:n%sn,a); else printf(输出原码:n%sn,a); return 0;最后,对这次实验作一个简要的总结。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2