C语言程序设计(何欣铭、颜晖第2版)课后习题答案_第1页
C语言程序设计(何欣铭、颜晖第2版)课后习题答案_第2页
C语言程序设计(何欣铭、颜晖第2版)课后习题答案_第3页
C语言程序设计(何欣铭、颜晖第2版)课后习题答案_第4页
C语言程序设计(何欣铭、颜晖第2版)课后习题答案_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 #解答:#include#uicludeintmain(void)intyear,doubleloan,money,mypovz,rate,scanf&loan,&rate)tprintf1yearmoneyNn),f(year=5,year=30,year+)mypow=pow(l+rate”12*year),money=loan*rate*mypovz/(lnypow-1),printf(iyeai=%dmoney=%OfNn1,year,money),return0,7.编写程序,输入一个正整数m7.编写程序,输入一个正整数m求幺-,可以调用pow函数求幕。解答:#include#in

2、cludeintmain(void)int1,n,doublesum,scanf(%d,&n),sum=0,fai=l,K=n,i+)sum=sum+povz(2,i);printfC1sum=%.Ofnu,sum),returnOte=Yi8编写程序,输入一个正整数m求7要求定义和调用函数fact(n)计算n!,函数类型是doubleo解答:#includeintmain(void)inti,n,doublesum,doublefact(intn),scanf(%d,&n),sum=0,fai=0,1return0,doublefact(intn)int1,doubleproduct,pro

3、duct=l,fai=1,1=n,i+)product=product*i,returnproduct,2.4实验指导教材参考答案2.4.1基本数据处理一、调试示例:略二、改错题:略三、编程题求华氏温度150F对应的摄氏温度。计算公式如下,其中:c表示摄氏温度,f表示华氏温度。c=-x/-x329945改变else和if的配对例45改变else和if的配对例312改写下列if语句.使wise和第4个if配对.if(xv2)if(x1)y=x+1;elsey=x+2;址“皿皿比若要改变else正常的配对规则,一般采用两种方法:采用,构造一个复合语句。增加空的else语句;i*(x2Kif(x1)

4、y=x+1;elsey=x+2;if(x2)if(x1)y=x+1;else;elsey=x+2;46归纳总结本章的各个重要知识点。46正确理解正确理解f语句和swtch语句的执行机制;拿各类关M表达式.*丧达式的运用;合理运用分支语句*WMS写分支结构类的程序,分支结构,if-else句elseif分支结构:switch语句case后为常量表达式break的使用数据类型,charffl-运算符与运算符关莱运算符理辑表达式分支结构程序的综合设计3.3练习与习题参考答案3.3.1练习参考答案练习3-1例34中使用else-if语句求解多分段函数,为了检查else-if语句的三个分支是否正确,已经

5、设计了三组测试用例,请问还需要增加测试用例吗?为什么?如果要增加,请给出具体的测试用例并运行程序。解答:最好再增加两组测试用例,因为尚未对分段函数参数的边界值进行测试。可再给出x=0和x=15时的两种情况。练习3-2输入一个整数x,计算并输出下列分段函数sign(x)的值。xv0y=sign(x)=0解答:#includeintmain(void)intx,y,pnntf(Enterx:11),scanf(H%d,&x),if(x0)y=l,elseif(x=0)y=0,elsey=-l,printf(sign(%d)=%dnH,x,y),return0,练习33输入一个正整数m再输入n个学生

6、的成绩,计算平均成绩,并统计所有及格学生的人数。解答:#includeintmaui(void)intcount,1,n,doublegrade,total,pnntf(Entern:11)scanf(%dj&n),total=0,count=0,for(i=1,1=60)count+,pnntf(Gradeaverage=%,2fnH,total/n),pnntfCNumberofpass=%dn,count),return0,练习34输入15个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。解答:#includeintmaui(void)int1,intblank,digit

7、,lettei;otlier,charc,blank=digit=letter=other=0,for(i=l,ia&c=z|cXA&cO1&cblaiik=%d,digit=%d,otheiM6dni,letter,blank,digit,otlier),return0,练习3-5输入一个年份year,判断该年是否为闰年。判断闰年的条件是:能被4整除但不能被100整除,或者能被400整除。解答:#includeintmaui(void)intyear,printf(Enteryear:11),scanfCd11,&year),if(year%4=0&year%100!=0)|year%400

8、=0)printf(Itisaleapyearn)elseprintfCItisnotaleapyearn11)return0,练习3-6在例3-8程序中,如果把switch语句中所有的break都去掉,运行结果会改变吗?如果有变化,输出什么?为什么?解答:如果去掉所有的break:语句,运行结果会改变,输出price=0.0,因为不管choice值与其中某个常量表达式相等,当去掉break语句时,其后的所有语句段都将运行,故每次都将执行到pnce=0.0语句为止。练习3-7输入五级制成绩(A-E),输出相应的百分制成绩(0-100)区间,要求使用switch语句。例如,输入A,输出90-10

