




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、(精!c語(yǔ)言)多功能計(jì)算器大作業(yè)(精!c語(yǔ)言)多功能計(jì)算器大作業(yè)PAGE13(精!c語(yǔ)言)多功能計(jì)算器大作業(yè)#include#include#include#include #pragma comment(lib, )#define pi void zhuanhua() .請(qǐng)選擇菜單上的選項(xiàng)n); flag=1; /*int check(char *c)輸入?yún)?shù): char *c: 輸入的字符串 返回參數(shù): 0:字符串中有不符合規(guī)定的字符 1: 字符串字符符合規(guī)定,沒(méi)有不符合規(guī)定的字符.功能: 檢查字符串中有否除了 0-9, +,-,*,/,(,),之外的其他字符, 如果有,則返回0, 表示出
2、現(xiàn)錯(cuò)誤。 若沒(méi)有,則返回1,表式字符串符合規(guī)定。*/int check(char *c) int k=0; while(*c!=0) if(*c=s&*(c+1)=i&*(c+2)=n)|(*c=c&*(c+1)=o&*(c+2)=s)|(*c=t&*(c+1)=a&*(c+2)=n)|(*c=c&*(c+1)=o&*(c+2)=t) c+=3; if(*c=e&*(c+1)=) c+=2; if(*c=0 & *c=9) | *c=+ | *c=- | *c=* | *c=/ | *c=. | *c=( | *c=) |(*c=p&*(c+1)=i)|(*c=i&*(c-1)=p); els
3、e printf(input error, there have the char not the math expression char!n); return 0; if(*c=() k+; else if(*c=) k-; c+; if(k!=0) printf(input error, there is not have correct bracket ()!n); return 0; return 1; /* void move(char *f, double *s,int p) 輸入?yún)?shù): char *f : 運(yùn)算符數(shù)組 double *s: 數(shù)值數(shù)組 int p: 當(dāng)前運(yùn)算符數(shù)組
4、位置。 返回參數(shù): 無(wú) 功能: 將當(dāng)前已經(jīng)完成運(yùn)算的運(yùn)算符消去,同時(shí)將數(shù)值數(shù)組的位置調(diào)整以進(jìn)行下一次運(yùn)算。 傳入值p若為3 則當(dāng)前符號(hào)的數(shù)組位置為3. f3=f3+1flen-2=flen-1 flen-1=0; si=si+1slen-1=slen 因?yàn)閿?shù)值比運(yùn)算符多一個(gè)。*/void move(char *f, double *s,int p) int i=0,len=strlen(f); for(i=p; ilen; i+) /*將已經(jīng)運(yùn)算過(guò)的符號(hào),空出來(lái)的位置用后面的符號(hào)來(lái)填充,*/ /*即把乘和除號(hào)的位置用后面的加和減號(hào)填充*/ fi=fi+1; si=si+1; si=si+1;
5、flen-1=0; /* double convnum(char *c)輸入?yún)?shù): char *c :由數(shù)字和小數(shù)點(diǎn)組成的字符,用以轉(zhuǎn)換成double型的數(shù)值。 返回參數(shù): num:返回轉(zhuǎn)換好的值。 功能: 將輸入的字符串先將其小數(shù)點(diǎn)以前的部分復(fù)制到temp數(shù)組中, 若有小數(shù)點(diǎn),則將小數(shù)點(diǎn)之后的數(shù)值,也就是小數(shù)部分先進(jìn)行計(jì)算,值存入num中 計(jì)算完成后,再對(duì)整數(shù)部分進(jìn)行計(jì)算,值加上小數(shù)部分的值,存入num中。*/double convnum(char *c) double num=; double a=; int i=0,p=0,len=0; char temp100; int tempi=0
6、; int start=0; int f=1; /*正負(fù)符號(hào)指示器,若為1則為正數(shù),為1,此數(shù)為負(fù)數(shù)*/ len=strlen(c); if(c0=-) start=1; f=-1; for(i=start; ilen; i+) if(ci=p&ci+1=i) return pi; if(ci=s) return (sin(atof(c+3); if(ci=c&ci+2=s) return (cos(atof(c+3); if(ci=t) return (tan(atof(c+3); if(ci=c&ci+2=t) return (1/tan(atof(c+3); if(ci=e&ci+1=)
7、 return(pow,atof(c+2); if(ci=.) p=i; break; temptempi+=ci; /*將整數(shù)部分復(fù)制到temp中*/ temptempi=0; if(p!=0) for(i=p+1;i=0; i-) num=num+(a*(tempi-48); a*=10; num=num*f; return num; /* double good(char *c)輸入?yún)?shù): char *c :即將進(jìn)行運(yùn)算的字符串型數(shù)學(xué)表達(dá)式。如+(2*3/5)返回參數(shù): s0:計(jì)算結(jié)果將放入s0中 功能: 將輸入的字符串中的數(shù)字分別調(diào)用convnum(char *c)函數(shù)進(jìn)行數(shù)值變換,再
8、將其依 次存入doulbe si中,將加減乘除運(yùn)算符依次存入字符串符號(hào)數(shù)組 char fi中, 然后如果遇到括號(hào),則將括號(hào)內(nèi)的字符串存入另一字符數(shù)組中,然后用此 good(char *c) 遞歸函數(shù)進(jìn)行遞歸運(yùn)算。 然后根據(jù)先乘除,后加減的順序?qū)σ?存入數(shù)組的數(shù)值根 據(jù)存入字符串符號(hào)數(shù)組的運(yùn)算符進(jìn)行運(yùn)算。結(jié)果存入s0中。 返回最終結(jié)果。*/double good(char *c) /*可遞歸函數(shù)*/ /*取得數(shù)值字符串,并調(diào)用convnum轉(zhuǎn)換成double*/ char g100,number30; /*g,保存當(dāng)前的表達(dá)式串,number保存一個(gè)數(shù)的所有字符*/ char f80; /*保存
9、所有的符號(hào)的堆棧*/ int fi=0; /*保存符號(hào)的位置指針*/ double s80; /*保存當(dāng)前所有的數(shù)的一個(gè)堆棧*/ int si=0; /*保存數(shù)字位置指針*/ int k=0; /* 若k=1則表示有一對(duì)括號(hào)*/ int num=0,i=0; /*num保存新括號(hào)內(nèi)的字符數(shù),i 保存number里的字符位置*/ int cc=0; /*乘除符號(hào)數(shù)量*/ int jj=0; /*加減符號(hào)數(shù)量*/ while(*c!=0)/*當(dāng)p=1 和k=0時(shí),表示已經(jīng)把括號(hào)里的內(nèi)容全部復(fù)制到g100中了*/ k=0; num=0; switch(*c) case +: /*當(dāng)前字符為+-乘除時(shí)
10、則表示*/ case -: case *: case/: ffi+=*c; if(*c=* | *c=/) cc+; else jj+; if(*(c-1)!=) numberi=0; i=0;/*完成一個(gè)數(shù)字的復(fù)制,其位置指針i=0*/ ssi+=convnum(number); break; case(: /*有括號(hào),則將當(dāng)前括號(hào)作用范圍內(nèi)的全部字符保存,作為*/ k+; /*一個(gè)新的字符表達(dá)式進(jìn)行遞歸調(diào)用good函數(shù)計(jì)算。*/ while(k0) c+; gnum+=*c; if(*c=) k-; else if(*c=() k+; gnum-1=0; num=0;/*完成一個(gè)括號(hào)內(nèi)容的
11、復(fù)制,其位置指針num=0*/ ssi+=good(g); break; default: numberi+=*c; if(*(c+1)=0) numberi=0; ssi+=convnum(number); break; c+; ffi=0; i=0; while(cc0) switch(fi) case *: cc-; si+1=si*si+1; move(f,s,i); break; case /: cc-; si+1=si/(float)si+1; move(f,s,i); break; default: i+; break; i=0; while(jj0) switch(fi) ca
12、se +: si+1=si+si+1; jj-; move(f,s,i); break; case -: si+1=si-si+1; jj-; move(f,s,i); break; default: printf(operator error!); break; return s0; void hunhe() char str100; double sum=0; int p=1; while(1) printf(輸入表達(dá)式: (提示:輸入exit退出)n); scanf(%s,str); p=strcmp(str,exit); if(p=0) break; p=check(str); if(
13、p=0) continue; sum=good(str); printf(%s=%f,str,sum); printf(n); printf(返回菜單!n); void ping() .請(qǐng)選擇菜單上的選項(xiàng)n); flag=1; void kai(float x) .請(qǐng)選擇菜單上的選項(xiàng)n); flag=1; void leijia() .請(qǐng)選擇菜單上的選項(xiàng)n); flag=1;void qingchu() .請(qǐng)選擇菜單上的選項(xiàng)n); flag=1; else if(b0=c&b1=o&b2=s) c=convnum(b+3); printf(%s=%fn,b,cos(c); printf(Con
14、tinue ); getchar(); d=getchar(); if(d=n|d=N) printf(已退出請(qǐng)選擇菜單上的選項(xiàng)n); flag=1; else if(b0=t&b1=a&b2=n) c=convnum(b+3); printf(%s=%fn,b,tan(c); printf(Continue ); getchar(); d=getchar(); if(d=n|d=N) printf(已退出請(qǐng)選擇菜單上的選項(xiàng)n); flag=1; else if(b0=c&b1=o&b2=t) c=convnum(b+3); printf(%s=%fn,b,1/tan(c); printf(C
15、ontinue ); getchar(); d=getchar(); if(d=n|d=N) printf(已退出請(qǐng)選擇菜單上的選項(xiàng)n); flag=1; else printf(輸入錯(cuò)誤!請(qǐng)重新輸入n); void fansanjiao() .請(qǐng)選擇菜單上的選項(xiàng)n); flag=1; else if(b0=a&b1=r&b2=c&b3=c&b4=o&b5=s) c=convnum(b+6); printf(%s=%fn,b,acos(c); printf(Continue ); getchar(); d=getchar(); if(d=n|d=N) printf(已退出請(qǐng)選擇菜單上的選項(xiàng)n)
16、; flag=1; else if(b0=a&b1=r&b2=c&b3=t&b4=a&b5=n) c=convnum(b+6); printf(%s=%fn,b,atan(c); printf(Continue ); getchar(); d=getchar(); if(d=n|d=N) printf(已退出請(qǐng)選擇菜單上的選項(xiàng)n); flag=1; else if(b0=a&b1=r&b2=c&b3=c&b4=o&b5=t) c=convnum(b+6); printf(%s=%fn,b,atan(1/c); printf(Continue ); getchar(); d=getchar();
17、 if(d=n|d=N) printf(已退出請(qǐng)選擇菜單上的選項(xiàng)n); flag=1; else printf(輸入錯(cuò)誤!請(qǐng)重新輸入n); void jiecheng() int flag=0;char d;long x;for(;flag=0;)printf(求多少的階乘(直接輸入一個(gè)數(shù)):);scanf(%ld,&x); int num100000 = 1, len = 0, rem = 0, i, j; for(i = 2; i = x; i+) for(j = 0; j = 0; i-) printf(%d, numi); printf(nContinue ); getchar();
18、d=getchar(); if(d=n|d=N) printf(已退出請(qǐng)選擇菜單上的選項(xiàng)n); flag=1; void fangcheng() .請(qǐng)選擇菜單上的選項(xiàng)n); flag=1; void shexingjuzhen()int a,b,flag=0;char d;for(;flag=0;)printf(幾行幾列(x,x)n);scanf(%d,%d,&a,&b);int c100100=0,i,j,n=1;for(j=0;jb;j+)for(i=0;ia;i+)if(j%2=0)cij=n+;if(j%2!=0)cij=n+a-(i+1);if(i=a-1)n=n+a;for(i=0
19、;ia;i+)for(j=0;jb;j+)printf(%5d ,cij);printf(n); printf(nContinue );getchar();d=getchar();if(d=n|d=N)printf(已退出請(qǐng)選擇菜單上的選項(xiàng)n); flag=1;void juzhen() char choice;printf(1.輸出s形矩陣n);printf(2.輸出奇數(shù)魔方陣n);getchar();scanf(%c,&choice);switch(choice)case1:shexingjuzhen();break;case2:mofangzhen();break;default:pri
20、ntf(輸入錯(cuò)誤,請(qǐng)?jiān)俅屋斎雗);scanf(%c,&choice);int main() mciSendString(open sound/ alias mymusic_1, NULL, 0, NULL); /添加音樂(lè)mciSendString(play mymusic_1, NULL, 0, NULL); float x,y,z;char choice; printf( *歡迎使用*n);printf( *=本計(jì)算器功能菜單如下:=*n);printf( * 輸入a:轉(zhuǎn)化16以內(nèi)的任意進(jìn)制 輸入f:進(jìn)行正數(shù)的開根運(yùn)算*n); printf( * 輸入b:進(jìn)行三角函數(shù)運(yùn)算 輸入g:求前n項(xiàng)和 *n);printf( * 輸入c:進(jìn)行求余 輸入i:階乘運(yùn)算 *n); printf( * 輸入d:進(jìn)行
溫馨提示
- 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ù)網(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年大學(xué)試題(汽車專業(yè))-汽車文化歷年參考題庫(kù)含答案解析(5套典型考題)
- 2025年大學(xué)試題(工學(xué))-礦山工程技術(shù)歷年參考題庫(kù)含答案解析(5套典型考題)
- 2025年大學(xué)試題(大學(xué)選修課)-中國(guó)政治智慧歷年參考題庫(kù)含答案解析(5套典型考題)
- 2025年大學(xué)試題(醫(yī)學(xué))-骨科手術(shù)歷年參考題庫(kù)含答案解析(5套典型考題)
- 2025年大學(xué)試題(醫(yī)學(xué))-醫(yī)用化學(xué)基礎(chǔ)歷年參考題庫(kù)含答案解析(5套典型考題)
- 2025年大學(xué)試題(農(nóng)學(xué))-農(nóng)業(yè)政策學(xué)歷年參考題庫(kù)含答案解析(5套典型考題)
- 2025年國(guó)家開放大學(xué)(電大)-國(guó)家開放大學(xué)(學(xué)校心理健康教育)歷年參考題庫(kù)含答案解析(5套典型考題)
- 2025年衛(wèi)生資格(中初級(jí))-口腔醫(yī)學(xué)技術(shù)(主管技師)歷年參考題庫(kù)含答案解析(5套典型題)
- 2025年衛(wèi)生知識(shí)健康教育知識(shí)競(jìng)賽-全民健康知識(shí)競(jìng)賽歷年參考題庫(kù)含答案解析(5套典型考題)
- 2025年企業(yè)文化企業(yè)建設(shè)知識(shí)競(jìng)賽-信用電力網(wǎng)絡(luò)知識(shí)競(jìng)賽歷年參考題庫(kù)含答案解析(5套典型考題)
- 網(wǎng)絡(luò)工程工期承諾及安全保證措施
- VDA5測(cè)量系統(tǒng)分析培訓(xùn)
- 2024江西交通職業(yè)技術(shù)學(xué)院招聘筆試真題含答案詳解
- 新疆天河化工有限公司巴音郭楞蒙古自治州若羌縣年產(chǎn)2000噸現(xiàn)場(chǎng)混裝多孔粒狀銨油炸藥地面生產(chǎn)系統(tǒng)工程環(huán)境影響報(bào)告書
- 十五五智慧校園建設(shè)發(fā)展規(guī)劃
- 施工現(xiàn)場(chǎng)生態(tài)環(huán)境保護(hù)措施
- 2025屆上海市高考英語(yǔ)考綱詞匯表
- 運(yùn)動(dòng)隊(duì)訓(xùn)練計(jì)劃的大數(shù)據(jù)制定與優(yōu)化
- 大模型應(yīng)用大模型提示詞
- T/CCMA 0208-2024履帶式液壓振動(dòng)打樁機(jī)
- BIM模型標(biāo)準(zhǔn)資料
評(píng)論
0/150
提交評(píng)論