C++程序设计(第2版)课后习题答案.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C++程序设计(第2版)课后习题答案.docx》由会员分享,可在线阅读,更多相关《C++程序设计(第2版)课后习题答案.docx(195页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一章C+基础知识习题1.1判断下列标识符的合法性。sin book5arry name Example2.1 main$ 1class_cppa3 x*y my name答: 合法的: sinbookname mainclass_cppa3非法的:5arry Example2. 1$1 x*y my nameL2假定有下列变量:int a=3,b=5,c=0;float x=2.5,y=8.2,z=l .4;char chl=a,ch2=5,ch3=,ch4;求下列表达式的值,以及运算后表达式所涉及的各变量的值。x+(int)y%ax=z*b-H-,b=b*x,b+ch4=ch3 -ch2+
2、ch 1int(y +(int)y/(int)z!(ab)&c&(x*=y)&b+ch31 |(b+=a*c)| |c-H-z=(a2)/(bl)答:x+(int)y%a 值为:4.5x=z*b+,b=b*x,b+值为:42, x 为7, b 为43eh4=ch3ch2+chl 值为:int(y+(int)y/(int)z 值为:13!(ab)&c&(x*=y)&b+值为:0, b为5注:只要出现个false右边的不再做。ch3|(b+=a*c)|c+值为:1, e为注:只要出现个true,右边不再做。 z=(a2)/(bl)值为:61.3判断下列哪些是常量,哪些是变量。 “Chinacons
3、t int n= 10;int m=5;a char ch-a,int array5=l,2,3,4,5; char s=HelloM;答:China”文字常量const int n=10;常变量int m=5茂量豆文字常量char=R变量int array5=l,2,3,4,5;变量char s 口=”Hello”;变量L4将下列算式或叙述用CH表达式描述。(1)(2) (x+y)/(x-y)*ay)(3)位于原点为圆心,a, b为半径的圆环中的点坐标。(4) (5)并且字符ch不为答:pi/2+sqrt (asin (x) *asin (x) +c*c)(x+y) / (x-y) *pow
4、 (a, y)(x*x+y*y)=a*a)&(x*x+y*y)5)if(b-a25) a+;elseb/=a;解答:本题检查学生整除的概念。跟踪:abb/a循环次数b-a31003319741002529651002039515100613851610061484171005停(1) 14(2) 17(3) 1002.1.2 设有说明:int x,y,n,k;下面程序段的功能是备选答案中的(1),当n=10.x=10打印结果是(2) cinxn;k=0;dox/=2;k+;while(kn);y=l+x;k=0;doy=y*y;k+;)while(kn);coutyendl;备选答案:A. B
5、. C. D.解答:第一个循环使x成为:;y成为:;第二个循环使y成为:;(1) B考虑整除,当x连除4次2以后即为,所以:为(2) 12.1.3请看如下程序段:ifi(num=l) coutvvAlpha”;else iRnum=2) coutBata,;else ifi(num=3) coutvv“Gamma;else cout,DeltaM;当num的值分别为1、2、3时,上面程序段的输出分别为(1)、(2)、(3) 解答:检查条件语句与字符串输出概念:(1) Alpha(2) Bata(3) Gamma 2.1.4执行下面程序段后,m和k的值分别为(1)(2) int m,k;fbr(
6、k= 1 ,m=0;k=10) break;if(m%2=0)m+=5; continue;)m-=3;解答:注意continue语句的使用初值m=0k=l第1次循环后m=5k=2第2次循环后m=2k=3第3次循环后m=7k=4第4次循环后m=4k=5第5次循环后m=9k=6第6次循环后m=6k=7第7次循环后m=llk=8第8次循环m=ll结束k=8, k+未做(1) 11(2) 8二.编程与综合练习题2.2有一个函数:编写程序,输入x,输出y。解:#include using namespace std;int main()double x,y;coutw” 输入 x=;cinx;if(x
7、l) y=x;else if(x10) y=2*x-l;else y=3*x-l 1;cout,y=,yendl;return 0;23设计程序将输入的百分制成绩转换为五分制输出,90分以上为5分,8089分为4分,7079 分为3分,669分为2分,60分以下为1分。解:10分档用10进行整除获得,转换用开关语句实行。#includc using namespace std;int main()int mark,result; /mark 是百分制成绩,result 是5分制coutv请输入百分制成绩:Hendl;cinmark;iRmarkvO) eoutvv”缺考!” wendl;ret
8、urn 0;)switch (mark/10)case 9: case 10:result=5;coutw”输出五分制成绩:Mresultendl;break;case 8:result=4;coutw”输出五分制成绩:Mresultendl;break;case 7:result=3;coutw”输出五分制成绩:“ wresultwendl;break;case 6:result=2;coutw”输出五分制成绩:Mresultendl;break;case 5:case 4:case 3:case 2:case 1 :case 0:result=l;coutw”输出五分制成绩:wresult
9、endl;break;default:coutw”输入错误! Hendl;return 0;2. 4编程计算个人所得税。个人所得税率表如下:月收入1200元起征,超过起征点500元以内 部分税率5%,超过500元到2,000元部分税率10%,超过2,000元到5,000元部分税率15%,超过 5, 000元到20, 000元部分税率20%,超过20, 000元到40, 000元部分税率25%,超过40, 000元到 60, 000元部分税率30%,超过60, 000元到80, 000元部分税率35%,超过80,000元到100, 000元 部分税率40%,超过100,000元部分稅率45況解:
10、应该从最高税率段开始计算,分段叠加。先算两万元以上各段,每两万为档,采用 switch语句,注意没有使用break语句。后面各低收入段,用if语句,也没有使用else,这 两种方法是对应的。第二要注意计算的入口处,收入减去该段的下限,进行计算,以后各段 都是完整的段,计算十分简单。#include using namespace std;int main()double income,tax=0;int k;coutw”请输入个人月收入:“vvendl;cinincome;ifi(income20000)k=income/20000;switch(k)default: tax+=(income
11、-100000)*0.45;income=l00000;case 4: tax+=(income-80000)*0.40;income=80000;case 3: tax+=(income60000)*0.35;income=60000;case 2: tax4-=(incomc-40000)*0.30;income=40000;case 1: tax+=(income-20000)*0.25;income=20000; if(mcome5000)tax+=(income-5000)*0.20;income=5000;)if(income2000) tax+=(income-2000)*0.1
12、5; income=2000;if(income500)tax+=(income-500)*0.10;income=500;tax+=incomc*0.05;coutw” 应征所得税:Mtaxendl;return 0;2.5编程打印如下图形:*1.1 * *1.2 * *1.3 * *1.4 * *解:难点在三角形左边的空格的控制,嵌套个循环语句完成此任务。#include using namespace std;int main()int ij;for (i=l;i0;j-) coutM三角形每行前部的空格for(j=lj=2*i-lj+) coutw *”; coutendl;)for(
13、i=l;iv=3;i+) coutM * * *n”;return 0;2.6 编程输出下列图形,中间一行英文字母由输入得到。AB B BCCCCCD D D D D D DCCCCCB B BA解:分上三角和三角两部分分别处理左边的空格。#include using namespace std;int main()char in;int ij;docoutvv”输入一个字母:;cinin;iR(in=97)&(in=122)in-=32;小写改大写while(in90);int line=inA;fbr (i=O;iv=line;i+)上三角for(j=line-i;jOJ-) coutv”
14、;前方空格for(j= 1 ;j0;i-)下三角(少行)for(j=0;j=line-i;j*H-) coutn tf;for(j=1 J=2*i-1;j-H-) coutvv vvchar(i-l+A);coutendl;return 0;2.7 输入 n,求l!+2!+3!+n!解:通常求和作为外循环,阶乘作为内循环。这里考虑到:n!=n*(n-1)!,利用递推法运算 速度大大提高,同时两者可合并为个循环。本程序考虑了输入的健壮性。#include #include using namespace std;int main()int n,ijch=l;double result=0; /r
15、esult 是结果coutw”请输入正整数n: nendl;cinn;if(nl)coutw”输入错误! Hendl;return 1;result=l;for(i=2;i=n;i+)jch*=i; /jch是i的阶乘,注意n!=n*(n-l)!这样可少层循环result+=jch;coutresultendl;return 0;2.8 猴子吃桃问题:猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前 一天剩下的一半多一个,到第十天吃以前发现只剩下个桃子,问猴子共摘了几个桃子。 解:采用递推法。从最后一天逆推到第一天,9次循环。#includc using namespace st
16、d;const int day=10;int main()int i,x=l;最后一天只有一个fbr(i=l;iday;i+) x=(x+l)*2; 从一天前推至九天前 coutw”开始共有桃子”xv个。nM;return 0;2.9 从键盘输入组非0整数,以输入0标志结束,求这组整数的平均值,并统计其中正数和 负数的个数。解:将这组整数放在整型数组中,边输入边求和及统计正数和负数的个数,平均数由和 除以整数数量取得。#includc #include using namespace std;int main()int stem256,sum=0,pnum=0,nnum=0,i=0;coutw
17、”从键盘输入组非整数,以输入标志结束:“wendl;cinstemi;while(stemi!=0)sum+=stem i; 求if(stemi0) pnum+;正数数量else nnum+; 负数数糧:i+;cinstemi;if(!i) coutvv”个数vvendl;else coutw”平均值=”vv(double)sum/(pnum+nnum)vendl; 平均值习惯不用整数 coutw”正数个数=pnumendl;coutw” 负数个数=nnumendl;return 0;2.10 编程找出1500之中满足除以3余2,除以5余3,除以7余2的整数。解:中国古代数学问题(韩信点兵),
18、采用穷举法。注意三个条件同时成立用#include using namespace std;int main()int i;fbr(i=l;iv=500;i+)ifi(i%3=2)&(i%5=3)&(i%7=2) coutiendl;return 0;)2.11 编程求1000之内的所有完全数。所谓完全数指的是一个数恰好等于它的所有因子和。例 如6=1+2+3,就是个完全数。解:采用穷举法。两重循环,外层是从1到999依次处理,内层是求该数的所有因子的和,并 判断是否等于该数。#includc using namespace std;int main()int i,a,sum_yz; /sum
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 课后 习题 答案
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内