9、0o五级制成绩对应的百分制成绩区间为:A(90-100)、B(80-89)、C(70-79)、D(60-69)和E(0-59)。解答:#includeintmaui(void)charch,printf(InputGrade),ch=getcharO,svzitch(ch)caseA:printfC%c对应的百分制区间是90-100n,ch);break,caseB:printf(B%c对应的百分制区间是80-89nB,ch),break,caseC1:printf(c对应的百分制区间是70-79nB,ch),break,case*D:pnntf(%c对应的百分制区间是60-69nB,ch),

10、break,caseE:pnntf(%c对应的百分制区间是059nJch),break,defaultpnntf(BInvalidinputs11),return0,练习3-8查询水果的单价。有4种水果,苹果(apples)、梨(pears)、桔子(oranges)和葡萄(grapes),单价分别是300元/公斤,2.50元/公斤,4.10元/公斤和10.20元/公斤。在屏幕上显示以下菜单(编号和选项),用户可以连续查询水果的单价,当查询次数超过5次时,自动退出查询:不到5次时,用户可以选择退出。当用户输入编号14,显示相应水果的单价(保留两位小数);输入0,退出查询;输入其他编号,显示价格为

11、0。applespearsorangesgrapes0Exit解答:#includeintmain(void)intn,intchoice,floatprice,for(n=l,n=5,n+)printfCtlapplesn)printfClZpearsnB),printfCiSorangesnB),printf(l,4giapesn)printf(M0Exitn),scanf(%d,&choice),if(choice=0)break,elseswitch(choice)case1:pnce=3.00,break,case2:pnce=2.50,break,case3:pnce=4.10,b

12、reak,case4:pnce=1020,break,default:pnce=0,piTntf(Bprice=%02fnn,pnce),return0,练习3-9请读者重新编写例34的程序,要求使用嵌套的if-else语句,并上机运行。解答:#includeintmaui(void)doublex,y,scanf(H%l?,&x),if(x15)y=2.5*x-105,elseif(x0)y=o.elsey=4*x/3,printf(f(%.2f)=%.2fnB,x,y),return0,练习3-10在例3-12中,改写if语句前,y=x+1,和y=x+2;两条语句的执行条件是什么?改写后呢

13、?解答:改写前:y=x+l的执行条件是xvl,y=x+2的执行条件是1=x2o改写后:尸+1的执行条件是xvl,戸+2的执行条件是2o3.3.2习参考答案3.3.2习参考答案选择题能正确表示逻辑关系:“aZIO或a=10ora=0|a=10&a=101|a0有一函数y=0 x=0,以下程序段中错误的是C。-lx=0),if(x0)y=l;elsey=-1,下列程序段的输出结果是_Q_。intmain(void)inta=2,b=-l,c=2,if(ab)if(b0)y=1,elseif(x=0)if(x0)y=1,elsey=0,elsey=-l,C2D3Ca=l,b=0在执行以下程序时,为使

14、输出结果为:t=4,则给a和b输入的值应满足的条件是一C。intmain(void)inta,b,s,t,scanf(%d,dMa,&b);s=l,t=l,if(aO)s=s+1,if(ab)t=s+1,elseif(a=b)t=5,elset=2*s,printfCtd1,t),return0,AabBabab填空题TOC o 1-5 h z表示条件:10 x10&x100)|(xa|ab的值为0。若从键盘输入58,则以下程序段的输出结果是585858。intmain(void)inta;scanf(%d,&a),if(a50)pnntf(%d,a);if(a40)pnntf(%d,a);i

15、f(a30)printfC%1,a);return0,下列程序运行的输出结果是_9。intmain(void)charc=,b,intk=4,switchcasea1:k=k+1,break,casek=k+2,casek=k+3,pnntf(%dn,k);return0,程序设计题输入三角形的3条边a,b,c,如果能构成一个三角形,输出面积area和周长penmeter(保留2位小数):否则,输出Thesesidesdonotcoirespondtoavalidtriangle。在一个三角形中,任意两边之和大于第三边。三角形面积计算公式:area=Js(s-a)(s一b)(s一c),其中s=

