四则运算
实现方式:C语言
一、需求分析
可以采用任何编程语言,随机产生相应数目的四则运算题目和答案,含有两个运算符,运算数字是在 0~100 之内的数,如8-3*2=。
二、功能设计
1.命令行输入题目数量,产生具有三个操作数和两个运算符的四则运算
2.随机产生题目,避免重复;
3.运算的答案在规定的0~100范围内,不在范围内则重新出题;
4.对比用户的输入答案和正确答案,给出答复;
5.输出用户的总分数以及准确率。
三、详细设计
1.产生随机数,利用srand()函数和rand()函数来完成产生随机数的功能!

2.运算符号随机产生,所以利用switch()实现

3.考虑到要实现三个操作数和两个运算符的四则运算,可以一个一个运算符来算,则利用函数calculate()分两次实现两个运算符的四则运算。但根据乘法优先级别大于加减运算,所以要分情况考虑
a)第一个运算符为加减,第二个运算符也为加减,则顺序执行
b)第一个运算符为加减,第二个运算符为乘除,则先执行后一个运算,再将结果与前一个操作数做四则运算
c)如果第一个运算符为乘除,在无括号的情况下,不论第二个运算符是加减还是乘除,都顺序执行

4.用户输入结果与实际结果的判断,由于有除法运算,所以不能保证每次都没有余数,所以对于最终结果,只考虑整数部分,用户的输入结果整数部分和标准答案一样,就算用户回答正确。

四、编码
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
float calculate(float x,float y,char z)
{
float result=0.0;
switch(z)
{
case '+':
result=(float)x+(float)y;
break;
case '-':
result=(float)x-(float)y;
break;
case '*':
result=(float)x*(float)y;
break;
case '/':
result=(float)x/(float)y;
break;
}
return result;
}
void practice(int n)
{
int num1,num2,num3,a,b;//定义三个操作数
float result0,result,Result;//result0代表先执行的运算的结果,result代表最终执行的结果,Result代表输入的结果
int count=0;//代表答对的数量
float z=0.0;//代表答对的准确率
int i;
char op1,op2;//代表两个运算符
srand((unsigned)time(NULL));
for(i=0;i<n;i++)
{
num1=rand()%100+1;//第一个操作数为1~100的数
num2=rand()%100+1;//第二个操作数为1~100的数
num3=rand()%100+1;//第三个操作数为1~100的数
a=rand()%4+1;
b=rand()%4+1;
switch(a)//第一个运算符可能出现的四种情况
{
case 1:
op1='+';
break;
case 2:
op1='-';
break;
case 3:
op1='*';
break;
case 4:
op1='/';
break;
}
switch(b)//第二个运算符可能出现的四种情况
{
case 1:
op2='+';
break;
case 2:
op2='-';
break;
case 3:
op2='*';
break;
case 4:
op2='/';
break;
}
if(a==1||a==2)
if(b==1||b==2)//第一个运算符为加减,第二个运算符也为加减,则顺序执行
{
result0=calculate(num1,num2,op1);
result=calculate(result0,num3,op2);
}
else//第一个运算符为加减,第二个运算符也为乘除,则先执行乘除,再执行前面的加减
{
result0=calculate(num2,num3,op2);
result=calculate(num1,result0,op1);
}
else//如果第一个运算符为乘除,在无括号的情况下,不论第二个运算符是加减还是乘除,都顺序执行
{
result0=calculate(num1,num2,op1);
result=calculate(result0,num3,op2);
}
if(result<0||result>100)//结果超出范围重新出题
{
i--;
continue;
}
else
{
printf("(%d)",i+1);
printf("%d %c %d %c %d = ",num1,op1,num2,op2,num3);
scanf("%f",&Result);
if((int)(100*Result+0.5)/100==(int)(100*result+0.5)/100)
{
printf("回答正确\n");
count++;
}
else
{
printf("回答错误,正确答案是:%.2f\n",((100*Result+0.5)/100));
}
}
}
z=(float)count/(float)n*100;
printf("本次答题数目为%d,准确率为%.2f%!\n",n,z);
}
void main(){
int n;
printf("请输入题目数量:");
scanf("%d",&n);
practice(n);
}
五、测试


浙公网安备 33010602011771号