声明:为了大家的共同学习,特推出一些经典书籍的课后练习的答案,答案内容属原创,转载请注明出处,欢迎大家批评指正。 这一序列说明: 1.采用国内的教材:《C++程序设计教程》钱能主编 清华大学出版社 1999 2.在每一章练习解答前会有一个“疑难知识点”概述,这里只代表我自己的观点,也就是我自己现在还不能达到非常熟练,或者我初学时感觉比较模糊的知识。 3. 有一些答案来自网络,里面答案的选题编辑:张朝阳,责任编辑:徐培忠、林庆嘉。在这里表示感谢。 4.更多的学习和改进将在《The C++ programming language》答案序列中体现。 序列三:chapter3 一、疑难知识点: 1.理解左值和右值,特别是掌握哪些可以当左值。 2.求余%只能对整型进行操作,当然char和bool型也可以。 3.溢出 随着计算机的发展,特别是64位CPU和操作系统的推出,出现溢出的可能性越来越小。本书有一些这类的题目,主要是本书是基于16位机器,其实对于32位机器,基本上不会出现溢出现象了。 有关整型溢出:一个整型变量,用任何一个超过表示范围的整数初始化,得到的值为用该整数范围作模运算后得到的值。 4.真正弄懂前增量和后增量、前减量和后减量的区别,这个其实是很简单的(略),还有两个注意点: (1)、增量和减量其实是包含赋值操作的,故只能对左值才能施于++或-- (1)、后增量如i++是不能作为左值的,而前增量是可以的故++(i++)是错的,而++(++i)是正确的。对于减量也一样。 例子: #include<iostream> using namespace std; void main() { int i=1; //++(i++);//wrong ++(++i); (i=3)++;//赋值表达式是一个左值,故可以执行++ } 5.有关求值次序和副作用 因为本书是参考就标准,对于现在最新的标准,不知这些副作用是否消除,这个问题将在《The C++ programming language》答案序列中给于答复。 二、课后练习答案:(不抄题目,没有课本的人可以到网上去下一本) 3.1使用时注意在程序前面加上math库,#include<math.h> (1)sqrt(pow(sin(x),2.5)); (2)(a*x+(a+x)/(4*a))/2; (3)pow(c,x*x)/sqrt(2*PI);//PI圆周率,需要预先定义:const double PI=3.1415; 3.2 (1)13.7 注意点:整数和整数相除采用截断方式 (2)2.5 (3)9 注意逗号表达式的运算顺序 3.3 (1)a1=1 a2=1 (2)1,1 (3) 注意点:这题其实其格式是 if---- else if----- else---- 对于这种格式,上面的三个块有且只有一个产生作用,在这题是if语句(也就是第一个,所以后面两个都不看了 答案:2,0,0 (4) 注意点:这题更有意思了(当然在有意思的同时也是代码可读性差的表现^_^) 初略一看,好像是上题一样的格式,也就是 if---- else if----- else---- 但你仔细看清楚就会发现其实这里面多了一个if语句,而else语句是同与它最接近的if语句配套的,因此,这题总的格式是: if---- else if----- 这种格式的两个预计最多只能有一个执行,也可能都不执行(不如这题) 其中在else if-----里面又嵌套一个if-----else,因为else if不执行,因此里面的if——else也不执行,故若你把x的值输出来,那么必定是一个乱七八糟的值(因为x没有初始化) 答案是:20 3.4 #include<iostream> using namespace std; void main() { double x,y; cout<<"请输入自变量x的值:"; cin>>x; if(x>2&&x<40)y=x*(x+2); else if(x>-1&&x<=2)y=2*x; else y=x-1; cout<<"所求的函数值是:"<<y<<endl; } 3.5 这一题网络版做得还不错,答案如下,其中(c1<<2)+(c2<<1)+c3应该好好体会一下,这三个值,若是可以整除,则对应的值是1,故移位2位后变成4,移位1位后变成2 #include <iostream.h> void main() { int a; cout <<"please input a number:\n"; cin >>a; int c1 = a%3 ==0; int c2 = a%5 ==0; int c3 = a%7 ==0; switch((c1<<2)+(c2<<1)+c3){ case 0: cout <<"不能被3,5,7整除.\n"; break; case 1: cout <<"只能被7整除.\n"; break; case 2: cout <<"只能被5整除.\n"; break; case 3: cout <<"可以被5,7整除.\n"; break; case 4: cout <<"只能被3整除.\n"; break; case 5: cout <<"可以被3,7整除.\n"; break; case 6: cout <<"可以被3,5整除.\n"; break; case 7: cout <<"可以被3,5,7整除.\n"; break; } } 3.6摘自网络版(比较累,题目又简单,自己不想写) #include <iostream.h> void main() { int grade; cout <<"please input a number:\n"; cin >>grade; if(grade>100||grade<0) cout <<"错误的成绩.\n"; else if(grade>=90) cout <<"A.\n"; else if(grade>=80) cout <<"B.\n"; else if(grade>=70) cout <<"C.\n"; else if(grade>=60) cout <<"D.\n"; else cout <<"E.\n"; }

评论