C++程序设计第二版吴乃陵况迎辉课后答案.docx
- 文档编号:11371208
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:186
- 大小:183.63KB
C++程序设计第二版吴乃陵况迎辉课后答案.docx
《C++程序设计第二版吴乃陵况迎辉课后答案.docx》由会员分享,可在线阅读,更多相关《C++程序设计第二版吴乃陵况迎辉课后答案.docx(186页珍藏版)》请在冰豆网上搜索。
C++程序设计第二版吴乃陵况迎辉课后答案
第一章C++基础知识习题 1
第一章 C++基础知识习题
1、1判断下列标识符得合法性。
sinbook5arry _nameExample2、1main
$1class_cppa3x*ymyname
答:
合法得:
sinbook_namemainclass_cppa3
非法得:
5arryExample2、1$1x*ymyname
1、2 假定有下列变量:
inta=3,b=5,c=0;
float x=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"constint n=10;intm=5;'a' charch='a'
intarray[5]={1,2,3,4,5};chars[]="Hello";
答:
"China"文字常量
constintn=10;常变量
intm=5;变量
'a'文字常量1
第一章C++基础知识习题
2
charch='a'变量
intarray[5]={1,2,3,4,5};变量
chars[]="Hello";变量
1、4将下列算式或叙述用C++表达式描述。
(1)22)(arcsin2cx
(2)(x+y)/((x-y)*ay)
(3) 位于原点为圆心,a,b为半径得圆环中得点坐标。
(4)。
cba
(5)并且字符ch不为'\0'。
20k
答:
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;
char ch1,ch2,ch3;
cin>>a>>b>>x>>y>>ch1;
ch2=cin、get();
cin>>ch3;
若从键盘输入:
32 1、87 ab c
执行后各变量取值如何?
注意abc三字符两两间有空格。
答:
a就是3,b就是2,x就是1、8,y就是7,ch1就是’a’,ch2就是空格,ch3就是’b’。
1、7设有语句:
int a,b,c,d;
cin>>oct>>a>>b>>hex>>c>>dec>>d;
若从键盘输入:
23 232323
执行后各变量得值用十进制表示各就是多少?
答:
a:
19,b:
19,c:
35,d:
23
1、8对于习题1、7,若执行:
cout< 显示结果就是什么? 答: 190x13043 2 第二章基本控制结构程序设计习题 一.基本概念与基础知识自测题 3、1程序阅读题 3.1.1设有说明: inta=3,b=100; 下面得循环语句执行 (1) 次,执行后a、b得值分别为 (2) 、(3)。 while(b/a>5){if(b-a>25)a++;elseb/=a; } 解答: 本题检查学生整除得概念。 跟踪: a 3 b 100 b/a 33 循环次数 1 b-a 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 3.1.2设有说明: intn,x,k,y; n 下面程序段得功能就是备选答案中得 (1) ,当n=10,x=10 打印结果就是(2)。 cin>>x>>n; k=0;do{x/=2;k++; }while(k<n); y=1+x;k=0;do{y=y*y;k++; }while(k<n); cout< 备选答案: A、 y = (1+x )n n B、y=(1+ x)2 2n C、y=(1+ x)n 2n D、y=(1+ ﻮx)2 2n +1 第二章 基本控制结构程序设计习题ﻩ2 解答: 第一个循环使 x成为: x 2n (1)B ;y成为: 1 +x 2n ;第一个循环使 y成为: (1+ x) 2; 2n 考虑整除, x 2 n (2)1 连除 4 次以后为零,所以: 3.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 3.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=1 k=0 第1次循环后 m=5 k=1 第2次循环 m=2 k=2 第3 次循环 m=7 k=3 第4次循环 m=4 k=4 第5 次循环 m=9 k=5 第 6次循环 m=6 k=6 第 7次循环 m=11 结束,k++未做 (1)11 (2)6 二.编程与综合练习题 3、2编程求一元二次方程ax2+bx+c=0得根。 包括以下判断与结果: 若输入a=0,给出提示; 第二章基本控制结构程序设计习题3 若Δ>0,输出两个不等实根;若Δ=0,输出两个相等实根;若Δ<0,输出两个复数根。 解: 本题以一个绝对值极小得数作为实数 0。 #include <iostream、h> #include<math、h> #include<stdlib、h> voidmain(){ doublea,b,c; doubledelta,x1,x2; constdoublezero=1e-9;//定义一个很小得常数 intsign; cout<<"输入三个系数a(a! =0),b, c: "<<endl; cin>>a>>b>>c; if(fabs(a) }cout<<"a="< cout<<"方程有两个相同实根: "; cout<<"x1=x2="<<-b/(2*a)< } else { if(delta>0) sign=1; else sign=0;delta=sqrt(fabs(delta)); x1=-b/(2*a);x2=delta/(2*a); if(sign){ cout<<"方程有两个不同实根: ";cout<<"x1="<<x1+x2<<'\t'<<"x2="<<x1-x2< } else{//delta<0cout<<"方程无实根! 有两个不同复数根: ";cout<<"x1="<<x1<<"+i"< } } } 3、3设计程序将输入得百分制成绩转换为五分制输出,90 分以上为5分,80∼89分为4分, 70∼79分为 3 分,60∼69分为2分,60 分以下为1分。 解: 10分一档用10进行整除获得,转换用开关语句实行。 第二章基本控制结构程序设计习题ﻩ4 #include voidmain(){ intmark,result;ﻩ//mark就是百分制成绩,result就是5分制 cout<<"请输入百分制成绩: "< cin>>mark; if(mark<0){cout<<"缺考! "<<endl;return; } switch(mark/10){case9: case10: result=5; cout<<"输出五分制成绩: "<<result<<endl; break; case 8: result=4;cout<<"输出五分制成绩: "< case7: result=3; cout<<"输出五分制成绩: "<<result<<endl; break; case 6: result=2;cout<<"输出五分制成绩: "<<result<<endl;break; case 5: case4: case3: case2: case1: case0: result=1;cout<<"输出五分制成绩: "< default: cout<<"输入错误! "< } } 3、4编程打印如下图形: * *ﻩ** *ﻩ***ﻩ* **ﻩ**ﻩ*ﻩ*ﻩ* *ﻩ** **ﻩ* *ﻩ*ﻩ* 解: 难点在三角形左边得空格得控制,嵌套一个循环语句完成此任务。 第二章 基本控制结构程序设计习题ﻩ5 #include voidmain(){ 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"; } 3、5编程输出下列图形,中间一行英文字母由输入得到。 A BBﻩB CCﻩCCC DﻩDDﻩDDﻩDﻩD CCﻩCﻩCC BBBA 解: 分上三角与下三角两部分分别处理左边得空格。 #include voidmain(){ 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<<''< 第二章基本控制结构程序设计习题6 cout< } } 3、6 输入n,求1! +2! +3! +…+n! 解: 通常求与作为外循环,阶乘作为内循环。 这里考虑到: n! =n*(n-1)! 利用递推法运算速度大大提高,同时两者可合并为一个循环。 本程序考虑了输入得健壮性。 #include #include<stdlib、h> void main(){ int n; doubleresult=0;ﻩ//result就是结果 cin>>n; if(n<1) { cout<<"输入错误! "< //return; exit(0); } result=1; for(inti=2,jch=1;i<=n;i++) { jch*=i;ﻩ//jch就是i得阶乘,注意n! =n*(n-1)! 这样可少一层循环 result+=jch; } cout< } 3、7 猴子吃桃问题: 猴子摘下若干个桃子,第一天吃了桃子得一半多一个,以后每天吃了前 一天剩下得一半多一个,到第十天吃以前发现只剩下一个桃子,问猴子共摘了几个桃子。 解: 采用递推法。 从最后一天逆推到第一天,9次循环。 #include constint day=10; voidmain(){ inti,x=1;//最后一天只有一个 for(i=1;i x=(x+1)*2; cout<<"开始共有桃子"< \n"; } 3、8从键盘输入一组非0整数,以输入0标志结束,求这组整数得平均值,并统计其中得个数。 解: 将这组整数放在整型数组中,一边输入一边求与及统计正数与负数得个数,平均数由与除以整数数量取得。 第二章基本控制结构程序设计习题ﻩ7 #include<fstream、h> #include void main(){ intstem[256],sum=0,pnum=0,nnum=0,i=0; cout<<"从键盘输入一组非0整数,以输入0标志结束: "< 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)<<endl;//平均值习惯不用整数cout<<"正数个数="< cout<<"负数个数="< } } 3、9编程找出1∼500 之中满足除以3 余2,除以 5余3,除以7余2 得整数。 解: 中国古代数学问题(韩信点兵),采用穷举法。 注意三个条件同时成立用&&。 #include voidmain(){int i;for(i=1;i<=500;i++) if((i%3==2)&&(i%5==3)&&(i%7==2)) cout< } 3、10编程求1000之内得所有完全数。 所谓完全数指得就是一个数恰好等于它得所有因子与。 例如6=1+2+3,就就是一个完全数。 解: 采用穷举法。 两重循环,外层就是从1到999依次处理,内层就是求该数得所有因子得与,并判断就是否等于该数。 #include void main(){ inti,a,sum_yz;//sum_yz就是a得因子与 for(a=1;a<1000;a++){ sum_yz=0;for(i=1;i if(a%i==0)sum_yz+=i; if(a==sum_yz)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 第二 版吴乃陵况迎辉 课后 答案