声明:为了大家的共同学习,特推出一些经典书籍的课后练习的答案,答案内容属原创,转载请注明出处,欢迎大家批评指正。
这一序列说明:
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";
}
正文
钱能的《C++程序设计教程》序列三:chapter32005-07-21 12:40:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/xiangyu/3051.html
阅读(3708) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论