16、(a+b+c)/2解答:#include#includeintmaui(void)inta,b,c,doublearea,s,penmetei;scanf(,l%d%d%dl,&a,&b,&c);if(a+bc)&(b+ca)&(a+cb)penmetei-a+b+c,s=(a+b+c)*1.0/2,area=sqrt(s*(s-a)*(s-b)*(s-c);printfC1area=%2f,perimeter=%.ZfXn1,area,penmeter),elseprintfCThesesidesdonotcoirespondtoavalidtnanglen),return0,2011年开始

17、实行新个人所得税法,要求输入月薪salary,输出应交的个人所得税tax。新税法方案如下:tax=rate*(salaiy-3500)-deduction当salaiyW3500时,rate=0deduction=0当3500salaiyW5000时,rate=3%、deduction=0当5000salaiyW8000时,rate=10%、deduction=105当8000salaiyW12500时,rate=20%deduction=5551250038500585008350012500385005850083500salaiysalaiysalaiysalaiyW38500时,rat

18、e=25%.deduction=1005W58500时,rate=30%、deduction=2755W83500时,rate=35%、deduction=5505时,rate=45%、deduction=13505解答:#includeintmaui(void)intdecution,doublerate,salary,tax,printf(Enterthesalaiy:)scanf(H%l?,&salaiy),if(salaiy=3500)rate=0,decution=0,elseif(salaiy=5000)(iate=0.03,decution=0,elseif(salaiy=800

19、0)iate=0.1,decution=105,elseif(salaiy=12500)rate=02,decution=555,elseif(salaiy=38500)rate=O25,decution=1005,elseif(salaiy=58500)rate=O3,decution=2755,elseif(salaiy=83500)rate=O35,decution=5505,elserate=045,decution=13505,taxate*(salaiy-3500)-decution,printf(tax=%.Ofn,1,tax),return0,某城市普通出租车收费标准如卞:“起

20、步里程3公里,起步费10元;超起步里程后10公里内,每公里租费2元,超过10公里以上的部分加收50%的回空补贴费,即每公里租费3元。营运过程中,因路阻及乘客要求临时停车的,每5分钟按1公里租费计收。运价计费尾数四舍五入,保留到元。”。编写程序,输入行驶里程(公里)与等待时间(分钟),计算并输出乘客应支付的车费伉)。解答:#includeintmain(void)intmile,tune,cost,scanf(,l%d%d1,&miletime),cost=0,mile=mile+time/5,if(mile=3)cost=10,elseif(mile=13)cost=lO+(mile-3)*2

21、;elsecost=l0+10*2+(milel3)*3;printf(cost=%dnH,cost),return0,输入一个正整数n,再输入n个学生的成绩,计算平均分,并统计各等级成绩的个数。成绩分为5个等级,分别为A(90100)、B(8g89).CQO-79)、D(6369)、E(g59)#includeintmain(void)intmark,n,1,sum,doubleaverage,intcounta,countb,countc,countd,counte,printf(Entern:11)scanfCd&n),counta=countb=countc=countd=counte

22、=sum=0,for(i=l,K=n,i+)scanf(,%d,1,&mark),sum=sum+mark,if(mark=90)counta+,elseif(maiic=80)countb+,elseif(mark=70)countc+,elseif(mark=60)countd+,elsecounte+,average=sum*l.0/n,printfC11average=%1fnH,average),printf(A:%d,B%d,C:%d,D:%d,E:%dnl,counta,countb,countc,countd,counte),return0,输出21世纪所有的闰年。判断闰年的条

23、件是:能被4整除但不能被100整除,或者能被400整除。解答:#includeintmaui(void)intyear,for(yeai-2000,year=2099,year+)if(yeai,%4=0&year%100!=0)|(year%400=0)pnntf(i%dn1,year);return0,3.4实验指导教材参考答案一、调试示例:略二、改错题改正卞列程序中的错误,输入三角形的3条边a,b,c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数);否则,输出TIiesesidesdonotcorrespondtoavalidtrianglea(源程序er

24、ror03_2.cpp)在一个三角形中,任意两边之和大于第3边。三角形面积计算公式:area=Js(S-0)(S-b)(S-C)其中s=(a+b+c)/2输入输出示例(运行2次)第一次运行:Enter3sidesofthetriangle:553area=7.15;perimeter=13.0038例4/2古典算术问题一搬砖头某地希要撮运砖块,已知男人一人撮3块,女人人按2块.小孩两人娥一块.问用38例4/2古典算术问题一搬砖头某地希要撮运砖块,已知男人一人撮3块,女人人按2块.小孩两人娥一块.问用45人正好撮45块砖,有多少种撮法?for(men=0;men=45;men+)for(vMme

25、n=0;vomen=45;vomen+)for(child=0;child=45;childi)if(men+women*child=45)(men*3*wofnena2+child0=45)pirtfrmen=%dwoenen=%dchld=%dn.men.women,child);例4-12以搬转头为例,说明穷举法的算法方法。引导学生分析问题,男人、女人和小孩的人数取值范围均在045之间,只要能满足总人数为45人且所搬的砖为45块就是一种搬法,显然要对男人、女人和小孩三个人数的各种可能一一测试,来找出满足条件的人员组合,可采用三重循坏。这也是经典的算法例子。39for(men=0;men=

26、15;men+|for(vomen=0;vomenmen一men;例4/2源程序if(men3+vomen*2+child0.5=45)pnnttfmen=%dwomen=%dchild=%dVr.mrxwomen.child):比较循环次数for(men=0;men=45;men+)for(vomen=0;women=45;vx3men+)for(child=0;childn”.mnwomen.child):引导学生考虑:上述三重循坏的循环体(if语句)共执行了多少次?是否可减少循环次数?说明如何把三重循坏改成二重循环?并比较循坏体的执行次数,分析减少的方法。40循环结构以及循环执术vhil

27、e语句do-vhile循环结构以及循环执术vhile语句do-vhile句*or句break语句与continiK嵌喬循环的使用正确理Hvhile语句和do-vjhile语句的执行机制s拿握break和continue语句的作用方式;事握鮭AW的执行机創与设计方法I篦合理运用11环语句筋林写循环结构类的程序:熟练拿11几个常用的算法:r|几个常用的算法4.3练习与习题参考答案4.3.1练习参考答案练习4-1在例4-1程序中,如果对item赋初值0,运行结果是什么?为什么?如果将精度改为10_,运行结果有变化吗?为什么?解答:如果对item赋初值0,则程序运行结呆是pi=0因为item为0时不满

28、足while循坏的执行条件,即不执行循环,故pi值为0。如果将精度改为10一3,运行结果会有变化,因为精度改变意味着while循坏的条件改变,精度变人使得while循环次数减少,必然影响到pi的值。练习42运行例42程序时,如果将最后一个输入数据改为运行结果有变化吗?如果第一个输入数据是-1,运行结果是什么?为什么?解答:如果将最后一个输入数据改为-2,运行结果没有变化,因为最后一个负数是一结束标志,不进行统计,故任意一个负数都可以。如果第一个输入数据是-1,运行结果是:GradeaverageisO,因为第一个输入就是-1,则while循环条件不成立,不执行循环体。练习4-3输入一个正实数e

29、ps,计算并输出下式的值,直到最后一项的绝对值小于eps。11111S=11147101316解答:#include#includeintmaui(void)intdenominator,flag,doubleitem,s,eps,flag=1,denominator=1,item=1.0,s=0;scanf(“lf&eps),while(fabs(item)=eps)item=flag*1.0/denominator,s=s+item,flag=-flag,denominator=denominator+3”pnntf(us=%fnM,s),return0,练习44如呆将例4-3程序中的do

30、-while语句改为下列while语句,会影响程序的功能吗?为什么?再增加一条什么语句,就可以实现同样的功能?while(number!=0)number=numbei/10,count+,解答:会有影响,因为当输入数据number为0时,上述while循环将不执行,count值仍为0,故输出为0,不符合题目要求。可增加一条if语句来解决上面的问题,在while循坏前加上语句“if(numbei=0)count=l,练习4-5例44程序中的第915行可以用卞列语句替代吗?为什么?for(1=2;1=m/2;i+)if(m%i=0)printf(Noin),elsepnntf(%dispnmen

31、umberiVi11,m),解答:不能代替,因为只用一个数来除不足以判断该数是否是素数。练习4-6输入一个正整数n,再输入n个正整数,判断它们是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。解答:#include#includeintmaui(void)intflag,n,scanf(%dj&n),for(i=1,1=n;i+)scanf(%d,&m),k=sqit(m),for(j=2;jk&m!=1)pnntf(%disaprnnen,1,m),elsepnntf(%disntapnmenB,m)练习4-7输入1个正整数n,计算下式求出e的值(保留2位小数),要求使用

32、嵌套循坏。.11111!2!3!n解答:#includestdio.hintmaui(void)intijn;doublee,t,printf(Inputn:11)scanfC1%,&n),e=l;for(i=1;i=n,i+)t=l;foij=l,j=l;j+)e=e+1.0/t,printf(e=%0.2fn,e),return0,练习48运行例48的源程序1时,如果先输入0,即输入数据个数n=0,表示不再输入任何成绩,运行结果是什么?如何修改程序以应对这种情况?解答:当输入数据个数n=0时,由于在for循环外首先得输入一个成绩,故程序仍将等待输入第一个人的成绩,这与输入个数n=0矛盾,可

33、修改如下:#includeintmaui(void)inti,mark,max,n,printfC1Entern:M)iscanf(d&n)tif(n0)printfCEnter%dmarks:n),scanf(%d”&mark)”/*读入第一个成绩*/max=mark,/*假设第一个成绩是最高分*/for(1=1,1n,i+)scanf&mark),if(maxmark)max=maiic,printfCMax=%dnB,max),return0,练习4-9运行例4-8的源程序2时,如果输入的第一个数就是负数,表示不再输入任何成绩,运行结果是什么?如何修改程序以应对这种情况?解答:当输入的第

34、一个数就是负数时,将不执行while循环,程序运行结果就是输出所输入的负数。练习4-10输入一个正整数n,再输入n个整数,输出最小值。解答:#includeintmaui(void)int1,min,n,x,pnntf(inputin:11)scanfC1%,&n),printf(inputnumbels:)scanfC1%,&x),min=x,for(i=1,ix)min=x,printfCmin=%dn,min),return0,练习4-11输入一个整数,将其逆序输出。假设正数和负数逆序输出的结果一样。解答:#includeintmani(void)intx,printf(Enterx:1

35、1)scanfC%,&x),if(x0)x=-xwhile(x!=0)digit=x%10,x=x/10;pnntf(11%d11,digit),练习4-12输出100200之间的所有素数,每行输出8个。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。解答:#includeintmani(void)intcount,j,k,m,count=0,for(m=100,m=200,m+)k=sqit(m),for(j=2;jk)pnntf(%dB,m)count+;if(count%8=0)printf(n)”return0,练习413输出菲波那契(Fibonacci)序列的前20项。解答

36、:#uicludeintmain(void)inti,xl,xZ,x,xl=1,x2=l,printf(,%d,%d,l,xl,x2),for(i=1,1x2=x;return0,4.3.2习题参考答案选择题C语言中while和do-while循坏的主要区别是A。do-while的循环体至少无条件执行一次while的循坏控制条件比do-while的循坏控制条件严格do-while允许从外部转到循坏体内do-while的循环体不能是复合语句下列叙述中正确的是一Cbreak语句只能用于switch语句体中continue语句的作用是使程序的执行流程跳出包含它的所有循坏break语句只能用在循环体内

37、和switch语句体内在循环体内使用break语句和continue语句的作用相同下列叙述中正确的是D,do-while语句构成的循坏不能用其它语句构成的循环来代替。do-while语句构成的循坏只能用break语句退出。用do-while语句构成的循环,在while后的表达式为非零时结束循坏。用do-while语句构成的循环,在while后的表达式为零时结束循坏。执dox=x*x;while(!x);循坏时,下列说法正确的是A。循环体将执行一次B.循坏体将执行两次C.循环体将执行无限次D.系统将提示有语法错误假设变量s、8、b、c均已定义为整型变量,且8、c均已赋值(c大于0),则与以下程序

38、段s二a;for(b=1;b二c;b+)s=s+1;功能等价的赋值语句是B。s=a+b;B.s=a+c;C.s=s+c;D.s=b+c;以下程序段的输出结果是Bintmain(void)intnum二0,s=0;while(numm)n二n-m:printf(,m=%dnH,m);return0;A.m=3Bm二2下列程序段的输出结果是一Aintmain(viod)for(inti;i6;i+)if(i%2!=0)printf(#);continue;printfD;printf(HnH);return0;A.#B#C3D414V回车,则输出结果为CC.*二.填空题若s=0,执行循环语句”fo

39、(i彳i二10;i=i+3)s二s+i;”后,i的值为13下列程序段的输出结果是_2_。intx=2;doDm二0DprintfC*n);x-;while(!x=O);下列程序段的功能是计算:s二1+12+123+1234+12345。则划线处应填tTO。intt=O,s=O,i;for(i=1;i=5;i+)t二i+;s二s+t;printf(s=%dn,s);以下程序的输出结果是_12_。intmain(void)intnum二0;while(num6)num+;if(num=3)break;printf(%df,num);return0;阅读下列程序并回答问题。main()inti,j,

