程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 科學計算器源碼--c實現

科學計算器源碼--c實現

編輯:關於C語言

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 4000;
typedef struct
{
    char data[10];
    int top;//頭地址

    int base;//基地址

    int length;//長度

}Stack;

void init(Stack *st)//初始化棧

{
    st->base=0;
    st->top=0;
    st->length=0;
}

int isEmpty(Stack *st)
{
    int n=0,top,base;
    top =st->top;
    base =st->base;
    if(top==base)
    {
        return 1;
    }
    return n;
}

int isFull(Stack *st)
{
    int n=0,top,base;
    top =st->top;
    if(top>=4000)
    {
        return 1;
    }
    return n;
}

char getTop(Stack *st)// 返回top值,不改變棧的結構

{
    char n;
    if(isEmpty(st))
    {
        printf("棧為空 ");
        return 0;
    }
    int positon= st->top-1;
    n= st->data[positon];//取出數據;

    return n;
}

char pop(Stack *st)// 出棧,返回

{
    char n;
    if(isEmpty(st))
    {
        printf("棧為空 ");
        return 0;
    }
    int positon= st->top-1;
    n= st->data[positon];//取出數據;


    st->top--;
    st->length--;
    st->data[positon]=;//消除數據

    return n;
}

void push(char n,Stack *st)//入棧

{
    int positon ;
    if(isFull(st))
    {
        printf("棧滿 ");
       
    }
    else
    {
        positon= st->top;//獲取位置


        st->data[positon]=n;//存入數據


        st->top++;//改變位置

    }

}

void show(Stack *m1)//輸出棧中的數據

{
    int top,base;
    top=m1->top;
    base=m1->base;
    while(top>base)
    {
        printf("%c,",m1->data[--top]);
    }
    printf(" ");
}

int isOperate(char temp)//是否是操作符

{
    if(temp==+||temp==-||temp==*||temp==/||temp==(||temp==)||temp==#)
    {
        return 1;
    }
    return 0;
}

int isValue(char temp)//是否是數值

{
    if(temp>=0&&temp<=9)//

    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int isAvail(char temp)//是否有效字符

{
    if(isOperate(temp)||isValue(temp))//如果temp既不是操作符和數值的話,則它是非法的

    {
        return 1;
    }
    return 0;
}

int detect(char temp)//搜索矩陣位置

{
    int i=0;
    char oper[7]={+,-,*,/,(,),#};
    for(i=0;i<7;i++)
    {
        if(temp==oper[i])
        {
            return i;
        }
    }
}

char Priority(char temp,char optr)//判斷優先級

{
    /**//*
            + - * / ( ) #
            1 2 3 4 5 6 7
        + 1 < < < < > > >
        - 2 < < < < > > >
        * 3 > > < < > > >
        / 4 > > < < > > >
        ( 5 > > > > > = 0
        ) 6 < < < < = 0 >
        # 7 < < < < > 0 =
    */
    int row ,col;
    char priority[7][7]={/**//* + - * / ( ) # */
                             {<,<,<,<,>,>,>},

                            {<,<,<,<,>,>,>},

                            {>,>,<,<,>,>,>},

                            {>,>,<,<,>,>,>},

                            {>,>,>,>,>,=,>},

                            {<,<,<,<,=,0,>},

                            {<,<,<,<,>,<,=},
                        };


    row = detect(temp);//找出對應的矩陣下標;

    col = detect(optr);
// printf("%d,%d",row,col);

     
    //優先級存儲在一個7x7的矩陣中,對應關系上圖;

   
    return priority[row][col];

}
char evaluate(int a,int b,char oper)
{
    switch(oper)
    {
        case +: return a+b+0;
        case -: return a-b+0;
        case *: return a*b+0;
        case /: return a/b+0

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved