C++綜合應(yīng)用實(shí)例_第1頁(yè)
C++綜合應(yīng)用實(shí)例_第2頁(yè)
C++綜合應(yīng)用實(shí)例_第3頁(yè)
C++綜合應(yīng)用實(shí)例_第4頁(yè)
C++綜合應(yīng)用實(shí)例_第5頁(yè)
已閱讀5頁(yè),還剩93頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.,C/C+綜合應(yīng)用實(shí)例,1、數(shù)據(jù)代數(shù)運(yùn)算系統(tǒng)的設(shè)計(jì)(相當(dāng)于計(jì)算器) 2、學(xué)生成績(jī)管理系統(tǒng)的設(shè)計(jì) 3、三角形面積驗(yàn)證程序的設(shè)計(jì),.,1、數(shù)據(jù)代數(shù)運(yùn)算系統(tǒng)的設(shè)計(jì)(相當(dāng)于計(jì)算器),問(wèn)題:設(shè)計(jì)一個(gè)計(jì)算器程序,完成整數(shù)間的加、減、乘、除以及求運(yùn)算,以及累加求和、計(jì)算n!等。 (1)計(jì)算器程序設(shè)計(jì)文檔 (2)使用TC開(kāi)發(fā)的dos界面程序; (3)程序運(yùn)行演示; 這樣的系統(tǒng)不好,我們可以將其改寫(xiě)為圖形界面 (4)圖形界面程序演示; (5) 圖形界面程序源代碼,.,2、學(xué)生成績(jī)管理系統(tǒng)的設(shè)計(jì),例2:編寫(xiě)程序,實(shí)現(xiàn)學(xué)生成績(jī)管理:要求實(shí)現(xiàn) 用戶登錄, 顯示主菜單, 學(xué)生信息的輸入, 學(xué)生信息的輸出, 按學(xué)號(hào)查詢

2、學(xué)生信息, 按成績(jī)降序排序, 追加學(xué)生信息, 把學(xué)生信息保存到文件, 從文件中導(dǎo)出學(xué)生信息 等有關(guān)的功能。,.,關(guān)于該設(shè)計(jì)題目的有關(guān)問(wèn)題與分析:,(1)采用的程序設(shè)計(jì)方法的選擇? A)面向結(jié)構(gòu)的設(shè)計(jì)方法? B)面向?qū)ο蟮脑O(shè)計(jì)方法? (2)運(yùn)行界面的選擇? A) DOS界面的設(shè)計(jì)? B) 圖形界面(Windows界面)? (3)數(shù)據(jù)類型的定義 (結(jié)構(gòu)體或類的定義) (4)(數(shù)據(jù)結(jié)構(gòu)的定義)存放數(shù)據(jù)的方式 順序表(數(shù)組存放一個(gè)班學(xué)生信息) 鏈表(利用指針存放一個(gè)班的學(xué)生信息),.,該題目的分析與設(shè)計(jì):,本題目可以采用4種方式實(shí)現(xiàn): (1)采用面向結(jié)構(gòu)的程序設(shè)計(jì)方法,用順序表(數(shù)組和結(jié)構(gòu)體),DOS

3、界面。 (2)采用面向結(jié)構(gòu)的程序設(shè)計(jì)方法,用鏈表(指針和結(jié)構(gòu)體),DOS界面 (3)采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,用順序表(定義順序表類),DOS界面 (4)采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,用鏈表(定義鏈表類),DOS界面 另外,對(duì)這4種方式,都可以采用Windows(圖形)界面實(shí)現(xiàn)。,.,(1)采用面向結(jié)構(gòu)的程序設(shè)計(jì)方法 用順序表(數(shù)組和結(jié)構(gòu)體) DOS界面,.,采用面向結(jié)構(gòu)的程序設(shè)計(jì)方法,用順序表(數(shù)組和結(jié)構(gòu)體),DOS界面,處理過(guò)程: (1)定義學(xué)生結(jié)構(gòu)體; (2)定義學(xué)生數(shù)組(一般放到主函數(shù)中定義) 這里要注意,學(xué)生人數(shù)問(wèn)題 (3)按功能要求定義各有關(guān)功能函數(shù); 這里要注意,每個(gè)函數(shù)的參數(shù)及

