版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 《高級語言程序設(shè)計》</p><p><b> 課程設(shè)計報告</b></p><p> 課題名稱: 多功能計算器 </p><p><b> 電子信息學(xué)院</b></p><p> 2015年 07 月 14 日</p>&
2、lt;p> 課程設(shè)計題目:多功能計算器</p><p> 1 課程設(shè)計目的與要求</p><p> 高級語言程序設(shè)計是本科工科類各專業(yè)的重要基礎(chǔ)課,課程以影響深遠(yuǎn)的、傳統(tǒng)的、面向過程的優(yōu)秀編程語言C語言為基礎(chǔ),學(xué)習(xí)程序設(shè)計的基本概念和方法,通過本門課程學(xué)習(xí),應(yīng)使同學(xué)掌握高級語言的基本原理,熟練掌握程序設(shè)計的基礎(chǔ)知識、基本概念;掌握程序設(shè)計的思想和編程技巧。</p>
3、<p> 課程設(shè)計是在學(xué)生已經(jīng)具備了使用C語言編寫簡單的應(yīng)用程序的能力,為使學(xué)生對C語言有更全面的理解,進(jìn)一步提高運用C語言編程解決實際問題的能力,通過提出算法、指定輸入輸出來設(shè)計一個解決方案。經(jīng)過該實踐環(huán)節(jié),培養(yǎng)學(xué)生的探索精神和創(chuàng)新能力。通過答辯訓(xùn)練學(xué)生的綜合表達(dá)能力。</p><p> 參加本課程設(shè)計的學(xué)生,應(yīng)當(dāng)認(rèn)真完成本課程設(shè)計的全部過程。并以最終課程設(shè)計成果來證明其獨立完成各種實際任務(wù)的能
4、力。從而反映出理解和運用本課程知識的水平和能力。具體如下:</p><p> ?。?)數(shù)據(jù)組織方面盡量使用到:數(shù)組、鏈表、結(jié)構(gòu)體、文件;</p><p> (2)程序結(jié)構(gòu)方面做到函數(shù)調(diào)用,盡量采用指針運算;</p><p> ?。?)代碼編寫規(guī)范,形成良好的編程習(xí)慣;</p><p> ?。?)程序須有一定的健壯性和必要的提示信息,考慮問題
5、的多種可能和邊界數(shù)據(jù)。</p><p> ?。?)課設(shè)完成須進(jìn)行答辯,提交課設(shè)報告電子稿、裝訂的打印稿。課設(shè)報告內(nèi)容包括以下幾個方面:</p><p> 程序的總體設(shè)計和算法分析。</p><p> 程序流程圖、函數(shù)說明</p><p><b> 源程序代碼清單</b></p><p>
6、測試數(shù)據(jù)和測試過程記錄</p><p> 遇到的問題及解決方法分析</p><p><b> 課程設(shè)計小結(jié)</b></p><p><b> 2 問題描述</b></p><p> 多功能計算器以菜單方式工作,包含了整數(shù)和實數(shù)的加減乘除、分?jǐn)?shù)的計算、復(fù)數(shù)的加減乘除以及一元多項式的加減等功能。
7、</p><p> 多功能計算器中的數(shù)據(jù)存放在文件中,提供文件的輸入、輸出等操作,這樣可以很方便的讀取文件,和保存信息,這樣能讓信息更好的被利用。</p><p> 要實現(xiàn)以菜單方式工作的功能,則提供顯示操作,將結(jié)構(gòu)體中的數(shù)據(jù)依次讀出。其中,顯示的是其他功能的選項,即整數(shù)的加減乘除、實數(shù)的加減乘除、分?jǐn)?shù)的計算、復(fù)數(shù)的加減乘除和一元多項式的加減。</p><p>
8、 要實現(xiàn)整數(shù)的加減乘除就需要借用相應(yīng)的計算,所以只需要設(shè)置好相關(guān)的加、減、乘、除的計算方式就可計算。當(dāng)然,也要設(shè)定輸入的是整數(shù)。</p><p> 要實現(xiàn)實數(shù)的加減乘除的方式大體和整數(shù)的加減乘除一樣。</p><p> 要實現(xiàn)分?jǐn)?shù)計算的功能,就要先定義分?jǐn)?shù),分?jǐn)?shù)的定義可以看成是兩個數(shù)之比。當(dāng)然,分?jǐn)?shù)可以是負(fù)數(shù)形式的,我們就可以把它看成是一個正數(shù)和一個負(fù)數(shù)的比值。另外,分?jǐn)?shù)的運算結(jié)果要
9、是最簡形式的。</p><p> 關(guān)于復(fù)數(shù)的加減乘除,則是通過抽象數(shù)據(jù)類型定義和構(gòu)造二元組進(jìn)行的。進(jìn)而進(jìn)行加減乘除的運算。</p><p> 要進(jìn)行一元多項式的加減,則運用鏈表聲明語句,建立帶表頭結(jié)構(gòu)的單鏈線性表進(jìn)而運算。</p><p><b> 3 總體設(shè)計</b></p><p><b> 3.1
10、功能分析</b></p><p> 系統(tǒng)要求實現(xiàn)計算器的最基本功能,包括數(shù)據(jù)的錄入、處理、輸出等。對于多功能計算器而言,其數(shù)據(jù)的處理包括輸入數(shù)據(jù)之間的運算關(guān)系,數(shù)據(jù)處理時的先后順序以及數(shù)據(jù)結(jié)果的輸出。</p><p> 系統(tǒng)達(dá)到的功能如下:</p><p><b> 1)以菜單方式工作</b></p><p
11、> 2)整數(shù)的加、減、乘、除</p><p> 3)實數(shù)的加、減、乘、除</p><p> 4)分?jǐn)?shù)的計算。將分?jǐn)?shù)定義為兩個整數(shù)之比,如:1/2,3/4,24/48,64/2等;分?jǐn)?shù)也可以是負(fù)數(shù),如-1/2,15/-24;分?jǐn)?shù)運算結(jié)果要是最簡化的,如:4/-8,應(yīng)表示成等價的-1/2。</p><p> 5)復(fù)數(shù)的加、減、乘、除</p>
12、<p> 6)一元多項式加、減</p><p> 3.2 系統(tǒng)使用的主要函數(shù)</p><p> void JJFYS() /*實數(shù)和整數(shù)加減乘除法運算的函數(shù)*/</p><p> void FenS() /*分?jǐn)?shù)運算的函數(shù)*/</p><p> void
13、 FuS() /*復(fù)數(shù)運算的函數(shù)*/</p><p> void YiD() /*一元多項式運算的函數(shù)*/</p><p> void match(char expected) /*檢查字符匹配的函數(shù)*/ </p><p> void ComplexNumberOutput
14、(fushu c) /*輸出運算結(jié)果*/</p><p> void CreatePolyn(PolynList L,int n) /*指數(shù)系數(shù)一對一對輸入*/</p><p> void PolynTraverse(PolynList L,void(*vi)(ElemType, ElemType)) // 初始條件:單鏈表L已存在 </p>
15、;<p> // 操作結(jié)果: 依次對L的每個數(shù)據(jù)元素調(diào)用函數(shù)vi().一旦vi()失敗,則操作失敗 </p><p> void visit(ElemType c, ElemType e) /*ListTraverse()調(diào)用的函數(shù)(類型要一致)*/</p><p> void write() /*寫入文件*/ </p>
16、<p> void read() /*從文件中讀出運算結(jié)果*/ </p><p> 3.3 系統(tǒng)使用的主要數(shù)據(jù)結(jié)構(gòu)</p><p> 利用類型定義符定義結(jié)構(gòu)體:</p><p> typedef struct result;</p><p> char menu(void)<
17、;/p><p> { char ch;</p><p> return(ch); </p><p><b> } </b></p><p> char token[61]; /*存放表達(dá)式字符串的數(shù)組*/</p><p><b> 和</b></p>
18、<p> typedef struct fushu//抽象數(shù)據(jù)類型定義</p><p><b> { </b></p><p> float real;//數(shù)據(jù)對象</p><p> float image; </p><p><b> }fushu; </b></p
19、><p><b> 和</b></p><p> typedef struct PolynNode{ </p><p> int coef; // 系數(shù) </p><p> int expn; // 指數(shù) </p><p> struct PolynNode *next; </
20、p><p> }PolynNode,*PolynList; </p><p> double result; </p><p> FILE *data=fopen("61590_4.dat","at");</p><p><b> 4 詳細(xì)設(shè)計</b></p>
21、<p> 4.1程序總體結(jié)構(gòu)圖</p><p><b> 圖4-1 主控模塊</b></p><p><b> 子模塊:</b></p><p> 圖4-2整數(shù)的加減乘除模塊</p><p> 圖4-3實數(shù)的加減乘除模塊</p><p> 圖4-4分?jǐn)?shù)的
22、計算模塊</p><p> 圖4-5復(fù)數(shù)的計算模塊</p><p> 圖4-6 一元多項式的加減模塊</p><p><b> 4.2 程序流程圖</b></p><p><b> 主控模塊流程圖:</b></p><p> 圖4-7主控模塊流程圖</p&
23、gt;<p><b> 子模塊流程圖:</b></p><p> 圖4-8 整數(shù)的加減乘除流程圖</p><p> 圖4-11復(fù)數(shù)的加減乘除流程圖</p><p> 圖4-12 一元多項式的加減流程圖</p><p><b> 5 功能測試</b></p>
24、<p><b> 5.1.系統(tǒng)主界面</b></p><p> 多功能計算器系統(tǒng)運行后的界面如圖5-1所示。</p><p><b> 圖5-1系統(tǒng)主界面</b></p><p> 5.2整數(shù)和實數(shù)的加減乘除界面</p><p> 輸入數(shù)字及運算符號,鍵入回車,系統(tǒng)進(jìn)行運算,得到
25、如圖5-2的界面。</p><p> 圖5-2整數(shù)或?qū)崝?shù)的加減乘除的界面</p><p> 5.3分?jǐn)?shù)的計算的界面</p><p> 先輸入1,2,3,4選擇菜單,再分別輸入分子分母進(jìn)行計算,輸入0退出系統(tǒng),得到如圖5-3的運行結(jié)果。</p><p> 圖5-3分?jǐn)?shù)的計算的界面</p><p> 5.4復(fù)數(shù)的
26、加減乘除的界面</p><p> 先輸入實部和虛部,再輸入1,2,3,4選擇功能,輸入0,退出系統(tǒng),得到如圖5-4的界面。</p><p> 圖5-4復(fù)數(shù)的加減乘除的界面</p><p> 5.5一元多項式的加減的界面</p><p> 根據(jù)提示輸入數(shù)據(jù),得到如圖5-5的界面。</p><p> 圖5-5一元
27、多項式加減的界面</p><p> 6程序設(shè)計調(diào)試情況分析</p><p> ?。?)缺少變量定義,定義位置不正確,過分重視分號的重要性</p><p> 問題內(nèi)容: 在for、if、while語句中畫蛇添足加分號,有些變量未經(jīng)定義就開始使用。</p><p> 問題分析:由于該程序相對來講稍有些長,前后有些變量不容易聯(lián)系起來,平時看書
28、不仔細(xì)、不太注意,把一些簡單的基礎(chǔ)知識搞混或忘記 </p><p> 解決方法:但是在錯誤信息的提示下一般還是很容易找到。不過需要注意的是在定義的時候有些函數(shù)使用同樣的變量名而表示不同的作用,因而使用要很小心,定義及定義的位置要特別留意。為減少這樣的錯誤我后來還是用不同的變量名來表示,結(jié)果引起的那些錯誤解決了</p><p><b> 7 課程設(shè)計小結(jié)</b>&l
29、t;/p><p> C語言是一種通用性較強(qiáng)的語言,通過這次C語言的課程設(shè)計,我認(rèn)識到學(xué)好計算機(jī)要重視實踐操作,不僅僅是學(xué)習(xí)C語言,還是其它的語言,以及其它的計算機(jī)方面的知識都要重在實踐,所以后在學(xué)習(xí)過程中,我會更加重視實踐操作,使自己更好地學(xué)習(xí)計算機(jī)的各類知識。在實際設(shè)計的過程中,需要耐心和細(xì)心。通過逐漸熟悉,對程序中出現(xiàn)問題能夠較快地找到問題所在,并找到解決的方法。在整個設(shè)計過程中,逐漸形成了一種謹(jǐn)慎的對待科學(xué)的
30、態(tài)度</p><p> 盡管我們已經(jīng)學(xué)習(xí)了《C程序設(shè)計》,對老師所講的知識也有了一些認(rèn)識,但是正所謂“紙上談兵終覺淺,覺知此事要躬行?!崩碚撝R學(xué)完之后,一定的實踐還是很有必要的,所以在本學(xué)期課程設(shè)計是很及時、很必要的。這樣不僅能加深我們對程序設(shè)計的掌握,而且還及時、真正的做到了學(xué)以致用。在本次課程設(shè)計中,我學(xué)到了主要是以下幾點:基本功要過硬,不能馬虎經(jīng)常犯犯小錯誤;提高自己找錯糾錯能力,通常錯誤總是那幾種,多
31、練習(xí)就熟練了;要善于查找資料提高自己的資料查詢能力,要善于利用網(wǎng)絡(luò)來獲得知識,獲得幫助。開始著手程序設(shè)計時,有些功能感覺無從下手,都不知道要干什么。這些問題只要找到相關(guān)的資料就會得到提示從而理解所要解決問題的大致方向。有了明確的目的,就可以發(fā)揮自己的頭腦來完成它了;要善于思考。程序中有些實現(xiàn)難點和最初完成程序時免不了的許多不足就需要自己根據(jù)代碼認(rèn)真思考來解決。只有這樣才能糾正程序的不足并使其更加人性化。</p><p
32、> 這次課程設(shè)計雖然經(jīng)歷了很多波折,也曾讓自己苦惱好久,但是讓我學(xué)到了很多,不僅是鞏固了先前學(xué)的程序設(shè)計知識,而且也培養(yǎng)了我的動手能力,更令我的創(chuàng)造性思維得到拓展。希望今后類似這樣課程設(shè)計、類似這樣的鍛煉機(jī)會能更多些!</p><p><b> 小組成員分工</b></p><p> 組長:何馳 負(fù)責(zé)子程序編程模塊,工作量 50 %</p>
33、<p> 組員:張紅兵 負(fù)責(zé)程序調(diào)試模塊 工作量 25%</p><p> 丁斌 負(fù)責(zé)課程設(shè)計報告撰寫模塊 工作量 25%</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 吉順如主編.《C程序設(shè)計教程與實驗》 清華大學(xué)出版社</p><p> [2] 黃逵中主編.《
34、C語言實例教程》中國電力出版社2004.9</p><p> [3] 王為青 張圣亮編著. 《C語言實戰(zhàn)105例》 人民郵電出版社,2007</p><p> [4] 王金鵬 肖進(jìn)杰 編著 《C語言設(shè)計進(jìn)階與實例解析》 清華大學(xué)出版社 2011.4</p><p><b> 附錄 系統(tǒng)源程序</b></p>
35、<p> #include<stdlib.h></p><p> #include<stdio.h></p><p> #include<malloc.h></p><p> #include<ctype.h> </p><p> #define TUB 5</p&g
36、t;<p><b> FILE*fp;</b></p><p> struct result</p><p><b> {</b></p><p> float JJFYS;</p><p><b> int FenS;</b></p>&
37、lt;p> float FuS;</p><p><b> int YiD;</b></p><p> }s[TUB]={0,0,0,0,0};</p><p> typedef struct result;</p><p> char menu(void)</p><p><
38、;b> {</b></p><p><b> char ch;</b></p><p> printf("------------------------------------------\n");</p><p> printf("\n Management For Caculator
39、's Result\n");</p><p> printf("1 JJFYS result\n");</p><p> printf("2 FenS result\n");</p><p> printf("3 FuS result\n");</p><p>
40、; printf("4 YiD result\n");</p><p> printf("w Write to a File \n"); </p><p> printf("r Read from a File \n"); </p><p> printf("0 Exit\n "
41、); </p><p> printf("Please Input your choice:"); </p><p> printf("-------------------------------------------\n");</p><p> scanf(" %c",&ch); &l
42、t;/p><p> return(ch); </p><p><b> } </b></p><p> void JJFYS()</p><p><b> {</b></p><p> char token[61]; /*存放表達(dá)式字符串的數(shù)組*/ </p>
43、;<p><b> int n=0; </b></p><p> void error(void) /*報告錯誤函數(shù)*/ </p><p><b> { </b></p><p> printf("ERROR!\n"); </p><p><b>
44、 exit(1); </b></p><p><b> } </b></p><p> void match(char expected) /*檢查字符匹配的函數(shù)*/ </p><p><b> { </b></p><p> if(token[n]==expected) &l
45、t;/p><p> token[++n]=getchar(); </p><p> else error(); </p><p><b> } </b></p><p> double term(void); /*計算乘除的函數(shù)*/ </p><p> double factor(void)
46、; /*處理括號和數(shù)字的函數(shù)*/ </p><p> double exp(void) /*計算加減的函數(shù)*/ </p><p><b> { </b></p><p> double temp=term(); </p><p> while((token[n]=='+')||(token[n]=
47、='-')) </p><p> switch(token[n]) </p><p><b> { </b></p><p> case'+':match('+'); </p><p> temp+=term(); </p><p><
48、b> break; </b></p><p> case'-':match('-'); </p><p> temp-=term(); </p><p><b> break; </b></p><p><b> } </b></p&
49、gt;<p> return temp; </p><p><b> } </b></p><p> double term(void) </p><p><b> { </b></p><p> double div; </p><p> doub
50、le temp=factor(); </p><p> while((token[n]=='*')||(token[n]=='/')) </p><p> switch(token[n]) </p><p><b> { </b></p><p> case'*':
51、match('*'); </p><p> temp*=factor(); </p><p><b> break; </b></p><p> case'/':match('/'); </p><p> div=factor(); </p><
52、p> if(div==0) /*處理除數(shù)為零的情況*/ </p><p><b> { </b></p><p> printf("The divisor is zero!\n"); </p><p><b> exit(1); </b></p><p><b
53、> } </b></p><p> temp/=div; </p><p><b> break; </b></p><p><b> } </b></p><p> return temp; </p><p><b> } </
54、b></p><p> double factor(void) </p><p><b> { </b></p><p> double temp; </p><p> char number[61]; </p><p><b> int i=0; </b>&
55、lt;/p><p> if(token[n]=='(') </p><p><b> { </b></p><p> match('('); </p><p> temp=exp(); </p><p> match(')'); </p&
56、gt;<p><b> } </b></p><p> else if(isdigit(token[n])||token[n]=='.') </p><p><b> { </b></p><p> while(isdigit(token[n])||token[n]=='.
57、39;) /*將字符串轉(zhuǎn)換為浮點數(shù)*/ </p><p><b> { </b></p><p> number[i++]=token[n++]; </p><p> token[n]=getchar(); </p><p><b> } </b></p><p>
58、 number[i]='\0'; </p><p> temp=atof(number); </p><p><b> } </b></p><p> else error(); </p><p> return temp; </p><p><b> } &l
59、t;/b></p><p><b> main() </b></p><p><b> { </b></p><p> double result; </p><p> FILE *data=fopen("61590_4.dat","at");
60、</p><p> if(data==NULL) </p><p> data=fopen("61590_4.dat","wt"); </p><p> if(data==NULL) </p><p> return 0; </p><p> token[n]=getc
61、har(); </p><p> result=exp(); </p><p> if(token[n]=='\n') </p><p><b> { </b></p><p> token[n]='\0'; </p><p> printf("
62、%s=%g\n",token,result); fprintf(data,"%s=%g\n",token,result); </p><p><b> } </b></p><p> else error(); </p><p> fclose(data); </p><p>
63、return 0; </p><p><b> getch(); </b></p><p><b> }</b></p><p><b> }</b></p><p> void FenS()</p><p><b> {</b
64、></p><p> int fm,f; </p><p> int tf(int a,int b,int m,int n) </p><p><b> { </b></p><p><b> int i,s; </b></p><p> for(i=b>
65、;n?b:n;;i++) </p><p><b> { </b></p><p> if(i%b==0&&i%n==0) </p><p><b> break; </b></p><p><b> } </b></p><p>
66、;<b> fm=i; </b></p><p><b> if(f) </b></p><p> s=(i/b*a+i/n*m); </p><p><b> else </b></p><p> s=(i/b*a-i/n*m); </p><p
67、> return s; </p><p><b> } </b></p><p> int hj(int t,int s) </p><p><b> { </b></p><p><b> int i; </b></p><p> f
68、or(i=t<s?t:s;i>=1;i--) </p><p><b> { </b></p><p> if(t%i==0&&s%i==0) </p><p><b> { </b></p><p><b> t/=i; </b></
69、p><p><b> s/=i; </b></p><p><b> } </b></p><p><b> } </b></p><p><b> fm=s; </b></p><p> return t; </p&g
70、t;<p><b> } </b></p><p><b> main() </b></p><p><b> { </b></p><p> int a,b,m,n,t,s,fz,r,c,ff=0; </p><p><b> char k;
71、 </b></p><p> printf("------------------------------------------\n"); </p><p> printf(" [1] 加法 [2] 減法\n"); </p><p> printf(" [3] 乘法 [4
72、] 除法\n"); </p><p> printf(" [0] 退出\n"); </p><p> printf("------------------------------------------\n"); </p><p><b> do{ </b></p>
73、<p> printf("請輸入你選擇的菜(0--4):"); </p><p><b> k1: </b></p><p> scanf("%d",&c); </p><p> if(c<0||c>4) </p><p> { pr
74、intf("菜單中沒有本選項,請重新輸入!"); </p><p> fflush(stdin); </p><p><b> goto k1; </b></p><p> getchar(); </p><p><b> } </b></p><p
75、> printf("請輸入第一個分?jǐn)?shù)的分子和分母:"); </p><p> scanf("%d %d",&a,&b); </p><p> printf("請輸入第二個分?jǐn)?shù)的分子和分母:"); </p><p> scanf("%d %d",&m,
76、&n); </p><p> switch(c) </p><p><b> { </b></p><p> case 0:return 0;break; </p><p> case 1:f=1;t=tf(a,b,m,n);s=fm;k='+';break; </p>&l
77、t;p> case 2:f=0;t=tf(a,b,m,n);s=fm;k='-';break; </p><p> case 3:t=a*m;s=b*n;k='*';break; </p><p> case 4:t=a*n;s=b*m;k='/';break; </p><p><b> }
78、</b></p><p> fz=hj(t,s); </p><p> printf("%d/%d%c%d/%d=%d/%d\n",a,b,k,m,n,fz,fm); </p><p> }while(1); </p><p><b> }</b></p><p
79、> void FuS()</p><p><b> {</b></p><p> typedef struct fushu//抽象數(shù)據(jù)類型義</p><p><b> { </b></p><p> float real;//數(shù)據(jù)對象</p><p> fl
80、oat image; </p><p><b> }fushu; </b></p><p> fushu ComplexNumberInput(float a,float b)//構(gòu)造二元組</p><p><b> { </b></p><p><b> fushu c; <
81、;/b></p><p> c.real=a;//實部</p><p> c.image=b;//虛部</p><p> return(c); </p><p><b> } </b></p><p> fushu ComplexNumberAdd(fushu c1,fushu
82、c2)//求和運算</p><p><b> { </b></p><p> fushu sum; </p><p> sum.real=c1.real+c2.real; </p><p> sum.image=c1.image+c2.image; </p><p> return (s
83、um); </p><p><b> } </b></p><p> fushu ComplexNumberSub(fushu c1,fushu c2)//求差運算</p><p><b> { </b></p><p> fushu sub; </p><p>
84、 sub.real=c1.real-c2.real; </p><p> sub.image=c1.image-c2.image; </p><p> return (sub); </p><p><b> } </b></p><p> fushu ComplexNumberMul(fushu c1,fush
85、u c2)//求積運算</p><p><b> { </b></p><p> fushu Mul; Mul.real=c1.real*c2.real-c1.image*c2.image; Mul.image=c1.real*c2.image+c1.image*c2.real; </p><p> return (Mul)
86、; </p><p><b> } </b></p><p> fushu ComplexNumberDiv(fushu c1,fushu c2)//求商運算</p><p><b> { </b></p><p> fushu div; </p><p> f
87、loat d1,d2,d3,d4; </p><p> d1=c1.real*c2.real+c1.image*c2.image; </p><p> d2=c2.real*c2.real+c2.image*c2.image; </p><p> d3=c1.image*c2.real-c1.real*c2.image; </p><p&
88、gt; d4=c2.real*c2.real+c2.image*c2.image; </p><p> if(d2!=0&&d4!=0) </p><p><b> { </b></p><p> div.real=d1/d2; </p><p> div.image=d3/d4; </
89、p><p> return(div); </p><p><b> } </b></p><p><b> else </b></p><p><b> { </b></p><p> div.real=0; </p><p&g
90、t; div.image=0; </p><p> return(div); </p><p><b> } </b></p><p><b> } </b></p><p> void ComplexNumberOutput(fushu c)//輸出運算結(jié)果</p><
91、;p><b> { </b></p><p> if(c.real==0.0&&c.image==0.0) </p><p> printf("0\n"); </p><p> if(c.real==0.0&&c.image!=0.0) </p><p>
92、 printf("%fi\n",c.image); </p><p> if(c.real!=0.0&&c.image==0.0) </p><p> printf("%f\n",c.real); </p><p> if(c.real!=0.0&&c.image!=0.0) </
93、p><p> printf("%f+(%fi)\n",c.real,c.image); </p><p><b> } </b></p><p> void main()//主函數(shù)</p><p><b> { </b></p><p> int
94、choice; </p><p><b> int k; </b></p><p> float a1,a2,b1,b2; </p><p> struct fushu c1,c2,sum,sub,mult,div; </p><p> printf("歡迎進(jìn)行復(fù)數(shù)的基本代數(shù)運算\n"); &
95、lt;/p><p> printf("1: 復(fù)數(shù)加法運算\n"); </p><p> printf("2: 復(fù)數(shù)減法運算\n"); </p><p> printf("3: 復(fù)數(shù)乘法運算\n"); </p><p> printf("4: 復(fù)數(shù)除法運算\n"
96、); </p><p> printf("0: 推出系統(tǒng)\n"); </p><p> printf("請分別輸入第一個復(fù)數(shù)的實部和虛部: "); </p><p> scanf("%f%f",&a1,&b1); </p><p> c1 = ComplexN
97、umberInput(a1,b1); </p><p> printf("第一個復(fù)數(shù)為: "); </p><p> ComplexNumberOutput(c1); </p><p> printf("請分別輸入第二個復(fù)數(shù)的實部和虛部: "); </p><p> scanf("%
98、f%f",&a2,&b2); </p><p> c2 = ComplexNumberInput(a2,b2); </p><p> printf("第二個復(fù)數(shù)為: "); </p><p> ComplexNumberOutput(c2); </p><p><b> for(
99、;;) </b></p><p><b> { </b></p><p> printf("請輸入你選擇的功能: "); </p><p> scanf("%d",&choice); </p><p> switch(choice) </p>
100、<p><b> { </b></p><p> case 0:exit(0); break; </p><p> case 1:sum = ComplexNumberAdd(c1,c2); </p><p> printf("求和后結(jié)果為: "); </p><p> Com
101、plexNumberOutput(sum); break; </p><p> case 2:sub = ComplexNumberSub(c1,c2); </p><p> printf("求差后結(jié)果為: "); </p><p> ComplexNumberOutput(sub); break; </p><p>
102、; case 3:mult = ComplexNumberMul(c1,c2); </p><p> printf("求積后結(jié)果為: "); </p><p> ComplexNumberOutput(mult ); break; </p><p> case 4:div=ComplexNumberDiv(c1,c2); </p&
103、gt;<p> if(div.real!=0&&div.image!=0) </p><p><b> { </b></p><p> printf("求商后結(jié)果: "); </p><p> ComplexNumberOutput(div); break; </p>
104、<p><b> } </b></p><p><b> else </b></p><p> { printf("除零錯誤,請重新輸入第二個復(fù)數(shù);\n"); </p><p><b> k=0; </b></p><p><b&g
105、t; exit(k); </b></p><p><b> } </b></p><p><b> } </b></p><p><b> } </b></p><p><b> } </b></p><p>
106、;<b> }</b></p><p> void YiD()</p><p><b> {</b></p><p> typedef int ElemType; </p><p> /*單項鏈表的聲明*/ </p><p> typedef struct P
107、olynNode{ </p><p> int coef; // 系數(shù) </p><p> int expn; // 指數(shù) </p><p> struct PolynNode *next; </p><p> }PolynNode,*PolynList; /*正位序(插在表尾)輸入n個元素的值,建立帶表頭結(jié)構(gòu)的單鏈線性表
108、*/ </p><p> /*指數(shù)系數(shù)一對一對輸入*/ </p><p> void CreatePolyn(PolynList L,int n) </p><p><b> { </b></p><p><b> int i; </b></p><p>
109、 PolynList p,q; </p><p> L=(PolynList)malloc(sizeof(PolynNode)); // 生成頭結(jié)點 </p><p> L->next=NULL; </p><p><b> q=L; </b></p><p> printf("成對輸入%
110、d個數(shù)據(jù)\n",n); </p><p> for(i=1;i<=n;i++) </p><p> { p=(PolynList)malloc(sizeof(PolynNode)); </p><p> scanf("%d%d",&p->coef,&p->expn); //
111、指數(shù)和系數(shù)成對輸入 </p><p> q->next=p; </p><p> q=q->next; </p><p><b> } </b></p><p> p->next=NULL; </p><p><b> } </b>&l
112、t;/p><p> // 初始條件:單鏈表L已存在 </p><p> // 操作結(jié)果: 依次對L的每個數(shù)據(jù)元素調(diào)用函數(shù)vi().一旦vi()失敗,則操作失敗 </p><p> void PolynTraverse(PolynList L,void(*vi)(ElemType, ElemType)) </p><p><b&g
113、t; { </b></p><p> PolynList p=L->next; </p><p> while(p) </p><p><b> { </b></p><p> vi(p->coef, p->expn); </p><p> if
114、(p->next) </p><p><b> { </b></p><p> printf(" + "); //“+”號的輸出,最后一項后面沒有“+” </p><p><b> } </b></p><p> p=p->next; </
115、p><p><b> } </b></p><p> printf("\n"); </p><p><b> } </b></p><p> /*ListTraverse()調(diào)用的函數(shù)(類型要一致)*/ </p><p> void visi
116、t(ElemType c, ElemType e) </p><p><b> { </b></p><p> if(c != 0) </p><p><b> { </b></p><p> printf("%dX^%d",c,e); //格式化輸出多項式
117、每一項 </p><p><b> } </b></p><p><b> } </b></p><p> /* 多項式相加,原理:歸并 */ </p><p> /* 參數(shù):兩個已經(jīng)存在的多項式 */ </p><p>
118、/* 返回值:歸并后新的多項式的頭結(jié)點 */ </p><p> PolynList MergeList(PolynList La, PolynList Lb) </p><p><b> { </b></p><p> PolynList pa, pb, pc, Lc; </p><p> pa = L
119、a->next; </p><p> pb = Lb->next; </p><p> Lc = pc = La; // 用La的頭結(jié)點作為Lc的頭結(jié)點 </p><p> while(pa&&pb) </p><p><b> { </b></p><
120、;p> if(pa->expn < pb->expn) </p><p> { </p><p> pc->next = pa; //如果指數(shù)不相等,pc指針連上指數(shù)小的結(jié)點, </p><p> pc = pa; <
121、;/p><p> pa = pa->next; //指向該結(jié)點的指針后移 </p><p><b> } </b></p><p> else if (pa ->expn > pb->expn ) </p><p><b> { </b&
122、gt;</p><p> pc->next = pb; //pc指針連上指數(shù)小的結(jié)點, </p><p> pc = pb; </p><p> pb = pb->next; //指向該結(jié)點的指針后移 </p><p><b> } </b&g
123、t;</p><p> else //(pa ->expn = pb->expn ) </p><p><b> { </b></p><p> pa->coef = pa->coef + pb->coef; //指數(shù)相等時,系數(shù)相加 </p><p> pc-&g
124、t;next = pa; </p><p> pc = pa; </p><p> pa = pa->next; //兩指針都往后移 </p><p> pb = pb->next; </p><p><b> } </b></p><p>&
125、lt;b> } </b></p><p> pc->next = pa ? pa:pb; // 插入剩余段 </p><p> return Lc; </p><p><b> } </b></p><p> void main() </p><p>
126、<b> { </b></p><p> PolynList ha,hb,hc; </p><p> printf("非遞減輸入多項式ha, "); </p><p> CreatePolyn(ha,5); // 正位序輸入n個元素的值 </p><p> printf(&quo
127、t;非遞減輸入多項式hb, "); </p><p> CreatePolyn(hb,5); // 正位序輸入n個元素的值 </p><p> printf("多項式ha :"); </p><p> PolynTraverse(ha, visit); </p><p> printf(&qu
128、ot;\n"); </p><p> printf("多項式hb :"); </p><p> PolynTraverse(hb, visit); </p><p> printf("\n"); </p><p> hc = MergeList(ha,hb); </p&
129、gt;<p> PolynTraverse(hc, visit); </p><p><b> } </b></p><p><b> }</b></p><p> void write()/*寫入文件*/ </p><p><b> { </b>&l
130、t;/p><p> FILE *fp; </p><p><b> int i; </b></p><p> fp=fopen("result","wb"); </p><p> for(i=0;i<TUB;i++) </p><p><b
131、> { </b></p><p> fwrite(&s[i],sizeof(struct result),1,fp); </p><p> printf("write to file successfully.\n"); </p><p><b> } </b></p>&l
132、t;p> fclose(fp); </p><p><b> }</b></p><p> void read()/*從文件中讀出運算結(jié)果*/ </p><p><b> { </b></p><p> FILE *fp; </p><p> int i,
133、j; </p><p> fp=fopen("result","rb"); </p><p> if(fp==NULL) </p><p><b> { </b></p><p> printf("cannot open this file!\n");
134、 </p><p> exit(0); </p><p><b> } </b></p><p> for(i=0;i<TUB;i++) </p><p> fread(&s[i],sizeof(struct result),1,fp); </p><p> for(
135、i=0;i<TUB;i++) </p><p><b> { </b></p><p> printf("%d",s[i]);</p><p><b> } </b></p><p> fclose(fp); </p><p><b
136、> } </b></p><p> void main()/*主程序_選擇要執(zhí)行的命令*/ </p><p><b> { </b></p><p> FILE *fp; </p><p><b> char ch; </b></p><p>&l
137、t;b> while(1) </b></p><p><b> { </b></p><p> ch=menu(); </p><p> switch(ch) </p><p><b> { </b></p><p> case'1
138、9;:ZhengS();break; </p><p> case'2':ShiS();break; </p><p> case'3':FenS;break; </p><p> case'4':FuS;break; </p><p> case'5':YiD;brea
139、k; </p><p> case'w':write();break; </p><p> case'r':read();break; </p><p> case'0':exit(0);break; </p><p> default:printf("Wrong choi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計報告---多功能計算器
- java課程設(shè)計報告---設(shè)計一個多功能計算器
- c++課程設(shè)計---用vc++制作多功能計算器
- c++課程設(shè)計---用vc++制作多功能計算器
- c++課程設(shè)計--計算器設(shè)計報告
- c++簡單計算器課程設(shè)計報告
- c++課程設(shè)計報告--簡單計算器
- c++課程設(shè)計報告--復(fù)數(shù)計算器
- 單片機(jī)課程設(shè)計設(shè)計報告(多功能電子計算器設(shè)計)
- c語言課程設(shè)計--計算器
- c語言課程設(shè)計--計算器
- 計算器c++課程設(shè)計
- c++課程設(shè)計——計算器
- c++計算器課程設(shè)計--計算器程序設(shè)計
- 計算器課程設(shè)計報告
- c++課程設(shè)計報告--小型特殊計算器
- c++課程設(shè)計報告--小型特殊計算器
- c++課程設(shè)計報告--小型特殊計算器
- 課程設(shè)計報告---計算器設(shè)計
- c++課程設(shè)計--簡單計算器
評論
0/150
提交評論