2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩19頁(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、<p>  C語(yǔ)言課程設(shè)計(jì)說(shuō)明書(shū)</p><p>  題目: 長(zhǎng)整型數(shù)四則運(yùn)算 </p><p>  學(xué) 院: </p><p>  班 級(jí): </p><p>  學(xué) 生:

2、 </p><p>  學(xué) 號(hào): </p><p>  班內(nèi)序號(hào): </p><p>  提交日期: 年 月 日 </p><p><b>  目 錄</b></p&

3、gt;<p><b>  一、需求分析1</b></p><p><b>  二、設(shè)計(jì)思路1</b></p><p><b>  三、詳細(xì)設(shè)計(jì)2</b></p><p><b>  1、主要函數(shù)2</b></p><p>  2、函數(shù)

4、的主要調(diào)用關(guān)系圖3</p><p>  四、調(diào)試分析及編程心得體會(huì)3</p><p><b>  五、用戶手冊(cè)3</b></p><p><b>  六、測(cè)試結(jié)果3</b></p><p><b>  七、源程序代碼4</b></p><p>

5、  1、 main.c 主控文件4</p><p>  2、IntFace.h 程序界面模塊頭文件5</p><p>  3、IntFace.c 程序界面處理模塊文件6</p><p>  4、LongInt.h 長(zhǎng)整型數(shù)輸入輸入及運(yùn)算模塊頭文件9</p><p>  5、LongIO.c 長(zhǎng)整型數(shù)輸入輸出處理模塊文件9</p

6、><p>  6、LongInt.c 長(zhǎng)整型數(shù)運(yùn)算處理模塊文件11</p><p>  7、DuCiLink.h 雙向循環(huán)鏈表處理模塊頭文件16</p><p>  8、DuCiLink.c 雙向循環(huán)鏈表處理模塊代碼17</p><p><b>  一、需求分析</b></p><p>  設(shè)計(jì)

7、一個(gè)實(shí)現(xiàn)任意長(zhǎng)的整數(shù)進(jìn)行四則運(yùn)算的程序。</p><p>  輸入和輸出形式是按中國(guó)對(duì)于長(zhǎng)整數(shù)的表示習(xí)慣,每四位一組,組間用逗號(hào)隔開(kāi),長(zhǎng)整數(shù)位數(shù)沒(méi)有上限,以分號(hào)結(jié)束長(zhǎng)整型數(shù)據(jù)的輸入。</p><p>  程序執(zhí)行的命令包括:</p><p>  1)、輸入長(zhǎng)整數(shù)1;2)、輸入長(zhǎng)整數(shù)2;3)、輸入執(zhí)行的運(yùn)算符;4)、計(jì)算并輸出結(jié)果;5)、結(jié)束。</p>

8、<p>  4、測(cè)試數(shù)據(jù):(以加法為例)</p><p> ?。?)、0;0;+;應(yīng)輸出“0”。</p><p> ?。?)、-2345,6789;-7654,3211;+;應(yīng)輸出“-1,0000,0000”。</p><p> ?。?)、-9999,9999;1,0000,0000,0000;+;應(yīng)輸出“9999,0000,0001”.</p>

9、;<p>  (4)、1,0001,0001;-1,0001,0001;+;應(yīng)輸出“0”.</p><p>  (5)、1,0001,0001;-1,0001,0000;+;應(yīng)輸出“1”。</p><p> ?。?)、-9999,9999,9999;-9999,9999,9999;+;應(yīng)輸出“-1,9999,9999,9998”.</p><p>  

10、(7)1,0000,9999,9999;1;+;應(yīng)輸出“1,0001,0000,0000”.</p><p><b>  二、設(shè)計(jì)思路</b></p><p>  我們首先要考慮的是如何表示長(zhǎng)整型數(shù)。按照傳統(tǒng)習(xí)慣要求每4位數(shù)形成1組,而一個(gè)長(zhǎng)整型數(shù)可能會(huì)有很多組這種4位數(shù),而每節(jié)之間是有先后順序的,因此我們可以考慮用數(shù)組和鏈表來(lái)存儲(chǔ)數(shù)據(jù)。(1)再考慮到每個(gè)長(zhǎng)整型數(shù)的長(zhǎng)

11、度在輸入之間是無(wú)法預(yù)知的,因此使用鏈表在存儲(chǔ)空間的分配上更方便一些。(2)在輸入數(shù)據(jù)時(shí)總是從高位到低位地存儲(chǔ),而計(jì)算時(shí)總是從低位向高位運(yùn)算,(這樣的話棧也很方便)因此采用雙向鏈表更方便,而為了從頭結(jié)點(diǎn)方便地轉(zhuǎn)到尾結(jié)點(diǎn)可以采用循環(huán)鏈表。總之,為了實(shí)現(xiàn)上述功能,應(yīng)以雙向循環(huán)鏈表表示長(zhǎng)整數(shù),每個(gè)結(jié)點(diǎn)含一個(gè)整型變量,且僅絕對(duì)值不超過(guò)9999的整數(shù),整個(gè)鏈表用十進(jìn)制數(shù)表示。(3)對(duì)于每一個(gè)長(zhǎng)整型數(shù)可以設(shè)置一個(gè)頭結(jié)點(diǎn),其中的數(shù)據(jù)域用來(lái)表示該長(zhǎng)整型數(shù)

