C数字表达式的计算

一、 基本要求

    1.输入输入提示要友好。

二、功能要求:

    1.从键盘输入一段表达式(字符串),其中含有整数、加、减、乘、除。

    2.计算表达式的值。

    3.事先约定表达式无括号、无浮点数、无负数、无错误。

输出样例:

1、1+20*3/8-5+16/2/1*5                      【无空格】

   结果:43.5

2、1 + 20 * 3 / 8 - 5 + 16 / 2 / 1 * 5      【有空格】

   结果:43.5

 

实现代码:

#include<stdio.h>
int main()
{
	char str[100] = { 0 };
	printf("请输入要计算的数字表达式:");
	gets(str);
	char* p = str;
	for (p = str; p <(str + 100); p++)
	{
		if(*p=='/'&&*(p+1)=='0')
		{
			printf("该数字表达式不合法\n");
			printf("请重新输入要计算的数字表达式:");
			gets(str);
		}
	}
	int len = 0;
	float temp = 0;
	int flag = 0;
	for (p = str; p < (str + 100); p++)//求字符串的长度
	{
		if (*p != '\0')
		{
			len++;
		}
	}
	float num[100] = { 0 };
	int count = 0;
	for (p = str; p <=(str + len); p++)//存数
	{
		if (*p >= '0' && *p <= '9')
		{
			flag = 1;
			temp *= 10;
			temp += *p - '0';
		}
		else//读到一个符号或字符串结束了
		{
			if (flag == 1)
			{
				num[count] = temp;
				flag = temp = 0;
				count++;
			}
		}
	}
	char sign[100] = { 0 };
	int signal = 0;
	for (p = str; p < (str + len); p++)
	{
		if (*p == '+' || *p == '-' || *p == '*' || *p == '/')
		{
			sign[signal] = *p;
			signal++;
		}
	}
	for (int i = 0; i <signal; i++)
	{
		if (sign[i] == '/')
		{
			num[i + 1] = num[i] / num[i+1];
			num[i] = 0;
			sign[i] = '0';
		}
		if (sign[i] == '*')
		{
			num[i + 1] = num[i] * num[i + 1];
			num[i] = 0;
			sign[i] = '0';
		}
	}
	float num2[100] = { 0 };
	int j = 0;
	for (int m = 0; m < 100; m++)
	{
		

		if (num[m] != 0)
		{
			num2[j] = num[m];
			j++;
		}
	}
	int count2 = j - 1;
	char sign2[100] = { 0 };
	int k = 0;
	for (int n = 0; n < 100; n++)
	{
		if (sign[n] == '+' || sign[n] == '-')
		{
			sign2[k] = sign[n];
			k++;
		}
	}
	int count3 = k - 1;

	for (int a = 0; a < k; a++)
	{
		if (sign2[a] == '-')
		{
			num2[a + 1] = num2[a] - num2[a + 1];
			num2[a] = 0;
		}
		if (sign2[a] == '+')
		{
			num2[a + 1] = num2[a] + num2[a + 1];
			num2[a] = 0;
		}
	}
	float sum = 0;
	for (int b = 0; b <=count; b++)
	{
		sum = sum + num2[b];
	}
	printf("%s的结果是:%.1f\n", str, sum);
	return 0;
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值