4、其函數(shù)的返回值 (4)設(shè)計(jì)主函數(shù),實(shí)現(xiàn)系統(tǒng)所要求的功能。 思考: 假設(shè)將(2)定義成一個(gè)“班級(jí)結(jié)構(gòu)體”,那么,整個(gè)系統(tǒng)該如何實(shí)現(xiàn));,.,(1)定義學(xué)生結(jié)構(gòu)體;,struct st char Class20; /班級(jí) int num; /學(xué)號(hào) char name8; /姓名 float kc6; /各課程成績(jī)(6門) float ave; /平均成績(jī) int order; /名次 ;,.,按功能要求定義各有關(guān)功能函數(shù),(1)學(xué)生信息的輸入(輸入學(xué)生的信息,存放到數(shù)組s中,返回實(shí)際學(xué)生個(gè)數(shù)給n,注意:輸入的結(jié)束條件如何設(shè)計(jì)?) void iuput(st s int *n); (2)將數(shù)組s中,

5、n個(gè)學(xué)生信息輸出,要求:按一定得格式輸出學(xué)生信息(最好是表格格式,并且當(dāng)學(xué)生人數(shù)較多時(shí),應(yīng)按頁(yè)顯示) void pint(st s,int n) (3)從數(shù)組s,n個(gè)學(xué)生信息中,查詢學(xué)號(hào)為x的學(xué)生信息,并返回查找成功是(位置號(hào))否(-1)。 int find(st s,int n, int x),.,(4)將數(shù)組s,n個(gè)學(xué)生信息中按平均成績(jī)降序排序,形成排序數(shù)組y。 sort(st s,int n,st y) (5)在數(shù)組s,n個(gè)學(xué)生信息的未,輸入追加學(xué)生信息。 該功能的實(shí)現(xiàn),可以使用(1)輸入學(xué)生信息功能 (6)將數(shù)組s,n個(gè)學(xué)生信息,保存到文件f中。 save(st s,int n, ch

6、ar *f) (7) 從文件f中導(dǎo)出學(xué)生信息,存放到數(shù)組s中,并返回實(shí)際學(xué)生人數(shù)n。 load(char *f,st s,int 定義數(shù)組 int m; 數(shù)組的最大空間 int n; 實(shí)際學(xué)生人數(shù) m=1000; st=new stm; n=0; 顯示菜單,分別調(diào)用有關(guān)的函數(shù)。 ,.,(3)采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法 用順序表(定義順序表類) DOS界面,.,采用面向結(jié)構(gòu)的程序設(shè)計(jì)方法,用順序表(定義順序表類),DOS界面,處理過(guò)程: (1)定義學(xué)生類; (2)定義班級(jí)類 (3)設(shè)計(jì)主函數(shù),定義有關(guān)的對(duì)象,并調(diào)用有關(guān)的函數(shù),完成系統(tǒng)功能。,分析: 由于成績(jī)管理是由多名學(xué)生構(gòu)成的,所以需要定義學(xué)

7、生類; 另外,由多個(gè)學(xué)生,形成一個(gè)班或年級(jí),所以還需要定義一個(gè)班級(jí)(年級(jí))類,.,(1)定義學(xué)生類;,class st private: char Class20; /班級(jí) int num; /學(xué)號(hào) char name8; /姓名 float kc6; /各課程成績(jī)(6門) float ave; /平均成績(jī) int order; /名次 public: 分析:關(guān)于學(xué)生類,該有哪些函數(shù)成員? ;,.,學(xué)生類,函數(shù)成員的定義與實(shí)現(xiàn),public: (1) 構(gòu)造函數(shù)的定義: 利用參數(shù)傳遞,形成一個(gè)學(xué)生 有鍵盤(pán)輸入形成一個(gè)學(xué)生 (2) 輸出學(xué)生信息函數(shù);,.,(2)定義班級(jí)類,class bj pri

8、vate: int m; /私有變量,順序表實(shí)例的最大長(zhǎng)度 int n; / 私有變量,順序表實(shí)例的當(dāng)前長(zhǎng)度 st *s; /存放學(xué)生的數(shù)組(利用指針實(shí)現(xiàn)) public: 分析:關(guān)于班級(jí)類,該有哪些函數(shù)成員? ;,.,班級(jí)類,函數(shù)成員的定義與實(shí)現(xiàn),public: (1) 構(gòu)造函數(shù)的定義: 利用參數(shù)傳遞,形成班級(jí) 由數(shù)組s中,n各學(xué)生,形成班級(jí) bj(st s int n); 有鍵盤(pán)輸入形成班級(jí) 學(xué)生信息的輸入(輸入的結(jié)束條件如何設(shè)計(jì)?) bj(); 有文件導(dǎo)入,形成班級(jí); 從文件f中導(dǎo)出學(xué)生信息, bj(char *f),.,其它成員函數(shù),(2)輸出學(xué)生信息,要求:按一定得格式輸出學(xué)生信息(

9、最好是表格格式,并且當(dāng)學(xué)生人數(shù)較多時(shí),應(yīng)按頁(yè)顯示) void pint() (3)查詢學(xué)號(hào)為x的學(xué)生信息,并返回查找成功是(位置號(hào))否(-1)。 int find(int x),.,(4) 按平均成績(jī)降序排序,形成新類。 st sort() (5)在學(xué)生信息的未,輸入追加學(xué)生信息。 注意:輸入的結(jié)束條件如何設(shè)計(jì)? void input() (6)在學(xué)生信息的未,通過(guò)文件f,追加學(xué)生信息。 void app(char *f) (7)保存到文件f中。 void save(char *f),.,給出每個(gè)函數(shù)的具體實(shí)現(xiàn),同學(xué)們自己給出各函數(shù)的源代碼。,.,設(shè)計(jì)主函數(shù),實(shí)現(xiàn)系統(tǒng)所要求的功能,定義有關(guān)的對(duì)

10、象 Void main() bj b; 定義班級(jí)對(duì)象 st s; 定義學(xué)生對(duì)象 顯示菜單,分別調(diào)用有關(guān)的函數(shù)。 ,.,鏈表成績(jī)管理,1.鏈表的定義與結(jié)構(gòu)描述 2.鏈表的有關(guān)操作實(shí)現(xiàn) 3.利用鏈表結(jié)構(gòu)實(shí)現(xiàn)成績(jī)管理 (1) 成績(jī)管理的功能分析 (2) 成績(jī)管理的類定義與實(shí)現(xiàn),3 采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法, 用鏈表(定義鏈表類),DOS界面,.,1 單鏈表,通過(guò)指針把它的一串存儲(chǔ)結(jié)點(diǎn)鏈接成一個(gè)鏈 存儲(chǔ)結(jié)點(diǎn)由兩部分組成: data字段 next 字段,頭指針,指向下一個(gè)節(jié)點(diǎn)的指針,附加頭結(jié)點(diǎn),結(jié)點(diǎn),尾指針,.,單鏈表的結(jié)點(diǎn)類型,struct ListNode int data; ListNode *

11、 next; ;,問(wèn)題(有關(guān)鏈表的操作): 如何定義(申明)一個(gè)鏈表呢? 如何形成一個(gè)鏈表呢? 在鏈表中指定的位置處,如何插入一個(gè)節(jié)點(diǎn)呢? 在鏈表中如何刪除一個(gè)節(jié)點(diǎn)呢? 一個(gè)鏈表中,有幾個(gè)數(shù)據(jù)元素呢?,.,如何定義(申明)一個(gè)鏈表呢?,一個(gè)鏈表一般只要告訴該鏈表的頭指針即可。,定義鏈表: struct ListNode *first,該鏈表所有的操作,全部是從“first”開(kāi)始, 并且,該指針永遠(yuǎn)指向第一個(gè)位置。,.,一個(gè)鏈表是如何形成呢?,一個(gè)鏈表的形成,一般需要兩步:,First,(2)在空鏈表的基礎(chǔ)上不斷的插入節(jié)點(diǎn),從而形成鏈表。 一般分為:在前插入、在后插入兩種,(1)首先形成一個(gè)空鏈

12、表:,NULL(0),.,構(gòu)造空單鏈表,LinkList() first=new ListNode; first-next =0; ;,.,建立單鏈表,頭插法建立單鏈表圖示,頭插法,.,尾插法建表,尾插法建表圖示,將新建的節(jié)點(diǎn)插入到鏈表的最后,尾指針,.,在頭結(jié)點(diǎn)之后插入一個(gè)新結(jié)點(diǎn),void LinkList:insert(int a) ListNode *temp; temp=new ListNode; temp-data=a; temp-next=0; temp-next=first-next; first-next=temp; ,執(zhí)行的語(yǔ)句組為:snextfirstnext;firstn

13、exts;,c,i,1,first,c,2,c,1,c,i,s,插入第,i,個(gè)元素,.,單鏈表的建立(調(diào)用插入函數(shù),可以創(chuàng)建鏈表:形成具有n個(gè)元素的鏈表),void LinkList:create(int n) int i=0; int data; cout data; insert(data); i+; ,.,查找單鏈表中第i個(gè)結(jié)點(diǎn)算法,ListNode * FindIndex(const int i) ListNode *p if( i = -1) return first; p=first-next; / int j=0; while( p !=NULL ,.,單鏈表插入算法 (第i節(jié)點(diǎn)

14、前插入),.,單鏈表插入算法,ListNode * Insert(int value, int i) / 插入數(shù)據(jù)內(nèi)容為value的新結(jié)點(diǎn),為第i個(gè)結(jié)點(diǎn)。 ListNode *p,*q; q = new ListNode; q-data = value; p = FindIndex(i-1); if(p = NULL ) return NULL; q-next = p-next; p-next = q; return q; ,.,單鏈表刪除算法,void RemoveAfter(ListNode * link) /刪除參數(shù)link的后繼結(jié)點(diǎn) ListNode *newlink; if(link

15、!=NULL) newlink=link-next; link-next=newlink-next link-next=link-next-nexy delete newlink; ,.,求長(zhǎng)度算法,int Length() ListNode *p=first-next; int count=0; while(p!=NULL) p=p-next; count+; return count; ,p,.,單鏈表的類定義,分析 1數(shù)據(jù)成員: 兩個(gè)指向結(jié)點(diǎn)的指針:頭指針和尾指針 2成員函數(shù): (1) 構(gòu)造函數(shù) /創(chuàng)建并形成一個(gè)初始鏈表 (2)析構(gòu)函數(shù) /刪除構(gòu)造函數(shù)所創(chuàng)建的鏈表 (3)插入元素函數(shù) /

16、在表的第i 個(gè)位置處,插入數(shù)據(jù)或在表尾插入元素 (4)刪除元素函數(shù) /刪除表中數(shù)值為x的元素 (5)查找元素 /在表中查找數(shù)據(jù)為x的元素在表中的位置 (6)輸出鏈表 /從頭到尾輸出表中的所有的元素 (7)判定鏈表是否為空 /為了進(jìn)行刪除進(jìn)行的一種判定 (8) 將鏈表設(shè)置為一個(gè)空表 / (9)計(jì)算鏈表的長(zhǎng)度 /統(tǒng)計(jì)鏈表中元素個(gè)數(shù) (10) 將鏈表元素值寫(xiě)到文件中 (11) 將文件中的數(shù)據(jù)讀到鏈表中,.,class LinkList /鏈表類 private: ListNode *first,*last; /鏈表的表頭指針和尾指針 public: LinkList ( ) LinkList ( )

17、 ; /析構(gòu)函數(shù) ListNode *Insert ( int value, int i ); Listnode *insert(intvalue) int Remove (int value ); ListNode *FindIndex ( int value ); void PrintList( ); /遍歷單鏈表 void MakeEmpty ( ); /將鏈表置為空表 int Length ( ) const; /計(jì)算鏈表的長(zhǎng)度 int NotNull ( ) ; /判斷是否是空表 void create(); ;,單鏈表的類定義,.,三、利用鏈表結(jié)構(gòu)實(shí)現(xiàn)成績(jī)管理 (1) 成績(jī)管理的功

18、能分析 (2) 成績(jī)管理的類定義與實(shí)現(xiàn) 要求: 1簡(jiǎn)單的系統(tǒng)與功能分析 2建立數(shù)據(jù)結(jié)構(gòu)表 3要建立一個(gè)測(cè)試的數(shù)據(jù)表,至少要有20個(gè)測(cè)試數(shù)據(jù) 4使用數(shù)據(jù)鏈表實(shí)現(xiàn)數(shù)據(jù)的:錄入、查詢、修改、增加、刪除、統(tǒng)計(jì)、輸出,.,一、定義學(xué)生成績(jī)管理系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)表,序號(hào) 成員名 數(shù)據(jù)類型 長(zhǎng)度 字段含義 1 Class int 班級(jí) 2 num int 學(xué)號(hào) 3 name char 8 姓名 4 kc0 float 電子技術(shù) 5 kc1 float C+程序設(shè)計(jì) 6 kc2 float 多媒體技術(shù) 7 kc3 float 大學(xué)英語(yǔ) 8 kc4 float 高等數(shù)學(xué) 9 kc5 float 大學(xué)體育 10 Av

19、e float 平均成績(jī) 11 Order int 名次 13 next ”自定義的結(jié)構(gòu)類型 “ 指針,指向下一個(gè)結(jié)點(diǎn),.,二、根據(jù)所要求的成績(jī)管理系統(tǒng)定義類,系統(tǒng)的功能要求: 使用數(shù)據(jù)鏈表實(shí)現(xiàn)如下功能: 初始鏈表的建立,錄入、查詢、修改、增加、刪除、統(tǒng)計(jì)、輸出等功能。,(一)數(shù)據(jù)定義(類的數(shù)據(jù)成員說(shuō)明): 一個(gè)指向?qū)W生結(jié)構(gòu)的頭指針; (注意:該指針就是鏈表的頭),struct node int Class; /班級(jí) int num; /學(xué)號(hào) char name8; /姓名 float kc6; /各課程成績(jī)(6門) float ave; /平均成績(jī) int order; /名次 node *