12、的正負(fù)號(hào)及組數(shù),該值的符號(hào)則表示該長(zhǎng)整型數(shù)的符號(hào),該數(shù)的絕對(duì)值表示該長(zhǎng)整型數(shù)包含的4位數(shù)的組數(shù)。第一個(gè)存儲(chǔ)4位數(shù)據(jù)組的結(jié)點(diǎn)稱為首結(jié)點(diǎn),而最后一個(gè)4位數(shù)據(jù)組結(jié)點(diǎn)稱為尾結(jié)點(diǎn)。</p><p>  為此需要兩個(gè)結(jié)構(gòu)數(shù)據(jù)類型:雙向循環(huán)鏈表和長(zhǎng)整數(shù),兩個(gè)類型采用相同的結(jié)構(gòu),只是雙向循環(huán)鏈表用來(lái)存儲(chǔ)數(shù)據(jù),長(zhǎng)整型用表示數(shù)據(jù)的運(yùn)算。</p><p>  雙向循環(huán)鏈表的數(shù)據(jù)結(jié)構(gòu)及操作定義如下:</p&

13、gt;<p>  typedef short ElemType; //定義基本數(shù)據(jù)類型,我們采用short來(lái)表示任意4位整數(shù)。</p><p>  typedef struct DuCiLinkNode{ // 雙向循環(huán)鏈表結(jié)點(diǎn)的存儲(chǔ)結(jié)構(gòu)</p><p>  ElemType data;</p><p>  struct Du

14、CiLinkNode *prior;//指向上一結(jié)點(diǎn)</p><p>  struct DuCiLinkNode *next;//指向下一結(jié)點(diǎn)</p><p>  }DuCiLinkNode,*DuCiLinkList; //定義雙向循環(huán)鏈表結(jié)點(diǎn)及鏈表的類型名</p><p><b>  基本操作:</b></p

15、><p>  DuCiLinkNode *MakeNode(ElemType e); //以4位整數(shù)e構(gòu)造1個(gè)雙向循環(huán)鏈表結(jié)點(diǎn)</p><p>  Status InitList(DuCiLinkList *L); //初始化1個(gè)雙向循環(huán)鏈表,分配1個(gè)結(jié)點(diǎn)作頭結(jié)點(diǎn)</p><p>  //數(shù)據(jù)域賦初值0,上下結(jié)點(diǎn)指針指向自己</p><p>

16、  void DestroyList(DuCiLinkList *L); //消毀1個(gè)雙向循環(huán)鏈表,釋放它所占用的所有內(nèi)存空間</p><p>  //并讓鏈表*L指向NULL</p><p>  void ClearList(DuCiLinkList L); //清除1個(gè)雙向循環(huán)鏈表,釋放數(shù)據(jù)結(jié)點(diǎn)所占用的內(nèi)存空間</p><p>  //保留頭結(jié)點(diǎn),并將

17、數(shù)據(jù)域置為0,上下結(jié)點(diǎn)指針指向自己</p><p>  Status InsTail(DuCiLinkList L, ElemType e); //在雙向循環(huán)鏈表L的尾結(jié)點(diǎn)之后加入1個(gè)以e為</p><p>  //數(shù)據(jù)域的新結(jié)點(diǎn),并返回OK; 否則返回ERROR。</p><p>  Status InsFirst(DuCiLinkList L, ElemType

18、 e);</p><p>  //將數(shù)據(jù)元素e插入在線性鏈表L頭結(jié)點(diǎn)之后,并返回OK; 否則返回ERROR。</p><p>  Status CopyList(DuCiLinkList L, DuCiLinkList C);</p><p>  //將雙向循環(huán)鏈表L復(fù)制到雙向循環(huán)鏈表C中。</p><p>  長(zhǎng)整數(shù)的數(shù)據(jù)類型和和操作定義為

19、:</p><p>  typedef struct DuCiLinkNode LongIntNode,*LongInt;//采用雙向循環(huán)鏈表為實(shí)際的存儲(chǔ)結(jié)構(gòu)</p><p>  void OutputNumber(LongInt a);//輸出一個(gè)長(zhǎng)整型數(shù)</p><p>  void InputNumber(LongInt a,int OneOrTwo)

20、;//輸入一個(gè)長(zhǎng)整型數(shù)</p><p>  void add(LongInt c,LongInt a,LongInt b);//長(zhǎng)整型數(shù) c = a + b</p><p>  void sub(LongInt c,LongInt a,LongInt b); //長(zhǎng)整型數(shù) c = a - b</p><p>  Status mul(LongInt c,Lon

21、gInt a,LongInt b);//長(zhǎng)整型數(shù) c = a * b</p><p>  void div(LongInt c,LongInt a,LongInt b); //長(zhǎng)整型數(shù) c = a / b (整除)</p><p>  void rem(LongInt c,LongInt a,LongInt b); //長(zhǎng)整型數(shù) c = a % b (求余)</p>&

