C语言程序的设计第3版何钦铭颜晖第5章函数.docx
- 文档编号:28284670
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:15
- 大小:19.57KB
C语言程序的设计第3版何钦铭颜晖第5章函数.docx
《C语言程序的设计第3版何钦铭颜晖第5章函数.docx》由会员分享,可在线阅读,更多相关《C语言程序的设计第3版何钦铭颜晖第5章函数.docx(15页珍藏版)》请在冰豆网上搜索。
C语言程序的设计第3版何钦铭颜晖第5章函数
第5章函数
【练习5-1】使用函数求1到n之和:
输入一个正整数n,输出1~n之和。
要求自定义和调用函数sum(n)求1~n之和。
若要计算m~n(m 试编写相应程序。 解答: #include intsum(intn); intmain(void) { intn; intsum; printf("Entern: ") scanf("%d",&n); printf("sum=%d\n",sum(n)); return0; } intsum(intn) { intresult,i; result=0; for(i=1;i<=n;i++) result=result+i; returnresult; } 若要计算m~n(m scanf("%d%d",&m,&n); printf("sum=%d\n",sum(m,n)); 同时在函数定义时需设置2个形参: intsum(intm,intn) { intresult,i; result=0; for(i=m;i<=n;i++) result=result+i; returnresult; } 【练习5-2】使用函数找最大值: 输入2个数,输出其中较大的数。 要求定义和调用函数max(a,b)找出并返回a、b中较大的数。 试编写相应程序。 解答: #include doublemax(doublea,doubleb); intmain(void) { inta,b; printf(“Inputaandb: ”); scanf("%lf%lf",&a,&b); printf("max=%lf\n",max(a,b)); return0; } doublemax(doublea,doubleb) { if(a>b) returna; else returnb; } 【练习5-3】数字金字塔: 输入一个正整数n,输出n行数字金字塔。 试编写相应程序。 解答: #include intmain(void) { intn,i,j; printf(“Entern: ”); scanf("%d",&n); for(i=1;i<=n;i++){ for(j=1;j<=n-i;j++) printf(""); for(j=1;j<=i;j++) printf("%d",i); putchar('\n'); } return0; } 【练习5-4】思考: 若把例5-9中静态变量f定义成普通局部变量,还能实现计算n! 吗? 请上机检验。 若把f换成全局变量又会如何? 解答: 若把例5-9中静态变量f定义成普通局部变量,无法实现计算n! ,因为函数返回后f单元被系统回收,不再保存原有数据。 若把f换成全局变量,则能实现计算n! ,因为f的作用围和生命周期一直存在。 习题5 一、选择题 1.在C语言程序中,若对函数类型未加显式说明,则函数的隐含类型为D。 A.voidB.doubleC.charD.int 2.下列程序的输出结果是D。 fun(inta,intb,intc) {c=a*b;} intmain(void) {intc; fun(2,3,c); printf(”%d\n”,c); return0; } A.0B.1C.6D.无法确定 3.建立自定义函数的目的之一是B(优先)、C。 A.提高程序的执行效率B.提高程序的可读性 C.减少程序的篇幅D.减少程序文件所占存 4.以下正确的函数定义形式是A。 A.doublefun(intx,inty)B.doublefun(intx;inty) C.doublefun(intx,inty);D.doublefun(intx,y) 5.以下不正确的说法是C。 A.实参可以是常量、变量或表达式 C.形参可以是常量、变量或表达式 B.实参可以是任何类型 D.形参应与对应的实参类型一致 6.以下正确的说法是D。 A.实参与其对应的形参共同占用一个存储单元 B.实参与其对应的形参各占用独立的存储单元 C.只有当实参与其对应的形参同名时才占用一个共同的存储单元 D.形参是虚拟的,不占用存单元 二、填空题 1.下列程序的输出结果为2357。 #include intfun3(intm); intmain(void) {intn; for(n=1;n<10;n++) if(fun3(n)==1)printf("%d",n); return0; } intfun3(intm) {inti; if(m==2||m==3)return1; if(m<2||m%2==0)return0; for(i=3;i if(m%i==0)return0; return1; } 2.输入若干个正整数,判断每个数从高位到低位各位数字是否按值从小到大排列,请根据题意,将程序补充完整。 #include intfun1(intm); intmain(void) {intn; scanf("%d",&n); while(n>0){ if(fun1(n)) printf("%d中各位数字按从小到大排列\n",n); scanf("%d",&n); } } intfun1(intm) {intk; k=m%10; while(m) if(m/10%10>k) return0; else{m=m/10;k=m%10;} return1; } 3.下列函数输出一行字符: 先输出kb个空格,再输出n个指定字符(由实参指定)。 请根据题意,将程序补充完整。 #include voidprint(intkb,intn,charzf) {inti; for(i=1;i<=kb;i++) printf(“”); for(i=1;i<=n;i++) printf(“%c”,zf); } 三、程序设计题 1.使用函数计算分段函数的值: 输入x,计算并输出下列分段函数f(x)的值。 要求定义和调用函数sign(x)实现该分段函数。 试编写相应程序。 1x>0 f(x)=0x=0 -1x<0 解答: #include intmain(void) { intsign(intx); intx,y; scanf("%d",&x); y=sign(x); printf("sign(%d)=%d\n",x,y); return0; } intsign(intx) { inty; if(x>0)y=1; elseif(x==0)y=0; elsey=-1; returny; } 2.使用函数求奇数和: 输入一批正整数(以零或负数为结束标志),求其中的奇数和。 要求定义和调用函数even(n)判断数的奇偶性,当n为偶数时返回1,否则返回0。 试编写相应程序。 解答: #include inteven(intn); intmain(void) { intn,sum; scanf("%d",&n); sum=0; while(n>0){ if(even(n)==0)sum=sum+n; scanf("%d",&n); } printf("Thesumoftheoddnumbersis%d.\n",sum); return0; } inteven(intn) { inty; if(n%2==0)y=1; elsey=0; returny; } 3.使用函数计算两点间的距离: 给定平面任意两点坐标(x1,y1)和(x2,y2),求这两点之间的距离(保留2位小数)。 要求定义和调用函数dist(x1,y1,x2,y2)计算两点之间的距离。 试编写相应程序。 解答: #include #include doubledist(doublex1,doubley1,doublex2,doubley2); intmain(void) { doublex1,y1,x2,y2; printf("Enterx1andy1: "); scanf("%lf%lf",&x1,&y1); printf("Enterx2andy2: "); scanf("%lf%lf",&x2,&y2); printf("Distance=%.2lf",dist(x1,y1,x2,y2)); return0; } doubledist(doublex1,doubley1,doublex2,doubley2) { doubledistance; distance=sqrt(pow(fabs(x2-x1),2)+pow(fabs(y2-y1),2)); returndistance; } 4.利用函数计算素数个数并求和: 输入两个正整数m和n(1<=m,n<=500),统计并输出m和n之间的素数的个数以及这些素数的和。 要求定义并调用函数prime(m)判断m是否为素数。 试编写相应程序。 解答: #include #include intprime(intm); intmain(void) { intm,n,sum,count; printf("Inputm: "); scanf("%d",&m); printf("Inputn: "); scanf("%d",&n); sum=0; count=0; for(;m<=n;m++){ if(prime(m)==1){ sum=sum+m; count++; } } printf("%d和%d之间素数的个数: %d\n",m,n,count); printf("%d和%d之间素数的和: %d\n",m,n,sum); return0; } intprime(intm) { inti; for(i=2;i<=sqrt(m);i++) if(m%i==0)return0; if(i>h&&m! =1)return1; } 5.使用函数统计指定数字的个数: 读入一个整数,统计并输出该数中“2”的个数。 要求定义并调用函数countdigit(number,digit),它的功能是统计整数number中数字digit的个数。 例如,countdigit(12292,2)的返回值是3。 试编写相应程序。 解答: #include intcountdigit(intnumber,intdigit); intmain(void) { intnumber,digit; printf("Enteraninteger: "); scanf("%d",&number); printf("Numberofdigit"); scanf("%d",&digit); printf(": %d",countdigit(number,digit)); return0; } intcountdigit(intnumber,intdigit) { inta,count; if(number<0)number=-number; while(number>0){ a=number; if(number%10==digit) count++; number=number/10; } returncount; } 6.使用函数输出水仙花树: 输入两个正整数m和n(1<=m,n<=1000),输出m~n之间所有满足各位数字的立方和等于它本身的数。 要求定义并调用函数is(number),判断number的各位数字之立方和是否等于它本身。 试编写相应程序。 解答: #include intis(intnumber); intmain(void) { inti,m,n; printf("Inputmandn: "); scanf("%d%d",&m,&n); printf("result: \n"); for(i=m;i<=n;i++) if(is(i)! =0) printf("%d\n",i); return0; } intis(intnumber) { intdigit,sum,temp; temp=number; sum=0; while(temp! =0){ digit=temp%10; temp=temp/10; sum=sum+digit*digit*digit; } returnsum==number; } 7.使用函数求余弦函数的近似值: 输入精度e,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e。 要求定义和调用函数funcos(e,x)求余弦函数的近似值。 试编写相应程序。 cosx=x0/0! -x²/2! +x4/4! -x6/6! +… 解答: #include #include doublefuncos(doublee,doublex); intmain(void) { doublee,sum,x; printf("Inputeandx: "); scanf("%lf%lf",&e,&x); sum=funcos(e,x); printf("cos%lf=%lf\n",x,sum); return0; } doublefuncos(doublee,doublex) { intflag,i; doubleitem,sum,tmp,power; flag=1; power=1; tmp=1; i=0; item=1; sum=0; while(fabs(item)>=e){ item=flag*power/tmp; sum=sum+item; power=power*x*x; tmp=tmp*(i+1)*(i+2); flag=-flag; i=i+2; } returnsum; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 程序 设计 钦铭颜晖第 函数