天天看點

作業五—個人項目-國小四則運算 “軟體”之更新版 https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186

作業要求來源: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 等。

  1. 程式可以出帶括号的正整數四則運算,支援分數,除法保留兩位小數,如:(1/3+1)*2 = 2.67,特别注意:這裡是2.67而非2.66,或保持分數形式:8/3
  2. 可以出表達式裡含有負整數(負整數最小不小于-100)的題目,且負數需要帶括号,使用者輸入的結果不用帶括号。如: 2*(-4) = -8
  3. 使用者答題結束以後,程式可以顯示使用者答題所用的時間
  4. 使用者可以選擇出題的個數(最多不能超過5個題目),答題結束可以顯示使用者答錯的題目個數和答對的題目個數
  5. 使用者在第一次答題時,需要使用者輸入使用者名,使用者下次啟動後,程式需要記住使用者前一次輸入的使用者名 
  6. 程式可以出單個整數階乘的題目:如:4!=24
  7. 程式可以設定答題時間,時間設定為整數,機關為秒,最大不能超過120秒,若超過了答題時間未答題,則提示:時間已到,不能答題。
  8. 程式可以設定皮膚功能,可以改變界面的顔色即可。   

三、設計思路

程式設計語言: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;

system("color fc");

printf("歡迎來到四則運算練習題\n");

printf("(按Enter鍵開始做題)\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)

switch(op2)

//随機産生運算符

char mark()

int op;

op=rand() % 4+1;

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;

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");

五、遇到的問題

很多簡單的函數都忘記怎麼拼了,比上次更有難度,問了同學解決了等問題。