22、lt;p>  void power(LongInt c,LongInt a,int n);//長(zhǎng)整型數(shù) c = a ^ n (乘方)</p><p>  本程序包含四個(gè)模塊:</p><p><b>  主程序模塊:</b></p><p>  void main()//main.c</p><p><

23、;b>  {</b></p><p><b>  初始化;</b></p><p><b>  do{</b></p><p><b>  接受命令;</b></p><p><b>  處理命令;</b></p><

24、p>  }while(“命令”=“結(jié)束”)</p><p><b> ?。?lt;/b></p><p>  程序界面模塊//IntFace.c, IntFace.h</p><p>  雙向循環(huán)鏈表處理模塊// DuCiLink.c,DuCiLink.h</p><p>  長(zhǎng)整型數(shù)的輸入輸出模塊//Long

25、IO.c, LongInt.h</p><p>  長(zhǎng)整數(shù)運(yùn)算模塊//LongInt.c LongInt.h</p><p>  各模塊之間的調(diào)用關(guān)系如下:</p><p><b>  三、詳細(xì)設(shè)計(jì)</b></p><p><b>  1、主要函數(shù)</b></p><

26、;p>  (1)、主控模塊main.c</p><p>  void DoCommand()//根據(jù)輸入命令進(jìn)行相應(yīng)的處理</p><p>  void Calculate()//執(zhí)行計(jì)算功能</p><p>  void ReSet()//重設(shè)系統(tǒng)環(huán)境</p><p>  (2)、程序界面模塊 IntFace.c</p&

27、gt;<p>  void InitiInterface();//界面初始化</p><p>  void GoToCmdxy();//將光標(biāo)定位到命令選項(xiàng)提示之后</p><p>  void GoToPrompt();//將光標(biāo)定位到命令選項(xiàng)提示行首</p><p>  void ShowMainPrompt();//顯示命令選項(xiàng)提示&

28、lt;/p><p>  void ClearScreen();//以清除整個(gè)屏幕,并設(shè)置為黑底白字模式</p><p>  void ClearPromptLine();//清除提示行的顯示</p><p>  void ClearWorkSpace();//清除工作區(qū)的顯示 </p><p>  void InputNumberBox(

29、int OneOrTwo);//指定兩個(gè)輸入數(shù)的輸入窗口,如果超過(guò)這個(gè)范圍文字將自動(dòng)流動(dòng)</p><p>  void ResultBox(); //指定計(jì)算結(jié)果的顯示窗口,如果超過(guò)這個(gè)范圍文字將自動(dòng)流動(dòng)</p><p>  (3)、長(zhǎng)整型數(shù)輸入輸出模塊見(jiàn)二小節(jié)2分節(jié)</p><p>  (4)、長(zhǎng)整型數(shù)四則運(yùn)算處理模塊見(jiàn)二小節(jié)2分節(jié)</

30、p><p>  (5)、長(zhǎng)整型數(shù)存儲(chǔ)模塊—雙向循環(huán)鏈表模塊見(jiàn)二小節(jié)1分節(jié)</p><p>  2、函數(shù)的主要調(diào)用關(guān)系圖</p><p>  四、調(diào)試分析及編程心得體會(huì)</p><p>  1、剛開(kāi)始考慮進(jìn)位問(wèn)題過(guò)于簡(jiǎn)單,導(dǎo)致測(cè)試數(shù)據(jù)時(shí)多次出錯(cuò)。</p><p>  2、剛開(kāi)始時(shí)在輸入方式中花了較大功夫,而且用戶界面不夠友

31、好,程序容錯(cuò)性較差。</p><p>  3、開(kāi)始寫(xiě)程序時(shí)源程序沒(méi)有嚴(yán)格按單元模塊結(jié)構(gòu)編寫(xiě),可讀性較差。</p><p>  4、由于初次進(jìn)行系統(tǒng)的程序設(shè)計(jì),層次結(jié)構(gòu)劃分不太合理,應(yīng)在以后的設(shè)計(jì)中強(qiáng)化此思維,逐漸與工程設(shè)計(jì)接軌。</p><p>  …………………………………………</p><p><b>  五、用戶手冊(cè)</

32、b></p><p>  1、本程序的運(yùn)行環(huán)境為DOS操作系統(tǒng),執(zhí)行文件為L(zhǎng)ongInt.exe。</p><p>  2、進(jìn)入演示程序后即顯示文本方式的用戶界面</p><p>  3、輸入命令,執(zhí)行相應(yīng)的功能:</p><p>  1 –– 輸入第1個(gè)整數(shù)o,O –– 輸入運(yùn)算符r, R –– 重置系統(tǒng)</p>

33、<p>  2 –– 輸入第2個(gè)整數(shù)c,C –– 執(zhí)行運(yùn)算q,Q –– 退出系統(tǒng)</p><p><b>  六、測(cè)試結(jié)果</b></p><p> ?。?)、0和0的四則運(yùn)算:</p><p> ?。?)、-2345,6789;-7654,3211;+;應(yīng)輸出“-1,0000,0000”。</p>&l

