帮帮小弟~求一个简单的C语言程序
要求随便输入个加减乘除的式子,不带括号,能的出结果谢谢各位了~
搜索更多相关的解决方案:
C语言
----------------解决方案--------------------------------------------------------
#include "stdio.h"
main()
{int a,b;
char c;
float d;
printf("请输入你要计算的计算式子(X+X=):");
scanf("%d%c%d=",&a,&c,&b);
switch (c)
{case '+': d=a+b;printf("%d%c%d=%f\n",a,c,b,d);break;
case '-': d=a-b;printf("%d%c%d=%f\n",a,c,b,d);break;
case '*': d=a*b;printf("%d%c%d=%f\n",a,c,b,d);break;
case '/': d=a/(float)b;{if(b==0)
printf("对不起,除数分母不能为零。\n");
else
printf("%d%c%d=%f\n",a,c,b,d);
}
}
}
不知道你所说的任意输入的加减乘除的式子是不是x+y这种形式的,还是x+y-c/b类似于这种形式的,有很多的变量
----------------解决方案--------------------------------------------------------
就是x+y-c/b类似于这种形式,不要括号的
谢谢各位,小弟急用的!
----------------解决方案--------------------------------------------------------
我前几天写的..带括号的...不带括号也能算
#include<stdio.h>#include<stdlib.h>
#include <ctype.h>
#define Stack_Size 50
typedef struct
{
char elem[Stack_Size];
int top;
}OpStack;
typedef struct
{
int elem[Stack_Size];
int top;
}NumStack;
void Push(OpStack *s,char x);
void Pop(OpStack *s,char *x);
void Push(NumStack *s,int x);
void Pop(NumStack *s,int *x);
int Execute(int a,char c,int b);
int ExpEvaluation(NumStack *OVS,OpStack *OPTR);
void GetNumber(char p);
int Cint(char mychar);
int num=0;
void main()
{
int result;
OpStack OPTR;
NumStack OVS;
OVS.top=-1;OPTR.top=-1;
result=ExpEvaluation(&OVS,&OPTR);
printf("The result is %d\n",result);
}
void Push(OpStack *s,char x)
{
s->top++;
s->elem[s->top]=x;
}
void Pop(OpStack *s,char *x)
{
*x=s->elem[s->top];
s->top--;
}
void Push(NumStack *s,int x)
{
s->top++;
s->elem[s->top]=x;
}
void Pop(NumStack *s,int *x)
{
*x=s->elem[s->top];
s->top--;
}
int Execute(int a,char c,int b)
{
switch(c)
{
case '+':return a+b;break;
case '-':return a-b;break;
case '*':;return a*b;break;
case '/':return a/b;break;
}
}
void GetNumber(char p)
{
num=num*10+Cint(p);
}
int Cint(char mychar)
{
return (mychar-48);
}
//栈运算符与读入运算符优先级的比较
char Compare(char x,char y)
{
char priority='<';
switch(x)
{
case '+':
case '-':if(y=='#'||y=='+'||y=='-'||y==')')priority='>';break;
case '*':
case '/': priority='>';if(y=='(' )priority='<';break;
case '(':if(y==')')priority='=';break;
case '#':if(y=='#') priority='=';break;
default:priority='E';
}
return priority;
}
int ExpEvaluation(NumStack *OVS,OpStack *OPTR)
{
int v,flag=0,f1=1,f2=1;
char ch,ch1,c;
int a,b,flag1=1;
Push(OPTR,'#');
printf("\n\nputin a string(stop with #):");
while(ch!='#'||OPTR->elem[OPTR->top]!='#')
{ if(f1&&f2)
ch=getchar();
if(isdigit(ch))
{
GetNumber(ch);
}
else
{
if((ch>='0'&&ch<='9'||ch1>='0'&&ch1<='9')&&!flag)
{
Push(OVS,num);
num=0;
}
switch(Compare(OPTR->elem[OPTR->top],ch))
{
case '<':
Push(OPTR,ch);
flag=0;
break;
case '>':
Pop(OPTR,&c);
Pop(OVS,&b);
Pop(OVS,&a);
v=Execute(a,c,b);
if(OPTR->elem[OPTR->top]=='-')
{
v=-1*v;
OPTR->elem[OPTR->top]='+';
}
Push(OVS,v);
if(ch!='#'&&ch!=')')
{
Push(OPTR,ch);
flag=0;
}
else
{
f1=0;
flag=1;
}
//printf("%d %c %d %d\n",a,c,b,v);
break;
case '=':
Pop(OPTR,&c);
if(c=='('&&ch==')')
{
f1=1;
flag=1;
}
break;
default:printf("Wrong Express!");exit(0);
}
}
ch1=ch;
}
return(v);
}
----------------解决方案--------------------------------------------------------
要考虑优先级别的问题...不是很简单...个人觉得
----------------解决方案--------------------------------------------------------
你这要求,对于初学者来说是很不简单的了
请问你要这代码来干什么?
----------------解决方案--------------------------------------------------------
哦,我的朋友老师给出的题,要求写出来,不交的要扣分的~
我自己写了很长时间,写了个但是总觉得不对,就来求你们帮忙了~!
谢谢 了~
----------------解决方案--------------------------------------------------------
唉~
----------------解决方案--------------------------------------------------------
无括号的只要一个递归程序就可以出来的
如果有括号的参见sunkaidong的程序,用栈
----------------解决方案--------------------------------------------------------
版主啊~
能不能帮小弟写出来啊~~
谢谢了啊~
还有2天就要交了啊~
----------------解决方案--------------------------------------------------------