20、next; /指針 ;,class cj private: struct node *head; public: 待定義的各功能函數(shù) ,結(jié)點(diǎn)定義,類定義,.,(二)操作定義(函數(shù)功能劃分),1.初始鏈表的建立: 利用類的構(gòu)造函數(shù),建立一個(gè)只有附加頭結(jié)點(diǎn)的空鏈表; 2.錄入(增加一個(gè))學(xué)生信息: 由鍵盤(pán)一個(gè)一個(gè)輸入學(xué)生的信息,并鏈到鏈表中; (注意:什么時(shí)候停止輸入呢?即:輸入的結(jié)束條件?) 如何鏈到鏈表上呢?(在表的尾上追加) 3.追加結(jié)點(diǎn): 在鏈表尾上鏈上一個(gè)結(jié)點(diǎn)(p所指的結(jié)點(diǎn)):,.,4.鏈表的建立: 在空鏈表已經(jīng)建立的基礎(chǔ)上,向鏈表中提供信息(注意:采用先提供的信息在表的前面,依次向后)

21、; 可以分為兩種方式: (1)由鍵盤(pán)一個(gè)一個(gè)輸入學(xué)生的信息,并鏈到鏈表中; (可以直接使用添加學(xué)生操作;即使用2) (2)利用文件將文件中的內(nèi)容讀入,并鏈到鏈表中,.,5.定位: 提供學(xué)生的學(xué)號(hào),在鏈表中查找該學(xué)生所在鏈表中的位置 (返回指向該結(jié)點(diǎn)的一個(gè)指針) (注意:該操作是為后面的操作服務(wù)的,特別是:刪除、修改、查詢) 6.查詢: 提供學(xué)生的學(xué)號(hào),在鏈表中查找該學(xué)生并輸出該學(xué)生的信息(包括學(xué)生的名次) 7.刪除: 提供學(xué)生的學(xué)號(hào),在鏈表中查找該學(xué)生,并從表中刪除學(xué)號(hào)是該值的學(xué)生 8.修改成績(jī): 提供學(xué)生的學(xué)號(hào),在鏈表中查找該學(xué)生,找到后先顯示原來(lái)的學(xué)生信息,然后修改(重新輸入)學(xué)生信息,.

