浙江大学-数据结构(陈越)-习题2.1 简单计算器
发布时间
阅读量:
阅读量
文章目录
- 一、原题展示
- 二、代码实现
一、原题展示
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。
- 输入格式:
输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。
- 输出格式:
在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。
- 输入样例:
1+2*10-10/2=
- 输出样例:
10
二、代码实现
#include<stdio.h>
int main()
{
char t = NULL;//暂存字符
int nums[2] = {0,0};//堆栈用于保存运算数字
int top = 0;//堆栈的顶
int tmp = 0;//暂存数值
char f[2]= {NULL,NULL};//队列用于保存运算符
bool con = true;//循环条件
while(con)
{
scanf("%c",&t);
if (top == 2)
{
switch (f[0])//进行运算
{
case '+':nums[0]=nums[0]+nums[1];break;
case '-':nums[0]=nums[0]-nums[1];break;
case '*':nums[0]=nums[0]*nums[1];break;
case '/':
{
if(nums[1]==0)//判断分母是否为零
{
printf("ERROR");
con = false;
}
else
nums[0]=nums[0]/nums[1];
}break;
default:{
printf("ERROR");
con = false;
}break;
}
f[0]=f[1];
f[1]=NULL;
--top;
}
if(f[0] == '=')//退出
break;
switch (t)
{
case '1':case '2':case '3':case '4':case '5':
case '6':case '7':case '8':case '9':case '0':
tmp = tmp*10 + (t-48) ;break;//存入数字
case '+':nums[top] = tmp;tmp = 0;f[top]='+';top++;break;
case '-':nums[top] = tmp;tmp = 0;f[top]='-';top++;break;
case '*':nums[top] = tmp;tmp = 0;f[top]='*';top++;break;
case '/':nums[top] = tmp;tmp = 0;f[top]='/';top++;break;
case '=':nums[top] = tmp;tmp = 0;f[top]='=';top++;break;
default:{
printf("ERROR");
con = false;
}break;
}
}
if(con)//正常结束打印结果
printf("%d",nums[0]);
return 0;
}
全部评论 (0)
还没有任何评论哟~
