1. 程式人生 > >自己做一個計算器

自己做一個計算器

#第零版 ``` #include int main() { double tot,i,j; char ch; printf("請輸入第一個數:") ; scanf("%f",&i); printf("請輸入運算子;"); scanf("%c",&ch); printf("請輸入第二個數:") ; scanf("%f",&j); if(ch=='+') { tot=i+j; }else if(ch=='-'){ tot=i-j; }else if(ch=='*'){ tot=i*j; }else if(ch=='/'){ tot=i/j; } printf("%f",tot); return 0; } ``` #第一版 ``` #include int main() { int sum,j; printf("請輸入第1個數:") ; scanf("%d",&sum); char ch; int t; for(t=2;getchar()!='=';t++){ printf("請輸入運算子以及第%d個數:",t); ch=getchar(); scanf("%d",&j); switch(ch){ case'+':sum+=j;break; case'-':sum-=j;break; case'*':sum*=j;break; case'/':sum/=j;break; } printf("%d\n",sum); } printf("%d",sum); return 0; } ``` #第二版 2020.3.20 14:36更新第二版(加入了選單,優化了介面,但是選項只可用兩個) ``` #include #include //用於getch()讀取使用者輸入的按鍵 #include//用於清理螢幕 int main() { //多次運算多組資料 do{ //選單 printf("---------------------選單--------------------\n") ; printf("↑:加減乘除 \n") ; printf("Esc:退出 \n") ; printf("Home:設定 \n") ; printf("---------------------------------------------\n") ; //判斷使用者輸入選項 char userput; userput=getch();//第一次調取 ,之後的if是第二次調取,實際值 //加減乘除運算 if(userput==72) { printf("---------------------------------------------\n"); printf("| 加減乘除模式 |\n"); printf("---------------------------------------------\n"); int sum,j; printf("請輸入第1個數:") ; scanf("%d",&sum); char ch; int t; //多次輸入計算單組資料 for(t=2;getchar()!='=';t++){//t的作用是為下面提示輸入第幾個數 //獲取使用者輸入的運算子以及第幾個數 printf("請輸入運算子及第%d個數(如:+8,如果結束運算請輸入==):",t); ch=getchar(); scanf("%d",&j); //判斷運算子,做出對應運算 switch(ch){ case'+':sum+=j;break; case'-':sum-=j;break; case'*':sum*=j;break; case'/':sum/=j;break; } printf("本次計算結果=%d\n",sum); } //printf("最終結果=%d",sum); } //退出程式 else if(userput==27) { printf("---------------------------------------------\n"); printf("| 退出程式 |\n"); printf("---------------------------------------------\n"); break; } //為了讓佈局美觀,每次算完之後清空螢幕 ,用到了標頭檔案#include system("cls") ; }while(1); return 0; } ``` #第三版 ``` #include #include //用於getch()讀取使用者輸入的按鍵 #include//用於清理螢幕 int main() { int set;//用於設定選項卡,放在外面的原因是讓每一次迴圈都可以用到,而不改變set的值,以免影響下一次迴圈 int point=2;//用於設定選項卡,對於輸出的數保留n位小數 ,預設保留兩位小數 //多次運算多組資料 do{ //選單 printf("---------------------選單--------------------\n") ; printf("↑:加減乘除 \n") ; printf("Esc:退出 \n") ; printf("Home:設定 \n") ; printf("---------------------------------------------\n") ; //判斷使用者輸入選項 char userput; userput=getch();//第一次調取 ,之後的if是第二次調取,實際值 //加減乘除運算 if(userput==72)//72表示使用者輸入上箭頭 { printf("---------------------------------------------\n"); printf("| 加減乘除模式 |\n"); printf("---------------------------------------------\n"); double sum,j; printf("請輸入第1個數:") ; scanf("%lf",&sum); char ch; int t; //多次輸入計算單組資料 for(t=2;getchar()!='=';t++){//t的作用是為下面提示輸入第幾個數 //獲取使用者輸入的運算子以及第幾個數 printf("請輸入運算子及第%d個數(如:+8,以==退出):",t); ch=getchar(); scanf("%lf",&j); //判斷運算子,做出對應運算 switch(ch){ case'+':sum+=j;break; case'-':sum-=j;break; case'*':sum*=j;break; case'/':sum/=j;break; } printf("本次計算結果=%.*lf\n",point,sum); } } //退出程式 else if(userput==27) { printf("---------------------------------------------\n"); printf("| 退出程式 |\n"); printf("---------------------------------------------\n"); break; } //設定選項卡 //判斷區 else if(userput==71) { printf("---------------------------------------------\n"); printf("| 設定 |\n"); printf("|1.重新整理螢幕 |\n"); printf("|2.保留小數 |\n"); printf("---------------------------------------------\n"); int setin; char setchoose; printf("請輸入數字以進入選項:") ; scanf("%d",&setin); //1.重新整理螢幕 if(setin==1) { printf("是否關閉重新整理螢幕[y/n]:"); scanf("%c",&setchoose); if(setchoose=='y'){ set=1; } else{ set=0; } } //2.保留小數 if(setin==2) { printf("你希望保留幾位小數?:"); scanf("%d",&point);//這裡不需要經過執行區 } } //執行區 if(set==1)//選擇的是弄yes { } else//選擇的是no { //為了讓佈局美觀,每次算完之後清空螢幕 ,用到了標頭檔案#include system("cls") ; } }while(1); return 0; } ``` #第四版 2020.3.20 20:04 更新第三版:優化了加減乘除(可以進行小數運算,多虧了%lf); 加入了十進位制轉換其他進位制模式; 加入了設定,可以選擇是否關閉“重新整理螢幕”;可以選擇保留幾位小數 進位制轉換.png ``` #include #include //用於getch()讀取使用者輸入的按鍵 #include//用於清理螢幕 int main() { int set;//用於設定選項卡,放在外面的原因是讓每一次迴圈都可以用到,而不改變set的值,以免影響下一次迴圈 int point=2;//用於設定選項卡,對於輸出的數保留n位小數 ,預設保留兩位小數 double i,j,k,sum,num,left;//參與計算:加減乘除,進位制轉換 int ip,jp,kp,sump,nump,leftp;//參與計算:加減乘除,進位制轉換 //多次運算多組資料 do{ //選單 printf("---------------------選單--------------------\n") ; printf("↑:加減乘除 \n") ; printf("↓:進位制轉換 \n") ; printf("Esc:退出 \n") ; printf("Home:設定 \n") ; printf("---------------------------------------------\n") ; //判斷使用者輸入選項 char userput; userput=getch();//第一次調取 ,之後的if是第二次調取,實際值 //加減乘除運算 if(userput==72)//72表示使用者輸入上箭頭 { printf("---------------------------------------------\n"); printf("| 加減乘除模式 |\n"); printf("---------------------------------------------\n"); double sum; printf("請輸入第1個數:") ; scanf("%lf",&sum); char ch; int t; //多次輸入計算單組資料 for(t=2;getchar()!='=';t++){//t的作用是為下面提示輸入第幾個數 //獲取使用者輸入的運算子以及第幾個數 printf("請輸入運算子及第%d個數(如:+8,以==退出):",t); ch=getchar(); scanf("%lf",&j); //判斷運算子,做出對應運算 switch(ch){ case'+':sum+=j;break; case'-':sum-=j;break; case'*':sum*=j;break; case'/':sum/=j;break; } printf("%lf%c%lf=%.*lf\n",sum,ch,j,point,sum); } } //進位制轉換 else if(userput==80) { printf("---------------------------------------------\n"); printf("| 進位制轉換模式 |\n"); printf("---------------------------------------------\n"); do{ printf("請輸入你要轉換的十進位制整數:"); scanf("%d",&ip); printf("你想轉換成___進位制:"); scanf("%d",&jp); //處理資料 kp=ip;//暫存IP的數值,下面要對他分解 sump=0;//初始總和=0 for(nump=1;ip>0;nump*=10) { leftp=ip%jp;//取餘 ip/=jp;//取整 sump+=nump*leftp;//倒序相加 } ip=kp;//IP換回原來值 printf("%d的%d進位制數是%d\n",ip,jp,sump); printf("按下任意鍵繼續(Esc退出)\n");//借用退出程式的功能 userput=getch(); }while(userput!=27); } //退出程式 else if(userput==27) { printf("---------------------------------------------\n"); printf("| 退出程式 |\n"); printf("---------------------------------------------\n"); break; } //設定選項卡 //判斷區 else if(userput==71) { printf("---------------------------------------------\n"); printf("| 設定 |\n"); printf("|1.重新整理螢幕 |\n"); printf("|2.保留小數 |\n"); printf("---------------------------------------------\n"); int setin; char setchoose; printf("請輸入數字以進入選項:") ; scanf("%d",&setin); //1.重新整理螢幕 if(setin==1) { printf("是否關閉重新整理螢幕[y/n]:"); scanf(" %c",&setchoose);//考慮到scanf的讀取,上一個scanf結尾是\n,在進行這個scanf的時候把\n算在%c裡面,一定要加一個空格 if(setchoose=='y'){ set=1; } else{ set=0; } } //2.保留小數 else if(setin==2) { printf("你希望保留幾位小數?:"); scanf("%d",&point);//這裡不需要經過執行區 } } //執行區 if(set==1)//選擇的是弄yes { printf("修改成功\n"); } else//選擇的是no { //為了讓佈局美觀,每次算完之後清空螢幕 ,用到了標頭檔案#include system("cls") ; } }while(1); return 0