C程序设计课后习题答案14章.docx
- 文档编号:24664711
- 上传时间:2023-05-30
- 格式:DOCX
- 页数:99
- 大小:47.90KB
C程序设计课后习题答案14章.docx
《C程序设计课后习题答案14章.docx》由会员分享,可在线阅读,更多相关《C程序设计课后习题答案14章.docx(99页珍藏版)》请在冰豆网上搜索。
C程序设计课后习题答案14章
C++程序设计课后习题答案
第一章C++基础知识习题
1.1判断下列标识符的合法性。
sinbook5arry_nameExample2.1main
$1class_cppa3x*ymyname
答:
合法的:
sinbook_namemainclass_cppa3
非法的:
5arryExample2.1$1x*ymyname
1.2假定有下列变量:
inta=3,b=5,c=0;
floatx=2.5,y=8.2,z=1.4;
charch1=’a’,ch2=’5’,ch3=’0’,ch4;
求下列表达式的值,以及运算后表达式所涉及的各变量的值。
x+(int)y%ax=z*b++,b=b*x,b++ch4=ch3-ch2+ch1
int(y/z)+(int)y/(int)z!
(a>b)&&c&&(x*=y)&&b++
ch3||(b+=a*c)||c++z=(a<<2)/(b>>1)
答:
x+(int)y%a值为:
4.5
x=z*b++,b=b*x,b++值为:
42,x为7,b为43
ch4=ch3-ch2+ch1值为:
’\\’
int(y/z)+(int)y/(int)z值为:
13
!
(a>b)&&c&&(x*=y)&&b++值为:
0,b为5注:
只要出现一个false右边的不再做。
ch3||(b+=a*c)||c++值为:
1,c为0注:
只要出现一个true,右边不再做。
z=(a<<2)/(b>>1)值为:
6
1.3判断下列哪些是常量,哪些是变量。
"China"constintn=10;intm=5;'a'charch='a'
intarray[5]={1,2,3,4,5};chars[]="Hello";
答:
"China"文字常量
constintn=10;常变量
intm=5;变量
'a'文字常量
charch='a'变量
intarray[5]={1,2,3,4,5};变量
chars[]="Hello";变量
1.4将下列算式或叙述用C++表达式描述。
(1)
(2)(x+y)/((x-y)*ay)
(3)位于原点为圆心,a,b为半径的圆环中的点坐标。
(4)。
(5)并且字符ch不为'\0'。
答:
pi/2+sqrt(asin(x)*asin(x)+c*c)
(x+y)/((x-y)*pow(a,y))
((x*x+y*y)>=a*a)&&((x*x+y*y)<=b*b)
(a!
=b)&&(a!
=c)&&(b!
=c)
(k<=20)&&(ch!
='\0')
1.6设有语句:
inta,b;
floatx,y;
charch1,ch2,ch3;
cin>>a>>b>>x>>y>>ch1;
ch2=cin.get();
cin>>ch3;
若从键盘输入:
321.87abc
执行后各变量取值如何?
注意abc三字符两两间有空格。
答:
a是3,b是2,x是1.8,y是7,ch1是’a’,ch2是空格,ch3是’b’。
1.7设有语句:
inta,b,c,d;
cin>>oct>>a>>b>>hex>>c>>dec>>d;
若从键盘输入:
23232323
执行后各变量的值用十进制表示各是多少?
答:
a:
19,b:
19,c:
35,d:
23
1.8对于习题1.7,若执行:
cout< 显示结果是什么? 答: 190x13043 当前位置: 学习资源下载>课后习题答案 第二章基本控制结构程序设计习题 一.基本概念与基础知识自测题 2.1程序阅读题 2.1.1设有说明: inta=3,b=100; 下面的循环语句执行 (1)次,执行后a、b的值分别为 (2)、(3)。 while(b/a>5){ if(b-a>25)a++; elseb/=a; } 解答: 本题检查学生整除的概念。 跟踪: a b b/a 循环次数 b-a 3 100 33 1 97 4 100 25 2 96 5 100 20 3 95 … … … … … 15 100 6 13 85 16 100 6 14 84 17 100 5 停 (1)14 (2)17 (3)100 2.1.2设有说明: intx,y,n,k; 下面程序段的功能是备选答案中的 (1),当n=10,x=10打印结果是 (2)。 cin>>x>>n; k=0; do{ x/=2; k++; }while(k y=1+x; k=0; do{ y=y*y; k++; }while(k cout< 备选答案: A.B.C.D. 解答: 第一个循环使x成为: ;y成为: ;第二个循环使y成为: ; (1)B 考虑整除,当x连除4次2以后即为0,所以: 为0 (2)1 2.1.3请看如下程序段: if(num==1)cout<<”Alpha”; elseif(num==2)cout<<”Bata”; elseif(num==3)cout<<”Gamma”; elsecout<<”Delta”; 当num的值分别为1、2、3时,上面程序段的输出分别为 (1)、 (2)、(3)。 解答: 检查条件语句与字符串输出概念: (1)Alpha (2)Bata (3)Gamma 2.1.4执行下面程序段后,m和k的值分别为 (1)、 (2)。 intm,k; for(k=1,m=0;k<=50;k++){ if(m>=10)break; if(m%2==0){ m+=5; continue; } m-=3; } 解答: 注意continue语句的使用 初值 m=0 k=1 第1次循环后 m=5 k=2 第2次循环后 m=2 k=3 第3次循环后 m=7 k=4 第4次循环后 m=4 k=5 第5次循环后 m=9 k=6 第6次循环后 m=6 k=7 第7次循环后 m=11 k=8 第8次循环 m=11结束 k=8,k++未做 (1)11 (2)8 二.编程与综合练习题 2.2有一个函数: 编写程序,输入x,输出y。 解: #include usingnamespacestd; intmain(){ doublex,y; cout<<"输入x="; cin>>x; if(x<1)y=x; elseif(x<10)y=2*x-1; elsey=3*x-11; cout<<"y="< return0; } 2.3设计程序将输入的百分制成绩转换为五分制输出,90分以上为5分,80~89分为4分,70~79分为3分,60~69分为2分,60分以下为1分。 解: 10分一档用10进行整除获得,转换用开关语句实行。 #include usingnamespacestd; intmain(){ intmark,result;//mark是百分制成绩,result是5分制 cout<<"请输入百分制成绩: "< cin>>mark; if(mark<0){ cout<<"缺考! "< return0; } switch(mark/10){ case9: case10: result=5; cout<<"输出五分制成绩: "< break; case8: result=4; cout<<"输出五分制成绩: "< break; case7: result=3; cout<<"输出五分制成绩: "< break; case6: result=2; cout<<"输出五分制成绩: "< break; case5: case4: case3: case2: case1: case0: result=1; cout<<"输出五分制成绩: "< break; default: cout<<"输入错误! "< } return0; } 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%。 解: 应该从最高税率段开始计算,分段叠加。 先算两万元以上各段,每两万为一档,采用switch语句,注意没有使用break语句。 后面各低收入段,用if语句,也没有使用else,这两种方法是对应的。 第二要注意计算的入口处,收入减去该段的下限,进行计算,以后各段都是完整的段,计算十分简单。 #include usingnamespacestd; intmain(){ doubleincome,tax=0; intk; cout<<"请输入个人月收入: "< cin>>income; if(income<=1200){ cout<<"免征个人所得税"< return0; } elseincome-=1200; if(income>20000){ k=income/20000; switch(k){ default: tax+=(income-100000)*0.45;income=100000; case4: tax+=(income-80000)*0.40;income=80000; case3: tax+=(income-60000)*0.35;income=60000; case2: tax+=(income-40000)*0.30;income=40000; case1: tax+=(income-20000)*0.25;income=20000; } } if(income>5000){ tax+=(income-5000)*0.20; income=5000; } if(income>2000){ tax+=(income-2000)*0.15; income=2000; } if(income>500){ tax+=(income-500)*0.10; income=500; } tax+=income*0.05; cout<<"应征所得税: "< return0; } 2.5编程打印如下图形: * *** ***** ******* *** *** *** 解: 难点在三角形左边的空格的控制,嵌套一个循环语句完成此任务。 #include usingnamespacestd; intmain(){ inti,j; for(i=1;i<=4;i++){ for(j=4-i;j>0;j--)cout<<"";//三角形每行前部的空格 for(j=1;j<=2*i-1;j++)cout<<"*"; cout< } for(i=1;i<=3;i++)cout<<"***\n"; return0; } 2.6编程输出下列图形,中间一行英文字母由输入得到。 A BBB CCCCC DDDDDDD CCCCC BBB A 解: 分上三角和下三角两部分分别处理左边的空格。 #include usingnamespacestd; intmain(){ charin; inti,j; do{ cout<<"输入一个字母: "; cin>>in; if((in>=97)&&(in<=122))in-=32;//小写改大写 }while((in<65)||(in>90)); intline=in-'A'; for(i=0;i<=line;i++){//上三角 for(j=line-i;j>0;j--)cout<<"";//前方空格 for(j=1;j<=2*i+1;j++)cout<<''< cout< } for(i=line;i>0;i--){//下三角(少一行) for(j=0;j<=line-i;j++)cout<<""; for(j=1;j<=2*i-1;j++)cout<<''< cout< } return0; } 2.7输入n,求1! +2! +3! +…+n! 解: 通常求和作为外循环,阶乘作为内循环。 这里考虑到: n! =n*(n-1)! ,利用递推法运算速度大大提高,同时两者可合并为一个循环。 本程序考虑了输入的健壮性。 #include #include usingnamespacestd; intmain(){ intn,i,jch=1; doubleresult=0;//result是结果 cout<<"请输入正整数n: "< cin>>n; if(n<1){ cout<<"输入错误! "< return1; } result=1; for(i=2;i<=n;i++){ jch*=i;//jch是i的阶乘,注意n! =n*(n-1)! 这样可少一层循环 result+=jch; } cout< return0; } 2.8猴子吃桃问题: 猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第十天吃以前发现只剩下一个桃子,问猴子共摘了几个桃子。 解: 采用递推法。 从最后一天逆推到第一天,9次循环。 #include usingnamespacestd; constintday=10; intmain(){ inti,x=1;//最后一天只有一个 for(i=1;i cout<<"开始共有桃子"< \n"; return0; } 2.9从键盘输入一组非0整数,以输入0标志结束,求这组整数的平均值,并统计其中正数和负数的个数。 解: 将这组整数放在整型数组中,一边输入一边求和及统计正数和负数的个数,平均数由和除以整数数量取得。 #include #include usingnamespacestd; intmain(){ intstem[256],sum=0,pnum=0,nnum=0,i=0; cout<<"从键盘输入一组非0整数,以输入0标志结束: "< cin>>stem[i]; while(stem[i]! =0){ sum+=stem[i];//求和 if(stem[i]>0)pnum++;//正数数量 elsennum++;//负数数量 i++; cin>>stem[i]; } if(! i)cout<<"0个数"< else{ cout<<"平均值="<<(double)sum/(pnum+nnum)< cout<<"正数个数="< cout<<"负数个数="< } return0; } 2.10编程找出1~500之中满足除以3余2,除以5余3,除以7余2的整数。 解: 中国古代数学问题(韩信点兵),采用穷举法。 注意三个条件同时成立用&&。 #include usingnamespacestd; intmain(){ inti; for(i=1;i<=500;i++) if((i%3==2)&&(i%5==3)&&(i%7==2))cout< return0; } 2.11编程求1000之内的所有完全数。 所谓完全数指的是一个数恰好等于它的所有因子和。 例如6=1+2+3,就是一个完全数。 解: 采用穷举法。 两重循环,外层是从1到999依次处理,内层是求该数的所有因子的和,并判断是否等于该数。 #include usingnamespacestd; intmain(){ inti,a,sum_yz;//sum_yz是a的因子和 for(a=1;a<1000;a++){ sum_yz=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 课后 习题 答案 14