ImageVerifierCode 换一换
格式:DOCX , 页数:156 ,大小:75.46KB ,
资源ID:25451455      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25451455.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++实用教程郑阿奇课后习题答案.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C++实用教程郑阿奇课后习题答案.docx

1、C+实用教程郑阿奇课后习题答案第一章_C+概述1. C+语言的标准有哪些?它有哪些编程方法?结构化程序设计的结构有哪些?答案:标准:C+国际标准ISO/IEC 14882:1998,常被称为C+98、标准C+或ANSI/ISO C+;C+标准第二版(ISO/IEC 14882:2003)。 3种编程方法:以C语言为子集的结构化程序设计模式、以类为核心的面向对象程序设计模式以及以模版为机制的通用编程模式。 结构化程序设计的结构:顺序结构、选择结构和循环结构。2. 面向对象的程序设计有3个主要特征,他们分别是什么?试举例说明。答案:3个主要特征:封装、继承和多态。 封装:封装是将数据和代码捆绑到一

2、起,避免了外界的干扰和不确定性。例如C+中的类,它定义了该集合中每个对象所共有的属性和方法。 继承:继承是让某个类型的对象获得另一个类型的对象的特征。例如:C+中子类对父类的继承,子类具有父类的特性,同时还可以拥有自己的新特性。 多态:多态是指不同类型的对象接收相同的消息时产生不同的行为。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减小代码的复杂度。例如函数的重载。3. C+是以编译方式实现的高级语言,它的编译过程可分为3个子过程,它们分别是什么?答案:创建、编译和连接。4. 参照本章示例,编写1个C+程序:输入圆的半径,输出其周长。答案:#include using

3、namespace std;int main() double r, area; coutr; area=2*3.14159*r; cout圆的周长为:arean; return 0;第二章 数据类型和基本输入/输出1. 下列常量表示在C+中是否合法?若不合法,指出原因;若合法,指出常量的数据类型。答案:32767:合法,int 35u:合法,无符号整形 1.25e3.4:不合法,e后面的数字必须是整数 3L:合法,长整形 0.0086e-32:合法,实数 87:不合法,八进制数中不应该出现8 “Computer System”:合法,字符串 “a”:合法,字符串 a:合法,字符 9645:不

4、合法,96 45分别为字符类型 .5:合法,double2. 字符常量与字符串常量有什么区别?指出下列哪些表示字符?哪些表示字符串?哪些既不表示字符也不表示字符串?0x66 China “中国” “8.42” 0x33 56.34 “nt0x34” r 8.34 “0x33” 0答案:字符: , 0, r 字符串:“中国”, “8.42”, “nt0x34”, “0x33” 非字符亦非字符串:0x66, China,0x33,56.34, 8.343. 定义两个变量a和b,初值分别为8和10,若要a和b的值互换,即a为10,b为8,如何实现(可用另外一个变量t作为过渡)?如不用中间变量又如何实

5、现?答案:用变量temp作为过渡#include using namespace std;int main() int a=8,b=10; int temp; temp=a; a=b; b=temp; couta: a, b: bendl; return 0;不用中间变量方法一:#include using namespace std;int main() int a=8,b=10; a=ab; b=ba; a=ab; couta: a, b: bendl; return 0;不用中间变量方法二:#include using namespace std;int main() int a=8,b

6、=10; couta: a, b: bendl; a=a+b; b=a-b; a=a-b; couta: a, b: bendl; return 0;4. 用enum定义4个枚举常量Flase、FALSE、TRUE、True,使其值分别等于bool类型中的false、false、true、true。想一想这样做的好处是什么?若使用const来定义,则如何进行?并比较这两种定义的优缺点。答案:enum False=false,FALSE=false,TRUE=true,True=true; 好处:因为VC+中对大小写是敏感的,为了防止用户输入中大小写出错的情况,所以分别又定义了表示true和fa

7、lse的两种形式。const bool False=false; const bool FALSE=false;const bool TRUE=true;const bool True=true;优缺点:用enum一次可以定义多个整型标识符变量,而const定义的标识符常量由其数据类型决定; 另外,用const定义看不出其关联性。5. 用const常量代替圆周率3.1415926,分别输入半径40和928.335,求圆面积。要求先输出圆周率和半径,再输出其面积。答案:#include using namespace std;const double PI=3.1415926;int main(

8、) double radius1=40,radius2=928.335; double area1,area2; area1=PI*radius1*radius1; area2=PI*radius2*radius2; cout圆周率: PI, 半径: radius1, 面积: area1endl; cout圆周率: PI, 半径: radius2, 面积: area2endl; return 0;6. 设学生人数是一个常数50,编程输出下列结果(双引号也要输出):“How many students in your class?”“50”答案:#include using namespace

