版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> C語言課程設計說明書</p><p> 題目: 長整型數(shù)四則運算 </p><p> 學 院: </p><p> 班 級: </p><p> 學 生:
2、 </p><p> 學 號: </p><p> 班內(nèi)序號: </p><p> 提交日期: 年 月 日 </p><p><b> 目 錄</b></p&
3、gt;<p><b> 一、需求分析1</b></p><p><b> 二、設計思路1</b></p><p><b> 三、詳細設計2</b></p><p><b> 1、主要函數(shù)2</b></p><p> 2、函數(shù)
4、的主要調(diào)用關系圖3</p><p> 四、調(diào)試分析及編程心得體會3</p><p><b> 五、用戶手冊3</b></p><p><b> 六、測試結果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 長整型數(shù)輸入輸入及運算模塊頭文件9</p><p> 5、LongIO.c 長整型數(shù)輸入輸出處理模塊文件9</p
6、><p> 6、LongInt.c 長整型數(shù)運算處理模塊文件11</p><p> 7、DuCiLink.h 雙向循環(huán)鏈表處理模塊頭文件16</p><p> 8、DuCiLink.c 雙向循環(huán)鏈表處理模塊代碼17</p><p><b> 一、需求分析</b></p><p> 設計
7、一個實現(xiàn)任意長的整數(shù)進行四則運算的程序。</p><p> 輸入和輸出形式是按中國對于長整數(shù)的表示習慣,每四位一組,組間用逗號隔開,長整數(shù)位數(shù)沒有上限,以分號結束長整型數(shù)據(jù)的輸入。</p><p> 程序執(zhí)行的命令包括:</p><p> 1)、輸入長整數(shù)1;2)、輸入長整數(shù)2;3)、輸入執(zhí)行的運算符;4)、計算并輸出結果;5)、結束。</p>
8、<p> 4、測試數(shù)據(jù):(以加法為例)</p><p> ?。?)、0;0;+;應輸出“0”。</p><p> (2)、-;-;+;應輸出“-”。</p><p> ?。?)、-; 0000;+;應輸出“01”.</p><p> ?。?)、;-;+;應輸出“0”.</p><p> ?。?)、;-;+
9、;應輸出“1”。</p><p> ?。?)、-99;-99;+;應輸出“-9998”.</p><p> ?。?)9999;1;+;應輸出“0000”.</p><p><b> 二、設計思路</b></p><p> 我們首先要考慮的是如何表示長整型數(shù)。按照傳統(tǒng)習慣要求每4位數(shù)形成1組,而一個長整型數(shù)可能會有很多
10、組這種4位數(shù),而每節(jié)之間是有先后順序的,因此我們可以考慮用數(shù)組和鏈表來存儲數(shù)據(jù)。(1)再考慮到每個長整型數(shù)的長度在輸入之間是無法預知的,因此使用鏈表在存儲空間的分配上更方便一些。(2)在輸入數(shù)據(jù)時總是從高位到低位地存儲,而計算時總是從低位向高位運算,因此采用雙向鏈表更方便,而為了從頭結點方便地轉到尾結點可以采用循環(huán)鏈表??傊瑸榱藢崿F(xiàn)上述功能,應以雙向循環(huán)鏈表表示長整數(shù),每個結點含一個整型變量,且僅絕對值不超過9999的整數(shù),整個鏈表用
11、十進制數(shù)表示。(3)對于每一個長整型數(shù)可以設置一個頭結點,其中的數(shù)據(jù)域用來表示該長整型數(shù)的正負號及組數(shù),該值的符號則表示該長整型數(shù)的符號,該數(shù)的絕對值表示該長整型數(shù)包含的4位數(shù)的組數(shù)。第一個存儲4位數(shù)據(jù)組的結點稱為首結點,而最后一個4位數(shù)據(jù)組結點稱為尾結點。</p><p> 為此需要兩個結構數(shù)據(jù)類型:雙向循環(huán)鏈表和長整數(shù),兩個類型采用相同的結構,只是雙向循環(huán)鏈表用來存儲數(shù)據(jù),長整型用表示數(shù)據(jù)的運算。</
12、p><p> 雙向循環(huán)鏈表的數(shù)據(jù)結構及操作定義如下:</p><p> typedef short ElemType; //定義基本數(shù)據(jù)類型,我們采用short來表示任意4位整數(shù)。</p><p> typedef struct DuCiLinkNode{ // 雙向循環(huán)鏈表結點的存儲結構</p><p> ElemType
13、 data;</p><p> struct DuCiLinkNode *prior;//指向上一結點</p><p> struct DuCiLinkNode *next;//指向下一結點</p><p> }DuCiLinkNode,*DuCiLinkList; //定義雙向循環(huán)鏈表結點及鏈表的類型名</p>
14、;<p><b> 基本操作:</b></p><p> DuCiLinkNode *MakeNode(ElemType e); //以4位整數(shù)e構造1個雙向循環(huán)鏈表結點</p><p> Status InitList(DuCiLinkList *L); //初始化1個雙向循環(huán)鏈表,分配1個結點作頭結點</p><p>
15、; //數(shù)據(jù)域賦初值0,上下結點指針指向自己</p><p> void DestroyList(DuCiLinkList *L); //消毀1個雙向循環(huán)鏈表,釋放它所占用的所有內(nèi)存空間</p><p> //并讓鏈表*L指向NULL</p><p> void ClearList(DuCiLinkList L); //清除1個雙向循環(huán)鏈表,釋放數(shù)
16、據(jù)結點所占用的內(nèi)存空間</p><p> //保留頭結點,并將數(shù)據(jù)域置為0,上下結點指針指向自己</p><p> Status InsTail(DuCiLinkList L, ElemType e); //在雙向循環(huán)鏈表L的尾結點之后加入1個以e為</p><p> //數(shù)據(jù)域的新結點,并返回OK; 否則返回ERROR。</p><p&g
17、t; Status InsFirst(DuCiLinkList L, ElemType e);</p><p> //將數(shù)據(jù)元素e插入在線性鏈表L頭結點之后,并返回OK; 否則返回ERROR。</p><p> Status CopyList(DuCiLinkList L, DuCiLinkList C);</p><p> //將雙向循環(huán)鏈表L復制到雙向循
18、環(huán)鏈表C中。</p><p> 長整數(shù)的數(shù)據(jù)類型和和操作定義為:</p><p> typedef struct DuCiLinkNode LongIntNode,*LongInt;//采用雙向循環(huán)鏈表為實際的存儲結構</p><p> void OutputNumber(LongInt a);//輸出一個長整型數(shù)</p><p&g
19、t; void InputNumber(LongInt a,int OneOrTwo);//輸入一個長整型數(shù)</p><p> void add(LongInt c,LongInt a,LongInt b);//長整型數(shù) c = a + b</p><p> void sub(LongInt c,LongInt a,LongInt b); //長整型數(shù) c = a - b<
20、;/p><p> Status mul(LongInt c,LongInt a,LongInt b);//長整型數(shù) c = a * b</p><p> void div(LongInt c,LongInt a,LongInt b); //長整型數(shù) c = a / b (整除)</p><p> void rem(LongInt c,LongInt a,Lon
21、gInt b); //長整型數(shù) c = a % b (求余)</p><p> void power(LongInt c,LongInt a,int n);//長整型數(shù) c = a ^ n (乘方)</p><p> 本程序包含四個模塊:</p><p><b> 主程序模塊:</b></p><p> v
22、oid main()//main.c</p><p><b> {</b></p><p><b> 初始化;</b></p><p><b> do{</b></p><p><b> 接受命令;</b></p><p&g
23、t;<b> 處理命令;</b></p><p> }while(“命令”=“結束”)</p><p><b> ?。?lt;/b></p><p> 程序界面模塊//IntFace.c, IntFace.h</p><p> 雙向循環(huán)鏈表處理模塊// DuCiLink.c,DuCiLin
24、k.h</p><p> 長整型數(shù)的輸入輸出模塊//LongIO.c, LongInt.h</p><p> 長整數(shù)運算模塊//LongInt.c LongInt.h</p><p> 各模塊之間的調(diào)用關系如下:</p><p><b> 三、詳細設計</b></p><p&g
25、t;<b> 1、主要函數(shù)</b></p><p> (1)、主控模塊main.c</p><p> void DoCommand()//根據(jù)輸入命令進行相應的處理</p><p> void Calculate()//執(zhí)行計算功能</p><p> void ReSet()//重設系統(tǒng)環(huán)境</p
26、><p> (2)、程序界面模塊 IntFace.c</p><p> void InitiInterface();//界面初始化</p><p> void GoToCmdxy();//將光標定位到命令選項提示之后</p><p> void GoToPrompt();//將光標定位到命令選項提示行首</p>&
27、lt;p> void ShowMainPrompt();//顯示命令選項提示</p><p> void ClearScreen();//以清除整個屏幕,并設置為黑底白字模式</p><p> void ClearPromptLine();//清除提示行的顯示</p><p> void ClearWorkSpace();//清除工作區(qū)的顯示
28、 </p><p> void InputNumberBox(int OneOrTwo);//指定兩個輸入數(shù)的輸入窗口,如果超過這個范圍文字將自動流動</p><p> void ResultBox(); //指定計算結果的顯示窗口,如果超過這個范圍文字將自動流動</p><p> (3)、長整型數(shù)輸入輸出模塊見二小節(jié)2分節(jié)</p>
29、<p> (4)、長整型數(shù)四則運算處理模塊見二小節(jié)2分節(jié)</p><p> (5)、長整型數(shù)存儲模塊—雙向循環(huán)鏈表模塊見二小節(jié)1分節(jié)</p><p> 2、函數(shù)的主要調(diào)用關系圖</p><p> 四、調(diào)試分析及編程心得體會</p><p> 1、剛開始考慮進位問題過于簡單,導致測試數(shù)據(jù)時多次出錯。</p&
30、gt;<p> 2、剛開始時在輸入方式中花了較大功夫,而且用戶界面不夠友好,程序容錯性較差。</p><p> 3、開始寫程序時源程序沒有嚴格按單元模塊結構編寫,可讀性較差。</p><p> 4、由于初次進行系統(tǒng)的程序設計,層次結構劃分不太合理,應在以后的設計中強化此思維,逐漸與工程設計接軌。</p><p> ………………………………………
31、…</p><p><b> 五、用戶手冊</b></p><p> 1、本程序的運行環(huán)境為DOS操作系統(tǒng),執(zhí)行文件為LongInt.exe。</p><p> 2、進入演示程序后即顯示文本方式的用戶界面</p><p> 3、輸入命令,執(zhí)行相應的功能:</p><p> 1 –– 輸入
32、第1個整數(shù)o,O –– 輸入運算符r, R –– 重置系統(tǒng)</p><p> 2 –– 輸入第2個整數(shù)c,C –– 執(zhí)行運算q,Q –– 退出系統(tǒng)</p><p><b> 六、測試結果</b></p><p> ?。?)、0和0的四則運算:</p><p> ?。?)、;;+;應輸出“-”。&
33、lt;/p><p> (3)、-; 0000;+;應輸出“01”.</p><p> (4)、;-;+;應輸出“0”.</p><p> (5)、;-;+;應輸出“1”。</p><p> ?。?)、-99;-99;+;應輸出“-9998”.</p><p> ?。?)9999;1;+;應輸出“0000”.</
34、p><p> 略…………………………………</p><p><b> 七、源程序代碼</b></p><p> /*******************************************************</p><p> 1、main.c 主控文件</p><p> *
35、******************************************************/</p><p> #include "IntFace.h"/*界面模塊頭文件*/</p><p> #include "LongInt.h"/*長整型數(shù)處理模塊頭文件*/</p><p> char cmd;
36、/* menu command */</p><p> char opt;/* operator */</p><p> int n;/* power */</p><p> LongInt a,b,c;/* Long integer numbers */</p><p> int flag_n1=0,flag
37、_n2=0,flag_opt=0,flag_cal=0,flag_reset=1; /*標志位*/</p><p> void ReSet()/* Reset system */</p><p><b> {</b></p><p> ClearWorkSpace();//清屏幕的工作區(qū)</p><p> f
38、lag_n1=0;//重置長整數(shù)1是否輸入的標志</p><p> flag_n2=0;//重置長整數(shù)2是否輸入的標志</p><p> flag_opt=0;//重置運算符 是否輸入的標志</p><p> flag_cal=0;//重置是否進行了運算的標志</p><p> flag_reset=1;/
39、/重置 重置標志</p><p><b> }</b></p><p> void Calculate()//執(zhí)行計算</p><p><b> {</b></p><p> int overflow = OK;</p><p> if (flag_n1*flag
40、_n2*flag_opt == 0 ) return; </p><p> /*Input is not complete! 輸入不完整則直接返回*/</p><p> switch (opt)</p><p><b> {</b></p><p> case '+': add(c,a,b); b
41、reak;//執(zhí)行加法運算</p><p> case '-': sub(c,a,b); break;//執(zhí)行減法運算</p><p> case '*': mul(c,a,b); break;//執(zhí)行乘法運算</p><p> case '/': overflow = div(c,a,b); break;//執(zhí)
42、行整除運算</p><p> case '%': rem(c,a,b); break;//執(zhí)行求余運算</p><p> case '^': n = b->prior->data;power(c,a,n); break;</p><p> //暫時以長整數(shù)b的最后一組數(shù)據(jù)為冪,執(zhí)行乘方運算</p>&l
43、t;p><b> };</b></p><p> gotoxy(2,10);//定位到輸出位置</p><p> cprintf(overflow==OK ? "Result = ":"DivideBy");//輸出結果提示</p><p> ResultBox();//控制輸出
44、范圍,以免搞亂程序界面</p><p> OutputNumber(c);//輸出運算結果</p><p> ClearList(c);//清空長整數(shù)c</p><p> window();//重新設置顯示窗口為全屏幕</p><p><b> }</b></p><p>
45、 void DoCommand()//根據(jù)輸入命令進行相應的處理</p><p><b> {</b></p><p> switch(cmd)</p><p><b> {</b></p><p> case '1':InputNumber(a,1);flag_n1=1;
46、break;//輸入第1個長整數(shù)</p><p> case '2':InputNumber(b,2);flag_n2=1;break;//輸入第2個長整數(shù)</p><p><b> case 'O':</b></p><p> case 'o':opt=InputOperator();
47、flag_opt=1;break;//輸入運算符</p><p><b> case 'C':</b></p><p> case 'c':Calculate();flag_cal=1;break;//執(zhí)行運算</p><p><b> case 'R':</b>
48、;</p><p> case 'r':ReSet();//重設系統(tǒng)以便執(zhí)行下一次運算</p><p><b> }</b></p><p><b> }</b></p><p> void main()</p><p><b>
49、{</b></p><p> InitiInterface();//初始化程序界面</p><p> InitList(&a); //初始化長整形數(shù)據(jù)a,b,c</p><p> InitList(&b);</p><p> InitList(&c);</p><p>&l
50、t;b> do{</b></p><p> GoToCmdxy();//將光標定位到輸入命令處</p><p> cmd = getche(); //讀取一個操作命令</p><p> DoCommand();//執(zhí)行相應的命令</p><p> }while(cmd!='q' &&am
51、p; cmd != 'Q'); //如果輸入的是Q或q則退出</p><p> DestroyList(&a);//銷毀長整形數(shù)據(jù)a,b,c,釋放它們所占的</p><p> DestroyList(&b);</p><p> DestroyList(&c);</p><p> ClearSc
52、reen();//清除屏幕上的顯示</p><p><b> }</b></p><p> /*******************************************************</p><p> 2、IntFace.h 程序界面模塊頭文件</p><p> ************
53、*******************************************/</p><p> #include <stdio.h></p><p> #include <conio.h></p><p> #define NofMenuItem 6</p><p> #define IntMenu
54、Item 2</p><p> struct IntFaceType</p><p><b> {</b></p><p> int height;//界面高度</p><p> int width;//界面寬度</p><p> char ProgramName
55、[30];//程序名</p><p> char MenuItems[NofMenuItem][12];//功能選項</p><p> int MaxItemLength;//功能選項名最大長度</p><p> char prompt[40];//命令選項提示</p><p> int backcolor;
56、//界面背景</p><p> int textcolor;//文本顏色</p><p> int WaitCmdx;//功能選項輸入坐標x</p><p> int WaitCmdy;//功能選項輸入坐標y</p><p><b> };</b></p>
57、<p> void InitiInterface();//界面初始化</p><p> void GoToCmdxy();//將光標定位到命令選項提示之后</p><p> void GoToPrompt();//將光標定位到命令選項提示行首</p><p> void ShowMainPrompt();//顯示命令選項提示<
58、/p><p> void ClearScreen();//以清除整個屏幕,并設置為黑底白字模式</p><p> void ClearPromptLine();//清除提示行的顯示</p><p> void ClearWorkSpace();//清除工作區(qū)的顯示 </p><p> void InputNumberBox(int
59、 OneOrTwo);//指定兩個輸入數(shù)的輸入窗口,如果超過這個范圍文字將自動流動</p><p> void ResultBox(); //指定計算結果的顯示窗口,如果超過這個范圍文字將自動流動</p><p> /*******************************************************</p><p> 3、
60、IntFace.c 程序界面處理模塊文件</p><p> *******************************************************/</p><p> #include "IntFace.h"</p><p> #include "dos.h"</p><p&g
61、t; /*界面長寬及菜單等數(shù)據(jù),具體含義見頭文件*/</p><p> struct IntFaceType IntFace = {14,40,"Long Integer Calcultor",</p><p> {"Number 1 ","Number 2 ","Operator ","Ca
62、lculate","Reset ",</p><p> "Quit "},9,"Enter a hotkey: 1,2,O,C,R or Q:",BLUE,WHITE};</p><p> /*畫界面框架、顯示程序功能選項、輸入提示等</p><p> ┌───────────
63、 Long Integer Calcultor ───────────┐</p><p> │ Number 1 Number 2 Operator Calculate Reset Quit │</p><p> ├──────────────────────────────────┤</p><p> │
64、 │</p><p> │ │</p><p> │
65、 │</p><p> │ │</p><p> │ │</p&
66、gt;<p> │ │</p><p> │ │</p><p> │
67、 │</p><p> ├──────────────────────────────────┤</p><p> │Enter a hotkey: 1,2,O,C,R or Q: │</p><
68、p> └──────────────────────────────────┘*/</p><p> void DrawIntFace()</p><p><b> {</b></p><p> int i,j,LenProgramName,len;</p><p> putch(218);
69、 //畫左上角的轉角線</p><p> LenProgramName = strlen(IntFace.ProgramName); //計算程序名稱的長度</p><p> len = (IntFace.width - 4 - LenProgramName)/2; //計算程序名稱左右橫線的長度</p><p> for(i=0;i<len;i
70、++) putch(196); //畫橫線</p><p> putch(' ');cputs(IntFace.ProgramName);putch(' ');//顯示程序名</p><p> for(i=0;i<len;i++) putch(196); //畫橫線</p><p> putch(191
71、); //畫右上角的轉角線</p><p> gotoxy(1,2);putch(179);//畫第2行首的豎線</p><p> for(i=0;i<IntMenuItem;i++) putch(' ');//輸出選項前的空格</p><p> for(j=0;j<NofMenuItem;j++)
72、//輸出各個選項</p><p><b> {</b></p><p> cputs(IntFace.MenuItems[j]);</p><p> for(i=0;i<IntMenuItem;i++) putch(' ');</p><p><b> }</b>
73、</p><p> putch(179);//畫第2行尾的豎線</p><p> gotoxy(1,3);putch(195);//畫第3行首的三岔線</p><p> for(i=0;i<IntFace.width-2;i++) putch(196);//畫第3行的橫線</p><p> putc
74、h(180);//畫第3行尾的三岔線</p><p> for(j=4;j<IntFace.height-2;j++)//顯示中間的工作區(qū)</p><p><b> {</b></p><p> gotoxy(1,j);//到第j行首</p><p> putch(1
75、79);//畫行首的豎線</p><p> for(i=0;i<IntFace.width-2;i++) putch(' ');//畫中間的空白</p><p> putch(179);//畫行尾的豎線</p><p><b> }</b></p><p>
76、gotoxy(1,IntFace.height-2);putch(195);//畫倒數(shù)第3行的橫線</p><p> for(i=0;i<IntFace.width-2;i++) putch(196);</p><p> putch(180);</p><p> gotoxy(1,IntFace.height-1);putch(179);//顯示
77、倒數(shù)第2行的輸入提示</p><p> len = strlen(IntFace.prompt);</p><p> cputs(IntFace.prompt);</p><p> for(i=0;i<IntFace.width-2-len;i++) putch(' ');</p><p> putch(179)
78、;</p><p> gotoxy(1,IntFace.height);putch(192);//畫最后一行的橫線</p><p> for(i=0;i<IntFace.width-2;i++) putch(196);</p><p> putch(217);</p><p><b> }</b><
79、;/p><p> void InitiInterface()//界面初始化</p><p><b> {</b></p><p> int i, len, lenprompt;</p><p> for(i=0;i<NofMenuItem;i++)//計算選項菜單行的總長度</p&
80、gt;<p><b> {</b></p><p> len = strlen(IntFace.MenuItems[i]);</p><p> if(len > IntFace.MaxItemLength) IntFace.MaxItemLength = len;</p><p><b> }</b&
81、gt;</p><p> len = (IntFace.MaxItemLength + IntMenuItem) * NofMenuItem + IntMenuItem + 2;</p><p> lenprompt = strlen(IntFace.prompt);//輸入提示的長度</p><p> if (len < lenprompt) l
82、en = lenprompt;</p><p> if (IntFace.width <len) IntFace.width = len;//界面的最終寬度</p><p> if (IntFace.height < 9) IntFace.height = 9; //界面的最終高度</p><p> IntFace.WaitCmdx = len
83、prompt+2; //命令輸入處的X坐標</p><p> IntFace.WaitCmdy = IntFace.height - 1; //命令輸入處的Y坐標</p><p> clrscr(); //清屏,以便顯示程序界面</p><p> textbackground(IntFace.backcolor); //設置
84、界面的背景顏色</p><p> textcolor(IntFace.textcolor); //設置界面的文本顏色</p><p> DrawIntFace(); //畫出界面</p><p><b> }</b></p><p> void ClearScreen()//以清除整個屏幕
85、,并設置為黑底白字的DOS傳統(tǒng)模式</p><p><b> {</b></p><p> textbackground(BLACK);</p><p> textcolor(WHITE);</p><p><b> clrscr();</b></p><p><
86、;b> }</b></p><p> void ClearPromptLine()/* 清除提示行的顯示 */</p><p><b> {</b></p><p><b> int i;</b></p><p> gotoxy(2,IntFace.height-1);
87、 //到倒數(shù)第2行首</p><p> for(i=0;i<IntFace.width-2;i++) putch(' ');//用空格覆蓋原有內(nèi)容</p><p> GoToPrompt();</p><p><b> }</b></p><p> void ClearWorkSpa
88、ce()/* 清除工作區(qū)的顯示 */</p><p><b> {</b></p><p><b> int i,j;</b></p><p> for(j=4;j<IntFace.height-2;j++)</p><p><b> {</b></p>
89、;<p> gotoxy(2,j);//到第j行首</p><p> for(i=0;i<IntFace.width-2;i++) putch(' ');//用空格覆蓋原有內(nèi)容</p><p><b> }</b></p><p><b> }</b></p&
90、gt;<p> void GoToCmdxy()/* 將光標定位到命令選項提示之后 */</p><p><b> {</b></p><p> gotoxy(IntFace.WaitCmdx, IntFace.WaitCmdy);</p><p><b> }</b></p><
91、;p> void GoToPrompt() /* 將光標定位到命令選項提示行首 */ </p><p><b> {</b></p><p> gotoxy(2,IntFace.height-1);</p><p><b> }</b></p><p> void ShowMain
92、Prompt() /* 顯示命令選項提示 */ </p><p><b> {</b></p><p> ClearPromptLine();</p><p> cputs(IntFace.prompt);</p><p><b> }</b></p><p> v
93、oid InputNumberBox(int OneOrTwo)</p><p> {/*指定兩個輸入數(shù)的輸入窗口,如果超過這個范圍文字將自動流動*/</p><p> window(11,(OneOrTwo==1)?4:6,IntFace.width-1,(OneOrTwo==1)?5:7);</p><p><b> clrscr();<
94、/b></p><p><b> }</b></p><p> void ResultBox()</p><p> {/*指定計算結果的顯示窗口,如果超過這個范圍文字將自動流動*/</p><p> window(11,10,IntFace.width-1,11);</p><p>
95、;<b> clrscr();</b></p><p><b> }</b></p><p> /*******************************************************</p><p> 4、LongInt.h 長整型數(shù)輸入輸出及運算模塊頭文件</p><
96、p> *******************************************************/</p><p> #include "DuCiLink.h"</p><p> typedef struct DuCiLinkNode LongIntNode,*LongInt;//采用雙向循環(huán)鏈表為實際的存儲結構</p>&
97、lt;p> void OutputNumber(LongInt a);//輸出一個長整型數(shù)</p><p> void InputNumber(LongInt a,int OneOrTwo);//輸入一個長整型數(shù)</p><p> void add(LongInt c,LongInt a,LongInt b);//長整型數(shù) c = a + b</p>
98、<p> void sub(LongInt c,LongInt a,LongInt b); //長整型數(shù) c = a - b</p><p> void mul(LongInt c,LongInt a,LongInt b);//長整型數(shù) c = a * b</p><p> Status div(LongInt c,LongInt a,LongInt b); //長整
99、型數(shù) c = a / b (整除)</p><p> void rem(LongInt c,LongInt a,LongInt b); //長整型數(shù) c = a % b (求余)</p><p> void power(LongInt c,LongInt a,int n);//長整型數(shù) c = a ^ n (乘方)</p><p> /*********
100、**********************************************</p><p> 5、LongIO.c 長整型數(shù)輸入輸出處理模塊文件</p><p> *******************************************************/</p><p> #include "Intface.h
101、"</p><p> #include "LongInt.h"</p><p> #include <conio.h></p><p> void OutputNumber(LongInt a)/*輸出長整型數(shù)*/</p><p><b> {</b></p>
102、;<p> LongIntNode *s;</p><p> s = a->next;</p><p> if(a->data < 0) printf("-");/*輸出符號*/</p><p> /*第1節(jié)按實際位數(shù)顯示*/</p><p> cprintf("%d%c
103、",s->data,(s == a->prior)?'\0':',');</p><p> s = s->next;</p><p> while(s!=a)/*其它每節(jié)顯示4位數(shù),不足的以0補齊*/</p><p><b> {</b></p><p>
104、 cprintf("%04d%c",s->data,(s == a->prior)?'\0':',');</p><p> s = s->next;</p><p><b> }</b></p><p><b> }</b></p>
105、<p> void InputNumberMsg(int OneOrTwo)</p><p> {/*顯示輸入兩個長整型時提示 */</p><p><b> window();</b></p><p> ClearPromptLine();</p><p> cputs("Exampl
106、e:;");</p><p> gotoxy(2,(OneOrTwo==1)?4:6);</p><p> cprintf("Number %d:",OneOrTwo);</p><p> InputNumberBox(OneOrTwo);</p><p><b> }</b><
107、;/p><p> void InputNumberErrMsg()</p><p> {/*輸入出錯時的提示*/</p><p><b> window();</b></p><p> ClearPromptLine();</p><p> cprintf("One number
108、 out of [0-9999]! Please input the whole number again!");</p><p><b> getch();</b></p><p><b> }</b></p><p> void InputNumber(LongInt a,int OneOrTwo)&l
109、t;/p><p> {/*輸入長整型數(shù)*/</p><p> char c;//記錄輸入時的逗號和分號</p><p> short e;//記錄輸入數(shù)據(jù)</p><p> short sign = 0;//記錄長整型數(shù)的符號</p><p> short FirstSection =
110、1;//是否是第1個4位數(shù)據(jù)組</p><p> LongIntNode *pa,*s;//節(jié)點的臨時指針</p><p> InputNumberMsg(OneOrTwo);//顯示輸入提示</p><p> ClearList(a);// 清空長整型數(shù)的存儲空間</p><p> fflush(stdin);//
111、 刷清輸入緩沖區(qū),以避免以前錯誤按鍵的殘留</p><p><b> do{</b></p><p> cscanf("%d",&e);c = getche();//讀取數(shù)據(jù)</p><p> if (FirstSection)//如果是第1個組,則設置整型數(shù)的符號</p><p>&
112、lt;b> {</b></p><p> if(e>=0) sign = 1;</p><p> if(e<0) {sign = -1;e *= -1;}</p><p> FirstSection = 0;</p><p><b> }</b></p><
113、;p> if(e<0 || e>9999)</p><p> {//如果每組的數(shù)值不在0-9999之內(nèi)則報錯并要求重輸整個長整型數(shù)</p><p> InputNumberErrMsg();</p><p> InputNumberMsg(OneOrTwo);</p><p> FirstSection = 1
114、;</p><p> ClearList(a);</p><p> fflush(stdin);/*刷清輸入緩沖區(qū)*/</p><p><b> c=',';</b></p><p><b> }</b></p><p> else//如果本組數(shù)值符
115、合要求則加入到長整型數(shù)據(jù)中</p><p><b> {</b></p><p> InsTail(a,e);//在長整型數(shù)尾端加入本組數(shù)據(jù)</p><p> a->data++;//組數(shù)加1</p><p><b> }</b></p><p> }w
116、hile(c!=';');</p><p> pa = a->next;//pa指向首結點</p><p> while (pa->data == 0 && pa->next != a)//數(shù)值為0且不是尾結點則刪除</p><p> {/*輸入時可在前幾節(jié)輸入多個0,需要刪除,但又不能將0刪除完*/&l
117、t;/p><p> s = pa; pa = pa->next;//s指向當前結點,pa指向下結點</p><p> a->next = pa;//斷開對s的鏈接</p><p> pa->prior = a;</p><p> free(s);//釋放s</p><p>
118、a->data--;//組數(shù)減1</p><p><b> }</b></p><p> a->data *= sign;//設置長整型數(shù)的符號</p><p> InputNumberMsg(OneOrTwo);//以正規(guī)格式顯示長整數(shù)1</p><p> OutputNumber(
119、a);</p><p> window();//重置顯示窗為整個屏幕</p><p> ShowMainPrompt();//回到功能選項等待命令輸入</p><p><b> }</b></p><p> char InputOperator()//輸入運算符</p><p
120、><b> {</b></p><p><b> char opt;</b></p><p><b> window();</b></p><p> ClearPromptLine();</p><p> cputs("Input the operat
121、ion type ( + - * / % ^ )");</p><p> gotoxy(2,8);</p><p> cprintf("Operator:");</p><p> fflush(stdin);//刷清輸入緩沖區(qū)</p><p><b> do{</b><
122、/p><p> opt = getche();</p><p> gotoxy(11,8);//回退1格以便再次輸入</p><p> }while(opt!='+' && opt!='-' && opt!='*'</p><p> &&
123、 opt!='/' && opt!='%' && opt!='^');//輸入字符是否符合要求</p><p> ShowMainPrompt();//回到功能選項等待命令輸入</p><p> return opt;</p><p><b> }</b>
124、;</p><p> /*******************************************************</p><p> 6、LongInt.c 長整型數(shù)運算處理模塊文件</p><p> *******************************************************/</p>&l
125、t;p> #include "LongInt.h"</p><p> Status UnsignedAdd(LongInt c,LongInt a,LongInt b)</p><p> {/*無符號數(shù)相加,是普通加減法的基礎*/</p><p> short sum,carry=0; //進位</p><p&
126、gt; LongIntNode *pa,*pb;</p><p> pa = a->prior;/*pa,pb分別指兩個加數(shù)的尾結點*/</p><p> pb = b->prior;</p><p> while(pa!=a && pb!=b)/* a 和 b 中都有沒加的組時,執(zhí)行加法*/</p><p
127、><b> {</b></p><p> sum = pa->data + pb->data + carry;</p><p> carry = sum / 10000;/*進位*/</p><p> sum = sum % 10000;/*余數(shù),為當前組的數(shù)值*/</p><p>
128、 if (!InsFirst(c,sum)) return ERROR;/*加到和長整型數(shù)的首位*/</p><p> pa = pa->prior;/*下一組*/</p><p> pb = pb->prior;</p><p> c->data++;/*組數(shù)加1*/</p><p><b>
129、; }</b></p><p> while(pa!=a)/* a 中還有沒加的組時,補到和上去*/</p><p><b> {</b></p><p> sum = pa->data + carry;</p><p> carry = sum / 10000;</p>&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c語言課程設計報告-長整數(shù)四則運算
- c語言畢業(yè)課程設計報告-長整數(shù)四則運算
- 課程設計 長整數(shù)四則運算
- 課程設計 長整數(shù)四則運算
- 數(shù)據(jù)結構課程設計--長整數(shù)的四則運算
- 大整數(shù)的四則運算課程設計
- 整數(shù)四則運算總結與練習
- 匯編語言課程設計--四則運算計算器
- 運用c語言編寫復數(shù)的四則運算
- eda課程設計--2位十進制四則運算器電路四則運算器
- eda課程設計之2位十進制四則運算器電路四則運算器
- 匯編語言課程設計--四則運算計算器的設計
- 分數(shù)四則運算習題
- 匯編語言課程設計報告——實現(xiàn)加減乘除四則運算的計算器
- 1 四則運算 2、四則混合運算(有括號)
- 微機原理與接口技術課程設計--四則運算
- 匯編語言課程設計--實現(xiàn)加減乘除四則運算的計算器
- 四則運算練習題
- 小學四則運算500道
- 四則運算規(guī)律及其簡便運算
評論
0/150
提交評論