📄 zjdm.txt
字号:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define max 100
char ex[max];
void trans()
{
char str[max];
char stack[max];
char ch;
int sum,j,t,top=0;
int i=0;/*计数器*/
printf("*****************************************\n");
printf("说明:以 # 号为结束标志.\n");
printf("*****************************************\n");
printf("表达示: ");
do
{
i++;
scanf("%c",&str[i]); /*注: str[0]没有数据*/
if(i>=max) printf("表达式长度过长!");
}while(str[i]!='#' && i!=max);
sum=i; /*数组长度,即表达式长度*/
t=1;
i=1;
ch=str[i];
i++;
while(ch!='#')
{
switch(ch)
{
case '(': top++;
stack[top]=ch;break;
case ')': while(stack[top]!='(')
{
ex[t]=stack[top];
top--;
t++;
}
top--;break;
case '+':
case '-': while(top!=0&&stack[top]!='(')
{
ex[t]=stack[top];
top--;
t++;
}
top++;
stack[top]=ch;break;
case '*':
case '/': while(stack[top]=='*'||stack[top]=='/')
{
ex[t]=stack[top];
top--;
t++;
}
top++;
stack[top]=ch;break;
case ' ': break;
default: while(ch>='0'&&ch<='9')
{
ex[t]=ch;
t++;
ch=str[i];
i++;
}
i--;
ex[t]='&';
t++;
}
ch=str[i];
i++;
}
while(top!=0)
if(stack[top]!='(')
{
ex[t]=stack[top];
t++;
top--;
}
else
{
printf("error");
top--;
exit(0);
}
ex[t]='#';
printf("\n原表达式是: ");
for(j=1;j<sum;j++)
printf("%c",str[j]);
printf("\n后缀表达式是: ");
for(j=1;j<t;j++)
printf("%c",ex[j]);
}
void compvalue()
{
float stack[max],d;
char ch;
int t=1,top=0;
ch=ex[t];
t++;
while(ch!='#')
{
switch(ch)
{
case '+': stack[top-1]=stack[top-1]+stack[top];/*根据运算符,进行四则运算*/
top--;break;
case '-': stack[top-1]=stack[top-1]-stack[top];
top--;break;
case '*': stack[top-1]=stack[top-1]*stack[top];
top--;break;
case '/': if(stack[top]!=0)
stack[top-1]=stack[top-1]/stack[top];
else
{
printf("\n\tchu0error!\n");
exit(0);
}
top--;break;
default: d=0;/*判断是否为数字,是则将数字字符转化为对应的数值,并入栈*/
while(ch>='0'&&ch<='9')
{
d=10*d+ch-'0';
ch=ex[t];
t++;
}
top++;
stack[top]=d;
}
ch=ex[t];
t++;
}
printf("\n计算结果为: %g\n",stack[top]);
}
main()
{
trans();
compvalue();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -