《C语言程序设计呼克佑课后习题答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计呼克佑课后习题答案.docx(25页珍藏版)》请在课桌文档上搜索。
1、C语言程序设计呼克佑课后习题答案C语言程序设计习题解答(参考)习题一一、单项选择题1 .D2 .A3 .D二、填空题1.顺序结构选择结构循环结构2算法3.语言简洁、运算符丰富、结构化语言4,可移植性强、代码效率高、书写格式自由5 .错误隐蔽、有时会难以理解、有时会难以修改6 .群举法(枚举法)、递推法(迭代法)、递归法7 .做什么怎么做三、应用题1.inc1.udevoidmain()Printf(*n)printf(C1.anguageProgramn);Printf(*n)2.inc1.udevoidmain()inta,b,c,max;SCanf(%d%d%d”,&a,&b,&c);if
2、(ab)max=a;e1.semax=b;if(maxprintf(Max=%dnzmax);)一、单项选择题IAD1E2.BzE3.B,D,E,F,H4.B,F5.AzBzE二、填空题1 .()int(2)char(3)doub1.e(4)1.ong(5)char(6)char(7)int(8)1.ong2 .()0(2)0(3)2(4)4(5)4(6)8(7)0(8)23 .21114 .不做5 .sin(25*3.14159180)+cos(30*3.14159180)6.28. 5三、给出各个程序的运行b结果1.运行结果如下:321552 .运行结果如下:6,99z27一、单项选择题1
3、.D2.B3 .D4 .C5.B6.C7.B8 .A9 .C10.D11 .D12.D13.B14.A15.A16.B17.C18.C19.B20.B21 .D22.C23.C24.D25.C26.C27.D28.D29.B3O.A二、填空题1 .从标准设备(键盘)上读入一个字符向标准设备(键盘)上输出一个字符#inc1.ude2 .以十进制形式输入一个整数表示从标准输入设备(键盘)读取输入的3个整型数表示掉过3个整数不读取用来输入一个字符3 .以十进制形式输出一个整数以十六进制形式输出一个整数以十进制小数形式输出,输出的数据长度为7位,其中有两位为小数以字符形式输出一个字符4 .分程序;5
4、.-16 .非007 .a%7=0e1.se8.39.210.forwhi1.edo-whi1.e11.Continue12.a=16zy=4213.1014.y=1915.2222216.3917.718.5z519.n=420.-321.8三、程序阅读分析题1.2.3.04.5675. thisnumberisahuiwen四、编程题1 .编写一个程序,要求用户输入两个整数,判定其中一个是否能整除另一个。#inc1.udeintmain()(intazb;whi1.e(scanf(,%d%d,1.&a,&b)=2)if(a%b)Printfc不能整除n);e1.sePrintf(能整除n)
5、;)return0;)2 .编程实现:输入一个整数,判断它能否被3,5,7整除,并输出以下信息、之一:能同时被3,5,7整除;能被其中两数(要指出哪两个)整除;能被其中一个数(要指出哪一个)整除;不能被3,5,7任一个整除。#inc1.udevoidmain()(inta;Printf(请输入一个整数n“);scanf(%da);if(a%3=0&a%5=0&a%7=0)printf(%d能同时被3,5,7整除n”司;eIseif(a%3!=0&a%5=0&a%7=0)printf(%d能同时被5,7整除n,a);eIseif(a%3=0&a%5!=0&a%7=0)printf(%d能同时被3
6、,7整除n,1,a);eIseif(a%3=0&a%5=0&a%7!=0)printf(%d能同时被3z5整除n)a);eIseif(a%3=0&a%5!=0&a%7!=O)printf(%d能被3整除n)a);eIseif(a%3!=0&a%5=0&a%7!=0)printf(%d能被5整除n”,a);e1.seif(a%3!=0&a%5!=0&a%7=O)printf(%d能被7整除n”,a);eIseprintf(1%d不能被3,5,7整除n*a);)3 .市郊长途电话收费标准如下:通话时间在三分钟以下收费一角,三分钟以上则每超过一分钟加一角。在7:0021:00之间通话者,按收费标准全
7、价收费;在其它时间通话者,按收费标准的一半收费。请计算某人在X时间通话y分钟,应缴多少电话费。(通话时间利用整数输入实现)inc1.udemain()(fIoat,y=0;intt;scanf(n%f%dt);if(t7&t21)if(x0);)eIse(if(x0);)printf(%fn,y);)4 .输入a、b、c三条边,判断它是否构成三角形。若能构成三角形,则计算三角形面积。#inc1.ude#inc1.udemain()fIoatazbzcrS=Ozx=O;Printf(输入三角形三条边的边长:);scanf(,%f%f%f,&a,&b,&c);if(a+bc&b+ca&a+cb)x
8、=(a+b+c)/2.0;S=sqrt(x*(x-a)*(x-b)*(x-c);printf(area=%.3f,S);)EIsePrimf(”不能构成三角形n)5 .打印出所有水仙花数。所谓水仙花数是指一个三位数,其各位数字的立方和等于该数本身。例如,153是一个水仙花数,因为153=13+53+33o#inc1.udestdio.h#inc1.udemath.hmain()(inti;inta,b,c;for(i=100;i=999;i+)(a=i%10;*取个位数*/b=i10%10;*取十位数*/c=i100;/*取百位数*/if(i=a*a*a+b*b*b+c*c*c)printf(
9、%d,i);)6 .编写一个程序,在屏幕上显示如下图形(图形的层数读者自行设定):*#inc1.ude#inc1.udemain()(inti,jkfor(i=-3;i=3;i+)(for(j=1.;j=abs(i);j+)printf(,%c,32);for(j=1.;j=7-2*abs(i);j+)printf(*);printf(,n);)7 .求斐波那契(Fibonacci)数歹J:1,1,2,3,5,8,的前40个数。斐波那契数列的定义:F1.=1.(n=1.)F2=1.(n=2)Fn=Fn-1.+Fn-2(n3)#inc1.udemain()intf1.,f2,f;inti;f1.
10、=f2=1.;printf(,%dn%dn,J1.zf2);for(i=1.;i=38;i+)/已经有两个数,只要再产生38个数即可*/(f=f1.+f2;f1.=f2;f2=f;printf(%dnf);)8 .编程实现求1.+2+3+.+n之和,并输出当其和第一次大于或等于IOO时的值及n值。#inc1.udemain()(intizs,t=0;i=1.;s=0;whi1.e(i=100&t1.)/*设定t只求第一次和大于100的内容*/(PrintfC第一次和大于或等于100时和为%dn;Primfc第一次和大于或等于100时为dn,j);t+=1.;)i=i+1.;)printf(,s
11、=%dnzs);)9 .整元换零钱问题。把1元兑换成1分、2分、5分的硬币,共有多少种不同的换法?inc1.udemain()(intijk,n;n=100zk=0;for(i=0;i=n/5;i+)for(j=0j=(n-i*5)2j+)(printf(5cent=%dt2cent=%dt1cent=%dnJj,n-i*5-j*2);k+;)printf(tota1.times=%dnzk);)10 .编写解鸡兔同笼问题的程序。用户输入头的数目和脚的数目,输出鸡、兔各有多少只。inc1.udemain()intx,y,a,b;PrimfC输入鸡兔头的数目:);scanf(%d,);Primf
12、C输入鸡兔脚的数目:“);scanf(%dy);a=x-(y-2*x)2;b=(y-2*)2;Printfc鸡有%d只,兔有%d只”,a,b);)11 .打印杨辉三角形,即(x+y)n展开式的各项系数。并且在程序运行开始时,问用户n的值为多少,接着打印如下形式至指定行数。1112 1133114641#inc1.udeintmain()intn,k,j,c;printf(,Input=);scanf(,%dn);for(k=1.;k=n;k+)(PrintfC%*s,4*(n-k);*格式控制语句,有和没有是两种显示方式*/c=1.;printf(%4dc);for(j=1.j=k-1.j+)
13、(c=c*(k-j)j;printf(1,%8d,c);)printf(n);)return0;)12.个位数是6,且能被3整除的五位数共有多少个?#inc1.udemain()inta,count二。;1.ongi;for(i=10000;i=0&Vix;i-)V数组中的数据从后往前比较V丫0+1=丫4/*若大于乂,后移一个位置*/Vi+1.=x;/*将X插入数组V中*/n+;/*数组中数据个数增1*/for(i=0;iprintf(,%dzVi);printf(,n);)2 .定义一个含有30个整型元素的数组,按J1.1.页序分别赋予从2开始的偶数,然后按顺序每五个数求出一个平均值,放在另
14、一个数组中并输出。#inc1.udevoidmain()(intarray30zaverage6=0;intij;for(i=0;i30;i+)arrayi=2*(i+1.);for(j=0;j6;j+)(for(i=5*j;i=position-1.)(stri+1.=stri;i;)strposition-1.=ch;Primfe在指定位置插入字符后的字符串:%sn,zstr);)4 .输入一行字符,分别统计其中十个数字字符0,T,,19出现的次数。inc1.udevoidmain()(charstr81;intcount10=0J;PrintfC输入一行字符:n);gets(str);f
15、or(i=0;stri!=0;i+)if(stri=,0,stri=,9)countstri-,0,+;for(i=0;i10;i+)printf(,%c,:%dn,0,+izcounti);)5,输入矩阵A(2行3列)和矩阵B(3行4列),计算它们的乘积C=AB.(矩阵乘积计算公式:Cij=EAikBkj)#inc1.udevoidmain()inta231.b341.c24;intijk;Primfe输入2行3列矩阵数据:nn);for(i=0;i2;i+)for(j=0;j3;j+)scanf(,%d,aij);Printfe输入3行4列矩阵数据:n);for(i=0;i3;i+)for
16、(j=0;j4;j+)scanf(,%d,Abij);for(i=0;i2;i+)for(j=0;j4;j+)(cij=O;for(k=0;k3;k+)cij+=aik*bkj;)Primfc两矩阵的乘积矩阵是:n);for(i=0;i2;i+)(for(j=0;j4;j+)printf(%5dcij);printf(n);)6.下面是一个55阶的螺旋方阵。试编程打印出此形式的nn(n10,顺时针方向旋进)。1 2345161718196152425207142322218131211109#inc1.ude#defineN5voidmain()(intaNNrijrk,n;i=0;j=0;n
17、=1.;for(k=1.;k=N*N;k+)(if(i=n-1.&jn-n)n-n)aij+=k;e1.seif(j=N-n&in-n)n-n)ai+j=k;e1.seif(i=N-n&jn-1.)aj-=k;e1.seai-j=k;if(i=n8y=n-1.)n+;)for(i=0;in;i+)bdsfid=,596p=nx/n;i+)(for(j=0;jn;j+)nj+)printf(n%5daij);printf(,n);)7.编一程序,实现字符串复制,不使用StrCPy()函数。#inc1.udevoidmain()charstr1.81zstr2=,Iamastudent.;inti
18、;for(i=0;(str1.i=str2i)!=0;i+);printf(%sn%snzstr1.zstr2);)8编一程序,求字符串的长度,不使用StrIen()函数。#inc1.udevoidmain()(charstr81;intn;Primfe输入一个字符串:);gets(str);n=0;whi1.e(strn!=O,)n+;Printf(字符串的长度是:%dn,n);)9.有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。#inc1.udevoidmain()(charstr381;charcategory510=
19、,UPPER1.OWER,nDIGSPACEOTHER;intij1.count5=0;PrintfC输入3行文字:n);for(i=0;i3;i+)gets(stri);for(i=0;i=A&strij=a&strij=0&strij=,9,)count2+;e1.seif(strij=)count3+;e1.secount4+;for(i=0;i90197879227692Y292919027391Y390818225384N可以将学生的学号和各科成绩放在数组a304中,然后进行统计处理。inc1.ude#defineN30voidmain()(intstuN4zsum;intij;ch
20、argreat90;for(i=0;in;i+)/n;i+)(PrimfC输入第d个学生的数学、英语和物理成绩(空格分隔):?+1);stui0=i+1.;for(j=1.;j90n);printf(n);for(i=0;in;i+)bdsfid=1,683,p=x/n;i+)(sum=0;great90=,Y;printf(%5d,stui0);for(j=1.;j4;j+)(printf(%5d,zstuij);sum+=stuij;if(stuij90)great90=,N;)printf(,%5dzsum);printf(%5dsum3);printf(,%5cngreat90);)习
21、题五一、单项选择题1 .B)2.D)3.A)4.D)5.A)6.C)二、填空题1.52.883.22 .12125.4126.1行的行地址三、程序分析题1.242 .ENG1.ISHMATHMUSICPHYSICSCHEMISTRY四、编程题(以下题目均要求用指针方法实现)3 .#inc1.ude#inc1.udevoidmain()(char*n=,china,japan,koreazamericaneng1.andnz*temp;intijzk;for(i=0;i5;i+)k=ifor(j=i+1.;jO)k=j;if(k!=i)(temp=nk;nk=ni;ni=temp;)for(i=
22、0;i5;i+)printf(,%snzni);)4 .#inc1.udevoidmain()(inta10=87z78z69z79z98z86z9175z71z95z*pztemp;intizmin-order;p=a;for(i=1.;iai)p=a+i;min_order=p-a;printf(Min=a%d=%dnmin_orderzamin_order);temp=*p;*p=aO;aO=temp;for(i=0;i=a)&(*px);p-)*(p+1.)=*p;/*从后向前将比X大的数据后移一个位置V*(p+1.)=x;/*将X插入到数组中*/for(p=a;pprintf(%4d
23、p);printf(n);)5 .#inc1.udevoidmain()(chars255zprrior=,z*p;Printf(输入一行英文:n)gets(s);for(p=s;*p!=0;p+)/*扫描字符串*/(if(prrior=&*p=a&*p=z)/*单词开始且是小写字母V*p-=32;/*将单词的第一个字母改为大写*/prrior=*p;)puts(s);)6 .#inc1.udevoidmain()(charstr1.81zstr2=,Iamaboy.;char*st;s=str2;t=str1.;whi1.e(*t=*s)!=,0,)S+;t+;)puts(str1.);)7
24、 .略8 .略9 .编写程序,实现输入月份号,输出相应的英文月份名。10.略11 .略12 .inc1.udevoidmain()(charstr81z*pq;PrimfC输入一个字符串:n)gets(str);for(q=str;*q!=0;q+);for(p=strzq-;(pq)&(*p=*q);p+,q);/q)&(*p=*q);p+,q-);if(pe1.sePrintf(字符串:s是回文串!n,str);)13 .#inc1.udevoidmain()(charstr81pq,qc,pc;Primfe输入一个字符串:n)gets(str);for(q=str;*q!=0;q+);f
25、or(p=str1.q-;pq;p+,q-)=*a,&*p=,a*q=z,)7*q-32q;if(pc!=qc)break;)if(pe1.sePrintf(字符串:s是回文串!r,str);)14 .inc1.udeinc1.ude#inc1.udevoidmain()(int*azn,i;Printf(输入一维数据的长度)a=(int*)ma1.1.oc(n*sizeof(int);动态分配内存空间printf(,%dn,time(NU1.1.);Srand(time(NU1.1.);初始化随机数序列for(i=0;in;i+)bdsfid=845,p=x/n;i+)矶i=rand()%1
26、00;产生随机数for(i=0;in;i+)nj+)Printf(%d)ai);输出数据printf(n);)15 .略习题六一、单项选择题1-5ADBDB6-10BAACD二、填空题1.从定义变量处到程序结束局部变量2. auto3. return(表达式)void4. returns;5. *p1.*p2;*p1.=*p2;6. f1.oatazintns+=ai;7. *s-*t8. wi-1.9. (b!=0)10. i=,A,arrayi=Z,)n+;return(n);)3 .解:函数Iink如下:int1.ink(chars1.zchars2zchars3)intij;for(i=0js1.i!=,0,J+)s3i=s1.i;for(j=0js2i!=0j+J+)s3i=s2j;s3i=0;return(i);)