22、,9.統(tǒng)計(jì): 給出各課成績(jī)的平均分,總平均分,并分別按各課程統(tǒng)計(jì)成績(jī)段的人數(shù):優(yōu)秀人數(shù)、良好人數(shù)、中等人數(shù)、及格人數(shù),不及格人數(shù), 并按一定的格式將所有統(tǒng)計(jì)結(jié)果顯示出來(lái)。 10.排序(降序): 按學(xué)生的平均成績(jī)進(jìn)行由小到大排序,新形成一個(gè)排序鏈表,. (注意:該操作是為其它操作服務(wù)的;例如:5(查詢)可以使用,當(dāng)添加學(xué)生或刪除學(xué)生以及修改學(xué)生成績(jī)后,都需要重新排序) 11.輸出鏈表: 按鏈表中的先后次序輸出表中的所有信息 (注意:該操作為按順序輸出信息和排序輸出服務(wù)):,.,12. 寫(xiě)文件: 將進(jìn)行各種操作后所形成的鏈表信息,寫(xiě)入文件中,備以后使用時(shí),利用3(2)再讀入形成鏈表. (注意:可以

23、形成兩類文件:按輸入的順序,按排序后的) 13. 其他的一些服務(wù)操作: (1)析構(gòu)函數(shù): (2)輸出表頭函數(shù): (為功能、6、7、8、11、12服務(wù)) (3)輸出P指針?biāo)附Y(jié)點(diǎn)信息: (為功能: 6、7、8、11、12服務(wù)),.,類聲明:由以上分析,可以給出成績(jī)管理的類聲明:,class cj private: struct node *head; public: cj(); /1:構(gòu)造函數(shù),建立一個(gè)只有附加頭結(jié)點(diǎn)的空鏈表 input(); / 2:向鏈表中添加學(xué)生的信息(在表的尾上追加) appen(node *p); /3.追加結(jié)點(diǎn): 在鏈表尾上鏈上一個(gè)結(jié)點(diǎn)(p所指的結(jié)點(diǎn)) void rf

