c程序设计第二版完整答案.docx
- 文档编号:13594770
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:84
- 大小:156.52KB
c程序设计第二版完整答案.docx
《c程序设计第二版完整答案.docx》由会员分享,可在线阅读,更多相关《c程序设计第二版完整答案.docx(84页珍藏版)》请在冰点文库上搜索。
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、y、a的值不变,仍分别为2.5、8.2、3。
提示:
运算时取出y变量的数值强制转化为整型数放入寄存器参加运算,但内存中y本身的数值不变化。
只有赋值运算和自增、自减运算才改变变量本身的值
x=z*b++,b=b*x,b++表达式值为:
42,运算后x为7.0,b为43。
提示:
逗号表达式,依次运算,表达式的值是最后一次运算的值。
后++是变量先参加运算然后变量自身加1,所以第1步x等于1.4*5,即7.0,然后b增为6;第2步b赋值为42;第3步,表达式的值是上一步后b的值42,但随后b的值自增1,成为43。
ch4=ch3-ch2+ch1表达式值为:
’\\’,字符外斜杠。
运算后ch1、ch2、ch3值不变。
提示:
字符型的变量实质是范围很小的整型量。
int(y/z)+(int)y/(int)z表达式值为:
13。
y和z自身的值不变。
提示:
int(y/z)是完成实数除法后,商强制转化为整型,(int)y/(int)z则是数值先转换,完成的是整除。
!
(a>b)&&c&&(x*=y)&&b++表达式值为:
0。
运算后x仍为2.5,b仍为5
提示:
只要出现一个false右边的不再做,因为c为0,即false,所以其右的所有运算不再做。
ch3||(b+=a*c)||c++表达式值为:
1。
运算后b为5,c为0,均不变。
提示:
只要出现一个true,右边不再做。
ch3的值为48。
z=(a<<2)/(b>>1)表达式值为:
6。
运算后a与b的值不变仍为3和5。
提示:
a的数值为(00000011)2,左移2位为(00001100)2即12,相当整数2两次,而b的数值为(00000101)2,右移1位为(00000010)2,即2,相当于整除2。
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 解答: 本题检查学生整除的概念。 跟踪: 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 解答: 第一个循环使x成为: ;y成为: ;第二个循环使y成为: ; (1)B 考虑整除,当x连除4次2以后即为0,所以: 为0 (2)1 2.1.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 解: #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解: 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 #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 解: 分上三角和下三角两部分分别处理左边的空格。 #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 #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 #include usingnamespacestd; constintday=10; intmain(){ inti,x=1;//最后一天只有一个 for(i=1;i cout<<"开始共有桃子"< \n"; return0; } 2.9 #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解: 中国古代数学问题(韩信点兵),采用穷举法。 注意三个条件同时成立用&&。 #include usingnamespacestd; intmain(){ inti; for(i=1;i<=500;i++) if((i%3==2)&&(i%5==3)&&(i%7==2))cout< return0; } 2.11解: 采用穷举法。 两重循环,外层是从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文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 第二 完整 答案