34、t;p>  (3)、-9999,9999;1,0000,0000,0000;+;應(yīng)輸出“9999,0000,0001”.</p><p>  (4)、1,0001,0001;-1,0001,0001;+;應(yīng)輸出“0”.</p><p> ?。?)、1,0001,0001;-1,0001,0000;+;應(yīng)輸出“1”。</p><p> ?。?)、-9999,99

35、99,9999;-9999,9999,9999;+;應(yīng)輸出“-1,9999,9999,9998”.</p><p> ?。?)1,0000,9999,9999;1;+;應(yīng)輸出“1,0001,0000,0000”.</p><p>  略…………………………………</p><p><b>  七、源程序代碼</b></p><

36、p>  /*******************************************************</p><p>  1、main.c 主控文件</p><p>  *******************************************************/</p><p>  #include "IntF

37、ace.h"/*界面模塊頭文件*/</p><p>  #include "LongInt.h"/*長(zhǎng)整型數(shù)處理模塊頭文件*/</p><p>  char cmd;/* menu command */</p><p>  char opt;/* operator */</p><p>  int

38、n;/* power */</p><p>  LongInt a,b,c;/* Long integer numbers */</p><p>  int flag_n1=0,flag_n2=0,flag_opt=0,flag_cal=0,flag_reset=1; /*標(biāo)志位*/</p><p>  void ReSet()/* Reset sys

39、tem */</p><p><b>  {</b></p><p>  ClearWorkSpace();//清屏幕的工作區(qū)</p><p>  flag_n1=0;//重置長(zhǎng)整數(shù)1是否輸入的標(biāo)志</p><p>  flag_n2=0;//重置長(zhǎng)整數(shù)2是否輸入的標(biāo)志</p><p&g

40、t;  flag_opt=0;//重置運(yùn)算符 是否輸入的標(biāo)志</p><p>  flag_cal=0;//重置是否進(jìn)行了運(yùn)算的標(biāo)志</p><p>  flag_reset=1;//重置 重置標(biāo)志</p><p><b>  }</b></p><p>  void Calculate()//執(zhí)行計(jì)算

41、</p><p><b>  {</b></p><p>  int overflow = OK;</p><p>  if (flag_n1*flag_n2*flag_opt == 0 ) return; </p><p>  /*Input is not complete! 輸入不完整則直接返回*/</p>

42、;<p>  switch (opt)</p><p><b>  {</b></p><p>  case '+': add(c,a,b); break;//執(zhí)行加法運(yùn)算</p><p>  case '-': sub(c,a,b); break;//執(zhí)行減法運(yùn)算</p><p

43、>  case '*': mul(c,a,b); break;//執(zhí)行乘法運(yùn)算</p><p>  case '/': overflow = div(c,a,b); break;//執(zhí)行整除運(yùn)算</p><p>  case '%': rem(c,a,b); break;//執(zhí)行求余運(yùn)算</p><p>  ca

44、se '^': n = b->prior->data;power(c,a,n); break;</p><p>  //暫時(shí)以長(zhǎng)整數(shù)b的最后一組數(shù)據(jù)為冪,執(zhí)行乘方運(yùn)算</p><p><b>  };</b></p><p>  gotoxy(2,10);//定位到輸出位置</p><p&g

45、t;  cprintf(overflow==OK ? "Result = ":"DivideBy");//輸出結(jié)果提示</p><p>  ResultBox();//控制輸出范圍,以免搞亂程序界面</p><p>  OutputNumber(c);//輸出運(yùn)算結(jié)果</p><p>  ClearList(c);

46、//清空長(zhǎng)整數(shù)c</p><p>  window(1,1,80,25);//重新設(shè)置顯示窗口為全屏幕</p><p><b>  }</b></p><p>  void DoCommand()//根據(jù)輸入命令進(jìn)行相應(yīng)的處理</p><p><b>  {</b></p>

47、<p>  switch(cmd)</p><p><b>  {</b></p><p>  case '1':InputNumber(a,1);flag_n1=1;break;//輸入第1個(gè)長(zhǎng)整數(shù)</p><p>  case '2':InputNumber(b,2);flag_n2=1;brea

48、k;//輸入第2個(gè)長(zhǎng)整數(shù)</p><p><b>  case 'O':</b></p><p>  case 'o':opt=InputOperator();flag_opt=1;break;//輸入運(yùn)算符</p><p><b>  case 'C':</b><

49、/p><p>  case 'c':Calculate();flag_cal=1;break;//執(zhí)行運(yùn)算</p><p><b>  case 'R':</b></p><p>  case 'r':ReSet();//重設(shè)系統(tǒng)以便執(zhí)行下一次運(yùn)算</p><p>

50、;<b>  }</b></p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  InitiInterface();//初始化程序界面</p><p>  InitL

51、ist(&a); //初始化長(zhǎng)整形數(shù)據(jù)a,b,c</p><p>  InitList(&b);</p><p>  InitList(&c);</p><p><b>  do{</b></p><p>  GoToCmdxy();//將光標(biāo)定位到輸入命令處</p><p

52、>  cmd = getche(); //讀取一個(gè)操作命令</p><p>  DoCommand();//執(zhí)行相應(yīng)的命令</p><p>  }while(cmd!='q' && cmd != 'Q'); //如果輸入的是Q或q則退出</p><p>  DestroyList(&a);//銷毀長(zhǎng)整

53、形數(shù)據(jù)a,b,c,釋放它們所占的</p><p>  DestroyList(&b);</p><p>  DestroyList(&c);</p><p>  ClearScreen();//清除屏幕上的顯示</p><p><b>  }</b></p><p>  /**

54、*****************************************************</p><p>  2、IntFace.h 程序界面模塊頭文件</p><p>  *******************************************************/</p><p>  #include <stdio.h&

55、gt;</p><p>  #include <conio.h></p><p>  #define NofMenuItem 6</p><p>  #define IntMenuItem 2</p><p>  struct IntFaceType</p><p><b>  {</b&g

56、t;</p><p>  int height;//界面高度</p><p>  int width;//界面寬度</p><p>  char ProgramName[30];//程序名</p><p>  char MenuItems[NofMenuItem][12];//功能選項(xiàng)</p>&l

57、t;p>  int MaxItemLength;//功能選項(xiàng)名最大長(zhǎng)度</p><p>  char prompt[40];//命令選項(xiàng)提示</p><p>  int backcolor;//界面背景</p><p>  int textcolor;//文本顏色</p><p>  int

58、WaitCmdx;//功能選項(xiàng)輸入坐標(biāo)x</p><p>  int WaitCmdy;//功能選項(xiàng)輸入坐標(biāo)y</p><p><b>  };</b></p><p>  void InitiInterface();//界面初始化</p><p>  void GoToCmdxy();//將

59、光標(biāo)定位到命令選項(xiàng)提示之后</p><p>  void GoToPrompt();//將光標(biāo)定位到命令選項(xiàng)提示行首</p><p>  void ShowMainPrompt();//顯示命令選項(xiàng)提示</p><p>  void ClearScreen();//以清除整個(gè)屏幕,并設(shè)置為黑底白字模式</p><p>  void

60、ClearPromptLine();//清除提示行的顯示</p><p>  void ClearWorkSpace();//清除工作區(qū)的顯示 </p><p>  void InputNumberBox(int OneOrTwo);//指定兩個(gè)輸入數(shù)的輸入窗口,如果超過(guò)這個(gè)范圍文字將自動(dòng)流動(dòng)</p><p>  void ResultBox(); /

61、/指定計(jì)算結(jié)果的顯示窗口,如果超過(guò)這個(gè)范圍文字將自動(dòng)流動(dòng)</p><p>  /*******************************************************</p><p>  3、IntFace.c 程序界面處理模塊文件</p><p>  *********************************************

62、**********/</p><p>  #include "IntFace.h"</p><p>  #include "dos.h"</p><p>  /*界面長(zhǎng)寬及菜單等數(shù)據(jù),具體含義見(jiàn)頭文件*/</p><p>  struct IntFaceType IntFace = {14,40,&

63、quot;Long Integer Calcultor",</p><p>  {"Number 1 ","Number 2 ","Operator ","Calculate","Reset ",</p><p>  "Quit "},9,&quo

64、t;Enter a hotkey: 1,2,O,C,R or Q:",BLUE,WHITE};</p><p>  /*畫(huà)界面框架、顯示程序功能選項(xiàng)、輸入提示等</p><p>  ┌─────────── Long Integer Calcultor ───────────┐</p><p>  │ Number 1 Number 2 Oper

65、ator Calculate Reset Quit │</p><p>  ├──────────────────────────────────┤</p><p>  │ │</p><p>  │

66、 │</p><p>  │ │</p><p>  │

67、 │</p><p>  │ │</p><p>  │ │&l

68、t;/p><p>  │ │</p><p>  │ │</p><p>  ├────────────

69、──────────────────────┤</p><p>  │Enter a hotkey: 1,2,O,C,R or Q: │</p><p>  └──────────────────────────────────┘*/</p><p>  void DrawIntFace()&l

70、t;/p><p><b>  {</b></p><p>  int i,j,LenProgramName,len;</p><p>  putch(218); //畫(huà)左上角的轉(zhuǎn)角線</p><p>  LenProgramName = strlen(IntFace.ProgramName); //計(jì)算

71、程序名稱的長(zhǎng)度</p><p>  len = (IntFace.width - 4 - LenProgramName)/2; //計(jì)算程序名稱左右橫線的長(zhǎng)度</p><p>  for(i=0;i<len;i++) putch(196); //畫(huà)橫線</p><p>  putch(' ');cputs(IntFace.Progra

72、mName);putch(' ');//顯示程序名</p><p>  for(i=0;i<len;i++) putch(196); //畫(huà)橫線</p><p>  putch(191); //畫(huà)右上角的轉(zhuǎn)角線</p><p>  gotoxy(1,2);putch(179);//畫(huà)第2行首的豎線<

73、/p><p>  for(i=0;i<IntMenuItem;i++) putch(' ');//輸出選項(xiàng)前的空格</p><p>  for(j=0;j<NofMenuItem;j++)//輸出各個(gè)選項(xiàng)</p><p><b>  {</b></p><p>  cputs(IntFa

74、ce.MenuItems[j]);</p><p>  for(i=0;i<IntMenuItem;i++) putch(' ');</p><p><b>  }</b></p><p>  putch(179);//畫(huà)第2行尾的豎線</p><p>  gotoxy(1,3);p

75、utch(195);//畫(huà)第3行首的三岔線</p><p>  for(i=0;i<IntFace.width-2;i++) putch(196);//畫(huà)第3行的橫線</p><p>  putch(180);//畫(huà)第3行尾的三岔線</p><p>  for(j=4;j<IntFace.height-2;j++)

76、//顯示中間的工作區(qū)</p><p><b>  {</b></p><p>  gotoxy(1,j);//到第j行首</p><p>  putch(179);//畫(huà)行首的豎線</p><p>  for(i=0;i<IntFace.width-2;i++) putch('

77、 ');//畫(huà)中間的空白</p><p>  putch(179);//畫(huà)行尾的豎線</p><p><b>  }</b></p><p>  gotoxy(1,IntFace.height-2);putch(195);//畫(huà)倒數(shù)第3行的橫線</p><p>  for(i=0;i<I

78、ntFace.width-2;i++) putch(196);</p><p>  putch(180);</p><p>  gotoxy(1,IntFace.height-1);putch(179);//顯示倒數(shù)第2行的輸入提示</p><p>  len = strlen(IntFace.prompt);</p><p>  cpu

79、ts(IntFace.prompt);</p><p>  for(i=0;i<IntFace.width-2-len;i++) putch(' ');</p><p>  putch(179);</p><p>  gotoxy(1,IntFace.height);putch(192);//畫(huà)最后一行的橫線</p><

80、p>  for(i=0;i<IntFace.width-2;i++) putch(196);</p><p>  putch(217);</p><p><b>  }</b></p><p>  void InitiInterface()//界面初始化</p><p><b>  {

81、</b></p><p>  int i, len, lenprompt;</p><p>  for(i=0;i<NofMenuItem;i++)//計(jì)算選項(xiàng)菜單行的總長(zhǎng)度</p><p><b>  {</b></p><p>  len = strlen(IntFace.MenuItem

82、s[i]);</p><p>  if(len > IntFace.MaxItemLength) IntFace.MaxItemLength = len;</p><p><b>  }</b></p><p>  len = (IntFace.MaxItemLength + IntMenuItem) * NofMenuItem + In

83、tMenuItem + 2;</p><p>  lenprompt = strlen(IntFace.prompt);//輸入提示的長(zhǎng)度</p><p>  if (len < lenprompt) len = lenprompt;</p><p>  if (IntFace.width <len) IntFace.width = len;//

84、界面的最終寬度</p><p>  if (IntFace.height < 9) IntFace.height = 9; //界面的最終高度</p><p>  IntFace.WaitCmdx = lenprompt+2; //命令輸入處的X坐標(biāo)</p><p>  IntFace.WaitCmdy = IntFace.height - 1;

85、 //命令輸入處的Y坐標(biāo)</p><p>  clrscr(); //清屏,以便顯示程序界面</p><p>  textbackground(IntFace.backcolor); //設(shè)置界面的背景顏色</p><p>  textcolor(IntFace.textcolor); //設(shè)置界面的文本顏色</p>&

86、lt;p>  DrawIntFace(); //畫(huà)出界面</p><p><b>  }</b></p><p>  void ClearScreen()//以清除整個(gè)屏幕,并設(shè)置為黑底白字的DOS傳統(tǒng)模式</p><p><b>  {</b></p><p>  textb

87、ackground(BLACK);</p><p>  textcolor(WHITE);</p><p><b>  clrscr();</b></p><p><b>  }</b></p><p>  void ClearPromptLine()/* 清除提示行的顯示 */</p>

88、<p><b>  {</b></p><p><b>  int i;</b></p><p>  gotoxy(2,IntFace.height-1); //到倒數(shù)第2行首</p><p>  for(i=0;i<IntFace.width-2;i++) putch(' '

89、);//用空格覆蓋原有內(nèi)容</p><p>  GoToPrompt();</p><p><b>  }</b></p><p>  void ClearWorkSpace()/* 清除工作區(qū)的顯示 */</p><p><b>  {</b></p><p><b&

90、gt;  int i,j;</b></p><p>  for(j=4;j<IntFace.height-2;j++)</p><p><b>  {</b></p><p>  gotoxy(2,j);//到第j行首</p><p>  for(i=0;i<IntFace.widt

91、h-2;i++) putch(' ');//用空格覆蓋原有內(nèi)容</p><p><b>  }</b></p><p><b>  }</b></p><p>  void GoToCmdxy()/* 將光標(biāo)定位到命令選項(xiàng)提示之后 */</p><p><b>  {&l