24、(char *f); /4.讀文件,形成鏈表 node *post(int num); /5.定位: 提供學(xué)號(hào), 返回指向該結(jié)點(diǎn)的一個(gè)指針) void lookup(int num); / 6.查詢 提供學(xué)號(hào), 查找學(xué)生并輸出學(xué)生的信息 void Delete(int num); /7.刪除: 提供學(xué)號(hào), 刪除學(xué)號(hào)是該值的學(xué)生 void modify(int num); /8.修改成績(jī): 提供學(xué)號(hào), 修改(重新輸入)學(xué)生信息 void statistic() ; /9.統(tǒng)計(jì)函數(shù),統(tǒng)計(jì)平均成績(jī) void sort(cj ,.,cj:cj() /1:構(gòu)造函數(shù),建立一個(gè)只有附加頭結(jié)點(diǎn)的空鏈表 hea

25、d=new node; head-next=0; ,.,void cj: input() / 2:錄入學(xué)生信息: 由鍵盤(pán)一個(gè)一個(gè)輸入學(xué)生的信息,并在表的尾上追加) int Class; char name8; int num; float c6,ave; int order; node *p2; int t,i; coutt; while(t=1) coutClassnamenumc0c1c2c3c4c5; p2=new node; ave=(c0+c1+c2+c3+c4+c5)/6; p2-Class=Class; p2-num=num; strcpy(p2-name,name); for(

26、i=0;ikci=ci; p2-order=0; p2-ave=ave; appen(p2); coutt; ,.,void cj: appen(node *p) /3.追加結(jié)點(diǎn): 在鏈表尾上鏈上一個(gè)結(jié)點(diǎn)(p所指的結(jié)點(diǎn)) node *p1,*p2; p1=head; p2=p1-next; while(p2) p1=p2; p2=p2-next; p1-next=p; p-next=p2; ,.,void cj:rf(char *f) /4.讀文件,形成鏈表 int Class; char name8; int num; float c6,ave; int order; char ss250;

27、 /存放標(biāo)題的 node *p2; ifstream ff; ff.open(f); ff.getline(ss,200); /取第一行標(biāo)題 ff.getline(ss,200); /取第二行標(biāo)題 ffClassnamenumc0c1c2c3c4c5; while(!ff.eof() p2=new node; ave=(c0+c1+c2+c3+c4+c5)/6; p2-Class=Class; p2-num=num; strcpy(p2-name,name); for(i=0;ikci=ci; p2-order=0; p2-ave=ave; appen(p2); ffClassnamenumc

28、0c1c2c3c4c5; ff.close(); ,.,node cj:*post (int num) /5.定位: 提供學(xué)號(hào), 返回指向該結(jié)點(diǎn)的一個(gè)指針) node *p1,*p2; p1=head; if(p1-next=0) return 0; p2=p1-next; while(p2-num!=num ,.,void cj:lookup(int num) / 6.查詢 提供學(xué)號(hào), 查找學(xué)生并輸出學(xué)生的信息 node *p1; p1=post (num) ;/定位: 提供學(xué)號(hào), 返回指向該結(jié)點(diǎn)的一個(gè)指針) if(p1!=0) print1(); /輸出一個(gè)同學(xué)的成績(jī)(標(biāo)題) print2

29、(p1); /輸出一個(gè)同學(xué)的信息 else cout無(wú)學(xué)生記錄!endl; ,.,void cj:Delete(int num) /7.刪除: 提供學(xué)號(hào), 刪除學(xué)號(hào)是該值的學(xué)生 node *p1,*p2; p1=head-next; if(p1=0) coutnum!=num ,.,void cj:modify(int num) /8: 修改函數(shù),修改對(duì)應(yīng)學(xué)號(hào)的學(xué)生成績(jī) node *p,*p2; p=post ( num) ;/定位: 提供學(xué)號(hào), 返回指向該結(jié)點(diǎn)的一個(gè)指針) if(p!=0) float c6, coutc0c1c2c3c4c5; ave=(c0+c1+c2+c3+c4+c5)

30、/6; for(i=0;ikci=ci; p-ave=ave; else cout沒(méi)找到該學(xué)生!endl; return; ,.,void cj:statistic() /9.統(tǒng)計(jì)函數(shù),統(tǒng)計(jì)平均成績(jī) node *p1; int i=0; float s1=0,s2=0,s3=0,s4=0,s5=0,s6=0; /S1為電子技術(shù)總成績(jī); /S2為C+總成績(jī);s3為數(shù)學(xué)總成績(jī);s4為英語(yǔ),S5為政治;S6為體育; print1(); p1=head-next; while(p1!=0) print2(p1); s1=s1+p1-kc0; s2=s2+p1-kc1; s3=s3+p1-kc2; s4

31、=s4+p1-kc3; s5=s5+p1-kc4; s6=s6+p1-kc5; i+; p1=p1-next; cout平均成績(jī):endl; cout電子技術(shù)s1/itC+:s2/i; cout數(shù)學(xué)s3/it英語(yǔ)s4/it政治s5/it; cout體育s6/iendl; ,.,void cj:sort(cj ,.,void cj:Insert(cj ,.,void cj:output()/11: 輸出鏈表中各結(jié)點(diǎn)值 node *p; p=head-next; coutnext; coutendl; ,.,void cj:wf(char *f) /12. 由鏈表,形成文件 node *p; of

32、stream ff; ff.open(f); ffnext; while(p) ffnamenumClasskc0kc1kc2kc3kc4kc5next; ff.close(); ,.,cj:cj() / 13(1):析構(gòu)函數(shù),程序運(yùn)行結(jié)束時(shí),刪除鏈表中的各結(jié)點(diǎn), node *p1; while(head) p1=head; head=head-next; delete p1; ,.,void cj:print1() /13(2): 輸出一個(gè)同學(xué)的成績(jī)(標(biāo)題) coutnamenumClasskci; coutendl; ,.,int cj:Length() const /13(4): 計(jì)算鏈

33、表的長(zhǎng)度 int n=0; node *p; p=head-next; while(p!=0) n=n+1; p=p-next; return n; node cj: *gethead() /13(5)獲取頭指針 return head;,.,void main() /主函數(shù) cj A,B; int a; int num; while(1) couta;,.,switch(a) case 0: goto end; case 1:A.create();break; case 2:coutnum; A.modify(num); A.sort(B); break; case 3 :A.sort(B)

34、; coutnum; B.lookup(num); break; case 4:coutnum; A.Delete(num); break;,case 5:A.output();break; case 6:A.statistic();break; case 7: cout學(xué)生人數(shù)為:A.Length()endl; break; case 8:A.sort(B); B.output();break; case 9:A.rf(abc);break; case 10:A.wf(abc);break; default:break; ; cout按任意鍵繼續(xù)操作!endl; getchar(); end

35、:; cout謝謝您使用本系統(tǒng)!endl; ,.,3、三角形面積驗(yàn)證程序的設(shè)計(jì),問(wèn)題: 給出求解下列問(wèn)題逐步求精的分析過(guò)程,并設(shè)計(jì)程序完成其驗(yàn)證: 已知一個(gè)正三角形ABC,其內(nèi)分點(diǎn)A1、B1、C1,使得2AC1=C1B、2BA1=A1C、2CB1=B1A,連接CC1、BB1、AA1,三條直線分別相交于A2、B2、C2。要求編寫(xiě)程序驗(yàn)證 ,三角形A2B2C2的面積是三角形ABC的面積的7分之一。,.,.,分析問(wèn)題的基本方法,基本方法是: 由頂向下,逐步求精; 即: 將復(fù)雜問(wèn)題,分解為小問(wèn)題,小問(wèn)題解決了,大問(wèn)題也就解決了。,例如:如下的問(wèn)題 已知一個(gè)正三角形ABC,其內(nèi)分點(diǎn)A1、B1、C1,使得

36、2AC1=C1B、2BA1=A1C、2CB1=B1A,連接CC1、BB1、AA1,三條直線分別相交于A2、B2、C2(見(jiàn)圖1)。 要求編寫(xiě)程序驗(yàn)證 : 三角形A2B2C2面積是三角形 ABC面積的七分之一.,.,(7)建立平面直角坐標(biāo)系;。,運(yùn)用邏輯思維分析程序設(shè)計(jì):,設(shè)正三角形ABC的邊長(zhǎng)為a,則本題目就是求兩個(gè)三角形的面積,已知三角形的邊長(zhǎng)求面積,對(duì)于三角形ABC是很容易的,但對(duì)于三角形A2B2C2的面積的求解卻比較麻煩。(如何求呢?),對(duì)于該問(wèn)題的邏輯思維及其分析過(guò)程:,(1) 三角形A2B2C2的面積,(2)求邊長(zhǎng)(A2B2、B2C2、C2A2),(3)求交點(diǎn)坐標(biāo)(A2、B2、C2),

37、(4)求直線方程(AA1、BB1、CC1),(5)求內(nèi)分點(diǎn)坐標(biāo)(A1、B1、C1),(6)已知邊長(zhǎng)a,確定三角形ABC的頂點(diǎn)坐標(biāo)(A、B、C),分析,實(shí)現(xiàn),.,設(shè)計(jì)分析,(1)采用什么設(shè)計(jì)方法: 面向結(jié)構(gòu)的設(shè)計(jì)方法? 面向?qū)ο蟮脑O(shè)計(jì)方法? (2)不同的設(shè)計(jì)方法,需要定義不同的數(shù)據(jù)結(jié)構(gòu)(數(shù)據(jù)類型),如何定義數(shù)據(jù)結(jié)構(gòu); 結(jié)構(gòu)體 類 (3)下面我們對(duì)兩種設(shè)計(jì)方法,分別給出設(shè)計(jì)程序,.,采用“面向結(jié)構(gòu)的設(shè)計(jì)方法”,.,采用“面向結(jié)構(gòu)的設(shè)計(jì)方法”,需要的工作步驟: (1)定義有關(guān)的結(jié)構(gòu)體: 點(diǎn),直線,三角形 (2)給出有關(guān)的函數(shù)設(shè)計(jì)實(shí)現(xiàn): 根據(jù)前面的分析,需要定義什么函數(shù),完成什么功能,使用什么參數(shù),函

38、數(shù)返回值及其類型; (3)設(shè)計(jì)主函數(shù): 調(diào)用(2)中的函數(shù),完成要求的功能。,1、已知一個(gè)三角形t,求面積mj; 2、已知兩頂點(diǎn)a,b, 求內(nèi)分點(diǎn) (在這里兩段的比值為1:2); 3、已知兩頂點(diǎn)p1,p2,求直線方程line 4、已知兩直線l1,l2,求交點(diǎn)坐標(biāo) 5、已知兩點(diǎn)P1,P2,求距離,.,(1)首先,定義有關(guān)的數(shù)據(jù)結(jié)構(gòu)(采用結(jié)構(gòu)體),三角形結(jié)構(gòu)(三邊形成三角形)(a,b,c) struc T double a; double b; double c; ,直線方程結(jié)構(gòu):ax+by+c=0 struc L double a; double b; double c; ,點(diǎn)結(jié)構(gòu):(x,y)

39、struc P double x; double y; ;,直線方程結(jié)構(gòu):y=kx+b struc L double k; double b; ,或者,.,(2)給出有關(guān)的函數(shù)設(shè)計(jì) (注意:形參和函數(shù)的返回值):,1、已知一個(gè)三角形t,求面積mj; double mj( T t) double L,ss; L=(t.a+t.b+t.c)/2; ss=sqr(L*(L-t.a)*(L-t.b)*(L-t.c); return ss; ,.,2、已知兩頂點(diǎn)a,b, 求內(nèi)分點(diǎn) (在這里兩段的比值為1:2); P fd( P a, P b) P q; q.x=(b.x-a.x)/3+a.x; q.y=

40、(b.y-a.y)/3+a.y; return q; ,.,3、已知兩頂點(diǎn)p1,p2,求直線方程line (ax+by+c=0) L zx(P p1,P p2) L q; 實(shí)現(xiàn)過(guò)程. ,.,4、已知兩直線l1,l2,求交點(diǎn)坐標(biāo) P jd(L l1,L l2) 實(shí)現(xiàn)過(guò)程. ,.,5、已知兩點(diǎn)P1,P2,求距離 double jl(P p1,P p2) 實(shí)現(xiàn)過(guò)程. ,.,(3)設(shè)計(jì)主函數(shù)(調(diào)用前面的各函數(shù),完成計(jì)算),Void main() P A,B,C,A1,B1,C1,A2,B2,C2; L L1,L2,L3; double d1,d2,d3,s1,s2; double a=10.00; B

41、.x=0;B.y=0; A.x=a/2;A.y=a*sqr(3)/2; C.x=a;C.y=0; A1=fd(B,C);B1=fd(C,A);C1=fd(A,B); L1=zx(A,A1);L2=zx(B,B1);L3=zx(C,C1); A2=jd(L1,L2);B2=jd(L1,L3);C2=jd(L2,L3); d1=jl(A2,B2);d2=jl(B2,C2);d3=j;(C2,A2); s1=mj(a,a,a); s2=mj(d1,d2,d3); if (fabs(s1-7*s2)=0.001) /? cout“正確!”; else cout“錯(cuò)誤!” ,.,采用“面向?qū)ο蟮脑O(shè)計(jì)方法”,.,采用“面向?qū)ο蟮脑O(shè)計(jì)方法”,需要的工作步驟: (1)定義有關(guān)的類: 點(diǎn),直線,三角形 (2)設(shè)計(jì)主函數(shù): 定義有關(guān)的對(duì)象, 并調(diào)用有關(guān)的函數(shù),完成要求的功能。,注意: 每個(gè)類有什么數(shù)據(jù)成員; 每個(gè)類有什么成員函數(shù),都具有什么功能?,.,(1)首先,定義有關(guān)的類結(jié)構(gòu),class P private: double x; double y; public: / 構(gòu)造函數(shù),用a,b提供值,形成點(diǎn) P(double a,double b); /構(gòu)造函數(shù),由兩

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論