正文

钱能的《C++程序设计教程》序列三:chapter32005-07-21 12:40:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/xiangyu/3051.html

分享到:

声明:为了大家的共同学习,特推出一些经典书籍的课后练习的答案,答案内容属原创,转载请注明出处,欢迎大家批评指正。 这一序列说明: 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"; }

阅读(3966) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册