9、std;const int STDNO=50;int main() coutHow many students in your class?; coutendl; cout STDNO c1c2c3;若在执行过程中,输入:a b c则cin执行后,c1、c2、c3的值分别是什么?若输入:abcdef则cin执行后,c1、c2、c3的值又分别是什么?答案:输入a b c后,c1的值为 , c2的值为a , c3的值为 输入abcdef后,c1的值为 a , c2的值为b , c3的值为 c8. 设有语句:int a, b, c;cinhexaoctbdecc;couthexatoctbtdecc

10、;若在执行过程中,输入:12 12 12指出cin执行后,a、b、c的值分别是什么?输出的结果是什么?答案:输出结果是:12 12 12 a、b、c的值分别是18,10和12第三章 运算符和表达式1. 将下列代数式写成C+的表达式:(1)=sqrt(pow(sin(x),2.5)(2)=(a+b)*h)/(2*m)(3)=exp(x*x)/sqrt(2*3.1415926)2. 求出下列算数表达式的值:(1) 5+7/3*4=13(2) 23.5+9/5+0.5=25.0(3) 8+2*9/2=17(4) a +23=97+23=120(5) 设x=2.5,y=4.7,a=7x+a%3*(in

11、t)(x+y)%2/4 =2.5+1*int(7.2)%2/4=2.5+7%2/4=2.5+1/4=2.5(6) 设x=3.5,y=2.5,a=2,b=3(float)(a+b)/2-(int)x%(int)y=2.5-1=1.5(7) 设x=8a+x%3+5/2-24=97+2+2-20=813. 在下列表达式中,哪些是合法的赋值表达式?哪些不是?为什么?(a,b,c,x,y都是已定义的int 型变量)(1) a=b=4.5+7.8 是(2) c=3.5+4.5=x=y=7.9 不是,因为4.5是常量不能作为左值(3) x=(y=4.5)*45 是(4) a=x+=+y 不是,x+不能作为左

12、值4. 写出下面表达式运算后a的值,设原来的a都是10.(1) a+=a a=a+a=20(2) a%=(7%2) a=a%(7%2)=10%1=0(3) a*=3+4 a=a*(3+4)=70(4) a/=a+a a=a/(a+a)=10/20=0(5) a-=a a=a-a=0(6) a+=a-=a*=a a+=a-=100 =a+=0 =a=05. 设m,n的值分别为10,8,指出下列表达式运算后a,b,c,和d的值。(1) a=m+ + n+=10+8=18(2)b=m+ + +n=10+9=19(3)c=+m + +n=11+9=20(4)d=m- + n+=10+8=186. 设a

13、,b,c的值分别为5,8,9;指出下列表达式运算后x ,y和z 的值(1) y=(a+b,c+a)=(13,14)=14(2) x=y=a,z=a+b x=5 y=5 z=13(3) y=(x=a*b , x+x , x*x)=(x=40,80,1600)=1600 x=40(4) x=(y=a ,z=a+b)=(y=5,z=13)=13 y=5 z=137. 设有变量:float x, y;int a ,b;指出运算下列表达式后x , y, a和b的值。(1)x=a=3.523x=3 y为null a=3 b为null (2)a= x =3.523x=3.523 y为null a=3 b为n

14、ull(3)x=a=y=3.523x=3.0 y=3.532 a=3 b为null(4) b=x=(a=25,15/2)x=7.5 y为null a=25 b=78. 若有char x=15;使得x的第0位(即二进制位的最右边的那一位,或称最低位)为0,其余位保持不变的赋值表达式是什么?x=x & 1 (其中1是由即pow(2,0)算出来的)9. 用sizeof 运算符编写一段测试程序,测试本机中各基本数据类型或字符串所占的字节数,并将其填写到下表中,然后分析其结果。基本数据类型所占字节数基本数据类型或字符串所占字节数char1float4short2double8int4long doubl

15、e8long4“nChtv0ina”10#includeusing namespace std;int main()cout char类型所占字节数为 sizeof(char)n;cout short类型所占字节数为 sizeof(short)n;cout int类型所占字节数为 sizeof(int)n;cout long类型所占字节数为 sizeof(long)n;cout float类型所占字节数为 sizeof(float)n;cout double类型所占字节数为 sizeof(double)n;cout long double类型所占字节数为 sizeof(long double)

16、n;cout字符nChtv0ina所占字节数为 sizeof(nChtv0ina)n;return 0;10. 从键盘输入一个三位数,从左到右用a,b,c表示各位的数字,记为abc.现要求依次输出从右到左的各位数字,即输出另外三位数cba。试设计程序。#includeusing namespace std;int main() int n ,a , b , c , m; /n为输入的三位数,m为需要输出的三位数coutn;if(n=000)c=n%10;b=(n/10)%10;a=(n/10)/10)%10; m=c*100+b*10+a;cout数字n的逆序为mendl;else cout输

