版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 課程設(shè)計(jì)(論文)任務(wù)書</p><p><b> 摘 要</b></p><p> 課程設(shè)計(jì)語言類課程的指導(dǎo)思想:使學(xué)生通過學(xué)習(xí)高級編程語言的知識、編程技術(shù)和基本算法,掌握課程設(shè)計(jì)的思想和方法,具備利用計(jì)算機(jī)求解實(shí)際問題的能力,能靈活運(yùn)用高級語言進(jìn)行程序設(shè)計(jì)。</p><p> 現(xiàn)時(shí)學(xué)習(xí)生活中,常會遇到一些數(shù)目較大
2、數(shù)據(jù)繁雜的數(shù)值運(yùn)算,徒手運(yùn)算起來很困難,這時(shí)候我們就必須用到計(jì)算器。本程序的編寫基礎(chǔ)是VC2010,本程序?qū)崿F(xiàn)了加、減、乘、除、求冪、求Sin,求Cos,求Log10,求階乘,</p><p> 這款簡單的計(jì)算器最獨(dú)特的地方在于充分運(yùn)用棧,儲存分配及switch的相關(guān)知識.例如構(gòu)造棧,棧的指針,??臻g存儲分配,插入棧元素,壓棧,出棧.同時(shí)穿插用typedef命名已有結(jié)構(gòu)體,參量傳遞,邏輯判斷等重要知識.并且,該
3、程序也運(yùn)用選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu),函數(shù)的嵌套結(jié)構(gòu)一系列基礎(chǔ)知識,涉及if else語句,break語句,字符常量和多種運(yùn)算符的規(guī)范使用.總體來說,該程序較好的呈現(xiàn)了</p><p> 關(guān)鍵字:C語言程序設(shè)計(jì) 基本算法 高級編程語言 思想和方法 計(jì)算器</p><p><b> VC2010 </b></p><p><b> 目錄
4、</b></p><p> 第1章選題的意義………………………………………………………………4</p><p> 1.1選題……………………………………………………………………4</p><p> 第2章系統(tǒng)功能需求分析………………………………………………………5</p><p> 2.1系統(tǒng)的基本要求…………………………
5、……………………………5</p><p> 2.2數(shù)據(jù)結(jié)構(gòu)和用法………………………………………………………5</p><p> 第3章系統(tǒng)設(shè)計(jì)…………………………………………………………………6</p><p> 第4章系統(tǒng)實(shí)現(xiàn)…………………………………………………………………7</p><p> 第5章總結(jié)…………………………………
6、………………………………………8 </p><p> 第6章主要的參考文獻(xiàn)………………………………………………………….17</p><p><b> 第1章選題的意義</b></p><p><b> 1.選題</b></p><p> 我選的題目是:簡單計(jì)算器的設(shè)計(jì)</p>
7、<p> 我選這道題的原因如下:</p><p> 計(jì)算器對我們每一的學(xué)生都很熟悉,從初中到高中再到大學(xué)。但是我們只知道按下幾個(gè)按鈕計(jì)算器便會顯示出結(jié)果,很少有學(xué)生分析過計(jì)算器究竟是如何運(yùn)行的。C語言課程設(shè)計(jì)便是一個(gè)很好的機(jī)會,讓我實(shí)踐計(jì)算器的運(yùn)行代碼.</p><p> 運(yùn)用的數(shù)據(jù)結(jié)構(gòu)和知識點(diǎn)</p><p> VC2010繪圖知識數(shù)學(xué)函數(shù)選
8、擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)數(shù)組指針順序結(jié)構(gòu)</p><p> 時(shí)間安排:第一周查閱資料</p><p> 第二周第一、二天程序設(shè)計(jì);第三、四天程序調(diào)試與測試;第五天答辯</p><p> 第2章系統(tǒng)功能需求分析</p><p> 2.1系統(tǒng)的基本要求</p><p> 1. 算術(shù)運(yùn)算功能。能夠?qū)崿F(xiàn)+、-、*、/、mod、
9、int運(yùn)算。</p><p> 2. 函數(shù)運(yùn)算功能。能夠?qū)崿F(xiàn)ln、sin、x^y、log、cos、x^3、n!、tan、x^2、1/x等運(yùn)算。</p><p> 3.通過鍵盤控制字符和數(shù)字的輸入。</p><p> 2.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)及用法說明</p><p> 此程序調(diào)用的函數(shù)主要有<math.h> /*數(shù)學(xué)函數(shù)的定
10、義*/<conio.h> /*屏幕操作函數(shù)*/<stdio.h> /*I/O函數(shù)*/<stdlib.h> /*庫函數(shù)*/<stdarg.h> /*變量長度參數(shù)表*/<graphics.h> /*圖形函數(shù)*/<string.h> /*字符串函數(shù)*/<ctype.h> /*字符操作函數(shù)*/?;臼褂?用→←↑↓控制鼠標(biāo)圖形移動,當(dāng)移動到相應(yīng)得按
11、鈕時(shí)按回車鍵輸入當(dāng)前數(shù)字或執(zhí)行對應(yīng)的函數(shù)。</p><p> 加法:輸入一個(gè)被加數(shù)數(shù),按“+”,輸入被加數(shù),按“=”,輸出結(jié)果。</p><p> 減法:輸入被減數(shù)數(shù),按“-”,輸入減數(shù),按“=”,輸出結(jié)果。</p><p> 乘法: 輸入一個(gè)數(shù),按“*”,輸入另個(gè)數(shù),按“=”,輸出結(jié)果。</p><p> 除法: 輸入一個(gè)被除數(shù),按
12、“+”,輸入另個(gè)除數(shù),按“=”,輸出結(jié)果。</p><p> 求x的y次方: 輸入數(shù)x,按“^”,輸入數(shù)y,按“=”,輸出結(jié)果。</p><p> 求余:輸入一個(gè)數(shù),按“mod”,按“=”,輸出結(jié)果。</p><p> 取整:輸入一個(gè)數(shù),按“int”,按“=”,輸出結(jié)果。</p><p> 余弦:輸入一個(gè)數(shù),按“cos”,按“=”,輸
13、出結(jié)果。</p><p> 正弦:輸入一個(gè)數(shù),按“sin”,按“=”,輸出結(jié)果。</p><p> 正切:輸入一個(gè)數(shù),按“tan”,按“=”,輸出結(jié)果。</p><p> 階乘:輸入一個(gè)數(shù),按“n!”,按“=”,輸出結(jié)果。</p><p> 倒數(shù):輸入一個(gè)數(shù),按“1/x”,按“=”,輸出結(jié)果</p><p>
14、 十進(jìn)制轉(zhuǎn)二進(jìn)制:輸入一個(gè)十進(jìn)制數(shù),按“10->2”,輸出二進(jìn)制結(jié)果。</p><p> 十進(jìn)制轉(zhuǎn)八進(jìn)制:輸入一個(gè)十進(jìn)制數(shù),按“10->8”,輸出八進(jìn)制結(jié)果。</p><p> 八進(jìn)制轉(zhuǎn)十進(jìn)制:輸入一個(gè)八進(jìn)制數(shù),按“10->8”,輸出十進(jìn)制結(jié)果。</p><p><b> 第3章系統(tǒng)設(shè)計(jì)</b></p>&
15、lt;p><b> 流程圖</b></p><p><b> 第四章系統(tǒng)實(shí)現(xiàn)</b></p><p> 本系統(tǒng)采用 C語言開發(fā),生成可執(zhí)行文件在任何系統(tǒng)下都可以執(zhí)行,具有很好的數(shù)據(jù)處理能力和穩(wěn)定性。并且使用VC2010在原有基礎(chǔ)上實(shí)現(xiàn)了多漢字的支持,方便了我們的使用。生成的程序可移植性強(qiáng)、兼容性好。這個(gè)系統(tǒng)是基于軟件發(fā)展的生命周期來研
16、制的,它可以直接輸入數(shù)學(xué)表達(dá)式,不需要任何轉(zhuǎn)換,就可以直接輸出數(shù)學(xué)四則運(yùn)算的結(jié)果。</p><p> 本程序通過調(diào)用int specialkey(void) 和#include <conio.h> 來實(shí)現(xiàn)對屏幕的操作,通過調(diào)用int arrow()函數(shù),int specialkey(void) 和#include <conio.h>來實(shí)現(xiàn)對光標(biāo)的操作。計(jì)算器圖形采用VC2010繪圖程序
17、制作。</p><p> 計(jì)算器數(shù)據(jù)運(yùn)行的實(shí)現(xiàn):第5章總結(jié)</p><p> 測試階段中我發(fā)現(xiàn)了幾處錯(cuò)誤導(dǎo)致程序不能編譯,去圖書館查找相關(guān)的資料, 又同學(xué)一起討論。通過耐心的分析源代碼終于編好了一個(gè)完整無誤的程序。在這次的c語言程序設(shè)計(jì)實(shí)習(xí)中遇到了現(xiàn)實(shí)編程中必然見到的問題通過這些問題的解決積累了編程的實(shí)踐經(jīng)驗(yàn)。</p><p> 善于總結(jié),是學(xué)習(xí)能力的一種體現(xiàn)
18、,每次完成一個(gè)編程任務(wù),完成一段代碼,都應(yīng)當(dāng)有目的的跟蹤該程序的應(yīng)用狀況,隨時(shí)總結(jié),找到自己的不足,這樣所編寫的程序才能逐步提高.課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實(shí)際問題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過程.</p><p> 通過此次課程設(shè)計(jì)不僅鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。使我們懂得了理論與實(shí)際相結(jié)合是很重要的,只有
19、理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實(shí)踐相我們把前面所學(xué)過的知識又重新溫故了一遍。</p><p> 通過這次課程設(shè)計(jì),我增強(qiáng)了觀察、分析和解決問題的實(shí)際工作能力.找出學(xué)習(xí)中存在的不足,以便為完善學(xué)習(xí)計(jì)劃,改變學(xué)習(xí)內(nèi)容與方法提供實(shí)踐依據(jù)。而這種實(shí)際能力的培養(yǎng)單靠課堂教學(xué)是遠(yuǎn)遠(yuǎn)不夠的,必須從課堂走向?qū)嵺`。</p><p><b> 附程序源代碼:</b>&l
20、t;/p><p> typedef char SElemType;</p><p> #include "string.h"</p><p> #include "stdio.h"</p><p> #include "stdlib.h"</p><p>
21、 #include "math.h"</p><p> #include "process.h"</p><p> #define TURE 1</p><p> #define FALSE 0</p><p> #define OK 1</p><p> #defi
22、ne ERROR 0</p><p> #define OVERFLOW -2</p><p> #define STACK_INIT_SIZE 10 </p><p> #define STACK_INCREMENT 2 typedefstructSqStack</p><p><b> {</b></p
23、><p> double *base; double *top; intstacksize;</p><p><b> }SqStack;</b></p><p> voidInitStack(SqStack&S)</p><p> { if(!(S.base=(double *)malloc(S
24、TACK_INIT_SIZE*sizeof(double))))</p><p> exit(OVERFLOW); </p><p> S.top=S.base;</p><p> S.stacksize=STACK_INIT_SIZE;</p><p><b> }</b></p><p&g
25、t; doubleClearStack(SqStack&S)</p><p> { S.top=S.base;</p><p> return OK;</p><p><b> }</b></p><p> doubleGetTop(SqStackS,double&e)</p>&
26、lt;p> { if(S.top>S.base)</p><p> { e=*(S.top-1);</p><p> return OK;</p><p><b> }</b></p><p><b> else</b></p><p> r
27、eturn ERROR;</p><p><b> }</b></p><p> void Push(SqStack&S,double e)</p><p> { if(S.top-S.base>=S.stacksize) {</p><p> S.base=(double *)re
28、alloc(S.base,(S.stacksize+STACK_INCREMENT)*sizeof(double));</p><p> if(!S.base)</p><p> exit(OVERFLOW); S.top=S.base+S.stacksize;</p><p> S.stacksize+=STACK_INCREMENT;</p>
29、<p><b> }</b></p><p> *(S.top)++=e;</p><p><b> }</b></p><p> double Pop(SqStack&S,double&e)</p><p> { if(S.top==S.base)</p
30、><p> return ERROR;</p><p> e=*--S.top;</p><p> return OK;</p><p><b> }</b></p><p> SElemTypePrecede(SElemType t1,SElemType t2)</p>&l
31、t;p><b> { char f;</b></p><p> switch(t2)</p><p><b> {</b></p><p><b> case '+':</b></p><p> case '-':if(t1==&
32、#39;('||t1=='=')</p><p> f='<'; // t1<t2</p><p><b> else</b></p><p> f='>'; // t1>t2</p><p><b> break;<
33、/b></p><p><b> case '*':</b></p><p> case '/':if(t1=='*'||t1=='/'||t1==')'||t1=='s'||t1=='l'||t1=='g'||t1=='c
34、')</p><p> f='>'; // t1>t2</p><p><b> else</b></p><p> f='<'; // t1<t2</p><p><b> break;</b></p><
35、p> case '(':if(t1==')')</p><p><b> {</b></p><p> printf("Error!\n");</p><p> exit(ERROR);</p><p><b> }</b><
36、/p><p><b> else</b></p><p> f='<'; // t1<t2</p><p><b> break;</b></p><p> case ')':switch(t1)</p><p><b&g
37、t; {</b></p><p> case'(':f='='; // t1=t2</p><p><b> break;</b></p><p> case'=':printf("Error!!\n");</p><p> exi
38、t(ERROR);</p><p> default :f='>'; // t1>t2</p><p><b> }</b></p><p><b> break;</b></p><p> case'=':switch(t1)</p>
39、<p><b> {</b></p><p> case'=' :f='='; // t1=t2</p><p><b> break;</b></p><p> case'(' :printf("Error!!!\n");</
40、p><p> exit(ERROR);</p><p> default :f='>';</p><p><b> }</b></p><p> break;// t1>t2</p><p> case'^':if(t1=='('|
41、|t1=='^'||t1=='=')</p><p><b> f='<';</b></p><p><b> else</b></p><p><b> f='>';</b></p><p>&
42、lt;b> break;</b></p><p><b> case's':</b></p><p><b> case'c':</b></p><p><b> case'g':</b></p><p>
43、; case'l':switch(t1)</p><p><b> {</b></p><p><b> case')':</b></p><p><b> case'l':</b></p><p><b>
44、case'g':</b></p><p><b> case'c':</b></p><p> case's':printf("Error!");exit(ERROR);</p><p><b> case'(':</b>
45、</p><p><b> case'=':</b></p><p><b> case'+':</b></p><p><b> case'-':</b></p><p><b> case'*'
46、;:</b></p><p><b> case'/':</b></p><p> case'^':f='<';break;</p><p><b> }</b></p><p><b> break;</b&
47、gt;</p><p><b> }</b></p><p><b> return f;</b></p><p><b> }</b></p><p> double Operate1(double a,SElemTypetheta,double b)</p&g
48、t;<p> {double c;</p><p> switch(theta)</p><p><b> {</b></p><p> case'+':c=a+b;break;</p><p> case'-':c=a-b;break;</p>&l
49、t;p> case'*':c=a*b;break;</p><p> case'/':c=a/b;break;</p><p> case'^':c=pow(a,b);break;</p><p><b> }</b></p><p><b> r
50、eturn c;</b></p><p><b> }</b></p><p> double Operate2(SElemTypetheta,double a)</p><p> {double c;</p><p> switch(theta)</p><p><b&
51、gt; {</b></p><p> case's':c=sin(a);break;</p><p> case'c':c=cos(a);break;</p><p> case'l':c=log(a);break;</p><p> case'g':c=l
52、og10(a);break;</p><p><b> }</b></p><p><b> return c;</b></p><p><b> }</b></p><p> double In(SElemType c)</p><p> {
53、 switch(c)</p><p><b> {</b></p><p><b> case'+':</b></p><p><b> case'-':</b></p><p><b> case'*':<
54、;/b></p><p><b> case'/':</b></p><p><b> case'(':</b></p><p><b> case')':</b></p><p><b> case
55、9;=':</b></p><p><b> case'^':</b></p><p><b> case's':</b></p><p><b> case'l':</b></p><p><b&
56、gt; case'g':</b></p><p> case'c':return 1;</p><p> default:return 0;</p><p><b> }</b></p><p><b> }</b></p><
57、;p> int _tmain(intargc, _TCHAR* argv[])</p><p><b> {</b></p><p> printf("\nwedefined:s()=sin(),c()=cos(),l()=ln(),g()=lg()\n");</p><p> SqStack OPTR,OPN
58、D;</p><p><b> int e;</b></p><p> doublea,b,x,theta;</p><p> double d,f;</p><p><b> char c;</b></p><p> char z[60];</p>
59、<p><b> int i;</b></p><p> InitStack(OPTR);</p><p> InitStack(OPND);</p><p><b> do</b></p><p><b> {</b></p><p&g
60、t; Push(OPTR,'=');</p><p> printf("Please Enter:\n");</p><p> c=getchar();</p><p> GetTop(OPTR,theta);</p><p> while(c!='='||theta!='
61、=')</p><p> {if(In(c))</p><p><b> {</b></p><p> switch(Precede(theta,c))</p><p><b> {</b></p><p> case '<': Pus
62、h(OPTR,c);</p><p> c=getchar();</p><p> GetTop(OPTR,theta);</p><p><b> break;</b></p><p> case '=':Pop(OPTR,theta);</p><p> GetTop
63、(OPTR,theta);</p><p> if(theta=='s'||theta=='l'||theta=='c'||theta=='g'){Pop(OPND,f);</p><p> Pop(OPTR,theta);</p><p> Push(OPND,Operate2(theta,f)
64、);</p><p> GetTop(OPTR,theta);</p><p> c=getchar();</p><p><b> break;</b></p><p><b> }</b></p><p><b> else</b><
65、/p><p><b> {</b></p><p> c=getchar();</p><p><b> break;</b></p><p><b> }</b></p><p> cas'>':if(theta=='
66、;+'||theta=='-'||theta=='*'||theta=='/'||theta=='^')</p><p> {Pop(OPTR,theta);</p><p> Pop(OPND,b);</p><p> Pop(OPND,a);</p><p>
67、 f=Operate1(a,theta,b);</p><p> Push(OPND,f);</p><p> GetTop(OPTR,theta);</p><p><b> break;</b></p><p><b> }</b></p><p> else
68、break;</p><p><b> }</b></p><p><b> }</b></p><p> else if(c>='0'&&c<='9'||c=='.')</p><p><b> {<
69、;/b></p><p><b> i=0;</b></p><p><b> do</b></p><p><b> {</b></p><p> z[i]=c;i++;</p><p> c=getchar();</p>
70、<p><b> }</b></p><p> while((c<='9'&&c>='0')||c=='.');</p><p><b> z[i]=0;</b></p><p> d=atof(z);</p>&
71、lt;p> Push(OPND,d);</p><p><b> }</b></p><p> else {</p><p> printf("error\n");</p><p> exit(ERROR);</p><p><b>
72、; }</b></p><p><b> }</b></p><p> GetTop(OPND,x);</p><p> printf("%f",x);</p><p> ClearStack(OPTR);</p><p> ClearStack(OPN
73、D);</p><p> printf("\nWant to use it again?Yes:1,No:0");</p><p> scanf("%d",&e);</p><p> x=getchar();</p><p><b> }</b></p>
74、<p> while(e);printf("\nThanks for using the calulating device!!!");</p><p> printf("\npress any key to continue...");</p><p> x=getchar();</p><p> x=
75、getchar();</p><p><b> }</b></p><p><b> 主要參考文獻(xiàn):</b></p><p> 《C語言繪圖與計(jì)算機(jī)仿真技術(shù)》王強(qiáng)如北京航空航天大學(xué)</p><p> [1]科欽.C語言程序設(shè)計(jì).北京:電子工業(yè)出版社,1987:56-58 </p>
76、<p> [2]徐君毅.C語言程序設(shè)計(jì)基礎(chǔ).上海:復(fù)旦大學(xué)出版社,1992:87-98</p><p> [3]李成付.C語言程序設(shè)計(jì)基礎(chǔ).北京:科學(xué)出版社,1992:42-67</p><p> [4]郝玉潔.C語言程序設(shè)計(jì).北京:機(jī)械工業(yè)出版社,2000:63-88</p><p> [5]錢啟平.C語言程序設(shè)計(jì)基礎(chǔ).北京:中國鐵道出版社,
77、2000:91-99</p><p> [6]李大友.C語言程序設(shè)計(jì)基礎(chǔ).北京:清華大學(xué)出版社,1999:58-98</p><p> [7]黃迪明.C語言程序設(shè)計(jì).北京:電子科技大學(xué)出版社,1998:78-98</p><p> [8]姜仲秋.C語言程序設(shè)計(jì)基礎(chǔ).南京:南京大學(xué)出版社,1998:16-100</p><p> [9]
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 簡單計(jì)算器課程設(shè)計(jì)
- 簡單的計(jì)算器課程設(shè)計(jì)
- 課程設(shè)計(jì)---簡單的計(jì)算器
- 課程設(shè)計(jì)--簡單的計(jì)算器設(shè)計(jì)
- 課程設(shè)計(jì)--簡單計(jì)算器的設(shè)計(jì)
- 簡單的計(jì)算器課程設(shè)計(jì)
- 課程設(shè)計(jì)--簡單計(jì)算器的設(shè)計(jì)
- 簡單計(jì)算器課程設(shè)計(jì)報(bào)告
- vb課程設(shè)計(jì)--簡單計(jì)算器
- 簡單計(jì)算器課程設(shè)計(jì)報(bào)告
- c++課程設(shè)計(jì)--簡單計(jì)算器
- c++課程設(shè)計(jì)--簡單計(jì)算器
- vc++課程設(shè)計(jì)---簡單計(jì)算器的設(shè)計(jì)
- 匯編語言課程設(shè)計(jì)--簡單計(jì)算器設(shè)計(jì)
- c++簡單計(jì)算器課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告--簡單的計(jì)算器設(shè)計(jì)
- c++課程設(shè)計(jì)報(bào)告--簡單計(jì)算器
- 單片機(jī)課程設(shè)計(jì)——簡單計(jì)算器的設(shè)計(jì)
- c語言簡單計(jì)算器的編寫課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--簡單計(jì)算器
評論
0/150
提交評論