C--習題課剖析_第1頁
C--習題課剖析_第2頁
C--習題課剖析_第3頁
C--習題課剖析_第4頁
C--習題課剖析_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、習題講解53.4 編程題7已知用梯形法求積分的公式為:,其中h = ( ba ) / n,n為積分區(qū)間的等分數,編程序求如下積分的值。要求把求積分公式編寫成一個函數,并使用函數指針作為形式參數。調用該函數時,給定不同的被積函數作為實際參數求不同的積分。 【解答】#include<iostream>#include<cmath>using namespace std;double f1( double x ) return 4 / ( 1 + x*x ); double f2( double x ) return sqrt( 1 + x*x ); double f3( d

2、ouble x ) return sin( 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 )

3、; cout << "t1=" << t1 << endl; t2 = trap( 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(書名)、p

4、rice(價格)和number(存書數量)。成員函數: display()顯示圖書的情況;borrow()將存書數量減1,并顯示當前存書數量;restore()將存書數量加1,并顯示當前存書數量。在main函數中,要求創(chuàng)建某一種圖書對象,并對該圖書進行簡單的顯示、借閱和歸還管理?!窘獯稹?include <iostream>using namespace std;class Book public: void setBook(char*,double,int); void borrow(); void restore(); void display(); private: char

5、 bookname40; double price; int number; ;/在類外定義Book類的成員函數void Book:setBook(char *name, double pri, int num) strcpy(bookname, name); price=pri; number=num; void Book:borrow() if (number=0 ) cout << "已沒存書,退出!" << endl;abort(); number = number - 1; cout << "借一次,現存書量為:&qu

6、ot; << number << endl;void Book:restore() number = number + 1; cout << "還一次,現存書量為:" << number << endl; void Book:display() cout << "存書情況:" << endl << "bookname:" << bookname << endl << "price:"

7、<< price << endl << "number:" << number << endl; int main() char flag, ch; Book computer; computer.setBook( "c+程序設計基礎" , 32, 1000 ); computer.display(); ch = 'y' while ( ch = 'y' ) cout << "請輸入借閱或歸還標志(b/r):" cin >&g

8、t; flag; switch ( flag ) case 'b': computer.borrow(); break; case 'r': computer.restore(); cout << "是否繼續(xù)?(y/n)" cin >> ch; computer.display();6.4 編程題2定義一個Box(盒子)類,在該類定義中包括以下數據成員和成員函數。數據成員:length(長)、width(寬)和height(高)。成員函數:構造函數Box,設置盒子的長、寬和高3個初始數據;成員函數setBox對數據成員

9、置值;成員函數volume 計算盒子的體積。在main函數中,要求創(chuàng)建Box對象,輸入長、寬、高,輸出盒子的體積。【解答】#include <iostream>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:

10、double length, width, height; ;int main() BOX box1( 1,3,5 ); box1.volume(); BOX box2( 2,4,6 ); box2.volume();6.4 編程題3定義一個Student類,在該類定義中包括:一個數據成員(分數score)及兩個靜態(tài)數據成員(總分total和學生人數count);成員函數scoretotalcount(double s) 用于設置分數、求總分和累計學生人數;靜態(tài)成員函數sum()用于返回總分;靜態(tài)成員函數average()用于求平均值。在main函數中,輸入某班同學的成績,并調用上述函數求全班

11、學生的總分和平均分?!窘獯稹?include <iostream>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; ;do

12、uble student:total=0;double student:count=0;int main() int i,n; double s; cout << "請輸入學生人數:" cin >> n; student stu; for( i=1; i<=n; i+ ) cout << "請輸入第" << i << "個學生的分數:" cin >> s; stu.scoretotalcount( s ); cout << "總分:&q

13、uot; << student:sum() << endl;cout << "平均分:" << student:average() << endl;6.4 編程題4定義一個表示點的結構類型Point和一個由直線方程y = ax + b確定的直線類Line。結構類型Point有兩個成員x和y,分別表示點的橫坐標和縱坐標。Line類有兩個數據成員a和b,分別表示直線方程中的系數。Line類有一個成員函數print用于顯示直線方程。友元函數setPoint(Line &l1,Line &l2)用于求兩條直

14、線的交點。在main函數中,建立兩個直線對象,分別調用print函數顯示兩條直線的方程,并調用函數setPoint求這兩條直線的交點?!窘獯稹?include <iostream>using namespace std;struct point double x; double y; ;class line public: line( double u, double v ) a=u; b=v; void print() cout<<"y="<<a<<"x+"<<b<<endl; f

15、riend point setpoint(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&

16、lt;<"直線l2: " l2.print(); setp=setpoint( l1,l2 ); cout<<"直線l1和直線l2的交點:("<<setp.x<<","<<setp.y<<")"<<endl;8.2 閱讀下列程序,寫出運行結果1#include<iostream>using namespace std;class Base public :void get( int i,int j,int k,int l )a

17、 = 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;cla

18、ss A : public Basepublic :void get( int i, int j, int k, int 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 <<

19、; '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,

20、30, 40 );obj2.get( 30, 40, 50, 60 );obj1.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#include<iostream>using namespace std;class Base1 public : Base1( int i ) cout << "調用基類Base1的構造函數:" << i <&

21、lt; endl; ;class Base2 public:Base2( int j ) cout << "調用基類Base2的構造函數:" << j << endl; ; class A : public 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 :B

22、ase1 b1;Base2 b2; int main() A obj( 1, 2, 3, 4 ); 【解答】調用基類BASE1的構造函數:3調用基類BASE2的構造函數:2調用基類BASE1的構造函數:4調用基類BASE2構造函數:1調用派生類A的構造函數:109.4編程題1使用虛函數編寫程序,求球體和圓柱體的體積及表面積。由于球體和圓柱體都可以看做由圓繼承而來,因此,可以把圓類Circle作為基類。在Circle類中定義一個數據成員radius及兩個虛函數area和volume。由Circle類派生Sphere類和Column類。在派生類中對虛函數area和volume重新定義,分別求球體和

23、圓柱體的體積及表面積?!窘獯稹?include <iostream>using namespace std;const double PI=3.14159265;class circle public: circle(double r) radius = r; virtual double area() return 0.0; virtual double volume() return 0.0; protected: double radius;class sphere:public circle public: sphere( double r ):circle( r ) do

24、uble 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 ) height = h; double area() return 2.0 * PI * radius * ( height + radius ); double volume() return PI * radius *

25、radius * height;private: double height;int main()circle *p;sphere sobj(2);p = &sobj;cout << "球體:" << endl;cout << "體積 = " << p->volume() << endl;cout << "表面積 = " << p->area() << endl;column cobj( 3,5 );p = &c

26、obj;cout << "圓柱體:" << endl;cout << "體積 = " << p->volume() << endl;cout << "表面積 = " << p->area() << endl;2某學校教職工的工資計算方法為:所有教職工都有基本工資;教師月工資為固定工資+課時補貼。課時補貼根據職稱和課時計算。例如,每課時教授補貼50元,副補貼30元,講師補貼20元。管理人員月薪為基本工資+職務工資;實驗室人員月薪為

27、基本工資+工作日補貼。工作日補貼等于日補貼×月工作日數。定義教職工抽象類,派生教師、管理人員和實驗室類,編寫程序測試這個類體系。【解答】#include <iostream>using namespace std;class staff public:staff ( double bSalary)basicSalary=bSalary; virtual void input() = 0; virtual void output() = 0;protected: char name30; double basicSalary;class teacher : public s

28、taff public: teacher( int basicsalary=3000 ) : staff( basicsalary ) void input() cout<<"姓名?" cin>>name; cout<<"職稱 1,教授 2,副教授 3,講師 (輸入1,2 或 3):" cin>>title; cout<<"課時?" cin>>coursetime; void output()double salary;switch(title)case 1: salary = basicSalary+coursetime *50; break;case 2: salary=basicSalary+coursetime*30; break;case 3: salary=basicSalary+coursetime*20;cout<<"姓名:"<<name<

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論