40、k=0,m=0;for(i=0;i2;i+);/*第6行for(j=0;j3;j+)k+;m+;广第9行*/printf(k=%d:m=%drT,k,m):TOC o 1-5 h z程序的输出是k=6,m二2。将第9行改为m=m+k;,程序的输出是_k二6,m二9。(3)将第6行改为“k=0;”,将第9行改为”m=m+k;”,程序的输出是_k二3,m二6。输入happy$new$year!=,a&c=z,)c=c-a+,A,;word=1;elseword=0;putchar(c);return0;程序设计题输入一批正整数(以零或负数为结束标志),求其中的偶数和。解答:#includeintm

41、aui(void)intx,sum,printf(Inputintegers:11scanfC1%,&x),sum=0,while(x0)if(x%2=0)sum=sum+x,scanf(%d,&x);printf(Thesumoftlieevennumbersis%dn,sum),return0,输入1个实数x,计算并输出下式的值,直到最后一项的绝对值小于10(保留2位小数)。要求定义和调用函数fact(n)计算n的阶乘,可以调用powO函数求幕。o3+4!+4!2!3!S=X+2!3!解答:#include#includeintmaui(void)inti,doubleitem,s,x,d

42、oublefact(intn),scanf(%le,&x),s=0,item=x,1=1;while(fabs(item)=000001)(item=pow(x,i)/fact(i),s=s+item,i+printfCso.ZfXn,s),return0,doublefact(intn)inti,doubleresult=l,for(i=l,i=n,i+)resultesult*!,returnresult,输入一个整数,求它的各位数字之和及位数。例如234的各位数字之和是9,位数是3。解答:#includeintmaui(void)intcount,sum,longin,printf(In

43、putanintegei:)scanf(%ldj&in);if(in0)inin,count=0,sum=0,while(in!=0)sum=sum+in%10,in=in/10,count+tprintf(count=%d,sum=%dnB,count,sum),return0,输入一个正整数n,输出2/1+3/2+5/3+8/5+的前n项之和,保留2位小数。(该序列从第二项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子)解答:#includeintmaui(void)inti,nabfloats,printf(Inputn:11)scanfC1%,&n),a=2,b=l,s=0

