c語言課程設(shè)計_第1頁
c語言課程設(shè)計_第2頁
c語言課程設(shè)計_第3頁
c語言課程設(shè)計_第4頁
c語言課程設(shè)計_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

LIAOCHENGUNIVERSITY《C語言課程設(shè)計》報告題目專業(yè)電子信息科學與技術(shù)班級學號姓名陳冉學院物理科學與信息工程學院2019年5月簡易計算機的設(shè)計摘要C語言是一種功能很強的程序設(shè)計語言,也是利用計算機所有硬件特性并能直接控制硬件的語言。C語言,作為一門語言,對應(yīng)于高級語言的編譯器,需要一個“匯編器”來把C語言原文件匯編成機器可執(zhí)行的代碼。高級的匯編器如MASM,TASM等等為我們寫匯編程序提供了很多類似于高級語言的特征,比如結(jié)構(gòu)化、抽象等。在這樣的環(huán)境中編寫的匯編程序,有很大一部分是面向匯編器的偽指令,已經(jīng)類同于高級語言?,F(xiàn)在的匯編環(huán)境已經(jīng)如此高級,即使全部用C語言來編寫windows的應(yīng)用程序也是可行的,但這不是C語言的長處。C語言的長處在于編寫高效且需要對機器硬件精確控制的程序。本次設(shè)計的簡單計算器支持簡單的四則運算。問題分析本次設(shè)計的簡單計算器,主要是為了解決數(shù)學中的加、減、乘、除四則運算的問題。能夠進行任意多個數(shù)的加減乘除求余、按位與或非運算。比如,用戶想要計算(2+5+6)/4+3,那么程序運行后,用戶可以依次輸入2,+,5后,得出結(jié)果7,然后再輸入+,6,得出結(jié)果13,然后再輸入/,4得出結(jié)果3.25,最后輸入+,3,"=”得到結(jié)果6.25。由于在設(shè)計過程中考慮到了可能會多次計算數(shù)據(jù),為此本次課程設(shè)計我設(shè)計的這個簡單計算器可以一次運行,多次使用。本程序使用了函數(shù)和宏混用的方式實現(xiàn)了代碼的較好的可讀性,使程序看起來結(jié)構(gòu)嚴謹。算法設(shè)計(包括流程圖)基于系統(tǒng)需求分析與系統(tǒng)總體設(shè)計的結(jié)論,本系統(tǒng)采用TC2.0實現(xiàn)各模塊的功能。下面按照模塊的劃分來分別闡述系統(tǒng)的詳細設(shè)計和實現(xiàn)過程。模塊描述:(1)顯示界面模塊為系統(tǒng)提供類似于菜單的功能,讓用戶輸入要操作的運算類型的數(shù)字代碼,并進入相應(yīng)的功能執(zhí)行程序,顯示相應(yīng)界面。(2)數(shù)學計算模塊中,根據(jù)用戶選擇的運算類型和運算符號,自動調(diào)用相應(yīng)的函數(shù),運行相關(guān)程序,進行計算,并顯示結(jié)果。(3)退出程序模塊。根據(jù)用戶的需要,選擇是否退出程序。系統(tǒng)頭文件:#include<stdio.h>函數(shù)聲明:主函數(shù)main()功能:計算器功能選擇界面輸入:用戶輸入運算類型、退出程序的相應(yīng)數(shù)字代碼(1四則運算,2混合運算3退出程序)處理:根據(jù)用戶輸入的數(shù)字代碼,跳轉(zhuǎn)到相關(guān)功能函數(shù)輸出:顯示相應(yīng)界面或退出程序?qū)崿F(xiàn)方法:1.使用switch???case…語句實現(xiàn)#define_CRT_SECURE_NO_DEPRECATE1#include<stdio.h>#include<stdlib.h>intadd(intx,inty)(returnx+y;}intsub(intx,inty)(returnx-y;}intmul(intx,inty)(returnx*y;}intdiv(intx,inty)(returnx/y;}intmain()(intx,y;intinput=1;intret=0;while(input)(printf("*************************\n");printf("****1.add2.sub****\n");printf("****3.mul4.div****\n〃);printf("*************************\n");printf("請選擇:");scanf("%d",&input);switch(input)(case1:printf("請輸入操作數(shù):");scanf("%d%d”,&x,&y);ret=add(x,y);break;case2:printf("請輸入操作數(shù):");scanf("%d%d”,&x,&y);ret=sub(x,y);break;case3:printf("請輸入操作數(shù):");scanf("%d%d”,&x,&y);ret=mul(x,y);break;case4:printf("請輸入操作數(shù):");scanf("%d%d”,&x,&y);ret=div(x,y);break;default:printf("選擇錯誤\n”);break;}printf("%d\n",ret);}system(〃pause〃);return0;}2.使用函數(shù)指針數(shù)組實現(xiàn)因為加減乘除四個函數(shù)的函數(shù)類型都一樣,可以把它們的地址放在一個函數(shù)指針數(shù)組里面,通過數(shù)組的下標來訪問每個函數(shù)。具體代碼如下:#define_CRT_SECURE_NO_DEPRECATE1#include<stdio.h>#include<stdlib.h>intadd(intx,inty)(returnx+y;}intsub(intx,inty)(returnx-y;}intmul(intx,inty)(returnx*y;}intdiv(intx,inty)(returnx/y;intmain()(intx,y;intinput=1;intret=0;int(*p[5])(intx,inty)=(0,add,sub,mul,div);//轉(zhuǎn)移表while(input)(printf("*************************\n");printf("****1.add2.sub****\n");printf("****3.mul4.div****\n");printf("*************************\n");printf("請選擇:");scanf("%d",&input);if(input<4&&input>1)(printf("請輸入操作數(shù):");scanf("%d%d”,&x,&y);ret=(*p[input])(x,y);}elseprintf("輸入有誤\n");printf("ret=%d”,ret);}system("pause");return0;程序流程圖如下圖:開始檢驗是不是數(shù)驗是不是數(shù)選擇運算符結(jié)束操作數(shù)一是否比二除數(shù)是否為是否否是是是將結(jié)果轉(zhuǎn)化為十進制輸入NUM2昏輸入NUM1初始化減加乘除程序運行結(jié)果及分析方法一:通過普通方法:#include<stdio.h>#include<stdlib.h>#definemax2014typedefstructstack(intdata[max];inttop;}stack;stack*createstack(void)//創(chuàng)建棧(stack*s;s=(stack*)malloc(sizeof(stack));s_>top=_1;returns;}intstackempty(stack*s)//判斷???if(s)(if(s->top==-1)return1;elsereturn0;}return-1;intstackfull(stack*s)//判斷棧滿(if(s)(if(s->top==max-1)return1;elsereturn0;}return-1;}voidpush(stack*s,intx)//入棧(if(s)(if(stackfull(s)==0)s->data[++s->top]=x;}}intpop(stack*s)//出棧(if(s)if(stackempty(s)==0)returns->data[s->top--];}voidclearstack(stack*s)//清除棧(if(s)s->top=-1;}voiddestroystack(stack*s)//銷毀棧(if(s)(s->top=-1;free(s);s=NULL;}}intfunc(char*p)//判斷運算符的優(yōu)先級(if(*p=二,*,||*p=二,/,)return1;elseif(*p==,+,)return0;elsereturn2;}intFunc(stack*s1,stack*s2)//對數(shù)據(jù)進行運算(charch[1000]={0},w;char*p=ch,*q=ch;inta,b,c,flag=0,flag1=0;while((*q=getchar())!二,\n,)(q++;}while(1)(a=0;b=0;while(*p>='0'&&*p<='9')(a=*p-,0,;b=b*10+a;p++;}if(flag==1)(c=pop(s1);w=pop(s2);if(w==,*,)b=b*c;elseb=c/b;flag=0;}if(*p==,=,)//等號結(jié)束運算break;push(s1,b);push(s2,*p);if(func(p)==1)(flag=1;}p++;if(stackempty(s2)==0)(w=pop(s2);if(w==,-,)b=-b;}while(stackempty(s1)==0)(c=pop(s1);if(stackempty(s2)==0)w=pop(s2);else(b=b+c;break;}if(w==,-,)b=b-c;elseb=b+c;}returnb;}intmain()(stack*s1=createstack();stack*s2=createstack();intx=Func(s1,s2);printf("計算結(jié)果為:%d”,x);printf(〃\n〃);return0;}該程序優(yōu)點在于程序簡單,一目了然,把棧的知識合理運用起來,程序包括創(chuàng)建棧,入棧、出棧,判斷棧滿和???,銷毀棧等;缺點在于僅能實現(xiàn)int型的加減乘除運算,不能識別括號和小數(shù)點的運算,所以實用性不強。方法二:通過函數(shù)指針數(shù)組實現(xiàn)#include<stdio.h>#include<windows.h>intadd(intx,inty)(returnx+y;}intsub(intx,inty)(returnx-y;}intnul(intx,inty)(returnx*y;}intdrv(intx,inty)(returnx/y;}intmain()(intx,y;1;intinput=1;intret=0;int(*p[5])(intx,inty)=(0,add,sub,nul,drv);//轉(zhuǎn)移表while(input){printf("***********************\n");printf("1:add2:sub\n");printf("3:nul4:div\n");printf("***********************\n");printf("請選擇:");scanf_s("%d",&input);if((input<=4&&input>=1))(printf("輸入操作數(shù):");scanf_s("%d%d”,&x,&y);ret=(*p[input])(x,y);}elseprintf("輸入錯誤\n");printf("%d\n",ret);}system(〃pause〃);return0;}方法三:使用main函數(shù)的參數(shù),實現(xiàn)一個整數(shù)計算器。程序可以接受三個參數(shù),第一個參數(shù)“-a”選項執(zhí)行加法,“-s”選項執(zhí)行減法,“-m”選項執(zhí)行乘法,“-d”選項執(zhí)行除法,后面兩個參數(shù)為操作數(shù)。例如:命令行參數(shù)輸入:test.exe-a12執(zhí)行1+2輸出3main有三個參數(shù):intargc,表示命令行參數(shù)加上程序路徑的個數(shù),最小為1。char*argv[],表示main函數(shù)的命令行參數(shù)。char*env[],表示環(huán)境變量#include<stdio.h>intmain(intargc,char*argv[])(intret=0;if(argc!=4)//判斷參數(shù)個數(shù)(printf(〃error!\n〃);}if(argv[1][0]=='-')//第二個參數(shù)(字符串)判斷(switch(argv[1][1])(case'a':ret=atoi(argv[2])+atoi(argv[3]);break;/*匕處利用atoi函數(shù)將指針數(shù)組類型轉(zhuǎn)換為整型。cases:ret=atoi(argv[2])-atoi(argv[3]);break;casem:ret=atoi(argv[2])*atoi(argv[3]);break;case'd':ret=atoi(argv[2])/atoi(argv[3]);break;default:printf(〃error!\n〃);break;}}printf("運算結(jié)果為:%d\n”,ret);return0;4.結(jié)論計算機知識博大精深,很奧妙,學過c語言之后我知道我們平時用的那些應(yīng)用程序都是用各種計算機語言編寫的。這次通過老師布置的課程設(shè)計,我學會了更多的計算機知識,覺得編程是一件很費腦細胞同時很有意思的一件事。我在編寫這次簡單計算器的程序過程中遇到很多困難,犯了很多錯,(例如:執(zhí)行結(jié)果部分沒有運算符),這也讓我意識到編寫c語言是需要耐心、細心和熱心

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論