简单计算器 C语言实现

这篇博客讨论了一种解决数学表达式计算错误的算法,包括错误的思路和正确的处理方式。作者指出了在字符数组中直接进行数学运算的缺陷,并提出了将字符和数字分开输入的解决方案,同时处理了除数为零和非法字符的情况。代码实现部分展示了如何根据输入的字符和数字进行相应的四则运算。
摘要由CSDN通过智能技术生成

目录

一、题目描述

二、输入样例

三、输出样例

四、思路

1. 思路一(错误):

2. 思路二:

五、代码实现


一、题目描述

二、输入样例

1+2*10-10/2=

三、输出样例

10 

四、思路

1. 思路一(错误):

一开始的思路是想将所有的输入都存入字符数组a里

然后检索每一个元素

当元素a[i]不是数字时

进入switch结构对a[i-1]和a[i+1]进行相应操作

在进行加减乘除运算之前

需要对a[i-1]和a[i+1]进行字符转换成整型的操作

再将结果存入a[i+1]里面

直到检测到a[i]是=的时候输出a[i-1]

但是这有很大的问题

因为他是个字符数组

所以

a[i-1]=a[i-1]-'0';

a[i+1]=a[i+1]-'0';

a[i+1]=a[i-1]-a[i+1];

是有问题的

因为是个字符数组

他的本质还是个字符

他们的加减是不能直接得到整数的

2. 思路二:

第二种思路就是将

字符和数字分开输入

其实字符和数字的输入是有规律的

第一个输入是数字

存入整形数组a[0]中

第二个输入是字符ch

(进入字符循环)

(以输入'='为循环结束条件)

再在循环里输入要运算的数字

其他思路如上

还有要处理的细节问题是

细节问题1:

当字符ch=‘/’时

如果a[i]=0时

输出“ERROR”;

标记p=1

细节问题2:

当输入的字符不属于四则运算的字符时

标记p=1

最后输出时如果p!=1才会输出

否则会有问题

五、代码实现

#include<stdio.h>
int main()
{
	int a[100];
	int i=1,p=0;
	char ch;
	scanf("%d",&a[0]);
	while((ch=getchar())!='='){
		scanf("%d",&a[i]);
		switch(ch){
			case '+':a[i]=a[i-1]+a[i];break;
			case '-':a[i]=a[i-1]-a[i];break;
			case '*':a[i]=a[i-1]*a[i];break;
			case '/':
				if(a[i]==0){
					printf("ERROR");
					p=1;              //标记为1 否则会还是会输出
					break;
				}
				else{
					a[i]=a[i-1]/a[i];break;
				}
			default:
				printf("ERROR");
				p=1;                 //标记为1 否则会还是会输出
		} 
		i++;
	}
    if(ch=='='&&p==0)printf("%d",a[i-1]);
	return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值