44、,for(i=l,i=n,i+)s=s+a*1.0/b;t=a;a=a+b,printf(s=%2fn,s),return0,输入2个正整数a和m求a+aa+aaa+aaa(n个a)之和。例如,输入2和3,输出246(2解答:#includeintmaui(void)int1,n,longinta,sn,tn,pnntf(Inputa,n:H)scanf(%ld%dj&a,&n),sn=0,tn=0,for(i=l;K=n,i+)tn=tn+a,sn=sn+tn,3=3*10,printf(s=%ldnH,sn),return0,用一张一元票换1分、2分和5分的硕币(至少各一枚),问有哪几种换

45、法?各几枚?解答:#includeintmaui(void)intcount,fenl,fen2,fen5,count=0,for(fen5=19”fen50,fen5-)for(fen2=49,fen20,fen2)fenl=100-5*fen5-2*fen2,if(fenl0)count+,pnntf(Bfen5:%d,fen2:%d,fenl:%dn,fen5,fen2,fenl),printfCcount=%dnH,count),return0,求110000之间所有满足各位数字的立方和等于它本身的数。例如153的各位数字的立方和是13+53+33=153o解答:#includeint

46、maui(void)int1,digit,number,sum,for(i=l,i=10000,i+)number=1;sum=0,vzhile(number!=0)digit=number%10,number=number/10,sum=sum+digiWigit+digit,if(sum=i)pnntf(dn,i),return0,验证哥德巴赫猜想:任何一个大于等于6的偶数均可表示为两个素数之和。例如6=3+3,8=3+5,,1A5+13。要求将6100之间的偶数都表示成两个素数之和,打印时一行打印5组。解答:#includeintpnme(intn),intmaui(void)inti,

47、m,intcount=0,for(m=6,m=l00,m=?n+2)for(i=3,i=m/2,i=i+2)if(prune(i)&prime(mi)pnntf(%d=%d+%dcount+,if(count%5=0)printfC),return0,intpnme(intn)inti,flag=l,if(n=l)flag=O,for(i=2;i=n/2;i+)if(n%i=O)flag=O,returnflag,输入一个长整数,从高位开始逐位分割并输出。例如输入123456,逐位输出:1,2,3,4,5,6o解答:#includeintmaui(void)intdigit,longin,te

48、mp,pow,scanf(%ldj&in);if(in10)pow*=10,temp/=10;while(pow=1)digit=ln/povz,in=in%pow,pow/=10,pnntfC%2d,digit),printf(n,)return0,将一个正整数分解质因数。例如,输入90,输出90=2*3*3*5o解答:#includeintprime(intn),intmaui(void)intm,1,scanf(H%d,&m),pnntf(%d=,m),for(1=2,i!=m,i+)if(pnme(i)printf(d匕i);m=n/r,i-;elsecontinue,pnntf(%d

49、,i),printfC1),return0,intpnme(intn)inti,intflag=l,if(n=l)flag=O,for(i=2;i=n/2;i+)if(n%i=0)flag=O,returnflag,输入两个正整数m和n,求其最人公约数和最小公倍数。解答:#includeintmaui(void)intm,n,j,k,doscanf(%d,&m),scanf(%d,&n);while(m0|n0),J=m,while(j%n!=0)j=j+m,k=(m*n)/j,pnntf(最小公倍数是d,最人公约数是%dn,j,k),return0,12一球从100米高度自由落下,每次落地后

50、反跳回原高度的一半,然后再落下再反弹。求它在第10次落地时,共经过多少米?第10次反弹多高?s.IncludeASLdlo.hvmtmam(vold)doubledistanceheightdlss-nceH100helghtHloofor(lH1二AH10二+)height;Hheight:*。5distanceHdistance+2*helghhpnntf(二dlstance=%1fhelght=%1fn=-distanceheightreturn013+7召EEFZ空渦:器:IncludeASLdlo.hvmtmam(vold)mb1for(1H1二A=4二+)foNH2*(4opo亍)

51、pnntf(:xfoNHlA-H2*1+)pnntf(关=)Pnns-IT)for(1H1二介3二+)foroJ-*AH2*-H-)pnntf(:xfoNHl匸ch2*(4o1j+)prmtf(关=)Pnns-IT)returno14.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少桃子?(提示:采取逆向思维的方法,从后往前推断。)解答:#includeintmain(void)int1,peachpeach=1,f

52、or(i=1,110,i+)peach=2*peach+1,pnntf(%dn,peach),4.4实验指导教材参考答案4.4.1基本循环语句的使用一、调试示例:略二、改错题改正卞列程序中的错误,输入1个正实数eps,计算并输出下式的值,精确到最后一项的绝对值小于eps(保留6位小数)。请使用d。曲ile语句实现循坏。(源程序errorOl_2cpp)S=1+F+47101316输入输出示例Inputeps:览-4s=0.835699源程序(有错误的程序)行号源程序#includeintmain(void)intflag,n;doubleeps,item,s:6printf(Z/Inputep

53、s:“);scanf(%lf,&eps);flag二1;51本章小结系统介绍函数的定义和函数调用:学习如何针对具体问题,确定需要使用函数的功能要求,再将功能用函敷程序实现考虎如何调用定义好的函航实现主调函数与被调函数的瞇n51本章小结系统介绍函数的定义和函数调用:学习如何针对具体问题,确定需要使用函数的功能要求,再将功能用函敷程序实现考虎如何调用定义好的函航实现主调函数与被调函数的瞇n确定参数功能,掌握参数的传递实现函数与变量间的关系,不同形式的变量在函数中起的作用不同局部变量.全局变量和静态妞能够根据问题合理确定函数功能能够使用函数结构进行熟练编程能够重点掌握参数的定义、传递能够合理运用全局

