C++第一章习题答案.docx

上传人:b****0 文档编号:18306195 上传时间:2023-08-15 格式:DOCX 页数:24 大小:23.34KB
下载 相关 举报
C++第一章习题答案.docx_第1页
第1页 / 共24页
C++第一章习题答案.docx_第2页
第2页 / 共24页
C++第一章习题答案.docx_第3页
第3页 / 共24页
C++第一章习题答案.docx_第4页
第4页 / 共24页
C++第一章习题答案.docx_第5页
第5页 / 共24页
C++第一章习题答案.docx_第6页
第6页 / 共24页
C++第一章习题答案.docx_第7页
第7页 / 共24页
C++第一章习题答案.docx_第8页
第8页 / 共24页
C++第一章习题答案.docx_第9页
第9页 / 共24页
C++第一章习题答案.docx_第10页
第10页 / 共24页
C++第一章习题答案.docx_第11页
第11页 / 共24页
C++第一章习题答案.docx_第12页
第12页 / 共24页
C++第一章习题答案.docx_第13页
第13页 / 共24页
C++第一章习题答案.docx_第14页
第14页 / 共24页
C++第一章习题答案.docx_第15页
第15页 / 共24页
C++第一章习题答案.docx_第16页
第16页 / 共24页
C++第一章习题答案.docx_第17页
第17页 / 共24页
C++第一章习题答案.docx_第18页
第18页 / 共24页
C++第一章习题答案.docx_第19页
第19页 / 共24页
C++第一章习题答案.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++第一章习题答案.docx

《C++第一章习题答案.docx》由会员分享,可在线阅读,更多相关《C++第一章习题答案.docx(24页珍藏版)》请在冰点文库上搜索。

C++第一章习题答案.docx

C++第一章习题答案

1-1    1-1    写出下列程序运行后的输出结果。

(1)局部变量与全局变量同名。

#include 

int x=1,y=2;

max(int x,int y)

{

                  return x>y?

x:

y;

}

void main()

{

                  int x=3;

                  cout<<"max="<

}

(2)外部变量的使用。

#include 

extern int a;

void decrement(void)

{

                  a+=10;

}

int a=100;

int main()

{

                  for(;a<=150;)

                  {

                           decrement();

                           cout<

                  }

                  return 0;

}

(3)在局部变量作用域内访问同名的全局变量。

#include 

int a=100;

void main()

{

                  int a=200;

                  cout<

:

a<<'\n';

}

1-2    1-2    如下的宏用于求圆的面积,请举例说明在什么情况下将得不到正确结果:

#define PI 3.1415926

#define AREA(R) PI*R*R

1-3    1-3    下面定义了一个宏,并在程序中使用它。

请写出编译预处理后所得到的源代码,并分析程序有什么副作用?

#define CUBE(X) ((X)*(X)*(X))

. . . . . .

int height=100;

int volume=CUBE(height++);

1-4    1-4    下面的程序使用了条件编译指令,请写出编译预处理后所得到的源代码,并给出程序的运行结果。

#include 

#define MAX 100

main()

{

#if MAX>99

cout<<"Thispartiscompiled.";

#endif

}

 

1-5    1-5    采用指针方法将一个数组中的所有元素颠倒顺序,结果仍然存放在原来的数组中,要求使用最少的辅助存储单元。

1-6    1-6    使用结构变量表示每个学生的信息:

姓名、学号和三门课的成绩。

从键盘上输入10个学生的数据,然后输出每个学生的姓名和三门课的平均成绩。

1-7    1-7    用枚举值MON、TUE、WED、THU、FRI、SAT和SUN表示一个星期中的7天。

键盘输入一个0~6之间的整数,根据输入的整数输出对应的英文缩写。

1-8    1-8    编写一个程序,在主函数main()的外部和内部分别声明两个同名的整型变量并赋值,然后在主函数main()中分别访问两个变量。

1-9    1-9    采用动态内存分配方法设计一个学生成绩处理程序,要求输入任意数量学生的学号、姓名和四门课的成绩,并按平均成绩高低输出每个学生的姓名和成绩。

