用C语言编写任意四个数(不考虑括号)之间的运算程序,例如: a+b*c-d=

如题所述

用两个栈可以解决。

为+-*/各自确定一个“栈内优先级”和“栈外优先级”如下:

+/-:栈外2 栈内3
*/÷:栈外4 栈外5

每次取一个字符;

如果是数字,则放入数字栈;

如果是符号,则视情况决定现在是否放入符号栈:

如果我比栈顶的优先级高,那么我压进栈;

反之,就退出一个符号,两个数,进行运算之后,将结果放入数字栈,直到我能进去为止。

最开始在符号栈里放一个“#”,在表达式最后也输入一个“#”,#的栈内/栈外优先级都为0.

下面举个例子:1+2*3+4

1进数字栈;
+进符号栈;
2进数字栈;
*的优先级大,压进符号栈;
3进数字栈;
+要进栈,但是他优先级不够,于是退出*、3、2,算2*3,得6;放进数字栈;
+的优先级也不比+大,于是退出+、1、6,算1+6=7,放入数字栈;
这时候+才能进栈;
4进数字栈;
标记末尾的#要进栈,但是进不去,于是退出+,4,7,算4+7=11,进数字栈;
#可以进去了,运算完毕,最后数字栈里剩下的11就是结果。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-11-17
一下是我编写的程序,满足你的要求了,而且通过了vc6.0的调试了
#include<stdio.h>
#include<string.h>
void main()
{
char str[40]="";
double num[4]={0,0,0,0};
char cal[3]="";
int i=0,j=0,k=0,judge=1,l=0;
printf("输入一个公式:");
gets(str);
for(i=0;i<strlen(str);i++)
{
switch(*(str+i))
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
{
judge=0;
num[j]=num[j]*10+*(str+i)-'0';
}
break;
case '+':
case '-':
case '*':
case '/':
{
if(judge==1)
{
printf("输入格式错误,退出程序");
exit(1);
}
else
{
j++;
cal[k++]=*(str+i);
}
}
break;
case '=':
break;
default:
{
printf("输入格式错误,退出程序");
exit(1);
}
}
}
for(j=0,l=3;j<l;j++)
switch(*(cal+j))
{
case '*':
{
*(num+j)=*(num+j)*(*(num+j+1));
for(i=j;i<2;i++)
{
*(cal+i)=*(cal+i+1);
*(num+i+1)=*(num+i+2);
}
*(cal+i)=' ';
*(num+i+1)=0;
j--;
l--;
}
break;
case '/':
{
*(num+j)=*(num+j)/(*(num+j+1));
for(i=j;i<2;i++)
{
*(cal+i)=*(cal+i+1);
*(num+i+1)=*(num+i+2);
}
*(cal+i)=' ';
*(num+i+1)=0;
j--;
l--;
}
break;
default:
break;
}
for(j=0,l=3;j<l;j++)
switch(*(cal+j))
{
case '+':
{
*(num+j)=*(num+j)+(*(num+j+1));
for(i=j;i<2;i++)
{
*(cal+i)=*(cal+i+1);
*(num+i+1)=*(num+i+2);
}
*(cal+i)=' ';
*(num+i+1)=0;
j--;
l--;
}
break;
case '-':
{
*(num+j)=*(num+j)-(*(num+j+1));
for(i=j;i<2;i++)
{
*(cal+i)=*(cal+i+1);
*(num+i+1)=*(num+i+2);
}
*(cal+i)=' ';
*(num+i+1)=0;
j--;
l--;
}
break;
default:
break;
}
printf("%.1lf\n",num[0]);
}本回答被网友采纳
第2个回答  2010-11-17
你是想用穷举法来速算24吧?
用选择语句把所有可能的加减乘除的组合排列
然后遍历 如果符合 带回值
不符合 继续
应该很简单的
但是代码比较长吧!
你自己编吧
相信你能成功!

