一、 基本要求
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;
}