重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#includestdio.h
成都创新互联成立于2013年,我们提供高端网站建设、成都网站制作、成都网站设计公司、网站定制、营销型网站、微信平台小程序开发、微信公众号开发、seo优化服务,提供专业营销思路、内容策划、视觉设计、程序开发来完成项目落地,为展览展示企业提供源源不断的流量和订单咨询。
#includemath.h
#includestdlib.h
#includetime.h
int moshi;
int count;
void plus(int first,int second)
{
int result;
printf("%d + %d =",first,second);
scanf("%d",result);
if(result == first+second)
{
printf("Right!\n");
}
else
{
printf("wrong!\nThe correct answer is:%d\n",first+second);
}
}
void minus(int first,int second)
{
int result;
printf("%d - %d =",first,second);
scanf("%d",result);
if(result == first-second)
{
printf("Right!\n");
}
else
{
printf("wrong!\nThe correct answer is:%d\n",first+second);
}}
void multiply(int first,int second)
{
int result; //运算结果
printf("%d * %d =",first,second);
scanf("%d",result);
if(result == first*second)
{
printf("Right!\n");
}
else
{
printf("wrong!\nThe correct answer is:%d\n",first*second);
}
}
void divide(int first,int second)
{
float result; //运算结果
float temp;
second = rand()%100;
printf("%d / %d =",first,second);
if(second==0)
{
printf("Error!\n");
return;
}
scanf("%f",result);
temp=result*100 - ((float)first/(float)second)*100;
if(abs(temp)0.01)
{
printf("Right!\n");
}
else
{
printf("wrong!\nThe correct answer is:%f\n",(float)first/(float)second);
}
}
int main()
{
printf("小提示:\n每种模式默认运行5次就得重新选择,中途退出直接按Ctrl+c!\n");
p: printf("请选择模式:\n\n");
printf("----------1:练习模式\n");
printf("----------2:计算模式\n");
count=0;
scanf("%d",moshi);
switch(moshi)
{
case 1:
{ int n;
int first,second;//保存两个运算的数字
while(true)
{
n=first%4; //除以4取余数,随机确定调用函数
srand(time(NULL));
first = rand()%100;
second = rand()%100;
if(count==5)
goto p;
switch(n)
{
case 0:
{
plus(first,second);
count++;
break;
}
case 1:
{
minus(first,second);
count++;
break;
}
case 2:
{
multiply(first,second);
count++;
break;
}
case 3:
{
divide(first,second);
count++;
break;
}
default:
{
count++;
break;
}
}//switch
}//while
}//case1
case 2:
{
int first,second;
char c,c1; //保存运算符
while(true)
{
scanf("%d%c%d%c",first,c,second,c1);
if(count==5)
goto p;
switch(c)
{
case '+':
{
printf("%d+%d=%d\n",first,second,first+second);
count++;
break;
}
case '-':
{
printf("%d-%d=%d\n",first,second,first-second);
count++;
break;
}
case '*':
{
printf("%d*%d=%d\n",first,second,first*second);
count++;
break;
}
case '/':
{
printf("%d/%d=%f\n",first,second,(float)first/(float)second);
count++;
break;
}
default:
{
count++;
break;
}
}//switch
}//while
}//case2
default:
{
break;
}
}
return 0;
}
1.判断四则运算字符串的括号是否匹配,可以用以个栈来计算,开始栈是空,从头遍历所有字符,找到'(',压栈,找到')'弹出一个元素,遍历完成以后如果栈是空表示正常,非空,或则中间出现问题都表示括号不正常。
2.分解四则运算中的所有元素,把所有分解的元素放在队列中,遍历整个字符串,有switch分支,如果是0-9的字符用一个字符串存储并和前面的字符组合起来,如果是'+''-''*''/'就把前面存储数字的字符串当成一个元素放进队列,并把当前运算法符当成一个元素也放进队列,遍历完成以后所有的数据和运算符都分开了,比如234+456,会分解成234,+,456三个元素。
3.然后分解队列,用两个栈,一个存放所有元素用A表示,一个存放运算符号用B表示(这个是临时变量),从头开始遍历整个队列,如果是数据就把数据压到A栈。如果元素是运算符就分开处理,如果是'(''+''-''*''/'')'处理方法都不一样,详细说明太复杂,整体的思想就是把数据和运算符的顺序排列好(上面的元素排列以后变成234,456,+;可以参考后序排列)。
4.计算:依次弹出A中的元素,如果是数据把数据压在栈C中,如果是运算符,从C中弹出该运算符需要的数据,然后把计算结果再次压进栈C,当A遍历完以后,C顶元素就是计算结果。
整个大题思路:1.检查,2.分解,3.中序排列,4.后序排列,5.计算
C语言实现任意两个数的四则运算的方法:
1、阅读代码,使用了随机函数:srand(unsigned( time(NULL)));通过调用随机函数,将生成的100以内的随机整数赋给不同的变量,一部分用于四则运算式数据的来源,而赋给变量c的随机数则用于结合switch语句控制程序跳转执行 不同的分支,即不同的四则运算,如下:
c = rand() % 5; //随机产生小于5的非负整数
switch (c)
case 0:
case 1:
...........
case 5:
2、使用while语句控制除数不为0
while (b == 0)
{
b = rand() % 1; //若b=0则重新生成b,直到b不为0
}
3、使用if语句判断减数与被减数的大小。
if (a b) //使ab
{
d = a;
a = b;
b = d;
}
if (m n) //使mn
{
d = m;
m = n;
n = d;
}
通过if判断并赋值的手段保证结果不出现负数
4、 原代码仅能一次性生成20个随机的四则运算式,而无法从键盘输入结果并判断答案正确与否。
5、修改代码。由于原代码无法从键盘读入数据,所以对其进行了改进。
(1)增加键盘读入功能
scanf("%d",x);
从键盘读入输入的答案
(2)对答案进行正确与否的判断
if(x == (a+b))
printf("You are right!\n");
else
printf("You are wrong!\n");
通过比较输入答案与运算得出的答案告知用户计算是否正确。
6、上传源代码至GitHub。