2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論