C程序设计课后习题参考答案_第1页
C程序设计课后习题参考答案_第2页
C程序设计课后习题参考答案_第3页
C程序设计课后习题参考答案_第4页
C程序设计课后习题参考答案_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

习题1

一、选择题

1、最初的计算机编程语言是(A)。

A、机器语言B、汇编语言C、高级语言D、低级语言

2、下列语言属于计算机低级语言的是(C)。

A、C语言B、Basic语言C、汇编语言D、C++语言

3.下列语言不属于高级语言的是(B)。

A、C语言B、汇编语言C、FORTRAN语言D、C++语言

4.下列不是面向对象程序设计的主要特征(A)。

A、结构B、继承C、多态D、封装

5.C++语言对C语言做了很多改进,下列描述中,使得C语言发生了质变,从面向过程变成了面向

对象(D)。

A、增加了一些新的运算符B、允许函数重载,并允许设置缺省参数

C、规定函数说明必须用原型D、引进了类和对象的概念

6.对于C++的支持程序方式,下列说法正确的是(C)。

A、C++只支持结构化程序设计B、C++只支持面向对象程序设计

C、C++既支持结构化程序设计又支持面向对象程序设计

D、上述说法全不正确

7.在C++中,源文件变为可执行程序需要编译、连接.下面关于它们的陈述正确的是(A)。

A、编译程序把高级语言程序翻译成目标语言程序

B、编译程序把源语言程序翻译为可执行程序

C、连接程序是把源语言连接起来成为可执行程序

D、编译程序直接把源语言翻译成机器语言

8.在C++中,源文件变为可执行程序的正确顺序应该是(B)。

A、编辑、连接、编译、执行B、编辑、编译、连接、执行

C、编译、编辑、连接、执行D、编译、连接、编辑、执行

9.关于C++主函数特性,下列叙述正确的是(D)。

A、主函数在同一个C++文件中可以有两个B、主函数类型必须是void类型

C、主函数一定有返回值D、每个C++程序都必须有一个main。函数

10.下列程序中,注释有误的是(B)。

A、coutvv”请输入两个数值:\n";//提示输入数值

B、cout<<”请输入两个数值:\n”;/*提示输入数值

C、cout«w请输入两个数值:\n”;/*提示输入数值*/

D、cout<<”请输入两个数值:\n”;/*//提示输入数值*/

二、上机题

1.在屏幕上输出以下信息:

Weclome

to

C++!

参考程序:

#include<iostream>

usingnamespacestd;

inimain()

(

coinvv"Weclome"vvendl:

cout<<“to”<<endl;

coutvv"C++!”vvendl;

2.在屏幕上打印出以下图形:

*********c—F程序设计*********

*************************************

参考程序:

#include<iostream>

usingnamespacestd;

intmain()

cout*木****木*木*木****木*左*求****水*木*木******木*”«endl;

coui<<**********C++程序设计**********wendl;

cout<<"*************************************“«cndl;

}

3.调试以下程序,并改正错误。

Usingnamespacestd

#includc<iostrcam>;

Usingstd::endl;

intmain()

floatnuml,num2,nuni3;

cin«numI«num2«num3;

cout»uTheaverageis"»setw(30)»num1*num2*num3»endl;

}

错误分析:

1.关键字Using中包含了大写字母,应改为using;

2.usingnamespacestd不是预处理指令,要以分号结尾;

3.#include<iostream>;是预处理指令,不能以分号结尾,而且要作为程序的开头行;

4.使用了usingnamespacestd,就不必单独使用std::endl;;

