博客班級 | 軟件工程app |
---|---|
做業要求 | 做業要求 |
做業目標 | 你理解的做業目標具體內容 |
學號 | 3180701218 |
寫一個能自動生成小學四則運算題目的程序,而後在此基礎上擴展:
1)除了整數之外,還要支持真分數的四則運算,例如:1/6+1/8=7/24
2)程序要求能處理用戶的輸入,判斷對錯,累積分數
3)程序支持能夠由用戶自行選擇加、減、乘、除運算
4)使用-n參數控制生成題目的個數,例如Myapp.exe -n 10,將生成10個題目ide
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> #include<math.h> #define EPSILON 0.000001 //根據精度須要 int N=0; int n=0;//用戶輸入搜題數目n int m=0;//選擇搜題種類 void huajian(int *p,int *q)//化簡爲真分數 { int i; for(i=*p;i>=1;i--) { if(((*p)%i==0)&&((*q)%i==0)) { (*p)=(*p)/i; (*q)=(*q)/i; } } } void input()//用戶輸入搜題數目n,選擇搜題種類 { printf("*———————————*\n"); printf("| 四則運算生成器 |\n"); printf("*———————————*\n"); printf("| 1.加法 |\n"); printf("| 2.減法 |\n"); printf("| 3.乘法 |\n"); printf("| 4.除法 |\n"); printf("| 5.結束 |\n"); printf("| 無限小數保留6位小數 |\n"); printf("*———————————*\n"); printf("請輸入搜題種類:\n"); scanf("%d",&m); } void addtion()//加法 { int i,j; printf("1.整數運算or2.真分數運算\n"); scanf("%d",&j); srand(time(NULL)); if(j==1) { for(i=0;i<n;i++) { int a,b,c,d; a=rand()%N; b=rand()%N; c=a+b; printf("%d+%d=",a,b); scanf("%d",&d); if(d==c)printf("運算正確!\n"); else printf("運算錯誤!正確答案是%d\n",c); } } else for(i=0;i<n;i++) { int a,b; int a1,b1; float c,d; while(1) { a=rand()%N; b=rand()%N; a1=rand()%N; b1=rand()%N; if(b1!=0&&b!=0&&a!=0&&a1!=0&&a!=b&&a1!=b1) break; } huajian(&a,&b); huajian(&a1,&b1); c=a/(b*1.0)+a1/(b1*1.0); printf("%d/%d+%d/%d=",a,b,a1,b1); scanf("%f",&d); if(fabs(d-c)<EPSILON) printf("運算正確!\n"); else printf("運算錯誤!正確答案是%f\n",c); } }; void subtract()//減法 { int i,j; printf("1.整數運算or2.真分數運算\n"); scanf("%d",&j); srand(time(NULL)); if(j==1) { for(i=0;i<n;i++) { int a,b,c,d; a=rand()%N; b=rand()%N; c=a-b; printf("%d-%d=",a,b); scanf("%d",&d); if(d==c)printf("運算正確!\n"); else printf("運算錯誤!正確答案是%d\n",c); } } else for(i=0;i<n;i++) { int a,b; int a1,b1; float c,d; while(1) { a=rand()%N; b=rand()%N; a1=rand()%N; b1=rand()%N; if(b1!=0&&b!=0&&a!=0&&a1!=0&&a!=b&&a1!=b1) break; } huajian(&a,&b); huajian(&a1,&b1); c=a/(b*1.0)-a1/(b1*1.0); printf("%d/%d-%d/%d=",a,b,a1,b1); scanf("%f",&d); if(fabs(d-c)<EPSILON) printf("運算正確!\n"); else printf("運算錯誤!正確答案是%f\n",c); } }; void multiply()//乘法 { int i,j; printf("1.整數運算or2.真分數運算\n"); scanf("%d",&j); srand(time(NULL)); if(j==1) { for(i=0;i<n;i++) { int a,b,c,d; a=rand()%N; b=rand()%N; c=a*b; printf("%d*%d=",a,b); scanf("%f",&d); if(d==c)printf("運算正確!\n"); else printf("運算錯誤!正確答案是%d\n",c); } } else for(i=0;i<n;i++) { int a,b; int a1,b1; float c,d; while(1) { a=rand()%N; b=rand()%N; a1=rand()%N; b1=rand()%N; if(b1!=0&&b!=0&&a!=0&&a1!=0&&a!=b&&a1!=b1) break; } huajian(&a,&b); huajian(&a1,&b1); c=a/(b*1.0)*a1/(b1*1.0); printf("%d/%d*%d/%d=",a,b,a1,b1); scanf("%f",&d); if(fabs(d-c)<EPSILON) printf("運算正確!\n"); else printf("運算錯誤!正確答案是%f\n",c); } }; void divide()//除法【小數大小判斷不許確】 { int i,j; printf("1.整數運算or2.真分數運算\n"); scanf("%d",&j); srand(time(NULL)); if(j==1) { for(i=0;i<n;i++) { int a,b,c,d; a=rand()%N; b=rand()%N; c=a/b; printf("%d/%d=",a,b); scanf("%f",&d); if(d==c)printf("運算正確!\n"); else printf("運算錯誤!正確答案是%d\n",c); } } else for(i=0;i<n;i++) { int a,b; int a1,b1; float c,d; while(1) { a=rand()%N; b=rand()%N; a1=rand()%N; b1=rand()%N; if(b1!=0&&b!=0&&a!=0&&a1!=0&&a!=b&&a1!=b1) break; } huajian(&a,&b); huajian(&a1,&b1); c=a/(b*1.0)/(a1/(b1*1.0)); printf("(%d/%d)/(%d/%d)=",a,b,a1,b1); scanf("%f",&d); if(fabs(d-c)<EPSILON) printf("運算正確!\n"); else printf("運算錯誤!正確答案是%f\n",c); } }; int main() { printf("想練習多大數之內的運算題目:\n"); scanf("%d",&N); while(1) { input(); switch(m) { case 1: printf("請輸入搜題數目:\n"); scanf("%d",&n); addtion(); break; case 2: printf("請輸入搜題數目:\n"); scanf("%d",&n); subtract(); break; case 3: printf("請輸入搜題數目:\n"); scanf("%d",&n); multiply(); break; case 4: printf("請輸入搜題數目:\n"); scanf("%d",&n); divide(); break; case 5: printf("謝謝使用!:\n"); return 0; default: printf("輸入指令有誤,請從新輸入!\n"); break; } } return 0; };
psp2.1 | 任務內容 | 計劃完成須要的時間(min) | 實際完成須要的時間(min) |
Planning | 計劃 | 10 | 8 |
Estimate | 估計這個任務須要多少時間, 並規劃大體工做步驟 |
10 | 12 |
Development | 開發 | 100 | 150 |
Analysis | 需求分析(包括學習新技術) | 12 | 5 |
Design Spec | 生成設計文檔 | 5 | 5 |
Design Review | 設計複審 | 5 | 5 |
Coding Standard | 代碼規範 | 3 | 2 |
Design | 具體設計 | 10 | 12 |
Coding | 具體編碼 | 36 | 21 |
Code Review | 代碼複審 | 5 | 7 |
Test | 測試(自我測試,修改代碼,提交修改) | 10 | 15 |
Reporting | 報告 | 9 | 6 |
Test Report | 測試報告 | 3 | 2 |
Size Measurement | 計算工做量 | 2 | 1 |
Postmortem & Process Improvement Plan | 過後總結,並提出過程改進計劃 | 3 | 3 |
剛看到這個題目時,我以爲很簡單,只須要利用隨機數就能夠了,可是實現過程卻遇到了不少困難,尤爲是實現真分數運算。該系統將分數轉化爲小數,經過兩個分數差的絕對值與一個很小量比較判斷大小,所以會產生誤判,而且用戶只能輸入小數才能被系統識別。例如1/3+3/7=?正確答案是16/21。可是用戶只能輸入小數,且保留小數點後6位。這樣,用戶輸入不方便,並且系統可能會誤判。學習