《面向对象程序设计(C++版)》习题答案
董正言
    本文档中包含书中所有习题的答案,其中的程序都在VC++6.0系统中通过编译,并可以正确运行。
第一章
1.1  面向对象程序设计方法有哪些基本特征?
答:面向对象程序设计方法的基本特征有:抽象、封装、继承、多态。
1.2 从着手开始编写一个程序,到形成一个可执行文件,通常需要经过哪几个步骤?
答:一个由高级语言编写的程序从开始编码到可以运行需要经过编辑、编译和链接几步。
1.3 C++程序的入口点是什么?
答:C++程序的入口点是main函数。
第二章
2.1  C++程序中,以下_C_是合法的标识符。
    ACat.100  B321day  C_100num  Dint
2.2  在基于32位系统的VC++6.0编译器中,以下数据类型各占多少个字节?
    Achar  Bint  Cfloat  Dlong  Edouble
答:在基于32位系统的VC++6.0编译器中,char型数据为1个字节,int型数据为4个字节,float型数据为4个字节,long型数据为4个字节,double型数据为8个字节。
2.3 C++系统采用什么编码存储字符数据,该编码的长度是多少?
答:C++系统采用ASCII码存储字符数据,该编码的长度是1个字节。
2.4  写出定义以下变量的程序语句:
    1ASCII码值为65的字符型变量
    2、值为10000的无符号整型变量
    3、一个双精度浮点型变量
解:1 char ch=65;
2 unsigned int i=10000;
3 double f;
2.5、在程序中经常出现的标识符coutcin是什么?它们有什么功能?
答:coutC++系统预定义的标准输出流对象,代表标准输出设备---显示器,在控制台应用程序中可以利用它向显示器输出字符串。cinC++系统预定义的标准输入流对象,代表标准输入设备---键盘,在控制台应用程序中可以利用它从键盘输入数据。
2.6  程序中可能出现各种形式的数值常量,请写出以下语句的输出结果:
    1cout<<0144;
    2cout<<0x64;
    3cout<<0xB3L;
    4cout<<1234E-2;
    5cout<<(char)65;
解:几条语句的输出结果如下:
1100
2100
3179
412.34
5A
2.7  C++中如何定义符号常量,和C语言定义符号常量的方法有什么不同?
答:C++使用关键字const定义符号常量,而C语言使用预编译指令#define定义符号常量。由关键字const定义的符号常量具有数据类型,在程序运行期间占据存储空间;而由预编译指令#define定义的符号常量没有数据类型,在程序运行期间也不占据存储空间。
2.8  假设var1var2都是整型写出以下C++表达式的值。
    111/3
    211%3
    3var1=(var2=10)+5
    4var1=(var2=10)++
解:上面表达式的值分别是:
    13
    22
    315
    410
2.9  写出下面语句段的输出结果。
    int i=5,j=10;
    i*= --j;
    cout<<"i="<<i<<endl;
解:上面程序段的输出为:i=45
2.10 假设ijk是整型变量,而且i=5j=10k=20,写出下列表达式的值。
1、 i<j&&j>k
2、 i<j||j>k
3、 !i>k
4、 !(i>j)&&(j>k)
解:上面表达式的值分别是:
    10(或false
    21(或true
    30(或false
    40(或false
2.11 假设ij是整型变量,i的值为10j的值为3。请写出下列语句的输出结果。
1、 cout<<(i & j) ;
2、 cout<<(i | j) ;
3、 cout<<(i ^ j) ;
4、 cout<<(i << j) ;
5、 cout<<(i >> j) ;
6、 cout<<(~i | i) ;
解:上面语句的输出分别为:
    12
    211
    39
    480
    51
    6-1
2.12 请写出下列语句的输出结果。
      cout<<"Hello!\r"<<"Welcome to C++!\n";
解:上面语句的输出为:Welcome to C++!
2.13 假设ij是整型变量,执行下列语句后,i的值是多少?
      i =(j = 10, j * 3) ;
解:执行上面的语句后,i的值为30
2.14  假设ij是整型变量,j的值为10,则执行下列语句后,i的值是多少?
      i=j<10?1:2 ;
解:执行上面的语句后,i的值为2
2.15   下面表达式的结果是什么类型?
    1(10L+20)*0.5
    2(10L+20)*(1/2)
    3static_cast<float>(1.234)*10L
解:上面表达式的结果分别是:
    115.0
    20
    312.34
第三章
3.1  编写一段程序,提示用户输入一个英文字母,使用if语句判断用户输入的字母是大写字母还是小写字母,然后输出相关信息。
解:程序代码如下:
#include<iostream>
using namespace std;
void main()
{
    char ch;
    cout<<"请输入一个大写或小写的英文字母"<<endl;
    cin>>ch;
    if(ch>='A'&&ch<='Z')
        cout<<"您输入的是大写字母"<<endl;
    if(ch>='a'&&ch<='z')
        cout<<"您输入的是小写字母"<<endl;
}
3.2  以下程序段输出若干行字符串“How are you!”,行数由用户的输入的整数决定,如果
    用户输入0,则输出一行字符串“Hello!”,请出下面程序中存在的语法错误。
    int n;
    cout<<"请输入一个整数:";
    cin>>n;
    if(n=0)
        cout<<"Hello!\n";
    else
        for(int i=0;i<n;i++);
            cout<<"How are you!\n"; 
解:上面程序段中共有2处语法错误。第一处是语句if(n=0)应改为if(n==0);第二处是循环控制语句for后面不应该有分号。
3.3 编写一段程序,连续输入若干个学生的考试成绩,根据成绩判断其所在的等级,并输出
相关信息。判断成绩等级的规则如下:
     
   
   
例如,如果第3个学生的成绩为82分,则应输出一行字符串“学生3的成绩为B等”。
    要求使用while循环和switch选择语句。
解:程序代码如下:
#include<iostream>
using namespace std;
void main()
{
    int numbers;
    float score;
    cout<<"请输入学生人数";
    cin>>numbers;
    for(int i=1;i<=numbers;i++)
    {
        cout<<"请输入第"<<i<<"个学生的成绩(float几个字节多少位0100之间的实数)";
        cin>>score;
        if(score>=90)
            cout<<""<<i<<"个学生的成绩为A!"<<endl;
        else if(score>=80)
            cout<<""<<i<<"个学生的成绩为B!"<<endl;
        else if(score>=70)
            cout<<""<<i<<"个学生的成绩为C!"<<endl;
        else if(score>=60)
            cout<<""<<i<<"个学生的成绩为D!"<<endl;
        else
            cout<<""<<i<<"个学生的成绩为E!"<<endl;   
    }
}
3.4 编写程序,输出下面的由星号组成的倒三角形。
*********
*******
  *****
  ***
    *
解:程序代码如下:
#include<iostream>
using namespace std;
void main()
{
    for(int i=1;i<=5;i++)
    {
        for(int j=0; j<10+i; j++)
            cout<<' ';
        for(int k=1;k<=(10-(2*i-1));k++)
            cout<<'*';
        cout<<endl;
    }
}
3.5 请举例说明break语句和continue语句各自的用法和区别。
答:break语句用在switch语句或循环语句之中,作用是使程序的控制流立即跳出包含它的switch语句体或包含它的最内层循环语句体,接着执行后面的语句。而continue语句只能用在循环语句中,其作用是使程序不在执行本次循环位于continue语句之后的循环体内的语句,但并不跳出循环体,而是跳转到循环开始处并判断是否应进行下一次循环。请同学自行举例验证。
第四章
4.1 编写程序,声明并初始化一个包含10个元素的整型数组,出其中的最大值。
解:程序代码如下:
#include<iostream>
using namespace std;
void main()
{
    int array[10]={9,51,33,7,48,76,51,64,25,17};
    int max=0,maxindex;
    for(int i=0;i<10;i++)
        if(max<array[i])
        {
            max=array[i];
            maxindex=i;
        }
    cout<<"数组中第"<<maxindex+1<<"个元素最大,它的值为"<<max<<endl;
}
4.2 编写程序,声明并初始化一个43列的二维单精度浮点型数组,出其中的最大值。
解:程序代码如下:
#include<iostream>
using namespace std;
void main()
{
    float array[4][3]={{52.4f,23.9f,123.6f},
    {81.5f,247.2f,77.0f},