四则运算

实现方式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);
}

测试

 

posted @ 2020-10-10 00:56  Mandy_liang  阅读(612)  评论(0)    收藏  举报