C++程序设计课后习题答案1-4章.pdf
《C++程序设计课后习题答案1-4章.pdf》由会员分享,可在线阅读,更多相关《C++程序设计课后习题答案1-4章.pdf(89页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+程序设计课后习题答案第一章C+基础知识习题1.1 判断下列标识符的合法性。sin book5arry name Example2.1 main$1 class_cpp a3 x*y my name答:合法的:sina3非法的:5arrybook _name main classcppExample2.1$1 x*y my name1.2 假定有下列变量:int a=3,b=5,c=0;float x=2.5,y=8.2,z=1.4;char chl=a,ch2=5,ch3=0,ch4;求下列表达式的值,以及运算后表达式所涉及的各变量的值。x+(int)y%a x=z*b+,b=b*x,b+
2、ch4=ch3-ch2+chlint(y/z)+(int)y/(int)z!(ab)&c&(x*=y)&b+ch3|(b+=a*c)|c+z=(a2)/(b 1)答:x+(int)y%a 值为:4.5x=z*b+,b=b*x,lrH值为:42,x 为7,b 为43ch4=ch3-ch2+chl值为:Nint(y+(int)y/(int)z 值为:13!(ab)&c&(x*=y)&b+值为:0,b 为5 注:只要出现一个false右边的不再做。ch3|(b+=a*c)|c+值为:1,c 为0 注:只要出现一个tru e,右边不再做。z=(a2)/(bl)值为:6L3判断下列哪些是常量,哪些是变量
3、。“China”const int n=10;int m=5;a char ch=,a,int array5=l,2,3,4,5;char s 尸Hello”;答:China文字常量const int n=10;常变量int m=5;变量a 文字常量char ch=a变量int array5=l,2,3,4,5;变量char s=HeHo;变量1.4将下列算式或叙述用C+表达式描述。(1)(2)(x+y)/(x-y)*ay)(3)位于原点为圆心,a,b 为半径的圆环中的点坐标。(4)。(5)并且字符ch不为XT。答:pi/2+sqrt(asin(x)*asin(x)+c*c)(x+y)/(x-
4、y)*pow(a,y)(x*x+y*y)=a*a)&(x*x+y*y)=b*b)(a!=b)&(a!=c)&.&(b!=c)(k5)if(b-a25)a+;elseb/=a;解答:本题检查学生整除的概念。跟踪:abb/a循环次数b-a310033197410025296510020395 15100613851610061484171005停(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;
5、k+;while(kn);coutyendl;备选答案:A.B.C.D.解答:第一个循环使x 成为:;y 成为:;第二个循环使y 成为:;(1)B考虑整除,当x 连除4次2以后即为0,所以:为0(2)12.1.3 请看如下程序段:if(num=l)cout,Alpha,;else if(num=2)coutBata;else ififnum=3)coutGamma;else coutDelta;当num的值分别为1、2、3时,上面程序段的输出分别为(1)、(2)、(3)。解答:检查条件语句与字符串输出概念:(1)Alpha(2)Bata(3)Gamma2.1.4 执行下面程序段后,m 和 k
6、的值分别为(1)、(2)oint m,k;for(k=l,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,kH未做(1)11(2)8二.编程与综合练习题2.2有一个函数:编写程序,输入x,输出y。解:#include using namespace std;int main()double x,y;cout”
7、输入 x-1;cinx;if(xl)y=x;else if(x10)y=2*x-l;else y=3*x-l 1;coutny=nyendl;return 0;2.3设计程序将输入的百分制成绩转换为五分制输出,90分以上为5分,80 89分为4分,70 79分为3分,60 69分为2分,60分以下为1分。解:10分一档用10进行整除获得,转换用开关语句实行。#include using namespace std;int main()int mark,result;/mark 是百分制成绩,result 是5分制coutw”请输入百分制成绩:”v endl;cinmark;if(mark0)c
8、out”缺考!nendl;return 0;)switch(mark/10)case 9:case 10:result=5;coutw”输出五分制成绩:!resultendl;break;case 8:result=4;coutw”输出五分制成绩:resultendl;break;case 7:result=3;coutw”输出五分制成绩:!resultendl;break;case 6:result=2;coutw”输出五分制成绩:resultendl;break;case 5:case 4:case 3:case 2:case l:case 0:result=l;cout”输出五分制成绩:
9、wresultv Vendl;break;default:coutw”输入错误!vvendl;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”请输入个人月收入:nendl;cinincome;if(income20000)k=income/20000;switch(k)default:tax+=(income-100000
11、)*0.45;income=100000;case 4:tax+=(income-80000)*0.40;income=80000;case 3:tax+=(income-60000)*0.35;income=60000;case 2:tax4-=(income-40000)*0.30;income=40000;case 1:tax+=(income-20000)*0.25;income=20000;I?if(income5000)tax+=(income-5000)*0.20;income=5000;)if(income2000)tax+=(income-2000)*0.15;income=
12、2000;if(income500)tax+=(income-500)*0.10;income=500;tax+=income*0.05;coutw”应征所得税:Mtaxend 1;return 0;)2.5编程打印如下图形:*解:难点在三角形左边的空格的控制,嵌套一个循环语句完成此任务。#include using namespace std;int main()int i,j;for(i=1 ;i0;j-)coutw 三角形每行前部的空格for(j=1 ;j=2*i-1 ;j+)coutn*;coutendl;)for(i=l;i=3;i+)coutn*n”;return 0;2.6编程输
13、出下列图形,中间一行英文字母由输入得到。ABBBCCCCCD D DDD DDCCCCCBBBA解:分上三角和下三角两部分分别处理左边的空格。#include using namespace std;int main()char in;int i,j;docout w”输入一个字母:”;cinin;if(in=97)&(in=122)in-=32;小写改大写while(in90);int line=in-,A,;for(i=O;iv=line;i+)上 三角for(j=line-i;j0;j)coutw”;前方空格8r(j=l;j0;i)/下三角(少一行)fbr(j=O;j=line-i;j-
14、w-)coutn n;for(j=l;j=2*i-l;j+)cout*vvchar(i-l+A);coutendl;return 0;2.7输 入n,求l!+2!+3!+.+n!解:通常求和作为外循环,阶乘作为内循环。这里考虑到:n!=n*(n-l)!,利用递推法运算速度大大提高,同时两者可合并为一个循环。本程序考虑了输入的健壮性。#include#include using namespace std;int main()int n,ijch=l;double result=0;/result 是结果coutw”请输入正整数n:nendl;cinn;if(nl)coutw”输入错误!nend
15、l;return 1;)result=l;fbr(i=2;i=n;i+)jch*=i;/4ch是i的阶乘,注 意n!=n*(n-l)!这样可少一层循环result+ch;jicoutresultendl;return 0;)2.8猴子吃桃问题:猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第十天吃以前发现只剩下一个桃子,问猴子共摘了几个桃子。解:采用递推法。从最后一天逆推到第一天,9次循环。#include using namespace std;const int day=10;int main()int i,x=l;最后一天只有一个for(i=l;i
16、day;i+)x=(x+l)*2;从一天前推到九天前coutw”开始共有桃子“v v x ”个。nn;return 0;)2.9从键盘输入一组非0整数,以输入0标志结束,求这组整数的平均值,并统计其中正数和负数的个数。解:将这组整数放在整型数组中,一边输入一边求和及统计正数和负数的个数,平均数由和除以整数数量取得。#include#include using namespace std;int main()int stem256,sum=0,pnum=0,nnum=0,i=0;coutw”从键盘输入一组非0整数,以输入0标志结束:vendl;cinstemi;while(stemi!=0)su
17、m+=stemi;求和if(stemi0)pnum+;正数数量else nnum;负数数量i+;cinstemi;)if(!i)cout”0个数”wendl;else(coutvv”平均值=vv(double)sum/(pnum+nnum)vvendl;平均值习惯不用整数coutw”正数个数=Upnumendl;coutn 负数个数=Unnumendl;)return 0;)2.10 编程找出1 500之中满足除以3余2,除以5余3,除以7余2的整数。解:中国古代数学问题(韩信点兵),采用穷举法。注意三个条件同时成立用#include using namespace std;int main(
18、)int i;for(i=l;i=500;i-H-)if(i%3=2)&(i%5=3)&(i%7=2)coutiendl;return 0;)2.11 编程求1000之内的所有完全数。所谓完全数指的是一个数恰好等于它的所有因子和。例如6=1+2+3,就是一个完全数。解:采用穷举法。两重循环,外层是从1到999依次处理,内层是求该数的所有因子的和,并判断是否等于该数。#include using namespace std;int main()int i,a,sum_yz;/sum_yz 是 a 的因子和for(a=l;al 000;a+)sum_yz=0;fbr(i=l;ia;i-H-)if(
19、a%i=0)sum_yz+=i;/求因子运算未改变循环控制变量a 的值,否则要用另一个变量b 来代替 a 来参加运算if(a=sum_yz)coutaendl;)return 0;)2.12将100元换成用10元、5元和1元的组合,共有多少种组合方法。解:采用穷举法。考虑10元最多10张,5元最多20张,余下是1元。#include using namespace std;int main()int i,j,k,count=0;for(i=0;iv=10;i+)/i是10元张数,j 是5元张数,k 是1元张数for(j=0;j=0)co u t i,t,j,t,kendl;count+;fco
20、utcountendl;return 0;)2.13利用反正切展开计算兀的近似值,要求误差I O r 公式如下:令 x=l,可计算出兀/4的近似值。解:采用递推法。初看每一项的递推通式不易写出,但每一项全看作奇数项,而偶数项全为零,则很容易写出:第1项为x,第3项为第1项乘以x 的平方除以项序号3乘以1,其余类推。同时和的误差小于最后一项的绝对值。#include#includeusing namespace std;const double e=le-5;int main()double x,a,sum;int i=3;coutw”请输入正切值:vvendl;cinx;a=x;sum=x;d
21、oa*=x*x*(-l);sum+=a/i;i+=2;while(fabs(a/i)e);cout,arctg(!x,)=,sumendl;return 0;2.14用迭代法求方程x2+10cosx=0的根,误差限为l o t 迭代公式如下:解:迭代法也是用循环语句实现,数学上迭代法可能收敛,也可能发散,解答中加了最大迭代次数的限制。#include#includeusing namespace std;const double e=le-5;int main()double xO,xl;int n=0;coutvv”输入初始近似值:Hendl;cinx 1;do(xO=xl;x 1 =(xO
22、*xO-l 0*(x0*sin(x0)+cos(x0)/(2*x0-10*sin(x0);x0是上次算出的结果,xl用作保存新算出的结果n+;while(fabs(xl-xO)e)&(nle5)coutvv”超出迭代1 e5次n;else coutvv”方程 x*x+10*cos(x尸0的一个根为:vvxlendl;coutw”方程误差为:“vvxl*xl+10*cos(xl)wendl;return 0;2.15两队选手每队5人进行一对一的比赛,甲队为A、B、C、D、E,乙队为J、K、L、M、N,经过抽签决定比赛配对名单。规定A 不和J 比赛,M 不和D 及E 比赛。列出所有可能的比赛名单。
23、解:这是一个组合问题,使用穷举法。共有5个位置,设甲队5名队员位置不变,乙队改变队员位置,进行配对。注意第1个位置可在5个队员中任选一个,以后的位置必须扣除已选过的队员。并扣除不能配对的情况,即得所有可能的比赛名单。#includeusing namespace std;int main()char stl5=,A7B,;C,;D7E,st25=,J7K,;L7M,;N,;int i=0j,k,l,m,n;fbr(j=0;jv5;j+)0 号位if(j=O)continue;/A选手不与选手J 比赛,即stlO不与st2比赛for(k=0;k5;k+)/l 号位if(k=j)continue;
24、易!除乙队占据0号位的选手for(l=0;lv5;l+)/2 号位if(l=j|l=k)continue;剔除乙队占据0、1号位的选手for(m=0;m5;m-H-)3 号位if(m=j|m=k|m=l)continue;易 lj 除乙队占据0、1、2号位的选手if(m=3)continue;/stl3不与 st23比赛,即D 不与M 比赛for(n=0;n 5;n+)4 号位if(n=j 1 1 n=k|n=l 1 1 n=m)continue;剔除乙队占据0、1、2、3号位的选手if(n=3)continue;stl4不与st23比赛,即E 不与M 比赛coutstl 0 -,st2j,t
25、,s t 1 1 ,-,wang li z h a o,代号分别为1、2、3、4 o选举人直接键入候选人代号,1 4之外的整数视为弃权票,-1为终止标志。打印各位候选人的得票以及当选者(得票数超过选票总数一半)名单。解:用5个元素的整型数组,分别放弃权票和各候选人的得票,然后用开关语句打印。#include#includeusing namespace std;int main()enum candidate feipiao,zhang,wang,li,zhao cand;int vote5=0,i,k=0,n;cinn;while(n!=-l)k+;if(n=l&n=4)voten+;els
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 课后 习题 答案
限制150内