54、变量、静态变量5.3练习与习题参考答案5.3.1练习参考答案5-1输入一个正整数n,输出1n之和。要求自定义函数求1n之和,写出函数定义和调用函数。若要计算mn(mn)之和,又该如何定义?解答:#includeintmain(void)intn,intsum(intn),scanfCd1,&n),printf(sum=%dnH,sum(n),return0,intsum(intn)intresult,r,result=0,for(i=1,1=n;i+)result=result+i,returnresult,若要计算mn(mn)之和,则需要在main0中定义2个变量m和n:scanfCdd1,

55、&m,&n)tprintf(sum=%dnH,sum(m,n),同时在函数定义时需设置2个行参:intsum(intm,intn)intresult,1,result=0,for(i=m,1=nj+)result=result+i,returnresult,5-2输入2个数,输出其中较大的数。要求定义和调用函数max(a,b)找出并返回a、b中较大的数。解答:#includeintmaui(void)inta,b,maxunum,intmax(inta,intb),scanf(%d%d,&a,&b),maximum=max(a,b),printf(,lmax(%d,%d)=%dnB,a,b,m

56、aximum),return0,intmax(inta,intb)if(ab)returna,elsereturnb,5-3输入一个正整数n,输出n行数字金字塔。解答:#includeintmaui(void)intn,voidpyiamid(intn),scanf(%dj&n),pyramid(n),return0,voidpyiamid(intn)for(i=1,1=n,i+)for(j=l,j=n-i,j+)printfC11),for(j=1;j=i,j+)printf(M%dM,i),putcharfVi1);5-4思考:若把例5-9中静态变量f定义成普通局部变量,还能实现计算n!吗

57、?请上机检验。若把f换成全局变量又会如何?解答:若把例5-9中静态变量f定义成普通局部变量,无法实现计算n!,因为函数返回后f单元被系统回收,不再保存原有数据。若把f换成全局变量,则能实现计算n!,因为f的作用范I制和生命周期一直存在。5.3.2习题参考答案一、选择题在C语言程序中,若对函数类型未加显式说明,则函数的隐含类型为D。A.voidB.doubleC.charD.int下列程序的输出结果是_。fun(inta,intb,intc)c=a*btintmain(void)intc;fun(2,3,c);printfC,%dnn,c),return0,A.0B.1C.6D.无法确定建立自定

58、义函数的目的之一是B提高程序的执行效率B.提高程序的可读性C.减少程序的篇幅D.减少程序文件所占内存TOC o 1-5 h z以下正确的函数定义形式是A。A.doublefun(intx,inty)B.doublefun(intx,inty)C.doublefun(intx,inty),D.doublefun(intx,y)以下不正确的说法是C。A.实参可以是常量、变量或表达式B.实参可以是任何类型C.形参可以是常量、变量或表达式D.形参应与对应的实参类型一致以下正确的说法是B实参与其对应的形参共同占用一个存储单元实参与其对应的形参各占用独立的存储单元只有当实参与其对应的形参同名时才占用一个共

59、同的存储单元形参是虚拟的,不占用内存单元二、填空题下列程序的输出结果为235了o#includeintfun3(intm),intmain(void)intn,for(n=1,n10,n+)if(fun3(n)=1)p门ntf(d,n),return0,intfun3(intm)mt1;if(m=2|m=3)return1;if(m2|m%2=0)return0,for(1=3,im,1=1+2)if(m%1=0)return0,return1;输入若干个正整数,判断每个数从高位到低位各位数字是否按值从小到人排列,请根据题意,将程序补充完整。#includeintfun1(intm);intm

60、ain(void)intn,scanf(%d,&n),while(n0)if(funl(n)piintf(,%d中各位数字按从小到人排列n,n),scanf(%dB,&n);intfun1(intm)intk,k=m%10,while(m)if(m/10%10k)return0,elsem=m/10;k=m%10,return1;卞列函数输出一行字符:先输出kb个空格,再输出n个指定字符(由实参指定)。请根据题意,将程序补充完整。#includevoidp门nt(intkb,intn,charzf)诚i;for(i=1,10f(x)二v0 x=0-1x0解答:#includeintmaui(v

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论