正文

钱能的《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";
}














阅读(3708) | 评论(0)


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

评论

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