C程序设计习题.docx

上传人:b****6 文档编号:6273961 上传时间:2023-01-05 格式:DOCX 页数:28 大小:22.18KB
下载 相关 举报
C程序设计习题.docx_第1页
第1页 / 共28页
C程序设计习题.docx_第2页
第2页 / 共28页
C程序设计习题.docx_第3页
第3页 / 共28页
C程序设计习题.docx_第4页
第4页 / 共28页
C程序设计习题.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

C程序设计习题.docx

《C程序设计习题.docx》由会员分享,可在线阅读,更多相关《C程序设计习题.docx(28页珍藏版)》请在冰豆网上搜索。

C程序设计习题.docx

C程序设计习题

文档编制序号:

[KKIDT-LLE0828-LLETD298-POI08]

 

C程序设计习题

C++程序设计

练习题

学院:

计算机学院

专业班级:

物联网1002

学号:

姓名:

徐远志

第八章

1.下面是一个类的测试程序,试设计出能是用如下测试程序的类.

Intmain()

{

Testx;

(30,20);

();

return0;

}

解:

#include

usingnamespacestd;

classTest义并实现一个矩形类Crectangle。

该类包含了下列成员函数。

Crectangle():

累的构造函数,根据需要可以定义多个构造函数

SetTop(),SetLeft():

设置矩形的左上角坐标

SetLength(),SetWidth():

设置矩形的长和宽

Perimeter():

求矩形的周长

Area():

求矩形的面积

GetWidth():

返回矩形的宽度

Getlength():

返回矩形的长度

IsSquare():

判断矩形是否为正方形

Move():

将矩形从一个位置移动到另一个位置

Size():

改变矩形的大小

Where():

返回矩形的左上角的坐标

PrintRectangle():

输出矩形的四个顶点的坐标

数据成员

inttop,left;

intlength,width;

解:

#include

usingnamespacestd;

classCrectangle次歌手大赛中,有JudgeNum个评委给选手打分,参加比赛的选手有PlayerNum

名,现为比赛积分编写一个CompetitionResult类,类的定义如下:

(定义略)

(1)写出所有的成员函数和实现代码。

(2)编写main()函数对该类进行测试。

在函数体中,定义了一个competitionResult类的对象数组r[PlauerNum],他的每个元素记录了每个选手的所有信息,个评委的打分通过键盘的输入,在屏幕上应有提示信息进行交互式操作,比赛结果按选手得分从高到底排列输出。

解:

(1)CompetitionResult:

:

CompetitionResult()