92、t;/b></p><p>  gotoxy(IntFace.WaitCmdx, IntFace.WaitCmdy);</p><p><b>  }</b></p><p>  void GoToPrompt() /* 將光標(biāo)定位到命令選項(xiàng)提示行首 */ </p><p><b>  {</b&

93、gt;</p><p>  gotoxy(2,IntFace.height-1);</p><p><b>  }</b></p><p>  void ShowMainPrompt() /* 顯示命令選項(xiàng)提示 */ </p><p><b>  {</b></p><p>

94、  ClearPromptLine();</p><p>  cputs(IntFace.prompt);</p><p><b>  }</b></p><p>  void InputNumberBox(int OneOrTwo)</p><p>  {/*指定兩個(gè)輸入數(shù)的輸入窗口,如果超過(guò)這個(gè)范圍文字將自動(dòng)流動(dòng)*

95、/</p><p>  window(11,(OneOrTwo==1)?4:6,IntFace.width-1,(OneOrTwo==1)?5:7);</p><p><b>  clrscr();</b></p><p><b>  }</b></p><p>  void ResultBox()

96、</p><p>  {/*指定計(jì)算結(jié)果的顯示窗口,如果超過(guò)這個(gè)范圍文字將自動(dòng)流動(dòng)*/</p><p>  window(11,10,IntFace.width-1,11);</p><p><b>  clrscr();</b></p><p><b>  }</b></p>&l

97、t;p>  /*******************************************************</p><p>  4、LongInt.h 長(zhǎng)整型數(shù)輸入輸出及運(yùn)算模塊頭文件</p><p>  *******************************************************/</p><p>  #i

98、nclude "DuCiLink.h"</p><p>  typedef struct DuCiLinkNode LongIntNode,*LongInt;//采用雙向循環(huán)鏈表為實(shí)際的存儲(chǔ)結(jié)構(gòu)</p><p>  void OutputNumber(LongInt a);//輸出一個(gè)長(zhǎng)整型數(shù)</p><p>  void InputNu

99、mber(LongInt a,int OneOrTwo);//輸入一個(gè)長(zhǎng)整型數(shù)</p><p>  void add(LongInt c,LongInt a,LongInt b);//長(zhǎng)整型數(shù) c = a + b</p><p>  void sub(LongInt c,LongInt a,LongInt b); //長(zhǎng)整型數(shù) c = a - b</p><p&g

100、t;  void mul(LongInt c,LongInt a,LongInt b);//長(zhǎng)整型數(shù) c = a * b</p><p>  Status div(LongInt c,LongInt a,LongInt b); //長(zhǎng)整型數(shù) c = a / b (整除)</p><p>  void rem(LongInt c,LongInt a,LongInt b); //長(zhǎng)整型數(shù)

101、 c = a % b (求余)</p><p>  void power(LongInt c,LongInt a,int n);//長(zhǎng)整型數(shù) c = a ^ n (乘方)</p><p>  /*******************************************************</p><p>  5、LongIO.c 長(zhǎng)整型數(shù)輸入輸出

102、處理模塊文件</p><p>  *******************************************************/</p><p>  #include "Intface.h"</p><p>  #include "LongInt.h"</p><p>  #inclu

103、de <conio.h></p><p>  void OutputNumber(LongInt a)/*輸出長(zhǎng)整型數(shù)*/</p><p><b>  {</b></p><p>  LongIntNode *s;</p><p>  s = a->next;</p><p>

104、  if(a->data < 0) printf("-");/*輸出符號(hào)*/</p><p>  /*第1節(jié)按實(shí)際位數(shù)顯示*/</p><p>  cprintf("%d%c",s->data,(s == a->prior)?'\0':',');</p><p>  s

105、= s->next;</p><p>  while(s!=a)/*其它每節(jié)顯示4位數(shù),不足的以0補(bǔ)齊*/</p><p><b>  {</b></p><p>  cprintf("%04d%c",s->data,(s == a->prior)?'\0':',');<

106、;/p><p>  s = s->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void InputNumberMsg(int OneOrTwo)</p><p>  {/*顯示輸入兩個(gè)長(zhǎng)整型時(shí)提示 */&

107、lt;/p><p>  window(1,1,80,25);</p><p>  ClearPromptLine();</p><p>  cputs("Example:-1,0001,0001;");</p><p>  gotoxy(2,(OneOrTwo==1)?4:6);</p><p>  c

108、printf("Number %d:",OneOrTwo);</p><p>  InputNumberBox(OneOrTwo);</p><p><b>  }</b></p><p>  void InputNumberErrMsg()</p><p>  {/*輸入出錯(cuò)時(shí)的提示*/</

109、p><p>  window(1,1,80,25);</p><p>  ClearPromptLine();</p><p>  cprintf("One number out of [0-9999]! Please input the whole number again!");</p><p><b>  ge

110、tch();</b></p><p><b>  }</b></p><p>  void InputNumber(LongInt a,int OneOrTwo)</p><p>  {/*輸入長(zhǎng)整型數(shù)*/</p><p>  char c;//記錄輸入時(shí)的逗號(hào)和分號(hào)</p><

111、;p>  short e;//記錄輸入數(shù)據(jù)</p><p>  short sign = 0;//記錄長(zhǎng)整型數(shù)的符號(hào)</p><p>  short FirstSection = 1;//是否是第1個(gè)4位數(shù)據(jù)組</p><p>  LongIntNode *pa,*s;//節(jié)點(diǎn)的臨時(shí)指針</p><p>  Inpu

112、tNumberMsg(OneOrTwo);//顯示輸入提示</p><p>  ClearList(a);// 清空長(zhǎng)整型數(shù)的存儲(chǔ)空間</p><p>  fflush(stdin);// 刷清輸入緩沖區(qū),以避免以前錯(cuò)誤按鍵的殘留</p><p><b>  do{</b></p><p>  cscanf(

113、"%d",&e);c = getche();//讀取數(shù)據(jù)</p><p>  if (FirstSection)//如果是第1個(gè)組,則設(shè)置整型數(shù)的符號(hào)</p><p><b>  {</b></p><p>  if(e>=0) sign = 1;</p><p>  if(e<

114、;0) {sign = -1;e *= -1;}</p><p>  FirstSection = 0;</p><p><b>  }</b></p><p>  if(e<0 || e>9999)</p><p>  {//如果每組的數(shù)值不在0-9999之內(nèi)則報(bào)錯(cuò)并要求重輸整個(gè)長(zhǎng)整型數(shù)</p

115、><p>  InputNumberErrMsg();</p><p>  InputNumberMsg(OneOrTwo);</p><p>  FirstSection = 1;</p><p>  ClearList(a);</p><p>  fflush(stdin);/*刷清輸入緩沖區(qū)*/</p>

116、<p><b>  c=',';</b></p><p><b>  }</b></p><p>  else//如果本組數(shù)值符合要求則加入到長(zhǎng)整型數(shù)據(jù)中</p><p><b>  {</b></p><p>  InsTail(a,e);//在

