作业四:四则运算
一、需求分析
任何編程語言都可以,命令行程序接受一個(gè)數(shù)字輸入,然后輸出相應(yīng)數(shù)目的四則運(yùn)算題目和答案。例如輸入數(shù)字是 30, 那就輸出 30 道題目和答案。 運(yùn)算式子必須至少有兩個(gè)運(yùn)算符,運(yùn)算數(shù)字是在 100 之內(nèi)的正整數(shù),答案不能是負(fù)數(shù)。 如:23 - 3 * 4 = 11。
統(tǒng)計(jì)用戶共答對多少道題。
?
二、功能設(shè)計(jì)
?
?
三、詳細(xì)設(shè)計(jì)
? 隨機(jī)產(chǎn)生三個(gè)100以內(nèi)的正整數(shù)和四個(gè)分別用“1”-“4”代表+,-,*,/運(yùn)算符號,通過對四則運(yùn)算中乘除和加減的優(yōu)先級別判斷:先乘除后加減,在計(jì)算函數(shù)中遍歷運(yùn)算符數(shù)組中乘除符號后進(jìn)行優(yōu)先計(jì)算,之后再對乘除計(jì)算之后的運(yùn)算數(shù)進(jìn)行相加減運(yùn)算。
遇到當(dāng)隨機(jī)產(chǎn)生的正整數(shù)運(yùn)算題計(jì)算結(jié)果為負(fù)數(shù)時(shí),遞歸重新生成運(yùn)算題,直至結(jié)果是大于零時(shí)所產(chǎn)生的題目打印在控制臺(tái)上,用戶輸入答案,答案與結(jié)果匹配正確即累加正確題數(shù),錯(cuò)誤的輸出打印正確結(jié)果,當(dāng)全部運(yùn)算題做完后輸出統(tǒng)計(jì)結(jié)果。
代碼實(shí)現(xiàn):
int random(double start, double end)//獲取隨機(jī)數(shù)函數(shù) {return (int)(start+(end-start)*rand()/(RAND_MAX+1.0)); }char getSignala()//獲取隨機(jī)運(yùn)算符函數(shù) {int a;char signal1[4]={'+','-','*','/'};srand((unsigned)time(NULL));a = rand()%4;return signal1[a]; } char getSignalb()//獲取隨機(jī)運(yùn)算符函數(shù) {int b;char signal2[4]={'+','-','*','/'};srand((unsigned)time(NULL));b = rand()%4;return signal2[b]; } int getResult(int num1,int num2,int num3,char signal1,char signal2)//結(jié)果計(jì)算函數(shù) {int i=0,res;if(signal1=='+'){if(signal2=='+'){res=num1+num2+num3;}if(signal2=='-'){res=num1+num2-num3;}if(signal2=='*'){res=num2*num3+num1;}if(signal2=='/'){res=num2/num3+num1;}}if(signal1=='-'){if(signal2=='+'){res=num1-num2+num3;}if(signal2=='-'){res=num1-num2-num3;}if(signal2=='*'){res=num2*num3-num1;}if(signal2=='/'){res=num2/num3-num1;}}if(signal1=='*'){if(signal2=='+'){res=num1*num2+num3;}if(signal2=='-'){res=num1*num2-num3;}if(signal2=='*'){res=num2*num3*num1;}if(signal2=='/'){res=num2/num3*num1;}}if(signal1=='/'){if(signal2=='+'){res=num1/num2+num3;}if(signal2=='-'){res=num1/num2-num3;}if(signal2=='*'){res=num2*num3/num1;}if(signal2=='/'){res=num2/num3/num1;}}return res; }int takeTest()//題目生成函數(shù) {int get;int num1,num2,num3,a;char signal1,signal2;srand((unsigned)time(NULL));signal1=getSignala();srand((unsigned)time(NULL));signal2=getSignalb();num1=random(1,100);num2=random(0,100);num3=random(1,100); if(signal1=='-'){if(num1<num2){int temp;temp=num1;num1=num2;num2=temp;}}if(signal1=='/'){if(num2==0){int temp;temp=num1;num1=num2;num2=temp;}}printf("%d%c%d%c%d=",num1,signal1,num2,signal2,num3);scanf("%d",&get);fflush(stdin); //清空輸入緩沖區(qū)if(getResult(num1,num2,num3,signal1,signal2)==get){printf("回答正確!\n");a=1;}else{printf("I回答錯(cuò)誤!\n");printf("正確答案是: %d\n",getResult(num1,num2,num3,signal1,signal2));a=0;}return a; }void main() {int n,a,right=0,i=0;double percent;printf("請選擇問題數(shù)目:");scanf("%d",&n);for(i;i<n;i++){a=takeTest();right=right+a;}printf("回答完畢!\n");printf("回答正確數(shù)量:%d\n",right);percent=((double)right*100.00)/(double)n;printf("正確率:%0.2f %%\n",percent); }四、運(yùn)行結(jié)果
五、問題及解決辦法
? 問題:不知道如何做到答案不為負(fù)數(shù)的問題。有時(shí)候會(huì)出現(xiàn)負(fù)數(shù)的情況,還有我的運(yùn)算符也沒有做到不同。
六、過程耗時(shí)估計(jì)與統(tǒng)計(jì)表
| PSP2.1 | Personal Software Process Stages | 預(yù)計(jì)時(shí)間(分鐘) | 實(shí)際時(shí)間(分鐘) |
| Planning | 計(jì)劃 | ?20 | ?30 |
| · Estimate | 估計(jì)這個(gè)任務(wù)需要多少時(shí)間 | ?180 | 180 |
| Development | 開發(fā) | ?120 | 2000 |
| · Analysis | 需求分析 (包括學(xué)習(xí)新技術(shù)) | ?20 | ?20 |
| · Design Spec | 生成設(shè)計(jì)文檔 | ?10 | ?20 |
| · Design Review | 設(shè)計(jì)復(fù)審 | ?10 | ?10 |
| · Coding Standard | 代碼規(guī)范 | ?10 | ?10 |
| · Design | 具體設(shè)計(jì) | ?30 | ?30 |
| · Coding | 具體編碼 | ?120 | ?180 |
| · Code Review | 代碼復(fù)審 | ?30 | ?20 |
| · Test | 測試(自我測試,修改代碼,提交修改) | ?60 | ?120 |
| Reporting | 報(bào)告 | ?30 | ?30 |
| · | 測試報(bào)告 | ?10 | ?10 |
| · | 計(jì)算工作量 | ?10 | ?10 |
| · | 并提出過程改進(jìn)計(jì)劃 | ?10 | ?10 |
轉(zhuǎn)載于:https://www.cnblogs.com/hjlaaa/p/9790361.html
總結(jié)