1-101-10 一个程序由两个C++源文件组成,在一个源文件中定义主函数main()并声明一个外部整型变量n,在另一个源文件中定义一个不带参数的函数factorial(void),该函数用于计算变量n的阶乘。

编程在主函数main()中输入一个整数并求它的阶乘。

1-111-11 编写一个函数maxmin(),该函数有两个实型参数,执行函数后,第一个参数为两个参数中值较大者,第二个参数为较小者。

要求使用引用作为函数参数,并编写主函数验证你的函数功能。

1-121-12 编写一个函数swapstruct(),实现交换两个结构变量的功能。

编写主函数验证函数swapstruct()的功能,要求使用引用传递参数。

1-131-13 定义一个带参数的宏,求出三个数中最大的一个数,并进行验证。

1-141-14 输入一个字符串,根据需要设置条件编译,使之能将输入的字符串以大写字母的形式或小写字母的形式输出。

1-151-15 假设有三个文件:

test1.h、test2.h和test.cpp,在test1.h中定义了一个宏PI,test2.h文件包含了test1.h文件,而test.cpp又文件包含了test1.h文件和test2.h文件。

请问编译时会出现什么错误?

如何解决?

提示:

宏的重复定义。

  

2-1    2-1    以下程序有什么错误?

如有请改正它。

#include 

class Point

{

        int x,y;

public:

        void Display(){cout<<"x="<

};

main()

{

        Point point1;

        point1.x=100;

        point1.y=200;

        point1.Display();        

}

2-2    2-2     写出下列程序运行后的输出结果。

#include 

class Time{

private:

        int hour,minute,second;

public:

        void setTime(int h,int m,int s)

        {

               hour=(h>=0&&h<24)?

h:

0;

                  minute=(m>=0&&m<60)?

m:

0;

                  second=(s>=0&&s<60)?

s:

0;

        };

        void showTime(){cout<

'<

'<

};

void main()

{

        Time t1; 

        t1.setTime(14,52,66);

        cout<<"Thetimeis:

";

        t1.showTime();

}

2-3    2-3     以下程序段有什么错误?

并请予以修改。

(1)使用静态成员函数。

#include 

#include 

class Person{

public:

        char m_strName[20];

        long m_ID;

public:

        Person(char*strName,long ID){strcpy(m_strName,strName);m_ID=ID;}

        static long GetID(){return m_ID;}

};

void main()

{

        Person person1("LiuJun",1101640524);

        cout<<"ID="<

:

GetID(person1)<<'\n';

}

(2)派生类构造函数自动调用基类的构造函数。

#include 

class Point

{

protected:

        int x,y;

public:

        Point(int a,int b)  {x=a;y=b;};

        int getX(){return x;};

        int getY(){return y;};

};

class Circle:

public Point

{

protected:

        int radius;

public:

        Circle(int a=0,int b=0,int r=0){radius=r;};

        int getRadius(){return radius;};

};

main()

{

        Circle c(100,150,200);

        cout<<"x="<

}

(3)使用多继承。

#include 

class A

{

protected:

        int a;

public:

        void SetData(int x){a=x;};

        int GetData(){return a;};

};

class B

{

protected:

        int b;

public:

        void SetData(int y){b=y;};

        int GetData(){return b;};

};

class C:

public A,public B

{

public:

        void SetData(int x,int y){a=x;b=y;};

};

main()

{

        C c;

        c.SetData(30,70);

        cout<<"a="<

}

2-4    2-4     写出下列程序运行后的输出结果。

(1)不使用虚函数。

#include 

class A

{

public:

         void Show(){cout<<"A:

:

show\n";};

};

class B:

publicA

{

public:

         void Show(){cout<<"B:

:

show\n";};

};

void main()

{

         A a,*pa;

         B b;

         pa=&a; pa->Show();

         pa=&b; pa->Show();

}

(2)不使用虚析构函数。

#include 

class A

{

public:

         ~A(){cout<<"A:

:

destructor\n";};

};

class B:

publicA

{

public:

         ~B(){cout<<"B:

:

destructor\n";};

};

void main()

{

         A*pA=newB;

         delete pA;

}

(3)通过函数参数类型不同实现函数重载。

#include 

intsquare(intx); 

float square(floaty); 

double square(doublez); 

int square(int x)

{

      return x*x; 

}

float square(float y)

{

        return y*y; 

}

double square(double z)

{

        return z*z; 

}

void main()

{

        cout<

        cout<

        cout<

}

(4)通过函数参数个数不同实现函数重载。

#include 

int add(int x,int y)

{

        return x+y; 

}

int add(int x,int y,int z)

{

        return x+y+z; 

}

void main()

{

        cout<<"a="<

}

 

2-5    2-5    一个名为CPerson的类有以下属性:

姓名、身份证号、性别和年龄,请用C++语言定义这个类,并为上述属性定义相应的方法。

2-6    2-6    设计一个日期类Date,该类用于表示日期值(年、月、日)。

要求除了能够通过相应的成员函数设置和获取日期值外,还能够实现将日期加一天的操作。

2-7    2-7    建立一个名为Student的类,该类有以下几个私有成员变量:

学生姓名、学号、性别和年龄。

还有以下两个成员函数:

一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。

编写一个主函数,声明一个学生对象,然后调用成员函数在屏幕输出学生信息。

2-8    2-8    修改习题2-7中的类Student,添加一个静态成员变量,用于表示已创建对象的数量;添加两个静态成员函数,一个用于输出已创建对象的数量,一个用于输出一个学生的姓名和学号。

2-9    2-9    将习题2-6中类Date的“日期加一天”成员函数改为友元函数。

2-102-10 将习题2-7中类Student的学生信息输出函数改为友元函数。

2-112-11 利用习题2-5中类CPerson派生出类CEmployee(雇员),派生类CEmployee增加了两个新的数据成员,分别用于表示部门和薪水。

要求派生类CEmployee的构造函数显式调用基类CPerson的构造函数,可根据需要为派生类增加新的成员函数。

2-122-12 利用时间类Time和日期类Date(习题2-6)多重派生出日期时间类DateTime,并实现类的基本功能。

2-132-13 假设将例3-11中类BaseA和BaseB的成员函数setA()和setB()的函数名统一改为set(),请重写main()函数。

2-142-14 设类X分别派生出类Y和类Z,类Y和类Z又共同派生出类W,请用虚基类方式定义这些类。

要求为类简单添加一些成员,并编写main()函数进行验证。

2-152-15 为了解决例3-12中由于多重继承而产生的二义性问题,可以利用一个指向基类B(或C)的指针指向派生类D的对象。

请按此方法编程。

2-162-16 编写一个工资管理程序,将雇员类作为所有类的基类,其派生类包括经理类、销售员类、计件工类和小时工类。

经理享有固定的周薪;销售员的收入是一小部分的基本工资加上销售额的提成;计件工的收入完全取决于其生产的工件数量;小时工的收入以小时计算,再加上加班费。

2-172-17 修改例3-10中的程序,为类Point、Circle和Cylinder添加计算面积的成员函数Area(),要求函数Area()采用虚函数的形式,并通过基类指针调用虚函数Area()。

2-182-18 修改例3-10中的程序,将类Point、Circle和Cylinder(圆柱体)的析构函数改为虚析构函数,并编写代码验证你所完成的功能。

2-192-19 修改习题2-16中的程序,将基类的计算工资函数改为纯虚函数。

2-202-20 修改习题2-17中的程序,将类Point的计算面积函数Area()改为纯虚函数。

2-212-21 用函数重载形式编写函数square():

求一个int型或double型参数的平方。

2-222-22 用函数重载方法求两个整数、两个浮点数、两个字符中的最小者。

2-232-23 修改习题2-7中的类Student,增加以下私有成员变量:

高等数学、英语、操作系统、数据结构等四门课的分数和总成绩。

修改或增加以下成员函数:

初始化学生姓名、学号、性别、年龄和四门课分数的构造函数,输入四门课分数的函数,计算学生总成绩的函数,输出学生信息的函数。

编写一个主函数,调用原来的构造函数声明一个学生对象并输入其四门课的分数,再调用新增加的构造函数声明另一个学生对象。

最后分别计算两个学生的总分,并在屏幕输出两个学生的所有信息。

2-242-24 采用类继承的方法(不直接修改类Student)完成习题2-23所要求的功能。

2-252-25 建立一个名为Teacher的类,该类有以下成员变量:

教师姓名、ID号、基本工资、奖金、所得税和实际发放数。

还有以下成员函数:

两个构造函数,一个用于只初始化教师姓名和ID号,一个用于初始化教师姓名、ID号、基本工资、奖金和所得税;一个输入基本工资、奖金和所得税的函数;一个计算实际发放数的函数;一个输出教师信息的函数。

编写主函数,调用第一个构造函数声明一个教师对象并输入其工资,再调用第二个构造函数声明一个教师对象。

最后分别计算两个教师的实际发放数,并在屏幕输出。

2-262-26 为习题2-25中的类Teacher添加两个同名的成员函数Add(),一个函数用于将其他教师的工资加到该教师中(如该教师替其他教师代课),一个函数用于将一个数值加到该教师中(如提高该教师的工资)。

在主函数中编写代码验证你完成的功能。

2-272-27 定义矢量类型,给出平面上两个矢量的加法和减法运算。

要求利用非成员函数重载运算符“+”,利用成员函数重载运算符“-”。

2-282-28 采用重载运算符“++”的方法实现习题2-6要求的“日期加一天”操作。

2-292-29 采用重载运算符“+”的方法完成习题2-26中的两种工资增加功能。

2-302-30 编写一个函数模板:

求三个数中的最大数。

2-312-31 编写一个冒泡排序的函数模板,并利用它分别对int型数和字符进行排序。

2-322-32 定义一个Interger类模板,用它来实现C++的各种整数类型。

2-332-33 定义一个堆栈的类模板,并实现堆栈初始化、进栈和出栈等操作。

2-342-34 采用另一种方法完成习题2-16:

将计算工资函数定义为非成员函数(不作为每一个类的成员函数)。

提示:

使用RTTI技术,将基类指针作为非成员函数的参数。

2-352-35 定义一个类和派生类,并分别声明它们的对象,然后输出对象的类型。

 

2-1    2-1    以下程序有什么错误?

如有请改正它。

#include 

class Point

{

        int x,y;

public:

        void Display(){cout<<"x="<

};

main()

{

        Point point1;

        point1.x=100;

        point1.y=200;

        point1.Display();        

}

2-2    2-2     写出下列程序运行后的输出结果。

#include 

class Time{

private:

        int hour,minute,second;

public:

        void setTime(int h,int m,int s)

        {

               hour=(h>=0&&h<24)?

h:

0;

                  minute=(m>=0&&m<60)?

m:

0;

                  second=(s>=0&&s<60)?

s:

0;

        };

        void showTime(){cout<

'<

'<

};

void main()

{

        Time t1; 

        t1.setTime(14,52,66);

        cout<<"Thetimeis:

";

        t1.showTime();

}

2-3    2-3     以下程序段有什么错误?

并请予以修改。

(1)使用静态成员函数。

#include 

#include 

class Person{

public:

        char m_strName[20];

        long m_ID;

public:

        Person(char*strName,long ID){strcpy(m_strName,strName);m_ID=ID;}

        static long GetID(){return m_ID;}

};

void main()

{

        Person person1("LiuJun",1101640524);

        cout<<"ID="<

:

GetID(person1)<<'\n';

}

(2)派生类构造函数自动调用基类的构造函数。

#include 

class Point

{

protected:

        int x,y;

public:

        Point(int a,int b)  {x=a;y=b;};

        int getX(){return x;};

        int getY(){return y;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2