117、長(zhǎng)整型數(shù)尾端加入本組數(shù)據(jù)</p><p>  a->data++;//組數(shù)加1</p><p><b>  }</b></p><p>  }while(c!=';');</p><p>  pa = a->next;//pa指向首結(jié)點(diǎn)</p><p>  whi

118、le (pa->data == 0 && pa->next != a)//數(shù)值為0且不是尾結(jié)點(diǎn)則刪除</p><p>  {/*輸入時(shí)可在前幾節(jié)輸入多個(gè)0,需要?jiǎng)h除,但又不能將0刪除完*/</p><p>  s = pa; pa = pa->next;//s指向當(dāng)前結(jié)點(diǎn),pa指向下結(jié)點(diǎn)</p><p>  a->nex

119、t = pa;//斷開(kāi)對(duì)s的鏈接</p><p>  pa->prior = a;</p><p>  free(s);//釋放s</p><p>  a->data--;//組數(shù)減1</p><p><b>  }</b></p><p>  a->d

120、ata *= sign;//設(shè)置長(zhǎng)整型數(shù)的符號(hào)</p><p>  InputNumberMsg(OneOrTwo);//以正規(guī)格式顯示長(zhǎng)整數(shù)1</p><p>  OutputNumber(a);</p><p>  window(1,1,80,25);//重置顯示窗為整個(gè)屏幕</p><p>  ShowMainPrompt

121、();//回到功能選項(xiàng)等待命令輸入</p><p><b>  }</b></p><p>  char InputOperator()//輸入運(yùn)算符</p><p><b>  {</b></p><p><b>  char opt;</b></p>

122、<p>  window(1,1,80,25);</p><p>  ClearPromptLine();</p><p>  cputs("Input the operation type ( + - * / % ^ )");</p><p>  gotoxy(2,8);</p><p>  cprintf

123、("Operator:");</p><p>  fflush(stdin);//刷清輸入緩沖區(qū)</p><p><b>  do{</b></p><p>  opt = getche();</p><p>  gotoxy(11,8);//回退1格以便再次輸入</p>

124、<p>  }while(opt!='+' && opt!='-' && opt!='*'</p><p>  && opt!='/' && opt!='%' && opt!='^');//輸入字符是否符合要求</p>

125、<p>  ShowMainPrompt();//回到功能選項(xiàng)等待命令輸入</p><p>  return opt;</p><p><b>  }</b></p><p>  /*******************************************************</p><p

126、>  6、LongInt.c 長(zhǎng)整型數(shù)運(yùn)算處理模塊文件</p><p>  *******************************************************/</p><p>  #include "LongInt.h"</p><p>  Status UnsignedAdd(LongInt c,LongIn

127、t a,LongInt b)</p><p>  {/*無(wú)符號(hào)數(shù)相加,是普通加減法的基礎(chǔ)*/</p><p>  short sum,carry=0; //進(jìn)位</p><p>  LongIntNode *pa,*pb;</p><p>  pa = a->prior;/*pa,pb分別指兩個(gè)加數(shù)的尾結(jié)點(diǎn)*/</p>

128、<p>  pb = b->prior;</p><p>  while(pa!=a && pb!=b)/* a 和 b 中都有沒(méi)加的組時(shí),執(zhí)行加法*/</p><p><b>  {</b></p><p>  sum = pa->data + pb->data + carry;</p

溫馨提示

  • 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ù)僅提供信息存儲(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)論