17、入不正确c&b=c 75&4=5 True & False F(2) a|b+c&bc 3|9&45 3|9&F 3|F T|F T(3) !a|!c|b F|F|4 T(4) a*b&c+a 15&8 T 2. 设a,b,c的值分别是15,18,19,指出下列表达式运算后x,y,a,b,c的值(1) x=ab&c+表达式运算:y=F&c+=F 此时 y=F ,a=15,b=18,c=19(3) x=a+bc&c+表达式运算:x=3319&c+=T 此时 x=T.a=15,b=18,c=20(4) y=a|b+|c+ 表达式运算:y=T|b+|c+=T 此时 y=T,a=15,b=18,c=1

18、93. 输入三个整数a,b,c要求按照从小到大的顺序输出方法一:#include using namespace std;int main() int a,b,c,temp; cout请输入三个整数:abc; if(ab) /*如果ab,交换a与b的值*/ temp=a; a=b; b=temp; if(ac) /*如果ac,交换a与c的值*/ temp=a; a=c; c=temp; if(bc) /*如果bc,交换b与c的值*/temp=b; b=c; c=temp; cout这三个数从小到大的排列为endl; couta=aendl; coutb=bendl; coutc=cendl;

19、return 0;方法二:#include using namespace std;int main() int a,b,c,temp; cout请输入三个整数:abc; if(ab) /*如果ab,交换a与b的值*/ temp=a; a=b; b=temp; if(bc) /*如果ac,交换a与c的值*/ temp=b; b=c; c=temp; if(ab) /*如果bc,交换b与c的值*/ temp=a; a=b; b=temp; cout这三个数从小到大的排列为endl; couta=aendl b=bendl c=cendl; return 0;4. 有一个数学函数 写一个程序,输入

20、x,输出y.#include using namespace std;int main() int x,y; coutx; if(x=10) y=x-1; else if(x1) y=2*x+2; else y=3*x*x+3*x-1; couty的值为yendl; return 0;5. 给出一个百分制的成绩,要求输出成绩为A,B,C,D.其中,85分以上为A,7584分为B,6574分为C,65分以下为D。#include using namespace std;int main() float fScore; coutfScore; if( fScore100|fScore0) cout

21、输入的分数无效=85) coutA=75) coutB=65) coutCendl; else coutDendl; return 0;6. 选(D)7. 求下列循环次数(1) for(int i=0,x=0;!x&i=5;i+) 循环了6次(2) while(int i=0)i-; 循环了0次(3) int i=5;do couti-endl; i-; While(i!=0); 循环了无数次8. 编程求100以内被7或5 整除的最大自然数#include using namespace std;int main() int max; for(int i=1;i=100;i+) if(i%5=

22、0|i%7=0) max=i; cout这个最大的自然数是maxendl; return 0;9. 分析下列程序的输出结果(1) x=5,y=4,z=1(2) k=4(3) # 10. Fibonacci数列中的前两个数是1和1,从第三个数开始,每个数等于前两个数之和。编程计算并输出次数列中的前30个数 。 #include#includeusing namespace std;int main()int sum=0 ,a=1,b=1;for(int i=1;i=6;i+) for(int j=1;j=5;j+) if(i=1&j=2) coutsetw(7)1,; else sum=a+b;

23、 coutsetw(7)sum,; a=b; b=sum; coutendl; return 0; 11. 编程求n!,即#include#includeusing namespace std;int main() int n,m=1; coutn; for(int i=0;i=1;n-) m*=n; */ m*=(n-i); cout n的阶乘为mendl; return 0;12. 从键盘上输入一个整数n的值,按下式求出y 的值,并输出n和y 的值(y用浮点数表示) y=1!+2!+3!+n!方法一: #include#includeusing namespace std;int main

24、()int n,y=0,m=1;coutn;for(int j=0;jn;j+) for(int i=0;in-j-1;i+) m*=(n-i-j); y+=m; m=1; cout y的值为yendl;return 0; 方法二:#includeusing namespace std;int main() int n,m=1; double y=0.0; coutn; for(int i=1;i=n;i+) m*=i; y+=m; cout y的值为yendl; return 0;13. 用泰勒级数求e的近似值,直到最后一项小于 为止。 方法一:#include#includeusing namespace std;int main() double e=0.0,m=1; int n=1; do m=m*(m+1); n+; while(m10*10*10*10*10*10); for(int j=0;jn;j+) m=1.0; for(int i=0;in-j-1;i+) m*=(n-i-j); e+=(1.0/m); cout e的值为e+1endl; return 0;方法二:#includeusing

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1