1、第04章习题解答4.5习题4.5.1 概念题1.例4-3程序中B行的if语句的控制式理应是(d0),为什么可以用(d)?答:在if(d=0)的条件下,d值只有d0或d=0两种可能。即d非0或d为0。这种情况,根据“0为0,非0为1”的逻辑值确定规则,在后续的if语句中,可分别用(d)或(!d)作为控制式,进行流程控制。2.例4-7中,设置初值s为0,n为1,行不行?s为1,n为0,行不行?答:设置初值s必须为0,n为0或为1都行。3.试说明下列for语句的执行步骤和过程:for(初值式;控制式;修正式) 语句S答:(见第四章4.3.4小节,图4.26(B))4.试问下列程序会输出什么结果?fo
2、r语句的函数体是什么?#includeusing namespace std;int main() char *p=Output; for(int i=0;*p;i+,p+) ; couti=iendl; return 0;答:输出结果为:i=6。for语句的函数体为空,什么也不干。5.试分析下面的程序,看看会输出什么结果?若一时看不出来,可用表格一步步分析其循环过程。#includeusing namespace std;int main() char *p=Welcome!; for(int j=1;*p;j+) cout*p+; coutendl; p-; j-; for(;j;j-)
3、cout*p-; coutendl; return 0;答:输出结果为:Welcome!emocleW6.试问下列程序会输出什么结果?#includeusing namespace std;int main() int i,j; for(i=0;i8;i+) for(j=0;j7-i;j+) cout ; for(j=0;j2*i+1;j+) if(j%2=0) cout ; else cout#; coutendl; return 0;答:输出结果如图4.36所示。7.程序如下。输出结果如何?#include#includeusing namespace std;int main() int
4、 i,j; cout*; for(j=1;j=9;j+) coutsetw(4)j; coutendl; for(i=1;i=9;i+) couti; for(j=1;j=i;j+) coutsetw(4)i*j; coutendl; return 0;答:输出结果如下:* 1 2 3 4 5 6 7 8 91 12 2 43 3 6 94 4 8 12 165 5 10 15 20 256 6 12 18 24 30 367 7 14 21 28 35 42 498 8 16 24 32 40 48 56 649 9 18 27 36 45 54 63 72 814.5.2程序设计题1.试设
5、计一程序。输入x值,由下列代数式求出y值,输出x值和y值。x3.6时 y=1.6x-2.5 x3.6时 y=8.8x+18.2 (注意:代数式中的运算符与C+程序中的运算符有所不同,在程序设计时要作适当变换。)#includeusing namespace std;int main() double x,y; cout请输入一实数。x; if(x=3.6) y=1.6*x-2.5; else y=8.8*x+18.2; coutx=x y=yendl; return 0;2.试设计一程序,输入一整数,能判别出此整数是正还是负,是奇还是偶,并输出表明判别结果。#includeusing name
6、space std;int main() int n; cout请输入一整数。n; if(n0) if(n%2=0) cout这是一个正偶数。endl; else cout这是一个正奇数。endl; else if(n%2=0) cout这是一个负偶数。endl; else cout这是一个负奇数。endl; return 0;3.某运输公司对所运的物品分段进行计费。运输距离s 越大,,则折扣d越大。距离s与折扣d的关系如表4-8所示。设每公里每吨的基本运费为p,货物重量为w,折扣为d%,则总运费f按下式计算:f=p*w*s*(1-d/100.0)试设计一程序,当输入p、w、s后,能输出其总运
7、费。#includeusing namespace std;表4-8运输距离与折扣的关系运输距离s折扣d%s2500%250s5002%500s10005%1000s20008%2000s300010%s300015%int main() int s; double p,w,d,f; cout请输入每公里每吨的基本运费p、货物重量w。pw; cout请输入运输距离s(整数)。s; switch(s/250) case 0: d=0; break; case 1: d=2; break; case 2: case 3: d=5; break; case 4: case 5: case 6: ca
8、se 7: d=8; break; case 8: case 9: case 10: case 11: d=10; break; case 12: default: d=15; break; f=p*w*s*(1-d/100.0); cout总运费为:fendl; return 0;4.试设计一程序,对两整数作一个四则算术运算。程序中依次输入左操作数a、运算符oprt和右操作数b。运算符oprt是如下四个字符中的一个: + - * /用以表明运算是加、减、乘或除。根据所输入的oprt的字符值对两操作数a和b作相应的加、减、乘或除的运算,最后输出运算结果。#includeusing namesp
9、ace std;int main() double a,b; char oprt; cout请依次输入左操作数、运算符(+、-、* 或/)、右操作数。aoprtb; switch(oprt) case +: couta+b=a+b; break; case -: couta-b=a-b; break; case *: couta*b=a*b; break; case /: couta/b=a/b; break; default:cout运算符错!; break; coutendl; return 0;5.试设计一程序。按下式计算t值。输出之。t=1*2*3*10#includeusing na
10、mespace std;int main() int n=1,t=1; while(n=10) t*=n+; coutt=tendl; return 0;6.试设计一程序。输入一整数n,能按下式计算s,并输出计算结果。s=1+#includeusing namespace std;int main() int n,i=1; double s=0; cout请输入一个整数。n; while(i=n) s+=1.0/i; i+; couts=sendl; return 0;7.试设计一程序,求下面的无穷级数S。S=忽略比1E-7小的项。#includeusing namespace std;int
11、 main() int n=1; double m,s=0; m=1.0/(n*(n+1); while(m=1E-7) s+=m; n+; m=1.0/(n*(n+1); couts=sendl; return 0;8.试设计一程序。输入一整数n的值,按下式求出y的值,并输出n和y的值。y=1!+2!+3!+n!。#includeusing namespace std;int main() int m=1,i=1,y=0,n; cout请输入一整数。n; while(i=n) m*=i; y+=m; i+; coutn=nendl; couty=yendl; return 0;9.已知一数列
12、的开始头三项依次为0、1、2,从第四项开始的每一项均为其前三项之和。试设计一程序,求该数列的前18项。#includeusing namespace std;int main() int x=0,y=1,z=2,i=1; while(i=6) coutxt yt zt; x+=y+z; y+=z+x; z+=x+y; if(i%3=0) coutendl; i+; return 0;10. 试设计一程序,从键盘输入若干个整数,以输入0为结束。分别统计出正数的个数和负数的个数,并求出正数之和、负数之和及总的平均值。输出之。#includeusing namespace std;int main(
13、) double n,sz=0,sf=0,av; int kz=0,kf=0; cout请输入一个整数,想结束就输入0。n; while(n) if(n0) kz+; sz+=n; else kf+; sf+=n; cout请输入一个整数,想结束就输入0。n; av=(sz+sf)/(kz+kf); cout正数个数=kz 负数个数=kfn; cout正数和=sz 负数和=sfn; cout总平均值=avn; return 0;11.试设计一程序,输入一任意整数,能反序输出其各位数字。例如,输入2468,则输出8642。#includeusing namespace std;int main(
14、) int n,a,i=0,s=0; cout请输入一个四位整数。n; while(i4) a=n%10; s=s*10+a; n/=10; i+; coutsendl; return 0;12.试设计一程序,输入一任意整数,能输出其各位数字之和。例如输入1234则输出10。#includeusing namespace std;int main() int n,a,b,c,d; cout请输入一个四位整数。n; a=n/1000; b=n/100%10; c=n/10%10; d=n%10; couta+b+c+dendl; return 0;13. 试设计一程序,输入一正数a,用迭代法求
15、的近似值。迭代公式如下: 以a的二分之一作为初始近似值。在x1和x0之差的绝对值不大于1e-5时结束迭代。#include#includeusing namespace std;int main() double x0,x1,a; cout请输入一正数。a; x1=a/2; do x0=x1; x1=2*x0/3+a/(3*x0*x0); while(fabs(x1-x0)1e-5); couta的立方根等于:x1endl; return 0;14.试用for语句设计程序,计算100以内的奇数和。#include#includeusing namespace std;int main() in
16、t s=0; for(int i=1;i100;i+=2) s+=i; cout100以内的奇数和为:sendl; return 0;15.例4-14程序中用了指针自增走步。试改为指针加整数走步,写出程序。#includeusing namespace std;int main() char *p=You are a teacher.; for(int i=0;*(p+i);i+) cout*(p+i); coutendl; return 0;16.试设计一程序,输入一个整数,能输出其所有因子。#includeusing namespace std;int main() int n,k=0;
17、cout请输入一个整数。n; for(int i=1;in;i+) if(n%i=0) coutit; k+; if(k%8=0) coutendl; coutendl; return 0;17.设计一程序,输出所有的水仙花数。所谓水仙花数是一个三位数,其各位数字的立方和等于该数本身。例如:153=13+53+33 153就是水仙花数。#includeusing namespace std;int main() int a,b,c,i; for(i=0;i1000;i+) a=i/100; b=i%100/10; c=i%10; if(a*a*a+b*b*b+c*c*c=i) coutit;
18、coutendl; return 0;18.求满足以下条件的三位数n,它除以11(整数相除)所得的商等于n的各位数字的平方和,且其中至少有两位数字相同。例如,131除以11的所得的商是11,而131的各位数字的平方和也为11,二者相等。且131有两位数字相同。所以131是满足条件的三位数。#includeusing namespace std;int main() int a,b,c,i; for(i=0;i1000;i+) a=i/100; b=i%100/10; c=i%10; if(i/11)=(a*a+b*b+c*c)&(a=b)|(b=c)|(c=a) coutit; coutend
19、l; return 0;19.设计一程序,求出200300之间的所有素数。#include#include#includeusing namespace std;int main() int n,k; for(n=200;n300;n+) for(k=2;k=sqrt(n);k+) if(n%k=0) break; if(!(k=sqrt(n) coutsetw(4)n; coutendl; return 0;20.设计一程序,求出满足以下条件的最小的n值和s值:s=1+2+3+n,且s600#includeusing namespace std;int main() for(int n=1,s=0;s600;n+) s+=n; cout600,最小的n是:nendl; cout600,最小的s是:sendl; return 0;21.求/2 的近似值的公式为:其中,n=1、2、3 。设计一程序,求出当n=1000时的近似值。#includeusing namespace std;int main() double a,n,pi,p=1; for(n=1;n=1000;n+) a=2*n/(2*n-1)*2*n/(2*n+1); p*=a; pi=p*2; coutpi=piendl; return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1