標籤:目的 運算子 random sof 基本 tin table process gets
Github項目地址:https://github.com/sumilekaedei/Myapp.git
題目:實現一個自動產生小學四則運算題目的命令列程式。
自然數:0, 1, 2, …。
- 真分數:1/2, 1/3, 2/3, 1/4, 1’1/2, …。
- 運算子:+, ?, ×, ÷。
- 括弧:(, )。
- 等號:=。
- 分隔字元:空格(用於四則運算子和等號前後)。
- 算術運算式:
e = n | e1 + e2 | e1 ? e2 | e1 × e2 | e1 ÷ e2 | (e),
其中e, e1和e2為運算式,n為自然數或真分數。
效能分析:分別對1、2、3個運算子的式子進行討論,列出其中可能出現的情況,對其中沒有提到出現的情況進行改進。
設計實現過程:其中又一個主函數和五個子函數構成,子函數間也會相互調用。主函數中,調用產生問題的函數,然後產生問題函數調用隨機函數和產生答案函數,產生答案的函數也會調用產生問題函數和輾轉相除的函數。
代碼說明:
#include <stdio.h>#include <time.h>#include <stdlib.h>#include <string.h>char getSignal()//運算子int random(int a)//隨機數 int gcd(int x,int y)//輾轉相除法 int answers(int y,int num,int num1,int num2,int num3,int num4,char signal1,char signal2,char signal3,int r)//產生答案 int question(int y,int r)//產生題目{ FILE *fp;//srand((unsigned)time(0)); int get; int num,num1,num2,num3,num4; char signal1,signal2,signal3; signal1=getSignal(); signal2=getSignal(); signal3=getSignal(); num1=random(r); num2=random(r); num3=random(r); num4=random(r); num=rand()%3+1; if(num==1) { answers(y,num,num1,num2,num3,num4,signal1,signal2,signal3,r); fp=fopen("Exercises.txt","a"); fprintf(fp,"題目%d:%d %c %d = \n",y,num1,signal1,num2); fclose(fp); } if(num==2) { answers(y,num,num1,num2,num3,num4,signal1,signal2,signal3,r); fp=fopen("Exercises.txt","a"); fprintf(fp,"題目%d:%d %c %d %c %d = \n",y,num1,signal1,num2,signal2,num3); fclose(fp); } if(num==3) { answers(y,num,num1,num2,num3,num4,signal1,signal2,signal3,r); fp=fopen("Exercises.txt","a"); fprintf(fp,"題目%d:%d %c %d %c %d %c %d = \n",y,num1,signal1,num2,signal2,num3,signal3,num4); fclose(fp); } return 0;} int main(){ srand((unsigned)time(0)); FILE *fp; fp=fopen("Exercises.txt","w"); fclose(fp); fp=fopen("Answers.txt","w"); fclose(fp); int n,r; int y=1; char argv1[3]; char argv2[3]; //n=10,r=10; scanf("%s",argv1);//-n scanf("%d",&n);; scanf("%s",argv2);//-r scanf("%d",&r); if(!strcmp(argv1,"-n")&&!strcmp(argv2,"-r")) { while(n>0) { question(y,r); y++; n--; } } else printf("輸入錯誤!"); return 0;}
測試回合:
PSP2.1表格:
PSP2.1 |
Personal Software Process Stages |
預估耗時(分鐘) |
實際耗時(分鐘) |
Planning |
計劃 |
|
|
· Estimate |
· 估計這個任務需要多少時間 |
720 |
2160 |
Development |
開發 |
|
|
· Analysis |
· 需求分析 (包括學習新技術) |
240 |
720 |
· Design Spec |
· 產生設計文檔 |
60 |
80 |
· Design Review |
· 設計複審 (和同事審核設計文檔) |
120 |
150 |
· Coding Standard |
· 代碼規範 (為目前的開發制定合適的規範) |
90 |
90 |
· Design |
· 具體設計 |
120 |
150 |
· Coding |
· 具體編碼 |
600 |
1440 |
· Code Review |
· 代碼複審 |
120 |
300 |
· Test |
· 測試(自我測試,修改代碼,提交修改) |
240 |
240 |
Reporting |
報告 |
|
|
· Test Report |
· 測試報告 |
30 |
30 |
· Size Measurement |
· 計算工作量 |
15 |
20 |
· Postmortem & Process Improvement Plan |
· 事後總結, 並提出流程改善計劃 |
30 |
30 |
合計 |
|
1665 |
3330 |
項目小結:這次的項目,開始看題目以為很簡單,但是到了實際做的時候,因為需求比較多,做起來非常困難,而且其中又很多自己原來沒有學會的做法。而且這個程式做的不太好,雖然勉強能實現準系統,但是括弧、題目中有真分數等功能沒有能實現,而且其中也有很多bug沒有得到有效解決。
實現一個自動產生小學四則運算題目的命令列程式