解题思路:
注意事项: 要用double型不然幂运算不了!!!!
参考代码:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
struct s{
int num[1000];
int top;
};
void clear(struct s *stack){ //初始化栈
stack->top=-1;
}
double pop(struct s *stack){ //数字出栈
double t;
t=stack->num[stack->top];
stack->top--;
return t;
}
void push (struct s *stack,double n){ //数字入栈
stack->top++;
stack->num[stack->top]=n;
}
double compute(char c,double a,double b){ //进行符号计算
double s=0;
switch (c){
case '+':s=a+b;break;
case '-':s=a-b;break;
case '*':s=a*b;break;
case '/':s=a/b;break;
case '^':s=pow(a,b);break;
}
return s;
}
int main (){
struct s *stack;
stack=(struct s *)malloc(sizeof(struct s));
char a[1000];
gets(a);
double s=0;
clear(stack);
for (int i=0;a[i]!='\0';i++){
if (a[i]=='@'){
break;
}else if (a[i]>='0'&&a[i]<='9'){ //数字字符转换成数字
s=s*10+(a[i]-'0');
continue;
}else if (a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/'||a[i]=='^'){
double t;
t=compute(a[i],pop(stack),pop(stack)); //数字栈中弹出两个进行计算,并入栈
push(stack,t);
}else{ //就是遇到空格了,将转换好的数字s,压入数字栈,将s初始化
push(stack,s);
s=0;
}
}
printf ("%.0lf",pop(stack)); //最终唯一的结果,就在数字栈中,弹出输出即可!!!
}
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:605 |
母牛的故事 (C语言代码)浏览:1748 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:546 |
C语言考试练习题_排列 (C++代码)浏览:713 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:689 |
弟弟的作业 (C++代码)浏览:1342 |
【蟠桃记】 (C语言代码)浏览:710 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:693 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:1432 |
printf基础练习2 (C语言代码)浏览:826 |