c语言程序设计流程图

完成一个简单的计算器,要求实现最基本的运算操作,当用户输入一个算式后,计算器显示计算结果,同时屏幕项部显示:continue?如果用户此时按Y键,则继续输入下一个算式,否则程序终止。完成复杂运算(sin,cos,tag)函数

#include <stdio.h>
#include <string.h> 
#include <stdlib.h>
int Preemption(char a,char b)                           //符号优先级比较,a为当前读入,b为栈顶元素 
{
    int c;                                              //c反馈指令信息 0.结束 1.弹出 2.进栈 3.删除当前元素及栈顶元素 4.报错 
    switch(a)
    {
        case '#':if(b=='#') c=0;
                 else c=1;break;
        case '+':if(b=='#'||b=='(') c=2;
                 else c=1;break;
        case '-':if(b=='#'||b=='(') c=2;
                 else c=1;break;
        case '*':if(b=='*'||b=='/') c=1;
                 else c=2;break;
        case '/':if(b=='*'||b=='/') c=1;
                 else c=2;break;
        case '(':c=2;break;
        case ')':if(b=='(') c=3;
                 else c=1;break;
        default :c=4;break; 
    }
    return c;
} 
int main()
{
    char str[50]={"\0"};
    char *p=str;
    double *p3,*p4,a=0,b=0;
    char *p1,*p2;
    char stack1[20];                      //符号栈 栈顶指针p2,栈底指针p1 
    double stack2[20];                       //数字栈 栈顶指针p4,栈底指针p3 
    p1=p2=stack1;
    p3=p4=stack2;
    *p2++='#';
    printf("请输入需要计算的算术表达式:");
    gets(str);
    strcat(str,"#");
    while(*p!='\0')
    {
        if(*p<='9'&&*p>='0') 
        {
            a=a*10+(*p-'0');
            if(*(p+1)>'9'||*(p+1)<'0')
            {
                *p4++=a;
                a=0;
            }
            p++;
        }
        else
        {
            switch(Preemption(*p,*(p2-1)))
            {
                case 0:
                        printf("计算结果为:%lf\n",*p3);
                        p++;
                        break;
                case 1:
                        b=*--p4;
                        switch(*(--p2))
                        {
                            case '+':*(p4-1)=*(p4-1) + b;break;
                            case '*':*(p4-1)=*(p4-1) * b;break;
                            case '-':*(p4-1)=*(p4-1) - b;break;
                            case '/':*(p4-1)=*(p4-1) / b;break;
                        }
                        break;
                case 2:
                        *p2++=*p++;
                        break;
                case 3:
                        p++;
                        p2--;
                        break;
                case 4:
                        printf("程序读到了无法计算的符号,出错了\n");
                        p++;
                        break;
            }
         } 
    }
    return 0;
}