版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、淮北師范大學(xué) 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)實(shí)驗(yàn)報(bào)告題目四則運(yùn)算練習(xí)軟件班級(jí): 設(shè)計(jì)者: 指導(dǎo)老師: 時(shí)間: 2011/04/13-2011/04/14 目錄1程序設(shè)計(jì)的內(nèi)容和相關(guān)的要求-2程序總的功能說明-3程序的模塊的說明-4程序設(shè)計(jì)的流程圖-5程序的操作說明及運(yùn)行結(jié)果-6源程序的清單-7心得體會(huì)-1程序設(shè)計(jì)的內(nèi)容和相關(guān)的要求課程設(shè)計(jì)的目的:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)是計(jì)算機(jī)學(xué)院重要的教學(xué)環(huán)節(jié),它為學(xué)生提供了一個(gè)既動(dòng)手又動(dòng)腦,將課本上的理論知識(shí)和實(shí)際有機(jī)的結(jié)合起來,獨(dú)立分析和解決實(shí)際問題的機(jī)會(huì)。l進(jìn)一步鞏固和復(fù)習(xí)數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)知識(shí)。l培養(yǎng)學(xué)生結(jié)構(gòu)化程序、模塊化程序設(shè)計(jì)的方法和能力。l提高學(xué)生調(diào)試程序的技巧和軟件設(shè)計(jì)的
2、能力。l提高學(xué)生分析問題、解決問題以及綜合利用c語(yǔ)言進(jìn)行程序設(shè)計(jì)的能力。l了解軟件的編制過程。實(shí)現(xiàn)的任務(wù):編寫一個(gè)100以內(nèi)的四則運(yùn)算練習(xí)軟件。設(shè)計(jì)內(nèi)容:1.隨機(jī)產(chǎn)生兩個(gè)100的整數(shù)(運(yùn)算結(jié)果也要在100內(nèi)),可以選擇要練習(xí)的運(yùn)算,/,調(diào)用,/四個(gè)運(yùn)算函數(shù)實(shí)現(xiàn)運(yùn)算。2.,/混合運(yùn)算(用棧的原理實(shí)現(xiàn))設(shè)計(jì)要求:1.不同的功能使用不同的函數(shù)實(shí)現(xiàn)(模塊化),對(duì)每個(gè)函數(shù)的功能和調(diào)用接口要注釋清楚。對(duì)程序其它部分也進(jìn)行必要的注釋。2.對(duì)系統(tǒng)進(jìn)行功能模塊分析、畫出總流程圖和各模塊流程圖。3.用戶界面要求使用方便、簡(jiǎn)潔明了、美觀大方、格式統(tǒng)一。所有功能可以反復(fù)使用,最好使用菜單。4.通過命令行相應(yīng)選項(xiàng)能直接
3、進(jìn)入某個(gè)相應(yīng)菜單選項(xiàng)的功能模塊。5.所有程序需調(diào)試通過。2程序總的功能說明:本程序主要功能是進(jìn)行數(shù)學(xué)算式運(yùn)算練習(xí),能夠進(jìn)行簡(jiǎn)單算式練習(xí)、混合算式運(yùn)算,也能進(jìn)行雙向運(yùn)算練習(xí)(自己模擬訓(xùn)練)。3程序各模塊的功能說明:(1) 界面顯示函數(shù):enu();顯示主菜單界面show();顯示子界面雙向練習(xí)菜單(2) 執(zhí)行練習(xí)的功能函數(shù):main_1();簡(jiǎn)單練習(xí)函數(shù)main_2();混合運(yùn)算函數(shù)main_3();雙向運(yùn)算練習(xí)函數(shù)(3)窗體和背景設(shè)置函數(shù) 調(diào)用system(“color na”)(其中n表示從0到9任意一個(gè)數(shù)字;a表示任意取一個(gè)a,b,c,d,e,f中的一個(gè)字符)函數(shù)來實(shí)現(xiàn)不同窗體前景和背景色
4、彩的設(shè)置 4程序設(shè)計(jì)的流程圖 : 四則運(yùn)算界面單向運(yùn)算雙向運(yùn)算混合運(yùn)算簡(jiǎn)單運(yùn)算加乘減除簡(jiǎn)單的練習(xí)運(yùn)算加減乘除輸入數(shù)字:輸入輸入輸入輸入退出退出11111222223333345程序操作說明書及結(jié)果在vc+6.0環(huán)境中運(yùn)行本程序,先進(jìn)行編譯,然后再進(jìn)行鏈接,在進(jìn)行執(zhí)行將會(huì)出現(xiàn)顯示界面。按照顯示界面上顯示的提示從鍵盤上輸入數(shù)字,就可以實(shí)現(xiàn)相應(yīng)的功能。6源程序清單#include #include#include /對(duì)內(nèi)存操作的頭文件#include #include #include #include /#include 是在調(diào)用字符函數(shù)時(shí),在源文件中包含的頭文件。ctype中c為字符型char的
5、縮寫,type 為類型。#include/操作時(shí)間有關(guān)的函數(shù)的頭文件#define max_len 1024#define exp_len 4int right=0,wrong=0;int v;void add() int a,b,c; a=rand()%100;/rand()函數(shù),生成范圍1-1000; b=100-a;b=rand()%b; printf(請(qǐng)回答:%d+%d=,a,b); scanf(%d,&c); if(a+b!=c)printf(回答錯(cuò)誤n);wrong+; else printf(回答正確n);right+; void minu() int a,b,c; a=rand
6、()%100;/*隨機(jī)產(chǎn)生1個(gè)100以內(nèi)的整數(shù),并賦值給a。srand()函數(shù)是隨機(jī)數(shù)發(fā)生器的初始化函數(shù),還缺少#include #include 兩個(gè)頭文件,int x,a;/表示初始化整數(shù)x和asrand(time(0);/表示隨機(jī)數(shù)產(chǎn)生初始化a=(int)(rand()%100);/表示調(diào)用rand()函數(shù)產(chǎn)生100以內(nèi)整數(shù)并賦值給a*/ b=rand()%a; printf(請(qǐng)回答:%d-%d=,a,b); scanf(%d,&c); if(a-b!=c)printf(回答錯(cuò)誤n);wrong+; else printf(回答正確n);right+; void mul() int a,
7、b,c; a=rand()%11; b=(rand()%100)/(a+1); printf(請(qǐng)回答:%d*%d=,a,b); scanf(%d,&c); if(a*b!=c)printf(回答錯(cuò)誤n);wrong+; else printf(回答正確n);right+; void di() int a,b,c; a=rand()%100; b=rand()%100+1; printf(請(qǐng)回答:%d/%d=,a,b); scanf(%d,&c); if(a/b!=c)printf(回答錯(cuò)誤n);wrong+; else printf(回答正確n);right+; void main_1() s
8、ystem(pause); system(cls); int choise,con=0; system(color 2a); printf(nntt簡(jiǎn)單四則運(yùn)算程序n); system(pause); system(cls); while(1) printf(nntt請(qǐng)選擇:n加(輸入1)n減(輸入2)n乘(輸入3)n除(輸入4)n); if(con=0)scanf(%d,&choise); switch(choise) case 1:add();break; case 2:minu();break; case 3:mul();break; case 4:di();break; printf(
9、請(qǐng)問您想繼續(xù)進(jìn)行這個(gè)運(yùn)算還是重新選擇其他運(yùn)算還是退出?n繼續(xù)(輸入1),重新(輸入2),退出(輸入3); scanf(%d,&con); if(con=1)con=1; if(con=2)con=0; if(con=3)break; system(pause);const char* operator = +-*/;typedef structint n100;int top;stack;/定義棧的基本結(jié)構(gòu)void inits(stack *s)s-top=-1;/棧的初始化int push(stack *s,int e)/將e入棧 s-top+; s-ns-top=e; return 1;
10、int pop(stack *s)/將棧頂元素出棧,存到e中 int e;e=s-ns-top; s-top-; return e;int gettop(stack *s)/取棧頂元素int e;e=s-ns-top;return e;char s2max_len, expmax_len * 2;/* s1保存數(shù)字或運(yùn)算結(jié)果, s2保存操作符, exp為輸入的表達(dá)式 * t1為棧s1的頂指針, t2為棧s2的頂指針, p為掃描exp的位置 */int s1max_len, t1, t2, p;int iscorrect;/* 檢查生成的表達(dá)式是否合理 */int numberexp_len,
11、bracketexp_len;/* number為隨機(jī)生成的表達(dá)式的操作數(shù), oper為運(yùn)算符, bracket為括號(hào)數(shù)組(0表示沒有括號(hào),-1表示左括號(hào),1表示右括號(hào)) */char operexp_len - 1;char replymax_len * 2;/* 用戶答案 */int n = 5;/* 題目數(shù)量,默認(rèn)為5道題 */int getpriority(char c)/* 獲得運(yùn)算符的優(yōu)先級(jí) */if(c = + | c = -)return1;elsereturn 2;int getnum()/* 將字符轉(zhuǎn)換成int */ int r = 0;while(isdigit(expp
12、)r = r * 10 + expp - 0; p = p + 1; return r;void calc(char op)/* 從棧頂取出兩個(gè)數(shù)字, 進(jìn)行 op 對(duì)應(yīng)的操作 */ int a = s1t1 - 2;int b = s1t1 - 1; if(op = +)a += b; else if(op = -)a -= b;if(a 0 & s2t2 - 1 != ( & getpriority(s2t2-1) = getpriority(op)/* 先計(jì)算優(yōu)先級(jí)高的表達(dá)式 */t2 = t2 - 1;calc(s2t2); s2t2 = op;/* 將op壓入s2操作符棧中,并更新棧頂
13、指針 */t2 = t2 + 1; int processexp()/* 計(jì)算表達(dá)式的值 */ t1 = t2 = p = 0;/* 清空棧,將掃描指針復(fù)位 */ while(expp != 0)if(isdigit(expp) /* 如果是數(shù)值,入s1棧 */s1t1 = getnum();t1 = t1 + 1;-p; else /* 反之是運(yùn)算符,入s2棧 */push(expp);p = p + 1;while(t2 0)/* 取出s2中剩余操作符,進(jìn)行運(yùn)算 */t2 = t2 - 1;calc(s2t2); return s10;int generateexp()/* 生成合法的表達(dá)
14、式(中間結(jié)果沒有負(fù)數(shù),分?jǐn)?shù)和小數(shù)等) */int i, j, k, w, ret, digit16; while(true)/* 一直循環(huán)直到隨機(jī)到一個(gè)合法的表達(dá)式 */iscorrect = 1;for(i = 0; i exp_len; i+)/* 隨機(jī)操作數(shù) */numberi = rand() % 30+ 1;for(i = 0; i exp_len - 1; i+)/* 隨機(jī)操作符 */operi = operatorrand() % 4;j = -1;memset(bracket, 0, sizeof(bracket);/* 隨機(jī)括號(hào)的位置 */while(true)i = j +
15、 1;if(exp_len - 1 - i = 0)break;j = rand() % (exp_len - 1 - i) + i;bracketj = -1;i = j + 1;j = rand() % (exp_len - i) + i;bracketj = 1;memset(exp, 0, sizeof(exp);/* 構(gòu)造生成的表達(dá)式 */j = 0;for(i = 0; i 0)digitk = numberi % 10;numberi /= 10;k+;for(w = k - 1; w = 0; w-)expj = digitw + 0;j = j + 1;if(bracketi
16、 = 1)expj = );j = j + 1;expj = operi;j+;ret = processexp();/* 計(jì)算表達(dá)式的結(jié)果 */if(iscorrect)/* 如果合法,退出 */break;return ret;void operate()int j,k,i, ans = 0, rep = 0, correctnum = 0;char c;printf(請(qǐng)輸入您要做題的數(shù)量:);scanf(%d,&k);for(i=1;i=k;i+)ans = generateexp();if(ans-1)printf(%s=n, exp); printf(答案: ); while(c =
17、 getchar() = n | c = )/* 忽略用戶無(wú)意輸入的空格和回車 */;ungetc(c, stdin);/* 將最后的合法字符放回輸入緩沖區(qū) */gets(reply);/* 讀取用戶答案 */rep = 0;for(j = 0; replyj; j+)/* 將用戶的答案轉(zhuǎn)化為數(shù)字 */if(!isdigit(replyj)break;rep = rep * 10 + replyj - 0;if(replyj)/* 若發(fā)現(xiàn)用戶輸入中有字母,退出 */return;if(replyj | rep != ans)/* 與標(biāo)準(zhǔn)答案不一致 */printf(很抱歉,回答錯(cuò)誤!n);wr
18、ong+;else if(rep = ans) /* 回答正確 */printf(恭喜您,回答正確!n);right+;else i-;void main_2() int choise,con=0; system(cls); printf(nntt混合運(yùn)算練習(xí)界面n); system(pause); system(cls); while(1) printf(nntt請(qǐng)選擇:n繼續(xù)(輸入1)n退出(輸入2)n); if(con=0)scanf(%d,&choise); switch(choise) case 1:operate();break; case 2:;break; printf(請(qǐng)問您
19、想繼續(xù)進(jìn)行這個(gè)運(yùn)算還是重新選擇其他運(yùn)算還是退出程序?n繼續(xù)(輸入1),重頭再來(輸入2)n,退出(輸入3)n); scanf(%d,&con); if(con=1)con=1; if(con=2)con=0; if(con=3)break; system(pause);char op7=+,-,*,/,(,),#;/運(yùn)算符數(shù)組char level77=, , ,=;/用二維數(shù)組定義運(yùn)算符優(yōu)先級(jí)int in(char c)switch(c)case +:case -:case *:case /:case (:case ):case #:return 1;return 0;/判斷c是否在運(yùn)算符數(shù)組
20、中char precede(char c1,char c2)int i,j;for(int k=0;k7;k+)if(c1=opk)i=k;break;/判斷c1為何種運(yùn)算符for(k=0;k7;k+)if(c2=opk)j=k;break;/判斷c2為何種運(yùn)算符return levelij;/判斷兩個(gè)運(yùn)算符的優(yōu)先級(jí)int oparate(int f1,char c,int f2)switch(c)case +: return f1+f2;case -: return f1-f2;case *: return f1*f2;case /: return f1/f2;return 0;/計(jì)算f1和
21、f2int eve(stack *optr,stack *opnd)char c;int i,temp;int t,x,theta;char n20;/定義一個(gè)數(shù)組臨時(shí)存儲(chǔ)待轉(zhuǎn)換字符char c1=#;push(optr,(int)c1);c=getchar();int l,r;i=0;while(c!=|(int)gettop(optr)!=(int)(#)if(c=)c=c-26;/將=轉(zhuǎn)換為#進(jìn)行處理if(theta=/&r=0)while(c!=n)c=getchar();printf(error! n);break;/除數(shù)為0處理if(!in(c)ni=c;i+;c=getchar(
22、);/如果獲取的是不是運(yùn)算符,則暫存于一個(gè)數(shù)組中,繼續(xù)獲取下一字符continue;if(in(c)if(n0!=0)i=0;t=(int)atof(n);/將數(shù)組中的字符串轉(zhuǎn)換為float型數(shù)據(jù)push(opnd,t);memset(n,0,strlen(n);/清空數(shù)組,待下次獲取vtemp=(int)gettop(optr); switch(precede(char)temp,c)case :theta=pop(optr);r=pop(opnd); l=pop(opnd);if(theta=/&r=0)v=1;break;push(opnd,oparate(l,(char)(int)th
23、eta),r);if(c=#)c=c+26;/將#還原為=處理break;return (int)gettop(opnd);void show()printf(222 222n);printf( 雙向運(yùn)算練習(xí) n);printf(222 222n);printf(四則運(yùn)算(包含、/和括號(hào)簡(jiǎn)單算術(shù)表達(dá)式)nnn);printf(若輸入負(fù)數(shù),請(qǐng)按(0-*)的形式輸入nnn);printf(請(qǐng)按以下方式輸入:n);printf(輸入:n);printf(x+y=(enter)n);printf(nnn);void result() int m,n; stack *optr;stack *opnd;o
24、ptr=(stack *)malloc(sizeof(stack);opnd=(stack *)malloc(sizeof(stack);/動(dòng)態(tài)分配存儲(chǔ)空間inits(optr);inits(opnd);/初始化棧結(jié)構(gòu)printf(輸入算式:n);m=eve(optr,opnd);/計(jì)算數(shù)據(jù)printf(輸入計(jì)算的數(shù)值:n );scanf( %d,&n);if(n=m)printf(rightn);right+;else printf(wrongn);wrong+;if(v!=1)getchar();printf(正確答案:%d,m); printf(n);/除數(shù)不為0正常輸出elsev=0;
25、printf(除數(shù)不能為0n);/除數(shù)為0出錯(cuò)判斷處理*/void circle() int choise,con=0; system(pause); system(cls); while(1) printf(nntt請(qǐng)選擇:n進(jìn)入運(yùn)算式(輸入1)n退出(輸入2)n); if(con=0)scanf(%d,&choise); switch(choise) case 1:result();break; case 2: break; printf(請(qǐng)問您想繼續(xù)進(jìn)行這個(gè)運(yùn)算還是重新選擇其他運(yùn)算還是退出程序?n繼續(xù)(輸入1),重新(輸入2),退出(輸入3); scanf(%d,&con); if(con=1)con=1; if(con=2)con=0; if(con=3)break; /當(dāng)接受到y(tǒng)時(shí)循環(huán)輸入void main_3() system(pause); system(cls);system(color 3b);show(); circle();printf(thanks for usingn);system(pause);void menu()/主菜單printf(*);printf(_ _ 歡迎你們來學(xué)習(xí)四則運(yùn)算_);printf( );printf( 1.簡(jiǎn)單練習(xí)運(yùn)算
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度木結(jié)構(gòu)建筑維護(hù)木工承包合同范本3篇
- 二零二五年度婚慶服務(wù)市場(chǎng)前景分析婚慶協(xié)議合同3篇
- 二零二五年度木材采購(gòu)與木材行業(yè)技術(shù)培訓(xùn)合同3篇
- 2025年度個(gè)人二手房交易資金監(jiān)管合同范本4篇
- 二零二五年度智能停車場(chǎng)車牌租賃與安全管理合同4篇
- 2025版民間借貸合同要點(diǎn)識(shí)別并規(guī)避四種借款人風(fēng)險(xiǎn)4篇
- 二零二五年度棉布面料環(huán)保認(rèn)證與檢測(cè)服務(wù)合同4篇
- 二零二五年度民爆物品儲(chǔ)存安全責(zé)任合同4篇
- 2025年度汽車文化體驗(yàn)館租賃合同4篇
- 2025年物業(yè)管理公司委托管理合同范本3篇
- 遼寧省撫順五十中學(xué)2024屆中考化學(xué)全真模擬試卷含解析
- 2024年湖南汽車工程職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及答案解析
- 2024年中國(guó)科學(xué)技術(shù)大學(xué)少年創(chuàng)新班數(shù)學(xué)試題真題(答案詳解)
- 家長(zhǎng)心理健康教育知識(shí)講座
- GB/T 292-2023滾動(dòng)軸承角接觸球軸承外形尺寸
- 軍人結(jié)婚函調(diào)報(bào)告表
- 民用無(wú)人駕駛航空器實(shí)名制登記管理規(guī)定
- 北京地鐵6號(hào)線
- 航空油料計(jì)量統(tǒng)計(jì)員(初級(jí))理論考試復(fù)習(xí)題庫(kù)大全-上(單選題匯總)
- 諒解書(標(biāo)準(zhǔn)樣本)
評(píng)論
0/150
提交評(píng)論