C习题课剖析.docx

上传人:b****1 文档编号:13733855 上传时间:2023-06-16 格式:DOCX 页数:19 大小:25.14KB
下载 相关 举报
C习题课剖析.docx_第1页
第1页 / 共19页
C习题课剖析.docx_第2页
第2页 / 共19页
C习题课剖析.docx_第3页
第3页 / 共19页
C习题课剖析.docx_第4页
第4页 / 共19页
C习题课剖析.docx_第5页
第5页 / 共19页
C习题课剖析.docx_第6页
第6页 / 共19页
C习题课剖析.docx_第7页
第7页 / 共19页
C习题课剖析.docx_第8页
第8页 / 共19页
C习题课剖析.docx_第9页
第9页 / 共19页
C习题课剖析.docx_第10页
第10页 / 共19页
C习题课剖析.docx_第11页
第11页 / 共19页
C习题课剖析.docx_第12页
第12页 / 共19页
C习题课剖析.docx_第13页
第13页 / 共19页
C习题课剖析.docx_第14页
第14页 / 共19页
C习题课剖析.docx_第15页
第15页 / 共19页
C习题课剖析.docx_第16页
第16页 / 共19页
C习题课剖析.docx_第17页
第17页 / 共19页
C习题课剖析.docx_第18页
第18页 / 共19页
C习题课剖析.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C习题课剖析.docx

《C习题课剖析.docx》由会员分享,可在线阅读,更多相关《C习题课剖析.docx(19页珍藏版)》请在冰点文库上搜索。

C习题课剖析.docx

C习题课剖析

习题讲解5

3.4编程题

7.已知用梯形法求积分的公式为:

,其中h=(b-a)/n,n为积分区间的等分数,编程序求如下积分的值。

要求把求积分公式编写成一个函数,并使用函数指针作为形式参数。

调用该函数时,给定不同的被积函数作为实际参数求不同的积分。

【解答】

#include

#include

usingnamespacestd;

doublef1(doublex)

{return4/(1+x*x);

}

doublef2(doublex)

{returnsqrt(1+x*x);

}

doublef3(doublex)

{returnsin(x);

}

doubletrap(double(*fun)(doublex),doublea,doubleb,longn)

{doublet,h;inti;

t=((*fun)(a)+(*fun)(b))/2.0;

h=(b-a)/n;

for(i=1;i<=n-1;i++)t+=(*fun)(a+i*h);

t*=h;

returnt;

}

intmain()

{doublet1,t2,t3;

t1=trap(f1,0,1,10000);

cout<<"t1="<

t2=trap(f2,1,2,10000);

cout<<"t2="<

t3=trap(sin,0,3.14159265/2,10000);

cout<<"t3="<

}

6.4编程题

1.定义一个Book(图书)类,在该类定义中包括以下数据成员和成员函数。

数据成员:

bookname(书名)、price(价格)和number(存书数量)。

成员函数:

display()显示图书的情况;borrow()将存书数量减1,并显示当前存书数量;restore()将存书数量加1,并显示当前存书数量。

在main函数中,要求创建某一种图书对象,并对该图书进行简单的显示、借阅和归还管理。

【解答】

#include

usingnamespacestd;

classBook

{

public:

voidsetBook(char*,double,int);

voidborrow();

voidrestore();

voiddisplay();

private:

charbookname[40];

doubleprice;

intnumber;

};

//在类外定义Book类的成员函数

voidBook:

:

setBook(char*name,doublepri,intnum)

{

strcpy(bookname,name);

price=pri;

number=num;

}

voidBook:

:

borrow()

{

if(number==0)

{

cout<<"已没存书,退出!

"<

abort();

}

number=number-1;

cout<<"借一次,现存书量为:

"<

}

voidBook:

:

restore()

{

number=number+1;

cout<<"还一次,现存书量为:

"<

}

voidBook:

:

display()

{

cout<<"存书情况:

"<

<<"bookname:

"<

<<"price:

"<

<<"number:

"<

}

intmain()

{

charflag,ch;

Bookcomputer;

computer.setBook("c++程序设计基础",32,1000);

computer.display();

ch='y';

while(ch=='y')

{

cout<<"请输入借阅或归还标志(b/r):

";

cin>>flag;

switch(flag)

{

case'b':

computer.borrow();break;

case'r':

computer.restore();

}

cout<<"是否继续?

(y/n)";

cin>>ch;

}

computer.display();

}

 

6.4编程题

2.定义一个Box(盒子)类,在该类定义中包括以下数据成员和成员函数。

数据成员:

length(长)、width(宽)和height(高)。

成员函数:

构造函数Box,设置盒子的长、宽和高3个初始数据;成员函数setBox对数据成员置值;成员函数volume计算盒子的体积。

在main函数中,要求创建Box对象,输入长、宽、高,输出盒子的体积。

【解答】

#include

usingnamespacestd;

classBOX

{

public:

BOX(doublel,doublew,doubleh)

{length=l;

width=w;

height=h;

}

voidvolume()

{cout<<"volume="<

}

private:

doublelength,width,height;

};

intmain()

{

BOXbox1(1,3,5);

box1.volume();

BOXbox2(2,4,6);

box2.volume();

}

 

6.4编程题

3.定义一个Student类,在该类定义中包括:

一个数据成员(分数score)及两个静态数据成员(总分total和学生人数count);成员函数scoretotalcount(doubles)用于设置分数、求总分和累计学生人数;静态成员函数sum()用于返回总分;静态成员函数average()用于求平均值。

在main函数中,输入某班同学的成绩,并调用上述函数求全班学生的总分和平均分。

 

【解答】

#include

usingnamespacestd;

classstudent

{

public:

voidscoretotalcount(doubles)

{score=s;

total=total+score;

count++;

}

staticdoublesum()

{returntotal;

}

staticdoubleaverage()

{returntotal/count;

}

private:

doublescore;

staticdoubletotal;

staticdoublecount;

};

doublestudent:

:

total=0;

doublestudent:

:

count=0;

intmain()

{

inti,n;doubles;

cout<<"请输入学生人数:

";

cin>>n;

studentstu;

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

{

cout<<"请输入第"<

";

cin>>s;

stu.scoretotalcount(s);}

cout<<"总分:

"<

:

sum()<

cout<<"平均分:

"<

:

average()<

}

6.4编程题

4.定义一个表示点的结构类型Point和一个由直线方程y=ax+b确定的直线类Line。

结构类型Point有两个成员x和y,分别表示点的横坐标和纵坐标。

Line类有两个数据成员a和b,分别表示直线方程中的系数。

Line类有一个成员函数print用于显示直线方程。

友元函数setPoint(Line&l1,Line&l2)用于求两条直线的交点。

在main函数中,建立两个直线对象,分别调用print函数显示两条直线的方程,并调用函数setPoint求这两条直线的交点。

【解答】

#include

usingnamespacestd;

structpoint

{

doublex;

doubley;

};

classline

{

public:

line(doubleu,doublev)

{

a=u;b=v;

}

voidprint()

{

cout<<"y="<

}

friendpointsetpoint(line&l1,line&l2);

private:

doublea,b;

};

pointsetpoint(line&l1,line&l2)

{pointp;

p.x=(l2.b-l1.b)/(l1.a-l2.a);

p.y=(l1.a*l2.b-l2.a*l1.b)/(l1.a-l2.a);

returnp;

}

intmain()