5.inlmain()后缺少左括号{;

6.cin通常与提取操作符“连用;cout通常与提取操作符v〈连用:

7.“Theaverageis”为中文引号,须改为英文引号;

8.使用setw(30)必须包含头文件iomanip

修改后的代码如下所示:

#include<ioslream>

#includc<iomanip>

usingnamespacestd;

intmain()

{floatnum1,num2,num3;

cin»num1»num2»num3;

cout«''Thcaverageis”<<sctw(30)«num1*num2*num3«endl;

习题2

三、选择题

1、最初的计算机编程语言是(A)。

A、机器语言B、汇编语言C、高级语言D、低级语言

2、下列语言属于计算机低级语言的是(C)。

八、C语言R、Basic语言C、汇编语言D、C++语言

3.下列语言不属于高级语言的是(B)。

A、C语言B、汇编语言C、FORTRAN语言D、C++语言

4.下列不是面向对象程序设计的主要特征(A)。

A、结构B、继承C、多态D、封装

5.C++语言对C语言做了很多改进,下列描述中,使得C语言发生了质变,从面向过程变成了面向

对象(D)。

A、增加了一些新的运算符B、允许困数重载,并允许设置缺省参数

C、规定函数说明必须用原型D、引进了类和对象的概念

6.对于C++的支持程序方式,下列说法正确的是(C)。

A、C++只支持结构化程序设计B、C++只支持面向对象程序设计

C、C++既支持结构化程序设计又支持面向对象程序设计

D、上述说法全不正确

7.在C++中,源文件变为可执行程序需要编译、连接。下面关于它们的陈述正确的是(A)。

coutv<"*************************************“«endr

coutvv”*********C++程序设计*********”«endl;

couiv<‘’*************************************"Wendi,

3.调试以下程序,并改正错误。

Usingnamespacestd

#include<ioslream>;

Usingstd::cndl;

intmain()

floatnuml,num2,nuni3;

cin«numl«num2«num3;

cout»uTheaverageis*'»setw(30)»numI*num2*num3»endl;

)

错误分析:

9.关键字Using中包含了大写字母,应改为using:

10.usingnamespacestd不是预处理指令,要以分号结尾;

11.并include<ios【ream);是预处理指令,不能以分号结尾,行且要作为程序的开头行;

12.使用了usingnamespacestd,就不必单独使用std::endl;;