{

num=0;strcpy(name,"");

for(inti=0;i

score[i]=;

average=0;

}

CompetitionResult:

:

CompetitionResult(shortn,char*ps)

{

num=n;strcpy(name,ps);

for(inti=0;i

score[i]=;

average=0;

}

floatCompetitionResult:

:

MaxScore()

{intmax=score[0];

for(inti=0;i

if(max

returnmax;

}

floatCompetitionResult:

:

MinScore()

{intmin=score[0];

for(inti=0;i

if(min>score[i])min=score[i];

returnmin;

}

voidCompetitionResult:

:

SetAvg()

{inti;floatsum=;

for(i=0;i

sum+=score[i];

sum=sum-MaxScore()-MinScore();

average=sum/(JudgeNum-2);

}

floatCompetitionResult:

:

GetAvg()

{returnaverage;

}

shortCompetitionResult:

:

GetNo(inti){returnnum;}

voidCompetitionResult:

:

SetNo(inti){num=i;}

charCompetitionResult:

:

*GetName(){returnname;}

floatCompetitionResult:

:

GetScore(intj){returnscore[j];}

voidCompetitionResult:

:

Setscore(intk,floatav){score[k]=av;}

voidSort(CompetitionResult*pr,intn)

{

inti,j,k;

CompetitionResulttemp;

for(i=0;i

{

k=i;

for(j=i+1;j

if((pr[j].average)>(pr[k].average))

k=j;

if(k!

=j)

{

temp=pr[i];

pr[i]=pr[k];

pr[k]=temp;

}

}

}

(2)

intmain()

{

CompetitionResultplayer[PlayerNum]={CompetitionResult(1,"one"),

CompetitionResult(2,"two"),CompetitionResult(3,"there"),

CompetitionResult(4,"four"),CompetitionResult(5,"five"),

CompetitionResult(6,"six"),CompetitionResult(7,"seven"),

CompetitionResult(8,"eight"),CompetitionResult(9,"nine"),

CompetitionResult(10,"ten")};

floata;

for(inti=0;i

{

cout<<"请评委给第"<

"<

for(intj=0;j

{cin>>a;

player[i].Setscore(j,a);

}

player[i].SetAvg();

cout<

}

Sort(player,PlayerNum);

cout<<"最后的得分情况为:

"<

for(intj=0;j

{cout<

cout<

cout<<""<

}

return0;

}

程序运行的结果为:

第九章

1.在下面的程序中,派生类Derived的成员函数sets()能否访问基类base中得变量a和b为什么如果在基类base中将数据成员a和b定义为私有成员,下面的程序能否通过编译为什么

#include

usingnamespacestd;

classBase{

public:

voidset(inti,intj){a=i;b=j;}

voidshow(){cout<<"a="<

protected:

inta,b;

};

classDerived:

publicBase{

public:

voidsets(){s=a*b;}

voidshows(){cout<<"s="<

private:

ints;

};

intmain(){

Derivedobj;

(2,3);

();

();

();

return0;

}

解:

可以访问a和b;因为a,b为保护成员,经公有继承,成为派生类中得保护成员,所以派生类Derived的成员函数sets()能访问基类base中得变量a和b。

如果定义为私有,则不能通过编译。

因为派生类中的成员函数不能访问基类中得私有成员

2.声明一个图形基类Shape,在它的基础上派生出矩形类Rectangle和圆形类Circle,它们都有计算面积的和周长、输出图形信息的成员函数,再在Rectangle类的基础上派生方形类Square。

编写程序和各类的定义和实现,以及类的使用。

解:

#include

usingnamespacestd;

classShape{

public:

doublegetArea(){}

doublegetPerimeter(){}

};

classRectangle:

publicShape{

protected:

doubleheight;

doublewidth;

public:

Rectangle(){}

Rectangle(doublea,doubleb)

{

height=a;

width=b;

}

doublegetArea()

{returnheight*width;

}

doublegetPerimeter()

{return2*(height+width);

}

};

classCircle:

publicShape{

public:

Circle(doublex):

r(x){}

doublegetPerimeter()

{

return2**r;

}

doublegetArea()

{

returnr*r*;

}

private:

doubler;

};

classSquare:

publicRectangle

{

public:

Square(doublex)

{

height=x;

width=x;

}

};

intmain()

{

Rectanglea1,;

Circlea2;

Squarea3;

cout<<"Area="<<()<

cout<<"Perimeter="<<()<

cout<<"Area="<<()<

cout<<"Perimeter="<<()<

cout<<"Area="<<()<

cout<<"Perimeter="<<()<

return0;

}

5.某销售公司有销售经理和销售员工,月工资的计算办法为:

销售激励的底薪为4000元,并将销售额的2/1000做提成,销售员工无底薪,只提取5/1000为工资。

编写程序:

(1)定义一个积累Employee,它包含三个数据成员number,name和salary,以及编号和姓名的构造函数。

(2)有Employee类派生Salesman类。

Salesman类包含两个新数据成员commrate和sales,还包括了用于输入销售额并计算销售员工工资的成员函数pay()和用于输出打印的print()。

(3)由Salesman派生Salemanager,Salesmmanage类包含新数据成员monthlypay,以及用于输入销售额并计算销售经理工资的成员函数pay()和用于输出的print()。

(4)编写main()函数中测试所设计的类结构。

解:

(1)classEmployee

{

public:

Employee(longnum,char*n)

{

number=num;

strcpy(name,n);

}

protected:

longnumber;

charname[20];

doublesalary;

};

(2)classSalesman:

publicEmployee

{

public:

Salesman(longnum,char*n,floatc=:

Employee(num,n)

{commrate=c;}

voidpay()

{

cout<<"êè"<

";

cin>>sales;

salary=commrate*sales;

}

voidprint(){

cout<

}

protected:

floatcommrate;

doublesales;

};

(3)

classSalesmanager:

publicSalesman

{

public:

Salesmanager(longnum,char*n,floatc=,doublem=4000):

Salesman(num,n,c){

monthlypay=m;}

voidpay(){

cout<<"êè"<

cin>>sales;

salary=monthlypay+commrate*sales;

}

voidprint(){

cout<

}

private:

doublemonthlypay;

};

(4)intmain()

{

Salesmans1(1234,"àèe");

Salesmanagers2(1357,"");

();

();

();

();

return0;

}

第十章

1.定义一个辅助类Complex,重载运算符+、-、*、/使之能用于复数的加减乘除运算。

运算符重载函数为Complex类的成员函数。

编写程序,分别求出两个复数之和、差、积、商。

解:

#include

usingnamespacestd;

classComplex

{

public:

Complex(doubler=,doublei={real=r;imag=i;}

Complexoperator+(Complex);

friendComplexoperator-(Complex,Complex);

Complexoperator*(Complex);

friendComplexoperator/(Complex,Complex);

voiddisplay();

private:

doublereal,imag;

};

ComplexComplex:

:

operator+(Complexc)

{

returnComplex(real+,imag+;

}

Complexoperator-(Complexc1,Complexc2)

{

returnComplexComplex:

:

operator*(Complexc)

{

returnComplex(real*+,imag*+real*;

}

Complexoperator/(Complexc1,Complexc2)

{

doubler,i;

r=*+*/*+*;

i=*return(r,i);

}

voidComplex:

:

display()

{

cout<<"("<

}

intmain()

{

Complexc1,,c2,5),c3;

cout<<"c1=";();

cout<<"c2=";();

c3=c1+c2;

cout<<"c1+c2=";();

c3=c1-c2;

cout<<"c1-c2=";();

c3=c1*c2;

cout<<"c1*c2=";();

c3=c1/c2;

cout<<"c1/c2=";();

return0;

}

2.定义一个日期类Date,包括年,月,日等私有数据成员。

要求为所定义的Date类设计如下重载运算符函数:

Dateoperator+(intdays);返回一日起加天数days后得到的日期

Dateoperator-(intdays);返回一日起减天数days后得到的日期

Intoperator-(Date&b);返回两日期相差的天数

解:

#include

usingnamespacestd;

intday_tab[12]={31,28,31,30,31,30,31,31,30,31,30,31};

classDate

{

public:

Date(){}

Date(inty,intm,intd){year=y;mon=m;day=d;}

voidsetday(intd){day=d;}

voidsetmon(intm){mon=m;}

voidsetyear(inty){year=y;}

intgetday(){returnday;}

intgetmon(){returnmon;}

intgetyear(){returnyear;}

Dateoperator+(intdays)

{

staticDatedate;

intnumber=dton(*this);

number-=days;

date=ntod(number);

returndate;

}

Dateoperator-(intdays)

{

staticDatedate;

intnumber=dton(*this);

number-=days;

date=ntod(number);

returndate;

}

intoperator-(Date&b)

{

intdays=dton(*this)-dton(b)-1;

returndays;

}

voiddisp()

{cout<

}

private:

intyear,mon,day;

intleap(int);

intdton(Date&);

Datentod(int);

};

intDate:

:

leap(intyear)

{

if(year%4==0&&year&100!

=0||year%400==0)

return1;

elsereturn0;

}

intDate:

:

dton(Date&d)

{

inty,m,days=0;

for(y=1;y<=;y++)

if(leap(y))

days+=366;

else

days+=365;

day_tab[1]=leap29:

28;

for(m=0;m<;m++)

days+=day_tab[m];

days+=;

returndays;

}

DateDate:

:

ntod(intn)

{

inty=1,m=1,d,rest=n,days_year;

while

(1)

{

days_year=leap(y)366:

365;

if(rest

break;

else

rest-=days_year;

y++;

}

y--;

day_tab[1]=leap(y)29:

28;

while

(1)

{

if(rest>day_tab[m-1])

rest-=day_tab[m-1];

else

break;

m++;

}

d=rest;

returnDate(y,m,d);

}

intmain()

{

Datenow(2011,12,22),Nationday(1949,10,1);

cout<<"now:

";();

cout<<"Nationday:

";();

cout<<"à2ììêy:

"<<(now-Nationday)<

Dated1=now+365,d2=now-365;

cout<<"now+365:

";();

cout<<"now-365:

";();

return0;

}

3.编写一个程序尖酸正方体圆柱体的表面积和体积。

要求抽象出一个公共的基类Body,吧他当做抽象类,在该类中定义表面积和体积的纯虚函数。

抽象类中定义一个数据成员data,他可以作为求的半径,正方形的边长,或者圆柱体的地面半径。

在三个类中都有计算白面积和体积的函数的具体实现。

解:

#include

usingnamespacestd;

classBody

{

protected:

doubledata;

public:

Body(doubledata)

{

Body:

:

data=data;

}

virtualdoubles()=0;

virtualdoublev()=0;

};

classCube:

publicBody

{

public:

Cube(doubledata):

Body(data){};

doubles()

{returndata*data*6;

}

doublev()

{returndata*data*data;

}

};

classSphere:

publicBody

{

public:

Sphere(doubler):

Body(r){};

doubles()

{

returndata*data**4;

}

doublev()

{

return4*data*data*data/3;

}

};

classCylinder:

publicBody

{

doubleheight;

public:

Cylinder(doubler,doubleheight):

Body(r){Cylinder:

:

height=height;}

doubles()

{

return(2**data*data+2*data**height);

}

doublev()

{

returndata*data**height;

}

};

intmain()

{

Body*p;

Cubeobj1(

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

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1