解题思路:

注意事项:    要用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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论