13.intmain。后缺少左括号{:

14.cin通常与提取操作符》连用:cout通常与提取操作符<<连用;

15.“Theaverageis”为中文引号,须改为英文引号;

16.使用seiw(30)必须包含头文件iomanip

修改后的代码如下所示:

#include<iostream>

#include<iomanip>

usingnamespacestd;

intmain()

{floatnumI,num2,num3;

cin»num1»num2»num3;

cout«,'TheaverageisM«sehv(30)«num1*num2*num3«endl;

习题3

一、选择题

1.在C++中,函数原型不能标识(D)

A.函数的返回类型

B.函数参数的个数

C.函数参数类型

D.函数的功能

2.在参数传递过程中,对形参和实参的要求是(B)o

A.函数定义时,形参一直占用存储空间

B.实参可以是常量、变量或表达式

C.形参可以是常量、变量或表达式

D.形参和实参类型和个数都可以不同

3.决定C++语言中函数的返回值类型的是(D)。

A.return语句中的表达式类型

B.调用该函数时系统随机产生的类型

C.调用该函数时的主调用函数类型

D.在定义该函数时所指定的数据类型

4.设已定义i和k为int类型变量,则以下for循环语句(C)。

for(i=0;i!=0;i++)

cout«"****n

A.判断循环结束的条件不合法

B.是无限循环

C.循环一次也不执行

D.循环只执行一次

5.执行以下程序段后,输出的结果为(C)

inta=4,b=5,t=0;

if(a>b)t=a;a=b;b=t;

cout«,'a=,,«a«,,,b=,,«b«endl;

A.a=5,b=4

B.a=4,b=5

C.a=5,b=0

D.语法错误

二、上机题

I.编写一个判断一个数是否是完数的函数,用main。函数调用。并求10—100以内的完数有哪些?

#include<iostream>

usingnamespacestd;

〃调用函数

intisPerfectNum(intn)〃判断n是否为完数,如果是,则返回1,否则返回0.

{

inti,s=0;

for(i=1;ivn;i++)〃遍历小于n的整数。

if(n%i==0)〃可以整除,为真因子。

s+=i;〃累加每个真因子到S上。

if(s==n)

return1;〃符合完数条件,返回I。

elsereturn0;〃不是完数,返回0。

〃主函数

inimain()

for(inti=10;i<=100;i++)

if(isPerfectNum⑴)〃判断是否为完数,并输出结果,

coutvvivv"是完数"vvendl;

else

cout«i<〈"不是完数"<<endl;

return0;

2.编写一个函数,求一个圆的面积。以半径为函数参数,返回值为函数的面积。用main。函数调用.

#include<iostreani>

usingnamespacestd;

〃调用函数

doublearca(doublcr)

(

return3.14*r*r;

〃主函数

intmain()

doubler;

couivv"请输入圆的半径r(cm):

cin»r;

cout该圆的面积为:"vvarea(r)vv”平方厘米"vvendl;

return0;

)

3.输入一个8位二进制数,将其转换为十进制数输出。(可利用第1题的函数)

例如:11012=1(23)+1(22)+0(21)+1(20)=1310

所以,如果输入1101,则应输出13。

#inclnde<iostream>

usingnamespacestd;

〃调用函数

〃计算x的n次方

doublepower(doublex,intn);

(

inti;

doubled=l;

for(i=0;i<n;i++)

d*=x;

returnd;

I

〃主函数

intmain()

(

intvalue=0;

charch;

cout«"请输入一个8位2进制的数:\n

for(inti=7;i>=0;i--)

(

cin»ch;

if(ch==T)

value+=static_cast<int>(powcr(2,i));

if(ch>T)

(

cout«"输入的值不符合要求"Wendi;

break;

)

)

cout<<"该数转化成10进制的数为:\n"«valuc<<endl;;

return0;

)

4.输入两个正整数m和n(1<ni,n<10(X)000000),求其最大公约数和最小公倍数。

/*#include<stdio.h>

voidmain()

(

inta,b,i,j,x,y;

while(scanf(H%d%d,,,&a,&b)!=EOF)

(

x=a;y=b;

while(a?=h)

if(a>b)a-=b;

if(a<b)b-=a;

)

i=a;j=x*y/i;

printf("%d%d\n",i,j);

)

)

*/

#include<stdio.h>

intfum(longintx,longinty);

voidmain()

(

longintx,y,m.n;

while(scanf("%d%d,,,&x,&y)!=EOF)

(

m=fum(x,y);

n=x*y/m;

printf("%d%d\n",m,n);

)

}

intfum(longintx,longinty)

(

intm;

m=x<y?x:y;

whiIe(x%m!=0||y%m!=0)

m-;

returnm;

)

5.写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。

#include<iostream>

usingnamespacestd;

voidprime(inta)

(

if(a==l)

cout«"notprime";

elseif(a==2||a==3)

cout«"prime";

else

for(inti=2;i<=a/2;i++)

{

if(a%i==0)

cont«"notprime”:

break;

}

elseif(i==a/2)

cout«"primc";

I

)

intmain()

(

intn;

cin»n;

priinc(n);

return0;

习题4

一、选择题

1、下列关于结构的语法错误的是(D)

A、结构是由用户自定义的•种数据类型

B、结构中可设定若干个不同数据类型的成员

C、结构中成员的数据类型可以是另一个已定义的结构

D、在定义结构时,可以为成员设置默认值

2、设有以下说明,则下面不正确的叙述是(C)。

union

{inti;charc;floatf;}un;

A、un所占的内存长度等于成员f的长度

B、un的地址和它的成员地址都是同一地址

C、un可以作为函数参数

D、不能对un赋值,但可以在定义un时对它初始化

3、下列对字符数组进行初始化的语句正确的是(A)

A、chara[]="Hello";B、chara[川=

C.chara[5]="Hello";D、chara(2][5]={"HelWJWorkT};

4、有定义如下:inta[5],*p;则下列描述错误的是(B)

A、表达式p=p+1是合法的B、表达式a=a+1是合法的

C、表达式p-a是合法的D、表达式a+2是合法的

5、设有说明:

inta口[4]={1,2,3,456,7,8,9,10},*p=*(a+l);

以下可得数值为9的表达式是(B)

A、p+=3,*p++B、p+=4,*(p++)

C、p+=4,*++pD、p+=4,++*p

二、填空题

1、charst[20]="hello\0\t\\\";

printf(%d%d\n",strlen(st],sizeof(st));则输出的内容是5,20。

2、inta[5]={100,200,300,400,500),*pl=&a[0];则表达式(*pl)++的值是100

执行以下程序后,Y的值是一10

intmain(){

inta[4]={2,4,6};inty=0,*p=a;

for(;*p++;)if(*p)y+=*p;

cout«y«endl;}

3、阅读下列程序

intmain()

|

inta[3][3]={l,0,2,2,2,0,0,l,0};

inti,j;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

{

a[i]U]=a[a[i]U]][aU][i]];

cout<<a[i][jk<V;

)

return0;

I

以上程序的运行结果为220002222。

三、编程题

1、编写程序定义•个结构体数据类型并说明•个结构体数据类型的数组,然后说明个结构体指针变

量,通过指针变量输出该数组中各元素的值,要求输出结果如下所示:

学号姓名数学C++

1张三8798

2李四6782

3王刚5460

4刘丽10090

5陈军8895

#includc<iostrcam.h>

#include<string.h>

typedefstruct{

charNumberfl21;〃存放学生学号

charNamc[12J;〃存放学生姓名

//iniEnglishScore;〃存放学生英语成绩

intMathScore;//存放学生数学成绩

intCPPScore;

}student;

voidmain()

(

intn=0;

studentst[10];〃说明一个Student的结构体变量数组

student*p;

p=st;

coutvv"请输入学生的人数内n=

cin»n;

for(inti=0;i<n;i++)

{

coutv<"请输入第”vvi+1<<"学生的学号:”;

cin»p->Numbsr;

coutvv”请输入第“vvi+1vv"学生的名字:”;

cin»p->Name:

couiw”请输入第"vvi+lw"学生数学成绩:

cin»p->MathScore;

couivv”请输入第”《i+lvv"学生C++成绩:”;

cin»p->CPPScore;

p++;

I

cout«endl;

coutvv"学号"<<"姓名"v<”数学"vv"C++"«endl;

for(intj=0;j<n;j++)〃输出成绩

{

P";

cout«p->Numb3r«""«p->Namc«"«

p->MathScore«',«p->CPPScore«endl;

)

2、编写一个程序,实现将用户输入的一个字符串中所有字符3删除,并输出结果。

#include〈心stream〉

usingnamespacestd;

#defineMAX1000

intmain()

(

charsource!MAX];

chartemp[MAX];

inti,j,len;

coutv〈”请输入一个字符串:"vvendl;

gcts(sourcc);

len=strlen(source);

for(i=0,j=0;i<len;i++)

{

if(source[i]==*a'||source[i]=='A')

continue;

temp|j++j=source[ij;

)

lemp[j]='\0';

strcpy(source,temp);

coutv<"删除c字符后的字符串:”《endl;

puts(source);

return0;

)

3、从输入的一行字符串中求出最长英文单词长度及最长单词个数,并输出长度和个数,单词之间只

能用一个或多个空格隔开。如输入字符串"Iamastudent”时,最长单词的长度为7,个数为I。而输入字

符串"wordbodybooktry”时,最长单词的长度为4,个数为3,即有三个单词均为最长单词,

#include<iostrcam.h>

intlenofLongest(char*s,int&num)

(

intmaxlen=0,curlen=0;

nuin=0;

for(;*s!=,\0,;)

(

while(*s=-')

s++;〃跳过空格

if(*s!='\O')

{while(*s!-'&&*s)

{curlen++;

s++;

)

if(curlcn>maxlen)

{maxlen=curlen;

nuin=l;

)

ekeif(cnrlen==maxlen)

num++;

curlcn=O;

)

)

returnmaxlen;

)

intmain()

{

charstr[256];

intnurnberjen;

coutv<”输入一个英文句子:";

cin.gctlinc(str,256);

len=lenofLongest(str,number);

cout«,,str="«str«'\n';

cout<<”最长单词长度:”《len«”\n最长单词个数:"«numbcr«cndl:

return0:

I

4、编写一个程序,寻找二维数组中每一行的最大值。

#defineN5

#defineM5

voidmax(inta[N][M])

(

inti,j,p;

for(i=0:i<N;i++)

for(j=l;j<M;j++)

if(a[i][p]<a[i]U])

cout«i«":"«a[il[p]«endl;

}

习题5

一、填空题

I、面向对象的基本特征是:、、、0

2、一个对象向另一个对象发出的服务请求称为o

3、类定义的关键字是o类的数据成员通常表示类的,类的函数成员通常指对类数据

的操作,又称为。

4、类的访问限定符包括、和o类成员默认的访问方式是。

5、在创建对象时由系统自动调用的函数称为,其访问属性应为,其名和相同。

对象生命周期结束时,系统自动调用的函数称为。

6、动态对象的创建通过使用关键字,建立对象时自动调用。动态对象撤销使用关键

字,同时自动调用o

7、类中所有对象共享的数据称为,使用关键字修饰,初始化只能在进行。

答案:

1.抽象封装继承多态

2.消息

3.class属性行为

4.publicprotectedprivateprivate

5.构造函数public类名后构函数

6.new构造函数delete析构函数

7.静态数据成员static类外

二、选择题

1、数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是(A)。

A、类B、对象C、函数体D、数据块

2、下列说法中正确的是(B)。

A、类定义中只能说明函数成员的函数头,不能定义函数体

B、类中的函数成员可以在类体中定义,也可以在类体之外定义

C、类中的函数成员在类体之外定义时必须要与类声明在同一文件中

D、在类体之外定义的函数成'员不能操作该类的私有数据成员

3、有如下类定义:

classA{

intb;

public:

A(inti-O):b(i){}

voidsetValue(intn);

};

下列关于setValue成员函数的实现中,正确的是(B)。

A、samplc::sctValuc(intn){b=n;}

BNvoidA:selValue(intn){b=n;}

C、voidsetValue(intn){b=n:}

D、sctValuc(intn){b=n;}

4、在下面的类定义中,错误的语句是(C)。

classB{

public:

B(intf);〃①

~B();〃②

private:

inta=4;〃③

public:

B();〃④

);

A、①B、②C、③D、④

5、关于构造函数的叙述,错误的是(C)。

A、构造函数可以设置默认参数

B、构造函数不能是内联函数

C、构造函数的定义只能在类体内

D、构造函数可以重载

6、在下列函数原型中,可以作为类A拷贝构造函数的是(B)0

A^voidA(A*s);B、A(A&s);

C、A(A*s);D、A(As)

7、下列函数中,不是类的成员函的是(D)。

A、构造函数B、拷贝构造函数C、析构函数D、友元函数

8、有如下类定义:

classA{

inta;

public:

intgetRef()const{return&a;}〃①

intgctValue()const{returna;}〃②

voidset(intn)const{a=n;}〃③

friendvoidshow(Aaa)const{cout«a;}//©

其中的四个函数定义中正确的是(B)。

A、①C、③D、④

①返回类型为int,return&a为地址②返回类型为int,return的a值③常函数不能修改成员④友元函

数不能是常函数

9、下列有关拷贝构造函数的说法中,错误的是(A)。

A、拷贝构造函数可以有多个参数

B、拷贝构造函数名与类名相同

C、类中只有一个拷贝构造函数

D、拷贝构造函数无返回值

①常成员必须在初始化列表中初始化②常函数不能修改成员④静态函数要通过对象访问成员

10、有如下类定义:

classTest{

public:

Test(){a=0;c=0;}〃①常成员必须在初始化列表中初始化

inif(inta)const{lhis->a=a;}〃②常函数不能修改成员

voidh(intb){Test::b=b;};〃③

staticintg(){returna;}〃④静态函数要通过对象访问成员

private:

inta;

staticintb:

constintc;

);

intTest::b=0;

在标注号码的行中,能被正确编译的是(C)。

A、①B、②C、③D、④

三、简答题

1、简单解释什么是面向对象程序设计的封装性、继承性、多态性。

2、简单描述构造函数、析构函数的特点和性质。

3、拷贝构造函数在什么哪些情况卜.需要定义?

4、简述C++中this指针的特点和性质。

5、友元关系有何性质?友元关系的优点和缺点各有哪些?

答案:

I.封装是将抽象得到的数据和行为放在一起,形成一个实体——对象,并尽可能隐蔽对■象的内部细节。

继承是指特殊类的对象拥有其一般类的全部属性与行为,被继承的类称为基类,通过继承得到的新类

称为派生类。多态是指不同的对象收到相同的信息时时执行不同的操作。

2.构造函数的特点:

(1)不需要用户来调用,定义对象时被自动执行。

(2)构造函数名与类名相同,无返回类型。

(3)构造函数可以访问类中所有成员,可以不带任何参数,可以带参数表和默认值。

(4)构造函数还可以重载,如果用户没有定义构造函数,系统会自动定义一个无参的默认构造函数。

析构函数具有如下特点:

(1)析构函数名与类名相同,但在类名前加字符。

(2)析构函数没有返回值,没有参数,不能被重载,一个类仅有一个析构函数。

(3)析构函数一般由用户自定义,对象消失时系统自动调月。如果用户没有定义析构函数,系统将自

动生成一个不作任何工作的默认析构函数。

3、以下三种情况会调用拷贝构造函数:

(1)当函数的形参为类的对象,将对象作为函数实参传递给函数的形参时v

(2)当函数的返回值是类的对象,创建临时对象时。

(3)当用类的一个对象初始化另外一个对象时。

4、this指针的特点:

(1)this指针只能在成员函数中使用:

(2)this指针在成员函数开始前构造,在成员函数结束后清除,生命周期和其他函数参数一样。

(3)this指针会因编译器不同而有不同的放置位置。

5、友元可以是另一个类的成员函数或者不属于任何一个类的普通函数,该函数被称为友元函数;友

元也可以是一个类,该类被称为友元类。

友元的性质:

(1)友元关系不能被继承,

(2)友元关系是单向的,不具有交换性。

(3)友元关系不具有传递性。

四、写出程序程序执行结果。

1、

#include<iostream>

usingnamespacestd;

classC{

inin;

public:

C(in(k):n(k){}

intget(){returnn;}

inigel()const{returnn+1;}

intmain(){

Ca(5);

constAAb(6);

cout«a.gct()«,,,,,«b.gct();

return0;

I

2、

#include<iostream>

usingnamespacestd;

classTest{

private:

staticintval;

inta;

public:

staticintfunc();

voidsfunc(Test&r);

I;

intTcst::val=200;

intTest::func(){

returnval++;

}

voidTest::sfunc(Test&r){

r.a=125;

couc<<"Result3="«r.a«endl;

)

voidmain(){

cout«"Resultl="«Test::func()«endl;

Testa;

coui<<"Resiik2="<<a.furc()<<endl;

a.sfunc(a);

)

1.5,7

2.ResultI=200

Result2=201

Result3=125

五、编程题

1.定义一个立方体类Box,计算输出立方体的体积和面积。

#irclude<iostream>

usingnamespacestd;

classBox{

public:

Box(intl,intw,inth)

length=1;

width=w;

height=h;

intArea()

inta=width*height*2+width*length*2+length*height*2;

returna;

intVolume()

returnlengtlr^width*height;

private:

inilength;〃长

intwidth;〃宽

intheight;〃高

voidmain()

Boxb(5,3,5);

coutvv"立方体的面积为:"«b.Area()«endl;

coutvv”立方体的体积为:"«b.VolumeO«endl;

2.定义一个圆类(Circle),属性为半径(radius)、圆周长和面枳,操作为输入半径并计算周长、面积,输

出半径、周长和面枳。要求定义陶造函数(以半径为参数,默认值为0,周长和面积在构造函数中生成)和

拷贝构造函数。

#irclude<iostream>

usingnamespacestd;

classCircle(

public:

Circle(intr=0)

{

radius=r;

area=3.14*r*r;

girth=2*3.14*r;

I

Circle(Circle&c)

(

radius=c.radius;

area=c.area;

girth=c.girth;

)

voidshow()

(

cout«"半径为:"«radius«"\n周长为:"«girth«"\n面积为:"«area«endl;

I

private:

doubleradius;//半径

doublearea;〃面积

doublegirth;〃周长

voidmain()

Circlec(2);

c.show();

3.设计■一个人员类(Person)。数据成员包括身份证号(IdPerscn)、姓名(Name)、性别(Sex)、生日(Birthday)

和家庭住址(HomeAddress)。成员函数包括人员信息的录入和显示,还包括构造函数与拷贝构造函数。

#include<iostream>

usingnamespacestd;

classPerson{

public:

Person(chara[],charb[],charc],chard[])

strcpy_s(ID,strlcn(a)+La);

sircpy_s(name,strlen(b)■+1,b);

strcpy_s(sex,strlen(c)+I,c);

strcpy_s(address,strlen(d)+1,d);

cout«”调用构造函数”<<endl;

)

-Person()

{

coutvv”调用析构函数析vendl;

)

voidsct(chara[],charb|],charc[],chard[])

(

strcpy_s(ID,strlcn(a)+1,a);

strcpy_s(name,strlen(b)+1,b);

strcpy_s(sex,strlen(c)+1,c);

strcpy_s(address,strlen(d)+1.d);

)

voidshow()

(

cout«"身份证号:n«1D«"\n姓名:"«name«"\n性别:"<<sex«"\n家庭住址:"〈(address

«endl;

I

private:

charID[201;

charnamc[2()J;

charsex[8];

charaddress[5()j;

};

voidmain()

(

Persons(“1002","Angle“J女“,“北京市)

s.show();

s.set(“1002","Angle",“女","上海市”);

s.show();

)

4.设计如下类:

(1)建立一个Poini类,表示平面中的一个点;建立一个Line类,表示平面中的一条线端,内含两个

Point类的对象;建立Triangle类,表示一个三角形,内含三个Line类的对象构成一个三角形。

(2)设计三个类的相应的构造函数,完成初始化和对象赋值。

(3)设计Triangle类的成员函数,判断三条边是否能构成三角形,并计算和显示三角形面积。

#irclude<iostream>

#irclude<cmath>

usingnamespacestd;

classPoint{

public:

doublex;

doubley;

Point(doublea,douhleb)

y=b;

cout«”调用点构造函数YVendl;

classLine

public:

Line(Pointn,Pointm):a(n),b(m)

cout«”调用线段构造函数”《endl;

doubleLcngth()

(

length=pow((a.x-b.x),2)+pow((a.y-b.y),2);

length=sqrt(length):

returnlength;

private:

Pointa,b;

doublelength;

classTriangle

private:

doublearea;

Linexl,x2,x3;

public:

Triangle(LineaI,Linea2,Linea3):xI(al),x2(a2),x3(a3)

cout«”调用三角形构造函数"wendl;

)

voidArea()

(

〃判断三条线段是否能构成三角形

if((xl.Lcngth()+x2.Lcngth())>x3.Lcngth()&&(x2.Lcngth()+x3.Lcngth())>x1.Lcngth()&&

(xl.Length()+x3.Length。)>x2.Length())

doubles;

s=(xl.Length()+x2.Length()+x3.Length())/2.0;

area=s*(s-xl.Length())*(s-x2.Length())*(s-x3.Length());

area=sqrt(area);

cout«"三角形面积为:"vvarea«endl;

else

cout«"无法构成三角形!"wendl;

voidmain()

Lineal(Point(0,0),Point(3.0));

Linea2(Point(3,0),Point(3,4));

Linea3(Point(0,0),Point(3.4:);

Trianglet(al.a2,a3);

t.Area();

习题6

二、程序分析题:

1、请分析下面程序,指出一处错误,修改后给出运行结果:

1.

2.程序名:exesize_6.cpp

3.说明:习题6代码示例2

4.木木*木*木木*求**木***木*木*木*木木木木*木*木*木木*木*/

5.#include<iostream>

6.usingnamespacestd;

7.classA{

8.public:

9.A(inti)

10.{cout«^constructingA”«endl;}

H.~A()

12.{coutv<"destructingA”«endl;}

13.);

14.classB{

15.B(inti)

16.{cout«''constructingB"«i«endl;}

17.~B()

18.{cout«”destructingB”<<endl;}

19.};

20.classC:publicA,virtualpublicB{

21.private:

22.Bobjb;

23.public:

24.C(inti,intj,intk):A(i),B(j),objb(k)

25.{cout«*'constructingCJ,«k«endl;}

26.~C()

27.{cout«''destructingC”<<endl;}

28.};

29.voidfunc(inti,intj,intk)

30.{

31.Cobj(i,j,k);

32.}

33.intmain()

34.!

35.fiinc(1,2,3);

36.return0;

37.}

2、请画出程序中的一处错误,并说明原因:

1./******************今**********************

2.程序名:exesize_6.cpp

3.说明:习题6代码示例3

4.*****************************************/

5.#include<iostream>

6.usingnamespacestd;

7.classA{

8.public:

9.voidfuncI(){cout«t4A.funcr*«endl;}

10.

11.classB{

12.public:

13.voidfunc1(){cout«t4B.funcT,«endl;}

14.voidfunc2(){cout«“B.func2”<<cndl;}

15.};

16.classC:publicA,publicB{

17.public:

18.voidfunc2(){coutvv“C.func2"vvendl;}

19.voidfunc3()(fund();)

20.};

答案:

1.第15行加public:

2.第19行明确指明是调用哪个基类的funcl(),如A::funcl()

习题7

二、程序分析题

1、请分析下面代码,给出运行结果:

1./*****************************************

2.程序名:execise7.cpp

3.说明:第7章习题示例代码1

4.*****************************************/

5.#include<iostream>

6.usingnamespacestd;

7.classA{

8.public:

9.virtualvoidf(){cout«"1

10.);

11.classB:publicA{

12.public:

13.B(){coutvv"2”;}

14.}:

15.classC:publicB{

16.public:

17.virtualvoidf(){B::f();coui<<“3”;}

18.};

19.intmain()

20.(

21.Aobja,*pa;

22.Bobjb;

23.Cobjc;

24.p=&objc;

25.p->f();

26.return0;

27.}

2、请读程序,并将下列程序补充完整:

1.

2.程序名:execise7.cpp

3.说明:第7章习题示例代码1

4.***木********木*木*木****水***求*木**木木木******木*/

5.#include<iostream>

6.usingnamespacestd;

7.classBase{

8.public:

9.voidfunc(){cout«"Base.func''«endl;}

10.};

11.classDerived:publicBase{

12.public:

13.voidfunc(){cout«'、Derived.func”<<endl;}

14.};

15.intmain()

16.{

17.Base*p=newDerived;

18.p->func();〃运行输出Derived.func

19.deletep;

20.ret

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论