c语言课程设计做什么比较简单,大家看看哦,提提意见,第一次做课程设计,简单计算机软件...

这篇博客介绍了如何使用C语言实现中缀表达式到后缀表达式的转换和计算过程。通过定义运算符栈和运算数栈,实现了括号匹配、优先级判断等功能,从而完成表达式的求值。代码中详细展示了push和pop操作,以及转换和计算的函数实现。
摘要由CSDN通过智能技术生成

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

大家看看哦,提提意见,第一次做课程设计,简单计算机软件

#include

#include

#define MAX 100

typedef struct

{

char s[20];

int top;

}fustack;//运算符栈

typedef struct

{   float s[20];

int top;

}shustack;//运算数栈

void push_fu(fustack *a,char x)//运算符栈进栈

{

a->top++;

a->s[a->top]=x;

}

void push_shu(shustack *a,float x)//运算数栈进栈

{

a->top++;

a->s[a->top]=x;

}

float pop_shu(shustack *a)//运算数栈出栈

{

float x;

x=a->s[a->top];

a->top--;

return x;

}

char top_fu(fustack *a)//运算符栈取栈顶元素

{

char x;

x=a->s[a->top];

a->top--;

return x;

}

void trans(char *exp,char postexp[],fustack *op)//转换函数,把中缀表达式转换为后缀表达式

{

op=(fustack *)malloc(sizeof(fustack));

int i=0;

op->top=-1;

while(*exp!='\0')

{

switch (*exp)

{

case '(':

push_fu(op,*exp);//运算符进栈

exp++;

break;

case ')':

while(op->s[op->top]!='(')

{

postexp[i++]=top_fu(op);

}

op->top--;

exp++;

break;

case '+':

case '-':

while(op->top!=-1&&op->s[op->top]!='(')

{

postexp[i++]=top_fu(op);

}

push_fu(op,*exp);//运算符进栈

exp++;

break;

case '*':

case '/':

while(op->s[op->top]=='*'||op->s[op->top]=='/')

{

postexp[i++]=top_fu(op);

}

push_fu(op,*exp);

exp++;

break;

case ' ':

exp++;

break;

case '=':

exp++;

break;

default:

while(*exp>='0'&&*exp<='9')

{

postexp[i++]=*exp;

exp++;

}

postexp[i++]='#';

}

}

while(op->top!=-1)

{

postexp[i++]=top_fu(op);

}

postexp[i]='@';

}

float compvalue(char *postexp,shustack *st)//计算函数,计算中缀表达式

{

st=(shustack *)malloc(sizeof(shustack));

float d,a,b,c;

st->top=-1;

while(*postexp!='@')

{

switch (*postexp)

{

case '+':

a=pop_shu(st);//运算数出栈

b=pop_shu(st);//运算数出栈

c=a+b;

push_shu(st,c);//运算栈进栈

break;

case '-':

a=pop_shu(st);//运算数出栈

b=pop_shu(st);//运算数出栈

c=b-a;

push_shu(st,c);//运算栈进栈

break;

case '*':

a=pop_shu(st);//运算数出栈

b=pop_shu(st);//运算数出栈

c=a*b;

push_shu(st,c);//运算栈进栈

break;

case '/':

a=pop_shu(st);//运算数出栈

b=pop_shu(st);//运算数出栈

if(a!=0)

{

c=b/a;

push_shu(st,c);//运算栈进栈

}

else

{

printf("除数为0,请检查输入的表达式\n");

}

break;

default:

d=0;

while(*postexp>='0' && *postexp<='9')

{

d=10*d+*postexp-'0';

postexp++;

}

push_shu(st,d);//运算栈进栈

break;

}

postexp++;

}

return (st->s[st->top]);

}

int main()

{

fustack *m;

shustack *n;

m=(fustack *)malloc(sizeof(fustack));

n=(shustack *)malloc(sizeof(shustack));

char exp[MAX];

char postexp[MAX];

int a;

int count=0;

int i=1;

int z;

printf("*********欢迎使用*********\n");

printf("进入请按1\n");

printf("退出请按2\n");

printf("使用说明请按3\n");

scanf("%d",&a);

while(a!=1&&a!=2&&a!=3)

{

printf("输入错误,请重新输入:");

scanf("%d",&a);

}

switch(a)

{

case 1:

do{

printf("请输入需要运算的字符串:\n");

getchar();

gets(exp);while(exp[count]!='\0') {count++;;}

for(i=0;i

{

if(exp[i]=='=')

{

printf("输入的字符错误,请检查输入的字符\n");

exit(0);

}

}

trans(exp,postexp,m);//调用转换函数

printf("%.2f\n",compvalue(postexp,n));//调用计算函数

printf("继续请按1\n退出请按2\n");

scanf("%d",&z);}while(z==1);

if(z==2)

exit(0);

return 0;

break;

case 2:

return 0;

exit(0);

break;

case 3:

printf("对简单的算术表达式进行求值(包括加减乘除功能);\n");

printf("要求单字符输入,即输入的数字或符号不需要回车键;\n");

printf("按回车键或等号键则显示计算结果。\n");

printf("输入3*(14+6)= \n输出:60\n");

return 0;

break;

default:

return 0;

}

}

搜索更多相关主题的帖子:

计算机 软件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值