1、C 习题课剖析习题讲解53.4 编程题7已知用梯形法求积分的公式为:,其中h = ( ba ) / n,n为积分区间的等分数,编程序求如下积分的值。要求把求积分公式编写成一个函数,并使用函数指针作为形式参数。调用该函数时,给定不同的被积函数作为实际参数求不同的积分。 【解答】#include#includeusing namespace std;double f1( double x ) return 4 / ( 1 + x*x ); double f2( double x ) return sqrt( 1 + x*x ); double f3( double x ) return sin(
2、x ); double trap( double( *fun )( double x ), double a,double b,long n ) double t,h; int i; 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; return t;int main() double t1,t2,t3; t1 = trap( f1,0,1,10000 ); cout t1= t1 endl; t2 = t
3、rap( f2,1,2,10000 ); cout t2= t2 endl; t3 = trap( sin,0,3.14159265/2,10000 ); cout t3= t3 endl;6.4 编程题1定义一个Book(图书)类,在该类定义中包括以下数据成员和成员函数。数据成员: bookname(书名)、price(价格)和number(存书数量)。成员函数: display()显示图书的情况;borrow()将存书数量减1,并显示当前存书数量;restore()将存书数量加1,并显示当前存书数量。在main函数中,要求创建某一种图书对象,并对该图书进行简单的显示、借阅和归还管理。【解答
4、】#include using namespace std;class Book public: void setBook(char*,double,int); void borrow(); void restore(); void display(); private: char bookname40; double price; int number; ;/在类外定义Book类的成员函数void Book:setBook(char *name, double pri, int num) strcpy(bookname, name); price=pri; number=num; void
5、Book:borrow() if (number=0 ) cout 已没存书,退出! endl; abort(); number = number - 1; cout 借一次,现存书量为: number endl;void Book:restore() number = number + 1; cout 还一次,现存书量为: number endl; void Book:display() cout 存书情况: endl bookname: bookname endl price: price endl number: number endl; int main() char flag, ch
6、; Book computer; computer.setBook( c+程序设计基础 , 32, 1000 ); computer.display(); ch = y; while ( ch = y ) cout flag; switch ( flag ) case b: computer.borrow(); break; case r: computer.restore(); cout ch; computer.display();6.4 编程题2定义一个Box(盒子)类,在该类定义中包括以下数据成员和成员函数。数据成员:length(长)、width(宽)和height(高)。成员函数:
7、构造函数Box,设置盒子的长、宽和高3个初始数据;成员函数setBox对数据成员置值;成员函数volume 计算盒子的体积。在main函数中,要求创建Box对象,输入长、宽、高,输出盒子的体积。【解答】#include using namespace std;class BOX public: BOX( double l, double w, double h ) length = l; width = w; height = h; void volume() cout volume= length * width * height endl; private: double length,
8、width, height; ; int main() BOX box1( 1,3,5 ); box1.volume(); BOX box2( 2,4,6 ); box2.volume();6.4 编程题3定义一个Student类,在该类定义中包括:一个数据成员(分数score)及两个静态数据成员(总分total和学生人数count);成员函数scoretotalcount(double s) 用于设置分数、求总分和累计学生人数;静态成员函数sum()用于返回总分;静态成员函数average()用于求平均值。在main函数中,输入某班同学的成绩,并调用上述函数求全班学生的总分和平均分。【解答】
9、#include using namespace std;class student public:void scoretotalcount( double s ) score = s; total = total + score; count+; static double sum() return total; static double average() return total / count; private:double score;static double total;static double count; ;double student:total=0;double st
10、udent:count=0;int main() int i,n; double s; cout n; student stu; for( i=1; i=n; i+ ) cout 请输入第 i s; stu.scoretotalcount( s ); cout 总分: student:sum() endl;cout 平均分: student:average() endl;6.4 编程题4定义一个表示点的结构类型Point和一个由直线方程y = ax + b确定的直线类Line。结构类型Point有两个成员x和y,分别表示点的横坐标和纵坐标。Line类有两个数据成员a和b,分别表示直线方程中的系
11、数。Line类有一个成员函数print用于显示直线方程。友元函数setPoint(Line &l1,Line &l2)用于求两条直线的交点。在main函数中,建立两个直线对象,分别调用print函数显示两条直线的方程,并调用函数setPoint求这两条直线的交点。【解答】#include using namespace std;struct point double x; double y; ;class line public: line( double u, double v ) a=u; b=v; void print() couty=ax+bendl; friend point set
12、point(line &l1,line &l2);private: double a, b; ;point setpoint( line &l1, line &l2 ) point p;p.x=( l2.b-l1.b )/( l1.a-l2.a );p.y=( l1.a*l2.b-l2.a*l1.b)/(l1.a-l2.a );return p; int main() point setp; line l1(2,3), l2(4,5); cout直线l1: ; l1.print(); cout直线l2: ; l2.print(); setp=setpoint( l1,l2 ); cout直线l
13、1和直线l2的交点:(setp.x,setp.y)endl;8.2 阅读下列程序,写出运行结果1#includeusing namespace std;class Base public :void get( int i,int j,int k,int l )a = i; b = j; x = k; y = l; void print()cout a = a t b = b t x = x t y = y endl;int a, b;protected :int x, y;class A : public Basepublic :void get( int i, int j, int k, i
14、nt l ) Base obj3;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;void print()cout a = a t b = b t x = x t y = y endl;cout u = u t v = v endl;private:int u, v;int main() Base obj1;A obj2;obj1.get( 10, 20, 30, 40 );obj2.get( 30, 40, 50, 60 );ob
15、j1.print();obj2.print();【解答】a = 50 b = 60 x = 70 y = 80a = 10 b = 20 x = 30 y = 40a = 30 b = 40 x = 50 y = 60u = 120 v = 702#includeusing namespace std;class Base1 public : Base1( int i ) cout 调用基类Base1的构造函数: i endl; ;class Base2 public:Base2( int j ) cout 调用基类Base2的构造函数: j endl; ; class A : public
16、Base1, public Base2 public :A( int a,int b,int c,int d ):Base2(b),Base1(c),b2(a),b1(d) cout 调用派生类A的构造函数: a+b+c+d endl; private :Base1 b1;Base2 b2; int main() A obj( 1, 2, 3, 4 ); 【解答】调用基类BASE1的构造函数:3调用基类BASE2的构造函数:2调用基类BASE1的构造函数:4调用基类BASE2构造函数:1调用派生类A的构造函数:109.4编程题1使用虚函数编写程序,求球体和圆柱体的体积及表面积。由于球体和圆柱体
17、都可以看做由圆继承而来,因此,可以把圆类Circle作为基类。在Circle类中定义一个数据成员radius及两个虚函数area和volume。由Circle类派生Sphere类和Column类。在派生类中对虚函数area和volume重新定义,分别求球体和圆柱体的体积及表面积。【解答】#include using namespace std;const double PI=3.14159265;class circle public: circle(double r) radius = r; virtual double area() return 0.0; virtual double v
18、olume() return 0.0; protected: double radius;class sphere:public circle public: sphere( double r ):circle( r ) double area() return 4.0 * PI * radius * radius; double volume() return 4.0 * PI * radius * radius * radius / 3.0; ;class column:public circle public: column( double r,double h ):circle( r
19、) height = h; double area() return 2.0 * PI * radius * ( height + radius ); double volume() return PI * radius * radius * height; private: double height;int main()circle *p;sphere sobj(2);p = &sobj;cout 球体: endl;cout 体积 = volume() endl;cout 表面积 = area() endl;column cobj( 3,5 );p = &cobj;cout 圆柱体: en
20、dl;cout 体积 = volume() endl;cout 表面积 = area() endl;2某学校教职工的工资计算方法为:所有教职工都有基本工资;教师月工资为固定工资+课时补贴。课时补贴根据职称和课时计算。例如,每课时教授补贴50元,副补贴30元,讲师补贴20元。管理人员月薪为基本工资+职务工资;实验室人员月薪为基本工资+工作日补贴。工作日补贴等于日补贴月工作日数。定义教职工抽象类,派生教师、管理人员和实验室类,编写程序测试这个类体系。【解答】#include using namespace std;class staff public: staff ( double bSalary
21、) basicSalary=bSalary; virtual void input() = 0; virtual void output() = 0; protected: char name30; double basicSalary;class teacher : public staff public: teacher( int basicsalary=3000 ) : staff( basicsalary ) void input() coutname; couttitle; coutcoursetime; void output() double salary; switch(tit
22、le) case 1: salary = basicSalary+coursetime *50; break; case 2: salary=basicSalary+coursetime*30; break; case 3: salary=basicSalary+coursetime*20; cout姓名:namet本月工资:salaryendl; protected: int coursetime; int title;class manage : public staff public: manage( int basicsalary=2500 ) : staff( basicsalary
23、 ) void input() coutname; coutjobSalary; void output() double salary; salary = basicSalary+jobSalary; cout姓名:namet本月工资:salaryendl; protected: double jobSalary; class technician : public staff public: technician( int basicsalary=2000 ) : staff( basicsalary ) void input() coutname; coutworkdays; void output() double salary; salary = basicSalary+workdays*20; cout姓名:namet本月工资:salaryendl; protected: int workdays; int main() teacher t; t.input(); t.output(); manage m; m.input(); m.output(); technician h; h.input(); h.output();
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2