




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、C/C+綜合應(yīng)用實(shí)例1、數(shù)據(jù)代數(shù)運(yùn)算系統(tǒng)的設(shè)計(jì)(相當(dāng)于計(jì)算器)2、學(xué)生成績管理系統(tǒng)的設(shè)計(jì)3、三角形面積驗(yàn)證程序的設(shè)計(jì)1、數(shù)據(jù)代數(shù)運(yùn)算系統(tǒng)的設(shè)計(jì)(相當(dāng)于計(jì)算器)問題:設(shè)計(jì)一個(gè)計(jì)算器程序,完成整數(shù)間的加、減、乘、除設(shè)計(jì)一個(gè)計(jì)算器程序,完成整數(shù)間的加、減、乘、除以及求運(yùn)算,以及累加求和、計(jì)算以及求運(yùn)算,以及累加求和、計(jì)算n!等。!等。 (1)計(jì)算器程序設(shè)計(jì)文檔 (2)使用TC開發(fā)的dos界面程序; (3)程序運(yùn)行演示; 這樣的系統(tǒng)不好,我們可以將其改寫為圖形界面 (4)圖形界面程序演示; (5) 圖形界面程序源代碼2、學(xué)生成績管理系統(tǒng)的設(shè)計(jì)例2:編寫程序,實(shí)現(xiàn)學(xué)生成績管理:要求實(shí)現(xiàn) 用戶登錄,用戶登
2、錄, 顯示主菜單,顯示主菜單, 學(xué)生信息的輸入學(xué)生信息的輸入, 學(xué)生信息的輸出,學(xué)生信息的輸出, 按學(xué)號查詢學(xué)生信息,按學(xué)號查詢學(xué)生信息, 按成績降序排序,按成績降序排序, 追加學(xué)生信息,追加學(xué)生信息, 把學(xué)生信息保存到文件,把學(xué)生信息保存到文件, 從文件中導(dǎo)出學(xué)生信息從文件中導(dǎo)出學(xué)生信息 等有關(guān)的功能。等有關(guān)的功能。 關(guān)于該設(shè)計(jì)題目的有關(guān)問題與分析:(1)采用的程序設(shè)計(jì)方法的選擇?)采用的程序設(shè)計(jì)方法的選擇? A)面向結(jié)構(gòu)的設(shè)計(jì)方法?面向結(jié)構(gòu)的設(shè)計(jì)方法? B)面向?qū)ο蟮脑O(shè)計(jì)方法?面向?qū)ο蟮脑O(shè)計(jì)方法?(2)運(yùn)行界面的選擇?)運(yùn)行界面的選擇? A) DOS界面的設(shè)計(jì)?界面的設(shè)計(jì)? B) 圖形界面
3、(圖形界面(Windows界面)?界面)? (3)數(shù)據(jù)類型的定義)數(shù)據(jù)類型的定義 (結(jié)構(gòu)體或類的定義)(結(jié)構(gòu)體或類的定義)(4)(數(shù)據(jù)結(jié)構(gòu)的定義)存放數(shù)據(jù)的方式)(數(shù)據(jù)結(jié)構(gòu)的定義)存放數(shù)據(jù)的方式 順序表(數(shù)組存放一個(gè)班學(xué)生信息)順序表(數(shù)組存放一個(gè)班學(xué)生信息) 鏈表(利用指針存放一個(gè)班的學(xué)生信息)鏈表(利用指針存放一個(gè)班的學(xué)生信息)該題目的分析與設(shè)計(jì):本題目可以采用本題目可以采用4種方式實(shí)現(xiàn):種方式實(shí)現(xiàn): (1)采用面向結(jié)構(gòu)的程序設(shè)計(jì)方法,用)采用面向結(jié)構(gòu)的程序設(shè)計(jì)方法,用順序順序表(數(shù)組和結(jié)構(gòu)表(數(shù)組和結(jié)構(gòu)體),體),DOS界面。界面。(2)采用面向結(jié)構(gòu)的程序設(shè)計(jì)方法,用)采用面向結(jié)構(gòu)的程序
4、設(shè)計(jì)方法,用鏈表鏈表(指針和結(jié)構(gòu)體),(指針和結(jié)構(gòu)體),DOS界面界面(3)采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,用)采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,用順序表順序表(定義順序表(定義順序表類),類),DOS界面界面(4)采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,用)采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,用鏈表鏈表(定義(定義鏈表鏈表類),類),DOS界面界面 另外,對這另外,對這4種方式,都可以采用種方式,都可以采用Windows(圖形圖形)界面實(shí)現(xiàn)。界面實(shí)現(xiàn)。(1)采用面向結(jié)構(gòu)的程序設(shè)計(jì)方法)采用面向結(jié)構(gòu)的程序設(shè)計(jì)方法 用用順序順序表(數(shù)組和結(jié)構(gòu)體)表(數(shù)組和結(jié)構(gòu)體)DOS界面界面采用面向結(jié)構(gòu)的程序設(shè)計(jì)方法,用采用面向結(jié)構(gòu)的程序
5、設(shè)計(jì)方法,用順序順序表表(數(shù)組和結(jié)構(gòu)體),(數(shù)組和結(jié)構(gòu)體),DOS界面界面處理過程:(1)定義學(xué)生結(jié)構(gòu)體;)定義學(xué)生結(jié)構(gòu)體;(2)定義學(xué)生數(shù)組()定義學(xué)生數(shù)組(一般放到主函數(shù)中定義一般放到主函數(shù)中定義) 這里要注意,學(xué)生人數(shù)問題這里要注意,學(xué)生人數(shù)問題(3)按功能要求定義各有關(guān)功能函數(shù);)按功能要求定義各有關(guān)功能函數(shù); 這里要注意,每個(gè)函數(shù)的參數(shù)及其函數(shù)的返回值這里要注意,每個(gè)函數(shù)的參數(shù)及其函數(shù)的返回值(4)設(shè)計(jì)主函數(shù),實(shí)現(xiàn)系統(tǒng)所要求的功能。)設(shè)計(jì)主函數(shù),實(shí)現(xiàn)系統(tǒng)所要求的功能。思考:思考: 假設(shè)將(假設(shè)將(2)定義成一個(gè))定義成一個(gè)“班級結(jié)構(gòu)體班級結(jié)構(gòu)體”,那么,整,那么,整個(gè)系統(tǒng)該如何實(shí)現(xiàn))
6、;個(gè)系統(tǒng)該如何實(shí)現(xiàn));(1)定義學(xué)生結(jié)構(gòu)體;)定義學(xué)生結(jié)構(gòu)體;struct st char Class20; /班級 int num; /學(xué)號 char name8; /姓名 float kc6; /各課程成績(6門) float ave; /平均成績 int order; /名次 ;按功能要求定義各有關(guān)功能函數(shù)按功能要求定義各有關(guān)功能函數(shù) (1)學(xué)生信息的輸入)學(xué)生信息的輸入(輸入學(xué)生的信息,存放到數(shù)組輸入學(xué)生的信息,存放到數(shù)組s中,返回實(shí)際學(xué)中,返回實(shí)際學(xué)生個(gè)數(shù)給生個(gè)數(shù)給n,注意:輸入的結(jié)束條件如何設(shè)計(jì)?注意:輸入的結(jié)束條件如何設(shè)計(jì)?) void iuput(st s int *n); (
7、2)將數(shù)組)將數(shù)組s中,中,n個(gè)學(xué)生信息輸出,要求:按一定得格式輸出學(xué)生信個(gè)學(xué)生信息輸出,要求:按一定得格式輸出學(xué)生信息(最好是表格格式,并且當(dāng)學(xué)生人數(shù)較多時(shí),應(yīng)按頁顯示)息(最好是表格格式,并且當(dāng)學(xué)生人數(shù)較多時(shí),應(yīng)按頁顯示) void pint(st s,int n) (3)從數(shù)組)從數(shù)組s,n個(gè)學(xué)生信息中,查詢學(xué)號為個(gè)學(xué)生信息中,查詢學(xué)號為x的學(xué)生信息,并返回查找的學(xué)生信息,并返回查找成功是(位置號)否(成功是(位置號)否(-1)。)。 int find(st s,int n, int x) (4)將數(shù)組將數(shù)組s,n個(gè)學(xué)生信息中按平均成績降序排序,形成排序數(shù)組個(gè)學(xué)生信息中按平均成績降序排序
8、,形成排序數(shù)組y。 sort(st s,int n,st y) (5)在數(shù)組在數(shù)組s,n個(gè)學(xué)生信息的未,輸入追加學(xué)生信息。個(gè)學(xué)生信息的未,輸入追加學(xué)生信息。 該功能的實(shí)現(xiàn),可以使用(該功能的實(shí)現(xiàn),可以使用(1)輸入學(xué)生信息功能)輸入學(xué)生信息功能(6)將數(shù)組)將數(shù)組s,n個(gè)學(xué)生信息,保存到文件個(gè)學(xué)生信息,保存到文件f中。中。 save(st s,int n, char *f) (7) 從文件從文件f中導(dǎo)出學(xué)生信息中導(dǎo)出學(xué)生信息,存放到數(shù)組存放到數(shù)組s中,并返回實(shí)際學(xué)生人數(shù)中,并返回實(shí)際學(xué)生人數(shù)n。 load(char *f,st s,int &n)給出每個(gè)函數(shù)的具體實(shí)現(xiàn) 同學(xué)們自己給出各
9、函數(shù)的源代碼。同學(xué)們自己給出各函數(shù)的源代碼。設(shè)計(jì)主函數(shù),實(shí)現(xiàn)系統(tǒng)所要求的功能設(shè)計(jì)主函數(shù),實(shí)現(xiàn)系統(tǒng)所要求的功能定義學(xué)生數(shù)組:定義學(xué)生數(shù)組: 這里要注意,學(xué)生人數(shù)問題這里要注意,學(xué)生人數(shù)問題Void main() st *t; 定義數(shù)組定義數(shù)組 int m; 數(shù)組的最大空間數(shù)組的最大空間 int n; 實(shí)際學(xué)生人數(shù)實(shí)際學(xué)生人數(shù) m=1000; st=new stm; n=0; 顯示菜單,分別調(diào)用有關(guān)的函數(shù)。顯示菜單,分別調(diào)用有關(guān)的函數(shù)。 (3)采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法)采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法 用用順序表順序表(定義(定義順序表類順序表類) DOS界面界面采用面向結(jié)構(gòu)的程序設(shè)計(jì)方法,用采用面向
10、結(jié)構(gòu)的程序設(shè)計(jì)方法,用順序表順序表(定義(定義順序表類順序表類),),DOS界面界面處理過程:(1)定義學(xué)生類;)定義學(xué)生類;(2)定義班級類)定義班級類(3)設(shè)計(jì)主函數(shù),定義有關(guān)的對象,并調(diào)用有關(guān)的函數(shù),)設(shè)計(jì)主函數(shù),定義有關(guān)的對象,并調(diào)用有關(guān)的函數(shù),完成系統(tǒng)功能。完成系統(tǒng)功能。分析:分析: 由于成績管理是由多名學(xué)生構(gòu)成的,所以需要定義由于成績管理是由多名學(xué)生構(gòu)成的,所以需要定義學(xué)生類學(xué)生類; 另外,由多個(gè)學(xué)生,形成一個(gè)班或年級,所以還需要定義另外,由多個(gè)學(xué)生,形成一個(gè)班或年級,所以還需要定義一個(gè)一個(gè)班級(年級)類班級(年級)類(1)定義學(xué)生類;)定義學(xué)生類;class st private
11、: char Class20; /班級 int num; /學(xué)號 char name8; /姓名 float kc6; /各課程成績(6門) float ave; /平均成績 int order; /名次 public: 分析:關(guān)于學(xué)生類,該有哪些函數(shù)成員?分析:關(guān)于學(xué)生類,該有哪些函數(shù)成員? ;學(xué)生類,函數(shù)成員的定義與實(shí)現(xiàn)學(xué)生類,函數(shù)成員的定義與實(shí)現(xiàn)public: (1) 構(gòu)造函數(shù)的定義:構(gòu)造函數(shù)的定義: 利用參數(shù)傳遞,形成一個(gè)學(xué)生利用參數(shù)傳遞,形成一個(gè)學(xué)生 有鍵盤輸入形成一個(gè)學(xué)生有鍵盤輸入形成一個(gè)學(xué)生 (2) 輸出學(xué)生信息函數(shù);輸出學(xué)生信息函數(shù); (2)定義班級類)定義班級類class b
12、j private: int m; /私有變量,順序表實(shí)例的最大長度私有變量,順序表實(shí)例的最大長度 int n; / 私有變量,順序表實(shí)例的當(dāng)前長度私有變量,順序表實(shí)例的當(dāng)前長度 st *s; /存放學(xué)生的數(shù)組(利用指針實(shí)現(xiàn))存放學(xué)生的數(shù)組(利用指針實(shí)現(xiàn)) public: 分析:關(guān)于班級類,該有哪些函數(shù)成員?分析:關(guān)于班級類,該有哪些函數(shù)成員?;班級類,函數(shù)成員的定義與實(shí)現(xiàn)班級類,函數(shù)成員的定義與實(shí)現(xiàn)public: (1) 構(gòu)造函數(shù)的定義:構(gòu)造函數(shù)的定義: 利用參數(shù)傳遞,形成班級 由數(shù)組由數(shù)組s中,中,n各學(xué)生,形成班級各學(xué)生,形成班級 bj(st s int n); 有鍵盤輸入形成班級 學(xué)生
13、信息的輸入學(xué)生信息的輸入(輸入的結(jié)束條件如何設(shè)計(jì)?輸入的結(jié)束條件如何設(shè)計(jì)?) bj(); 有文件導(dǎo)入,形成班級; 從文件從文件f中導(dǎo)出學(xué)生信息中導(dǎo)出學(xué)生信息, bj(char *f)其它成員函數(shù)其它成員函數(shù) (2)輸出學(xué)生信息,要求:按一定得格式輸出學(xué)生信息)輸出學(xué)生信息,要求:按一定得格式輸出學(xué)生信息(最好是表格格式,并且當(dāng)學(xué)生人數(shù)較多時(shí),應(yīng)按頁顯示)(最好是表格格式,并且當(dāng)學(xué)生人數(shù)較多時(shí),應(yīng)按頁顯示) void pint() (3)查詢學(xué)號為)查詢學(xué)號為x的學(xué)生信息,并返回查找成功是(位置的學(xué)生信息,并返回查找成功是(位置號)否(號)否(-1)。)。 int find(int x) (4)
14、 按平均成績降序排序,形成新類。按平均成績降序排序,形成新類。 st sort() (5)在學(xué)生信息的未,輸入追加學(xué)生信息。在學(xué)生信息的未,輸入追加學(xué)生信息。 注意:輸入的結(jié)束條件如何設(shè)計(jì)?注意:輸入的結(jié)束條件如何設(shè)計(jì)? void input() (6)在學(xué)生信息的未,通過文件在學(xué)生信息的未,通過文件f,追加學(xué)生信息。追加學(xué)生信息。 void app(char *f) (7)保存到文件)保存到文件f中。中。 void save(char *f) 給出每個(gè)函數(shù)的具體實(shí)現(xiàn) 同學(xué)們自己給出各函數(shù)的源代碼。同學(xué)們自己給出各函數(shù)的源代碼。設(shè)計(jì)主函數(shù),實(shí)現(xiàn)系統(tǒng)所要求的功能設(shè)計(jì)主函數(shù),實(shí)現(xiàn)系統(tǒng)所要求的功能定
15、義有關(guān)的對象定義有關(guān)的對象Void main() bj b; 定義班級對象定義班級對象 st s; 定義學(xué)生對象定義學(xué)生對象 顯示菜單,分別調(diào)用有關(guān)的函數(shù)。顯示菜單,分別調(diào)用有關(guān)的函數(shù)。 鏈表成績管理1.鏈表的定義與結(jié)構(gòu)描述2.鏈表的有關(guān)操作實(shí)現(xiàn)3.利用鏈表結(jié)構(gòu)實(shí)現(xiàn)成績管理 (1) 成績管理的功能分析 (2) 成績管理的類定義與實(shí)現(xiàn)3 采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,用用鏈表鏈表(定義(定義鏈表鏈表類),類),DOS界面界面1 單鏈表單鏈表通過指針把它的一串存儲結(jié)點(diǎn)鏈接成一個(gè)鏈 存儲結(jié)點(diǎn)由兩部分組成: data字段 next 字段 data next頭指針指向下一個(gè)節(jié)點(diǎn)
16、的指針附加頭結(jié)點(diǎn)結(jié)點(diǎn)尾指針單鏈表的結(jié)點(diǎn)類型struct ListNode int data;ListNode * next; ;data next問題問題(有關(guān)鏈表的操作有關(guān)鏈表的操作):n 如何定義如何定義(申明申明)一個(gè)鏈表呢一個(gè)鏈表呢?n 如何形成一個(gè)鏈表呢如何形成一個(gè)鏈表呢?n 在鏈表中指定的位置處在鏈表中指定的位置處,如何插入一個(gè)節(jié)點(diǎn)呢如何插入一個(gè)節(jié)點(diǎn)呢?n 在鏈表中如何刪除一個(gè)節(jié)點(diǎn)呢在鏈表中如何刪除一個(gè)節(jié)點(diǎn)呢?n 一個(gè)鏈表中一個(gè)鏈表中,有幾個(gè)數(shù)據(jù)元素呢有幾個(gè)數(shù)據(jù)元素呢?如何定義如何定義(申明申明)一個(gè)鏈表呢一個(gè)鏈表呢? 一個(gè)鏈表一般只要告訴該鏈表的頭指針即可。定義鏈表: struc
17、t ListNode *first 該鏈表所有的操作,全部是從該鏈表所有的操作,全部是從“first”開始,開始, 并且,該指針并且,該指針永遠(yuǎn)永遠(yuǎn)指向第一個(gè)位置指向第一個(gè)位置。一個(gè)鏈表是如何形成呢一個(gè)鏈表是如何形成呢?一個(gè)鏈表的形成,一般需要兩步:First(2)在空鏈表的基礎(chǔ)上不斷的插入節(jié)點(diǎn),從而形成鏈表。)在空鏈表的基礎(chǔ)上不斷的插入節(jié)點(diǎn),從而形成鏈表。 一般分為:在前插入、在后插入兩種一般分為:在前插入、在后插入兩種(1)首先形成一個(gè)空鏈表:)首先形成一個(gè)空鏈表:NULL(0)構(gòu)造空單鏈表LinkList() first=new ListNode; first-next =0; ;fir
18、st(a) 建空表建空表建立單鏈表建立單鏈表頭插法建立單鏈表圖示頭插法建立單鏈表圖示 first(a) 建空表建空表c1ss 指向新申請的結(jié)點(diǎn)指向新申請的結(jié)點(diǎn)sdatac1(b) 申請新結(jié)點(diǎn)并賦值申請新結(jié)點(diǎn)并賦值firstlast(c) 插入第一個(gè)結(jié)點(diǎn)插入第一個(gè)結(jié)點(diǎn) last=slast=sc1執(zhí)行的語句組為執(zhí)行的語句組為:snextfirstnext;firstnexts;ci1firstc2c1cis(d) 插入第插入第i個(gè)元素個(gè)元素頭插法頭插法尾插法建表尾插法建表 尾插法建表圖示尾插法建表圖示 c1ss 指向新申請的結(jié)點(diǎn)空間指向新申請的結(jié)點(diǎn)空間sdatac1(b) 申請新結(jié)點(diǎn)并賦值申請新
19、結(jié)點(diǎn)并賦值firstL(a ) 建空表建空表lastfs(c) 插入第一個(gè)結(jié)點(diǎn)插入第一個(gè)結(jié)點(diǎn)c1lastlasts;last指向鏈表的結(jié)尾指向鏈表的結(jié)尾c1firstc2last nexts;(d) 插入第二個(gè)結(jié)點(diǎn)插入第二個(gè)結(jié)點(diǎn)sr將新建的節(jié)點(diǎn)插入到鏈表的最后將新建的節(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í)行的語句組為執(zhí)行的語句組為:
20、snextfirstnext;firstnexts;ci1firstc2c1cis 插入第插入第i個(gè)元素個(gè)元素單鏈表的建立(調(diào)用插入函數(shù),可以創(chuàng)建鏈表:形成具有n個(gè)元素的鏈表)void LinkList:create(int n) int i=0; int data; cout endlplease input the data of the list; while (idata; insert(data); i+; 查找單鏈表中第i個(gè)結(jié)點(diǎn)算法 ListNode * FindIndex(const int i) ListNode *pif( i = -1) return first; p=fi
21、rst-next; /int j=0; while( p !=NULL & j next;j+;return p; 單鏈表插入算法 (第i節(jié)點(diǎn)前插入)La1ai1aianpre(a) 尋找第尋找第 i1 個(gè)結(jié)點(diǎn)個(gè)結(jié)點(diǎn)es(b) 申請新的結(jié)點(diǎn)申請新的結(jié)點(diǎn)preLa1ai1aianes 與與ai連鏈連鏈: :snextprenextai-1與與ai斷斷鏈鏈, ,插入插入 e:prenexts;(c) 插入插入單鏈表插入算法ListNode * Insert(int value, int i) / 插入數(shù)據(jù)內(nèi)容為value的新結(jié)點(diǎn),為第i個(gè)結(jié)點(diǎn)。 ListNode *p,*q;q = new
22、 ListNode; q-data = value; p = FindIndex(i-1);if(p = NULL ) return NULL; q-next = p-next; p-next = q; return q; pLa1ai1aianeq 與與ai連鏈連鏈: :snextprenextai-1與與ai斷斷鏈鏈, ,插入插入 e:prenexts;(c) 插入插入單鏈表刪除算法 void RemoveAfter(ListNode * link) /刪除參數(shù)link的后繼結(jié)點(diǎn) ListNode *newlink;if(link!=NULL) newlink=link-next; lin
23、k-next=newlink-next link-next=link-next-nexy delete newlink; 求長度算法int Length() ListNode *p=first-next;int count=0;while(p!=NULL)p=p-next;count+;return count; La0ai1aian( ) p單鏈表的類定義單鏈表的類定義分析分析1數(shù)據(jù)成員數(shù)據(jù)成員: 兩個(gè)指向結(jié)點(diǎn)的指針兩個(gè)指向結(jié)點(diǎn)的指針:頭指針和尾指針頭指針和尾指針 2成員函數(shù)成員函數(shù): (1) 構(gòu)造函數(shù)構(gòu)造函數(shù) /創(chuàng)建并形成一個(gè)初始鏈表創(chuàng)建并形成一個(gè)初始鏈表 (2)析構(gòu)函數(shù)析構(gòu)函數(shù) /刪除構(gòu)
24、造函數(shù)所創(chuàng)建的鏈表刪除構(gòu)造函數(shù)所創(chuàng)建的鏈表 (3)插入元素函數(shù)插入元素函數(shù) /在表的第在表的第i 個(gè)位置處個(gè)位置處,插入數(shù)據(jù)或在表尾插入元素插入數(shù)據(jù)或在表尾插入元素 (4)刪除元素函數(shù)刪除元素函數(shù) /刪除表中數(shù)值為刪除表中數(shù)值為x的元素的元素 (5)查找元素查找元素 /在表中查找數(shù)據(jù)為在表中查找數(shù)據(jù)為x的元素在表中的位置的元素在表中的位置 (6)輸出鏈表輸出鏈表 /從頭到尾輸出表中的所有的元素從頭到尾輸出表中的所有的元素 (7)判定鏈表是否為空判定鏈表是否為空 /為了進(jìn)行刪除進(jìn)行的一種判定為了進(jìn)行刪除進(jìn)行的一種判定 (8) 將鏈表設(shè)置為一個(gè)空表將鏈表設(shè)置為一個(gè)空表 / (9)計(jì)算鏈表的長度計(jì)算
25、鏈表的長度 /統(tǒng)計(jì)鏈表中元素個(gè)數(shù)統(tǒng)計(jì)鏈表中元素個(gè)數(shù) (10) 將鏈表元素值寫到文件中將鏈表元素值寫到文件中 (11) 將文件中的數(shù)據(jù)讀到鏈表中將文件中的數(shù)據(jù)讀到鏈表中 class LinkList /鏈表類鏈表類 private: ListNode *first,*last; /鏈表的表頭指針和尾指針鏈表的表頭指針和尾指針 public: LinkList ( ) LinkList ( ) ; /析構(gòu)函數(shù)析構(gòu)函數(shù) ListNode *Insert ( int value, int i ); Listnode *insert(intvalue) int Remove (int value );
26、ListNode *FindIndex ( int value ); void PrintList( ); /遍歷單鏈表遍歷單鏈表 void MakeEmpty ( ); /將鏈表置為空表將鏈表置為空表 int Length ( ) const; /計(jì)算鏈表的長度計(jì)算鏈表的長度 int NotNull ( ) ; /判斷是否是空表判斷是否是空表 void create();單鏈表的類定義單鏈表的類定義三、利用鏈表結(jié)構(gòu)實(shí)現(xiàn)成績管理三、利用鏈表結(jié)構(gòu)實(shí)現(xiàn)成績管理 (1) 成績管理的功能分析 (2) 成績管理的類定義與實(shí)現(xiàn)要求:1簡單的系統(tǒng)與功能分析2建立數(shù)據(jù)結(jié)構(gòu)表3要建立一個(gè)測試的數(shù)據(jù)表,至少要有2
27、0個(gè)測試數(shù)據(jù)4使用數(shù)據(jù)鏈表實(shí)現(xiàn)數(shù)據(jù)的:錄入、查詢、修改、增加、刪除、統(tǒng)計(jì)、輸出,一、定義學(xué)生成績管理系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)表一、定義學(xué)生成績管理系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)表序號 成員名 數(shù)據(jù)類型 長度 字段含義 1 Class int 班級 2 num int 學(xué)號 3 name char 8 姓名 4 kc0 float 電子技術(shù) 5 kc1 float C+程序設(shè)計(jì) 6 kc2 float 多媒體技術(shù) 7 kc3 float 大學(xué)英語 8 kc4 float 高等數(shù)學(xué) 9 kc5 float 大學(xué)體育 10 Ave float 平均成績 11 Order int 名次 13 next ”自定義的結(jié)構(gòu)類型 “
28、指針,指向下一個(gè)結(jié)點(diǎn)二、根據(jù)所要求的成績管理系統(tǒng)定義類系統(tǒng)的功能要求: 使用數(shù)據(jù)鏈表實(shí)現(xiàn)如下功能: 初始鏈表的建立,錄入、查詢、修改、增加、刪除、統(tǒng)計(jì)、輸出等功能。(一一)數(shù)據(jù)定義數(shù)據(jù)定義(類的數(shù)據(jù)成員說明類的數(shù)據(jù)成員說明): 一個(gè)指向?qū)W生結(jié)構(gòu)的頭指針一個(gè)指向?qū)W生結(jié)構(gòu)的頭指針; (注意注意:該指針就是鏈表的頭該指針就是鏈表的頭)struct node int Class; /班級 int num; /學(xué)號 char name8; /姓名 float kc6; /各課程成績(6門) float ave; /平均成績 int order; /名次 node *next; /指針;class cj
29、private: struct node *head; public: 待定義的各功能函數(shù)待定義的各功能函數(shù) 結(jié)點(diǎn)定結(jié)點(diǎn)定義義類定義類定義(二)操作定義(函數(shù)功能劃分劃分)1.初始鏈表的建立初始鏈表的建立: 利用類的構(gòu)造函數(shù)構(gòu)造函數(shù),建立一個(gè)只有附加頭結(jié)點(diǎn)附加頭結(jié)點(diǎn)的空鏈表空鏈表; 2.錄入錄入(增加一個(gè)增加一個(gè))學(xué)生信息學(xué)生信息: 由鍵盤一個(gè)一個(gè)輸入學(xué)生的信息,并鏈到鏈表中; (注意:什么時(shí)候停止輸入呢?即:輸入的結(jié)束條件?) 如何鏈到鏈表上呢?(在表的尾上追加尾上追加)3.追加結(jié)點(diǎn)追加結(jié)點(diǎn): 在鏈表尾上鏈上一個(gè)結(jié)點(diǎn)(p所指的結(jié)點(diǎn)):4.鏈表的建立鏈表的建立: 在空鏈表已經(jīng)建立的基礎(chǔ)上,向鏈
30、表中提供信息(注意:采用先提供的信息在表的前面,依次向后); 可以分為兩種方式: (1)由鍵盤一個(gè)一個(gè)輸入學(xué)生的信息,并鏈到鏈表中; (可以直接使用添加學(xué)生操作;即使用2) (2)利用文件將文件中的內(nèi)容讀入利用文件將文件中的內(nèi)容讀入,并鏈到鏈表中并鏈到鏈表中5.定位定位: 提供學(xué)生的學(xué)號,在鏈表中查找該學(xué)生所在鏈表中的位置 (返回指向該結(jié)點(diǎn)的一個(gè)指針) (注意:該操作是為后面的操作服務(wù)的,特別是:刪除、修改、查詢)6.查詢查詢: 提供學(xué)生的學(xué)號,在鏈表中查找該學(xué)生并輸出該學(xué)生的信息(包括學(xué)生的名次)7.刪除刪除: 提供學(xué)生的學(xué)號,在鏈表中查找該學(xué)生,并從表中刪除學(xué)號是該值的學(xué)生8.修改成績修改
31、成績: 提供學(xué)生的學(xué)號,在鏈表中查找該學(xué)生,找到后先顯示原來的學(xué)生信息,然后修改(重新輸入)學(xué)生信息 9.統(tǒng)計(jì)統(tǒng)計(jì): 給出各課成績的平均分,總平均分,并分別按各課程統(tǒng)計(jì)成績段的人數(shù):優(yōu)秀人數(shù)、良好人數(shù)、中等人數(shù)、及格人數(shù),不及格人數(shù), 并按一定的格式將所有統(tǒng)計(jì)結(jié)果顯示出來。10.排序排序(降序降序): 按學(xué)生的平均成績進(jìn)行由小到大排序,新形成一個(gè)排序鏈表,. (注意:該操作是為其它操作服務(wù)的;例如:5(查詢)可以使用,當(dāng)添加學(xué)生或刪除學(xué)生以及修改學(xué)生成績后,都需要重新排序)11.輸出鏈表輸出鏈表: 按鏈表中的先后次序輸出表中的所有信息 (注意:該操作為按順序輸出信息和排序輸出服務(wù)):12. 寫
32、文件寫文件: 將進(jìn)行各種操作后所形成的鏈表信息,寫入文件中,備以后使用時(shí),利用3(2)再讀入形成鏈表. (注意:可以形成兩類文件:按輸入的順序,按排序后的)13. 其他的一些服務(wù)操作: (1)析構(gòu)函數(shù)析構(gòu)函數(shù): (2)輸出表頭函數(shù)輸出表頭函數(shù): (為功能、6、7、8、11、12服務(wù)) (3)輸出輸出P指針?biāo)附Y(jié)點(diǎn)信息指針?biāo)附Y(jié)點(diǎn)信息: (為功能: 6、7、8、11、12服務(wù))類聲明:由以上分析,可以給出成績管理的類聲明:class cj private: struct node *head; public: cj(); /1:構(gòu)造函數(shù)構(gòu)造函數(shù),建立一個(gè)只有建立一個(gè)只有附加頭結(jié)點(diǎn)附加頭結(jié)點(diǎn)的的空
33、鏈表空鏈表 input(); / 2:向鏈表中添加學(xué)生的信息向鏈表中添加學(xué)生的信息(在表的在表的尾上追加尾上追加) appen(node *p); /3.追加結(jié)點(diǎn)追加結(jié)點(diǎn): 在鏈表尾上鏈上一個(gè)結(jié)點(diǎn)在鏈表尾上鏈上一個(gè)結(jié)點(diǎn)(p所指的結(jié)點(diǎn)所指的結(jié)點(diǎn)) void rf(char *f); /4.讀文件,形成鏈表讀文件,形成鏈表 node *post(int num); /5.定位定位: 提供學(xué)號提供學(xué)號, 返回指向該結(jié)點(diǎn)的一個(gè)指針返回指向該結(jié)點(diǎn)的一個(gè)指針) void lookup(int num); / 6.查詢查詢 提供學(xué)號提供學(xué)號, 查找學(xué)生并輸出學(xué)生的信息查找學(xué)生并輸出學(xué)生的信息 void De
34、lete(int num); /7.刪除刪除: 提供學(xué)號提供學(xué)號, 刪除學(xué)號是該值的學(xué)生刪除學(xué)號是該值的學(xué)生 void modify(int num); /8.修改成績修改成績: 提供學(xué)號提供學(xué)號, 修改修改(重新輸入重新輸入)學(xué)生信息學(xué)生信息 void statistic() ; /9.統(tǒng)計(jì)函數(shù)統(tǒng)計(jì)函數(shù),統(tǒng)計(jì)平均成績統(tǒng)計(jì)平均成績 void sort(cj &h); /10.排序排序(降序降序): 按平均成績排序按平均成績排序,形成排序的鏈表形成排序的鏈表h void Insert(cj &h,node *p); /在有序表在有序表h中結(jié)點(diǎn)后仍有序中結(jié)點(diǎn)后仍有序(排序的一個(gè)輔助
35、函數(shù)排序的一個(gè)輔助函數(shù): void output(); /11: 輸出鏈表中各結(jié)點(diǎn)值輸出鏈表中各結(jié)點(diǎn)值 void wf(char *f); /12. 由鏈表由鏈表,形成文件形成文件 cj(); / 13(1):析構(gòu)函數(shù)析構(gòu)函數(shù),程序運(yùn)行結(jié)束時(shí)程序運(yùn)行結(jié)束時(shí),刪除鏈表中的各結(jié)點(diǎn)刪除鏈表中的各結(jié)點(diǎn), void print1(); /13(2): 輸出一個(gè)同學(xué)的成績輸出一個(gè)同學(xué)的成績(標(biāo)題標(biāo)題) void print2(node *p); /13(3) 輸出一個(gè)同學(xué)的成績輸出一個(gè)同學(xué)的成績 node *gethead()return head; /13(4)獲取頭指針獲取頭指針 int Length
36、 ( ) const; /13(5) 計(jì)算鏈表的長度計(jì)算鏈表的長度;cj:cj() /1:構(gòu)造函數(shù)構(gòu)造函數(shù),建立一個(gè)只有附加頭結(jié)點(diǎn)附加頭結(jié)點(diǎn)的空鏈表空鏈表head=new node;head-next=0;void cj: input() / 2:錄入學(xué)生信息錄入學(xué)生信息: 由鍵盤一個(gè)一個(gè)輸入學(xué)生的信息由鍵盤一個(gè)一個(gè)輸入學(xué)生的信息,并在表的尾上追加并在表的尾上追加) int Class; char name8; int num; float c6,ave; int order; node *p2; int t,i; coutt; while(t=1) cout請輸入班級請輸入班級,姓名姓名,學(xué)
37、號學(xué)號,電子技術(shù)電子技術(shù),C+,數(shù)學(xué),數(shù)學(xué),; cout英語,政治,體育成績英語,政治,體育成績Classnamenumc0c1c2c3c4c5; 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); coutt; void cj: appen(node *p) /3.追加結(jié)點(diǎn)追加結(jié)點(diǎn): 在鏈表尾上鏈上一個(gè)結(jié)點(diǎn)在鏈表尾上鏈上一個(gè)結(jié)點(diǎn)(p所指的結(jié)點(diǎn)所指的結(jié)點(diǎn)) node
38、 *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; /存放標(biāo)題的存放標(biāo)題的 node *p2; ifstream ff;ff.open(f);ff.getline(ss,200); /取第一行標(biāo)題取第一行標(biāo)題ff.getline(ss,200); /取第二行標(biāo)題取第二行
39、標(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); ffClassnamenumc0c1c2c3c4c5;ff.close();node cj:*post (int num) /5.定位定位: 提供學(xué)號提供學(xué)號, 返回指向該結(jié)點(diǎn)的一個(gè)指針返回指向該結(jié)點(diǎn)的一個(gè)指針) node *
40、p1,*p2; p1=head; if(p1-next=0) return 0; p2=p1-next; while(p2-num!=num & p2-next!=0) p1=p2; p2=p2-next; if(p2-num=num) return p2; else return 0; void cj:lookup(int num) / 6.查詢查詢 提供學(xué)號提供學(xué)號, 查找學(xué)生并輸出學(xué)生的信息查找學(xué)生并輸出學(xué)生的信息 node *p1; p1=post (num) ;/定位定位: 提供學(xué)號, 返回指向該結(jié)點(diǎn)的一個(gè)指針) if(p1!=0) print1(); /輸出一個(gè)同學(xué)的成績(
41、標(biāo)題) print2(p1); /輸出一個(gè)同學(xué)的信息 else cout無學(xué)生記錄!next; if(p1=0) cout無學(xué)生記錄無學(xué)生記錄!num!=num & p2-next!=0) p1=p2; p2=p2-next; if(p2-num=num) p1-next=p2-next; delete p2;cout已刪除了這個(gè)學(xué)生的記錄已刪除了這個(gè)學(xué)生的記錄endl; else cout沒找到該學(xué)生沒找到該學(xué)生!endl; return;void cj:modify(int num) /8: 修改函數(shù)修改函數(shù),修改對應(yīng)學(xué)號的學(xué)生成績修改對應(yīng)學(xué)號的學(xué)生成績 node *p,*p2;
42、p=post ( num) ;/定位定位: 提供學(xué)號, 返回指向該結(jié)點(diǎn)的一個(gè)指針) if(p!=0) float c6, cout原成績:; print1(); print2(p); cout請輸入新的成績:c0c1c2c3c4c5; ave=(c0+c1+c2+c3+c4+c5)/6; for(i=0;ikci=ci; p-ave=ave; else cout沒找到該學(xué)生!next; while(p1!=0) print2(p1); s1=s1+p1-kc0; s2=s2+p1-kc1; s3=s3+p1-kc2; s4=s4+p1-kc3; s5=s5+p1-kc4; s6=s6+p1-k
43、c5; i+; p1=p1-next; cout平均成績平均成績:endl; cout電子技術(shù)電子技術(shù)s1/itC+:s2/i; cout數(shù)學(xué)數(shù)學(xué)s3/it英語英語s4/it政治政治s5/it; cout體育體育s6/inext; while(p1) p2=new node; p2-ave=p1-ave; p2-Class=p1-Class; p2-num=p1-num;strcpy(p2-name,p1-name); for(j=0;jkcj=p1-kcj; Insert(h,p2); p1=p1-next; p1=h.gethead()-next; int i=1; while(p1!=0
44、) p1-order=i; i=i+1; p1=p1-next; void cj:Insert(cj &h, node *p) /在有序表中插入一個(gè)結(jié)點(diǎn)后仍有序(10.排序排序(降序降序)的一個(gè)輔助函數(shù)的一個(gè)輔助函數(shù): ) node *p1,*p2; p1=h.gethead(); if (p1-next=0) p1-next=p; p-next=0; else p2=p1-next; while(p2-next & p2-avep-ave) p1=p2; p2=p2-next; p1-next=p; p-next=p2; void cj:output()/11: 輸出鏈表中各
45、結(jié)點(diǎn)值輸出鏈表中各結(jié)點(diǎn)值 node *p; p=head-next; cout輸出學(xué)生信息:next; coutendl;void cj:wf(char *f) /12. 由鏈表由鏈表,形成文件形成文件 node *p;ofstream ff;ff.open(f); ff 學(xué)生成績表endl;ff姓名 學(xué)號 班級 elec C+ 數(shù)學(xué) 英語 政治 體育 next;while(p) ffnametnumtClasst; ffkc0tkc1tkc2t; ffkc3tkc4tkc5next; ff.close(); cj:cj() / 13(1):析構(gòu)函數(shù)析構(gòu)函數(shù),程序運(yùn)行結(jié)束時(shí)程序運(yùn)行結(jié)束時(shí),刪除
46、鏈表中的各結(jié)點(diǎn)刪除鏈表中的各結(jié)點(diǎn), node *p1; while(head) p1=head; head=head-next; delete p1; void cj:print1() /13(2): 輸出一個(gè)同學(xué)的成績(標(biāo)題) cout“姓名 ”“學(xué)號 ”“班級 ”“電子 “; coutC+ 數(shù)學(xué) 英語 政治 體育 endl;void cj:print2(node *p) /13(3): 輸出一個(gè)同學(xué)的成績 int I; coutnametnumtClasst; for(i=0;i=5;+i) coutkci; coutnext; while(p!=0)n=n+1;p=p-next;retu
47、rn n;node cj: *gethead() /13(5)獲取頭指針return head;void main() /主函數(shù)主函數(shù) cj A,B; int a; int num; while(1) cout*endl; cout* 歡迎使用本系統(tǒng)歡迎使用本系統(tǒng)(請選擇你所要的功能請選擇你所要的功能) *endl; cout 0.退出系統(tǒng)退出系統(tǒng). endl; cout 1.成績錄入成績錄入. endl; cout 2.成績修改成績修改. endl; cout 3.成績查詢成績查詢. endl; cout 4.刪除成績刪除成績. endl; cout 5.順序輸出所有人的成績順序輸出所有人的
48、成績 . endl; cout 6.統(tǒng)計(jì)平均成績統(tǒng)計(jì)平均成績. endl; cout 7. 顯示學(xué)生人數(shù)顯示學(xué)生人數(shù) endl; cout 8. 輸出排序結(jié)果輸出排序結(jié)果 endl; cout 9. 讀文件讀文件 endl; cout 10. 寫文件寫文件 endl; cout*endl; 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); coutnum; B.lookup(num); bre
49、ak; case 4:coutnum; A.Delete(num); break; case 5:A.output();break; case 6:A.statistic();break; case 7: cout學(xué)生人數(shù)學(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ù)操作按任意鍵繼續(xù)操作!endl;getchar();end:; cout謝謝您使用本系統(tǒng)謝謝您使
50、用本系統(tǒng)!endl; 3、三角形面積驗(yàn)證程序的設(shè)計(jì)問題:問題: 給出求解下列問題逐步求精的分析過程給出求解下列問題逐步求精的分析過程,并設(shè)并設(shè)計(jì)程序完成其驗(yàn)證:計(jì)程序完成其驗(yàn)證: 已知一個(gè)正三角形已知一個(gè)正三角形ABC,其內(nèi)分點(diǎn),其內(nèi)分點(diǎn)A1、B1、C1,使得,使得2AC1=C1B、2BA1=A1C、2CB1=B1A,連接連接CC1、BB1、AA1,三條直線分別相交于,三條直線分別相交于A2、B2、C2。要求編寫程序驗(yàn)證。要求編寫程序驗(yàn)證 ,三角形三角形A2B2C2的面的面積是三角形積是三角形ABC的面積的的面積的7分之一。分之一。分析問題的基本方法分析問題的基本方法 基本方法是:基本方法是:
51、 由頂向下,逐步求精;由頂向下,逐步求精; 即:即: 將復(fù)雜問題,分解為小問題,小問題解決了,將復(fù)雜問題,分解為小問題,小問題解決了,大問題也就解決了。大問題也就解決了。例如:如下的問題例如:如下的問題 已知一個(gè)正三角形已知一個(gè)正三角形ABC,其內(nèi)分點(diǎn),其內(nèi)分點(diǎn)A1、B1、C1,使得使得2AC1=C1B、2BA1=A1C、2CB1=B1A,連接,連接CC1、BB1、AA1,三條直線分別相交于,三條直線分別相交于A2、B2、C2(見圖(見圖1)。)。要求編寫程序驗(yàn)證要求編寫程序驗(yàn)證 : 三角形三角形A2B2C2面積是三角形面積是三角形 ABC面積的七分之一面積的七分之一. A C1 B2 B1
52、A2 C2 B A1 C (7)建立平面直角坐標(biāo)系;建立平面直角坐標(biāo)系;。運(yùn)用邏輯思維分析程序設(shè)計(jì):運(yùn)用邏輯思維分析程序設(shè)計(jì): 設(shè)正三角形設(shè)正三角形ABC的邊長為的邊長為a,則本題目就是求兩個(gè)三角形的面積,則本題目就是求兩個(gè)三角形的面積,已知三角形的邊長求面積,對于三角形已知三角形的邊長求面積,對于三角形ABC是很容易的,但對于是很容易的,但對于三角形三角形A2B2C2的面積的求解卻比較麻煩。的面積的求解卻比較麻煩。(如何求呢如何求呢?)對于該問題的邏輯思維及其分析過程:對于該問題的邏輯思維及其分析過程:(1) 三角形三角形A2B2C2的面積的面積(2)求邊長(求邊長(A2B2、B2C2、C2
53、A2)(3)求交點(diǎn)坐標(biāo)(求交點(diǎn)坐標(biāo)(A2、B2、C2)(4)求直線方程(求直線方程(AA1、BB1、CC1)(5)求內(nèi)分點(diǎn)坐標(biāo)(求內(nèi)分點(diǎn)坐標(biāo)(A1、B1、C1)(6)已知邊長已知邊長a,確定三角形,確定三角形ABC的頂點(diǎn)坐標(biāo)(的頂點(diǎn)坐標(biāo)(A、B、C) A C1 B2 B1 A2 C2 B A1 C 分析分析實(shí)實(shí)現(xiàn)現(xiàn)設(shè)計(jì)分析(1)采用什么設(shè)計(jì)方法:)采用什么設(shè)計(jì)方法: 面向結(jié)構(gòu)的設(shè)計(jì)方法?面向結(jié)構(gòu)的設(shè)計(jì)方法? 面向?qū)ο蟮脑O(shè)計(jì)方法?面向?qū)ο蟮脑O(shè)計(jì)方法? (2)不同的設(shè)計(jì)方法,需要定義不同的數(shù)據(jù)結(jié)構(gòu)(數(shù)據(jù)類)不同的設(shè)計(jì)方法,需要定義不同的數(shù)據(jù)結(jié)構(gòu)(數(shù)據(jù)類型),如何定義數(shù)據(jù)結(jié)構(gòu);型),如何定義數(shù)據(jù)結(jié)構(gòu)
54、; 結(jié)構(gòu)體結(jié)構(gòu)體 類類 (3)下面我們對兩種設(shè)計(jì)方法,分別給出設(shè)計(jì)程序)下面我們對兩種設(shè)計(jì)方法,分別給出設(shè)計(jì)程序 采用采用“面向結(jié)構(gòu)的設(shè)計(jì)方法面向結(jié)構(gòu)的設(shè)計(jì)方法”采用采用“面向結(jié)構(gòu)的設(shè)計(jì)方法面向結(jié)構(gòu)的設(shè)計(jì)方法”需要的工作步驟:需要的工作步驟: (1)定義有關(guān)的結(jié)構(gòu)體:)定義有關(guān)的結(jié)構(gòu)體: 點(diǎn),直線,三角形點(diǎn),直線,三角形 (2)給出有關(guān)的函數(shù)設(shè)計(jì)實(shí)現(xiàn):)給出有關(guān)的函數(shù)設(shè)計(jì)實(shí)現(xiàn): 根據(jù)前面的分析,需要定義什么函數(shù),完成什么功能,根據(jù)前面的分析,需要定義什么函數(shù),完成什么功能,使用什么參數(shù),函數(shù)返回值及其類型;使用什么參數(shù),函數(shù)返回值及其類型; (3)設(shè)計(jì)主函數(shù):)設(shè)計(jì)主函數(shù): 調(diào)用(調(diào)用(2)中
55、的函數(shù),完成要求的功能。)中的函數(shù),完成要求的功能。1、已知一個(gè)三角形、已知一個(gè)三角形t,求面積求面積mj;2、已知兩頂點(diǎn)、已知兩頂點(diǎn)a,b, 求內(nèi)分點(diǎn)求內(nèi)分點(diǎn) (在這里兩段的比值為在這里兩段的比值為1:2);3、已知兩頂點(diǎn)、已知兩頂點(diǎn)p1,p2,求直線方程求直線方程line4、已知兩直線、已知兩直線l1,l2,求交點(diǎn)坐標(biāo),求交點(diǎn)坐標(biāo)5、已知兩點(diǎn)、已知兩點(diǎn)P1,P2,求距離,求距離(1)首先,定義有關(guān)的數(shù)據(jù)結(jié)構(gòu)(采用結(jié)構(gòu)體)三角形結(jié)構(gòu)(三邊形成三角形)三角形結(jié)構(gòu)(三邊形成三角形)(a,b,c)struc T double a; double b; double c;直線方程結(jié)構(gòu)直線方程結(jié)構(gòu):a
56、x+by+c=0struc L double a; double b; double c;點(diǎn)結(jié)構(gòu)點(diǎn)結(jié)構(gòu):(x,y) struc P double x; double y; ;直線方程結(jié)構(gòu)直線方程結(jié)構(gòu):y=kx+bstruc 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) (在這里兩段的
57、比值為1:2); P fd( P a, P b) P q; q.x=(b.x-a.x)/3+a.x; q.y=(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)過程. 4、已知兩直線l1,l2,求交點(diǎn)坐標(biāo) P jd(L l1,L l2) 實(shí)現(xiàn)過程. 5、已知兩點(diǎn)P1,P2,求距離 double jl(P p1,P p2) 實(shí)現(xiàn)過程. (3)設(shè)計(jì)主函數(shù)(調(diào)用前面的各函數(shù),完成計(jì)算)Void main() P A,B,C,A1,B1,C1,A2,B2,C2; L L1,L2,L3
58、; double d1,d2,d3,s1,s2; double a=10.00; B.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ò)誤!” A C1 B2 B1 A2 C2 B A1 C 采用采用“面向?qū)ο蟮脑O(shè)計(jì)方法面向?qū)ο蟮脑O(shè)計(jì)方法”采用采用“面向?qū)ο蟮脑O(shè)計(jì)方法面向?qū)ο蟮脑O(shè)計(jì)方法”需要的工作步驟:需要的工作步驟
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 一年質(zhì)量工作總結(jié)
- 2024年計(jì)算機(jī)項(xiàng)目管理試題及答案
- 學(xué)期教育藝術(shù)鑒賞:兒童畫
- 完善醫(yī)院質(zhì)量管理體系的工作計(jì)劃
- 促進(jìn)語言表達(dá)的系列活動(dòng)計(jì)劃
- 整合資源與搭建合作平臺計(jì)劃
- 合理分配資源的管理藝術(shù)計(jì)劃
- 如何提升社區(qū)環(huán)境美化計(jì)劃
- 2024年人力資源師考試回顧試題及答案
- 2024年投資咨詢理論與實(shí)踐試題及答案
- (3月省質(zhì)檢)福建省2025屆高三畢業(yè)班適應(yīng)性練習(xí)卷英語試卷(含答案)
- 秸稈破壁菌酶研發(fā)項(xiàng)目可行性研究報(bào)告(范文參考)
- 2025年上半年貴州黔東南州各縣(市)事業(yè)單位招聘工作人員1691人筆試易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025新疆機(jī)場(集團(tuán))有限責(zé)任公司阿克蘇管理分公司第一季度招聘(75人)筆試參考題庫附帶答案詳解
- 2025年阿斯利康能力測試題及答案
- 東莞市勞動(dòng)合同模板6篇
- 《醫(yī)療機(jī)構(gòu)重大事故隱患判定清單(試行)》知識培訓(xùn)
- TCACM 1470-2023 胃癌前病變治未病干預(yù)指南
- Unit 4 Eat Well(大單元教學(xué)設(shè)計(jì))2024-2025學(xué)年七年級英語下冊同步備課系列(人教版2024)
- 全國計(jì)算機(jī)等級考試《三級信息安全技術(shù)》專用教材【考綱分析+考點(diǎn)精講+真題演練】
- 2024年天翼云認(rèn)證運(yùn)維工程師考試復(fù)習(xí)題庫(含答案)
評論
0/150
提交評論