{pointsetp;

linel1(2,3),l2(4,5);

cout<<"直线l1:

";

l1.print();

cout<<"直线l2:

";

l2.print();

setp=setpoint(l1,l2);

cout<<"直线l1和直线l2的交点:

("<

}

 

8.2阅读下列程序,写出运行结果

1.

#include

usingnamespacestd;

classBase

{

public:

voidget(inti,intj,intk,intl)

{a=i;b=j;x=k;y=l;

}

voidprint()

{cout<<"a="<

<<"x="<

}

inta,b;

protected:

intx,y;

};

classA:

publicBase

{

public:

voidget(inti,intj,intk,intl)

{

Baseobj3;

obj3.get(50,60,70,80);

obj3.print();

a=i;b=j;x=k;y=l;

u=a+b+obj3.a;v=y-x+obj3.b;

}

voidprint()

{

cout<<"a="<

<<"x="<

cout<<"u="<

}

private:

intu,v;

};

intmain()

{Baseobj1;

Aobj2;

obj1.get(10,20,30,40);

obj2.get(30,40,50,60);

obj1.print();

obj2.print();

}

【解答】

a=50b=60x=70y=80

a=10b=20x=30y=40

a=30b=40x=50y=60

u=120v=70

2.

#include

usingnamespacestd;

classBase1

{

public:

Base1(inti)

{cout<<"调用基类Base1的构造函数:

"<

};

classBase2

{

public:

Base2(intj)

{cout<<"调用基类Base2的构造函数:

"<

};

classA:

publicBase1,publicBase2

{

public:

A(inta,intb,intc,intd):

Base2(b),Base1(c),b2(a),b1(d)

{cout<<"调用派生类A的构造函数:

"<

private:

Base1b1;

Base2b2;

};

intmain()

{

Aobj(1,2,3,4);

}

【解答】

调用基类BASE1的构造函数:

3

调用基类BASE2的构造函数:

2

调用基类BASE1的构造函数:

4

调用基类BASE2构造函数:

1

调用派生类A的构造函数:

10

9.4 编程题

1.使用虚函数编写程序,求球体和圆柱体的体积及表面积。

由于球体和圆柱体都可以看做由圆继承而来,因此,可以把圆类Circle作为基类。

在Circle类中定义一个数据成员radius及两个虚函数area和volume。

由Circle类派生Sphere类和Column类。

在派生类中对虚函数area和volume重新定义,分别求球体和圆柱体的体积及表面积。

【解答】

#include

usingnamespacestd;

constdoublePI=3.14159265;

classcircle

{

public:

circle(doubler){radius=r;}

virtualdoublearea(){return0.0;}

virtualdoublevolume(){return0.0;}

protected:

doubleradius;

};

classsphere:

publiccircle

{

public:

sphere(doubler):

circle(r){}

doublearea()

{return4.0*PI*radius*radius;}

doublevolume()

{return4.0*PI*radius*radius*radius/3.0;}

};

classcolumn:

publiccircle

{

public:

column(doubler,doubleh):

circle(r){height=h;}

doublearea()

{return2.0*PI*radius*(height+radius);}

doublevolume()

{returnPI*radius*radius*height;}

private:

doubleheight;

};

intmain()

{

circle*p;

spheresobj

(2);

p=&sobj;

cout<<"球体:

"<

cout<<"体积="<volume()<

cout<<"表面积="<area()<

columncobj(3,5);

p=&cobj;

cout<<"圆柱体:

"<

cout<<"体积="<volume()<

cout<<"表面积="<area()<

}

2.某学校教职工的工资计算方法为:

所有教职工都有基本工资;

教师月工资为固定工资+课时补贴。

课时补贴根据职称和课时计算。

例如,每课时教授补贴50元,副补贴30元,讲师补贴20元。

管理人员月薪为基本工资+职务工资;

实验室人员月薪为基本工资+工作日补贴。

工作日补贴等于日补贴×月工作日数。

定义教职工抽象类,派生教师、管理人员和实验室类,编写程序测试这个类体系。

【解答】

#include

usingnamespacestd;

classstaff

{

public:

staff(doublebSalary)

{

basicSalary=bSalary;

}

virtualvoidinput()=0;

virtualvoidoutput()=0;

protected:

charname[30];

doublebasicSalary;

};

classteacher:

publicstaff

{

public:

teacher(intbasicsalary=3000):

staff(basicsalary){}

voidinput()

{

cout<<"姓名?

";

cin>>name;

cout<<"职称1,教授2,副教授3,讲师(输入1,2或3):

";

cin>>title;

cout<<"课时?

";

cin>>coursetime;

}

voidoutput()

{

doublesalary;

switch(title)

{

case1:

salary=basicSalary+coursetime*50;break;

case2:

salary=basicSalary+coursetime*30;break;

case3:

salary=basicSalary+coursetime*20;

}

cout<<"姓名:

"<

"<

}

protected:

intcoursetime;

inttitle;

};

classmanage:

publicstaff

{

public:

manage(intbasicsalary=2500):

staff(basicsalary){}

voidinput()

{

cout<<"姓名?

";

cin>>name;

cout<<"职务工资?

";

cin>>jobSalary;

}

voidoutput()

{

doublesalary;

salary=basicSalary+jobSalary;

cout<<"姓名:

"<

"<

}

protected:

doublejobSalary;

};

classtechnician:

publicstaff

{

public:

technician(intbasicsalary=2000):

staff(basicsalary){}

voidinput()

{

cout<<"姓名?

";

cin>>name;

cout<<"工作日?

";

cin>>workdays;

}

voidoutput()

{

doublesalary;

salary=basicSalary+workdays*20;

cout<<"姓名:

"<

"<

}

protected:

intworkdays;

};

intmain()

{

teachert;

t.input();

t.output();

managem;

m.input();

m.output();

technicianh;

h.input();

h.output();

}

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

当前位置:首页 > 表格模板 > 合同协议

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

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