C++习题课.docx
《C++习题课.docx》由会员分享,可在线阅读,更多相关《C++习题课.docx(16页珍藏版)》请在冰豆网上搜索。
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