用C语言编写任意四个数(不考虑括号)之间的运算程序,例如: a+b*c-d=
4进数字栈;标记末尾的#要进栈,但是进不去,于是退出+,4,7,算4+7=11,进数字栈;可以进去了,运算完毕,最后数字栈里剩下的11就是结果。

c语言用switch编写一个简单的四则运算程序
int main(){double a,b,c;char op;scanf("%lf%c%lf",&a,&op,&b);switch(op){case '+': c=a+b; break;case '-': c=a-b; break;case '*': c=a*b; break;case '\/': if(b) c=a\/b;else {printf("除数不能为0!\\n"); return 0;} default:{printf("未知的运算符!...

c语言用switch编写一个简单的四则运算程序
int main(){ float fFloat1=.0,fFloat2=.0;char cOP=NULL;printf("请输入要进行四则运算表达式:\\n");scanf("%f%c%f",&fFloat1,&cOP,&fFloat2);switch(cOP){ case '+':printf("%f+%f=%f\\n",fFloat1,fFloat2,fFloat1+fFloat2);break;case '-':printf("%f-%f=%f\\n",fFloat...

用c语言编程:编写一个程序,输入4个数,求其平均值
程序代码如下:直接编译,程序输出结果中任意输入4个数字,程序执行结果如下图所示:

用C语言编写:4根水管A,B,C,D向一个水池注水,
以下是用C语言编写的解题代码,其中假设水池的容量为1:c include <stdio.h> int main() { float a = 1, b = 0, c = 0, d = 0; \/\/ 初始化每根水管注水的速率 int days = 0; \/\/ 初始化注水天数 while (a + b + c + d < 1) { \/\/ 水池没注满时循环 days++; \/\/ 天数加...

求C语言编程序,输入4个实数,求这4个数的和及平均值并输出。
\/*求C语言编程序,输入4个实数,求这4个数的和及平均值并输出。*\/ include<stdio.h> void main(){ float a,b,c,d;float sum=0,avg;printf("请输入这几个数(逗号隔开):\\n");scanf("%f,%f,%f,%f",&a,&b,&c,&d);sum=a+b+c+d;avg=sum\/4;printf("这4个数的和sum=%.2f\\...

C语言中的分数四则运算
continue;} i--;} if(x\/i==1) printf("%d\/%d%c%d\/%d=%d\\n",b,a,op,d,c,y);else printf("%d\/%d%c%d\/%d=%d\/%d.\\n",b,a,op,d,c,y,x);\/\/不明白你后面这里为什么会多出两个花括号。\/\/由于百度上不能空行,我也不猜测错误原因。你自己理解下。} \/\/程序运行无误 ...

用简单的c语言编写四则运算题
printf("欢迎进入四则运算题,现在开始爆发你的小宇宙吧!\\n");srand((unsigned int)time(NULL));while(1){ printf("请选择运算类型:1.加法 2.减法 3.乘法 4.除法(保留两位小数)\\n");scanf("%d",&choice);printf("请选择位数:1.一位数 2.两位数\\n");scanf("%d",&data);swit...

C语言编程,从键盘输入四个整数,按照数值从小到大顺序输出
int num[4];for(int i = 0 ; i < 4 ; i++){ scanf("%d", num+i);} for(int i = 0 ; i < 4 ; i++){ int k = i;for(int j = i+1 ; j < 4 ; j++){ if(num[k] > num[j]){ k = j;} } if(k != i){ int temp = num[k];num[k] = num[i];n...

C语言 四则运算程序 高手帮帮忙!!!
case 2:printf("欢迎来到减法运算测试系统,如需退出请输入9999\\n");fuhao='-';break;case 3:printf("欢迎来到乘法运算测试系统,如需退出请输入9999\\n");fuhao='*';break;case 4:printf("欢迎来到除法运算测试系统,如需退出请输入9999\\n");fuhao='\/';break;case 5:printf("本次测试愉快,...

相似回答
大家正在搜