1. 程式人生 > >作業四—個人專案-小學四則運算 “軟體”之初版

作業四—個人專案-小學四則運算 “軟體”之初版

作業要求來源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186

github地址:https://github.com/huangzhipeng00/-

一、題目要求

像《構建之法》的人物阿超那樣,寫一個能自動生成小學四則運算題目的命令列 “軟體”。

具體要求:任何程式語言都可以,命令列程式接受一個數字輸入,然後輸出相應數目的四則運算題目和答案。例如輸入數字是 30, 那就輸出 30 道題目和答案。 運算式子必須至少有兩個運算子,運算數字是在 100 之內的正整數,答案不能是負數。 如:

23 - 3 * 4 = 11

擴充套件要求:

1) 要求能出和真分數 (二分之一, 十二分之五,等)相關的練習題。

2) 並且要求能處理使用者的輸入,並判斷對錯,打分統計。 要求能處理使用者輸入的真分數, 如 1/2, 5/12 等。


二、設計思路

程式語言:c語言

工具:

設計思路:主函式讓使用者輸入要練習的題目數量;而後隨機產生隨機數和隨即運算子併產生運算式;判別使用者輸入的結果是否與正確答案一致,提示輸入值是否正確,答題繼續。答題完畢後,統計錯對情況給出判別資料。

類。

三、主要程式碼

#include<stdio.h>

#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<windows.h>

float algorithm(float x,char op,float y);
float algorithm2(float x,char op2,float y);
char createnumberop();
void test1(int n);

main()
{
int chooce,n;

printf("歡迎來到四則運算練習題\n");
printf("(按回車鍵開始做題)\n");

 

getchar();

printf("\n請輸入四則運算的數目:");
while(1)
{
scanf("%d",&n);
if(n<=0)
printf("【數目有誤,請重新輸入!】\n");
else
break;
}

test1(n);


}

//第一個運算子計算
float algorithm(float x,char op,float y)
{
float result;
switch(op)
{
case'+':result = x + y;break;
case'-':result = x - y;break;
case'*':result = x * y;break;
case'/':result = x / y;break;
}
return result;
}
//第二個運算子計算
float algorithm2(float x,char op2,float y)
{
float result;
switch(op2)
{
case'+':result = x + y;break;
case'-':result = x - y;break;
case'*':result = x * y;break;
case'/':result = x / y;break;
}
return result;
}

//隨機產生運算子
char mark()
{
int op;
op=rand() % 4+1;
switch(op)
{
case 1:return'+';
case 2:return'-';
case 3:return'*';
case 4:return'/';
}
return 0;
}

//100以內四則運算
void test1(int n)
{
int i,rightnum=0,wrongnum=0;//rightnumber正確的個數,wrongnumber錯誤的個數
float a,b,c,answer,result;
char op,op2;//運算子
srand(time(NULL));
for(i=0;i<n;i++)
{
a=(float)(rand() % 100+1);//獲取隨機數
b=(float)(rand() % 100+1);
c=(float)(rand() % 100+1);
op=mark();//獲取隨機運算子
op2=mark();
if((op=='+' || op=='-') && (op2=='*' || op2=='/')){
result=algorithm(a,op,algorithm2(b,op2,c));
}
else{
result=algorithm2(algorithm(a,op,b),op2,c);//根據運算子優先順序得出結果
}
if(result< 0)//如果結果為非正數,則重新獲取題目
{
i--;
continue;
}
else{
printf("%.f %c %.f %c %.f = ",a,op,b,op2,c);
scanf("%f",&answer);

if((int)(100.0*answer+0.5)/100.0==(int)(100.0*result+0.5)/100.0 && result>=0)//四捨五入精確到小數點後兩位
{
printf("【回答正確!】\n\n");
rightnum++;
}
else
{
printf("【回答錯誤!答案是:%.2f】\n\n",(int)(100.0*result+0.5)/100.0);
wrongnum++;
}
}
}
printf("你總共答對了%d題,準確率為%.2f%!\n",n,rightnum,(float)rightnum/(float)n*100);
system("pause");
system("CLS");
printf("\n\n");
}

 

五、遇到的問題

很多簡單的函式都忘記怎麼拼了,沒有做到以前的筆記,在網上找了和問了同學解決問題


 六、個人軟體過程耗時估計與統計表

 

PSP2.1 Personal Software Process Stages Time Senior Student Time
Planning 計劃 5 15
 Estimate 估計這個任務需要多少時間 10 12
Development 開發 25 30
Analysis 需求分析 (包括學習新技術) 2 50
Design Spec 生成設計文件 4 5
Design Review 設計複審 3 3
Coding Standard 程式碼規範 1 1
 Design 具體設計 10 12
 Coding 具體編碼 10 50
Code Review 程式碼複審 2 2
Test 測試(自我測試,修改程式碼,提交修改) 1 1
Reporting 報告 3 3
  測試報告 1 1
  計算工作量 2 3
  並提出過程改進計劃 1 1

 

      好文要頂  關注我  收藏該文   

 


 六、個人軟體過程耗時估計與統計表

 

PSP2.1 Personal Software Process Stages Time Senior Student Time
Planning 計劃 5 15
 Estimate 估計這個任務需要多少時間 10 12
Development 開發 25 30
Analysis 需求分析 (包括學習新技術) 2 50
Design Spec 生成設計文件 4 5
Design Review 設計複審 3 3
Coding Standard 程式碼規範 1 1
 Design 具體設計 10 12
 Coding 具體編碼 10 50
Code Review 程式碼複審 2 2
Test 測試(自我測試,修改程式碼,提交修改) 1 1
Reporting 報告 3 3
  測試報告 1 1
  計算工作量 2 3
  並提出過程改進計劃 1 1