C語言計算器

2021-08-20 17:34:45 字數 3861 閱讀 5917

/*******************

powered by ccbupt

builder:ni3

2018-4-9

功能:使用c語言寫的科學計算器,可以實現四則運算、三角函式運算、指對數運算;優先順序正確;

能智慧型遮蔽空格,能識別輸入錯誤和運算錯誤,

能實現繼續運算、清空運算結果和有效退出的功能

********************/

#include #include #include #include #define input_max 1000

#define node_max 500

#define num_opt 20

#define len_opt 6

#define num_ops 200

typedef enum type;

typedef struct node;

//括號棧,檢測括號是否匹配

char brackets[num_ops];

int bb = 0;

int input(node *in);

int translate(char *p, node *re, int *len);

double translateopd(char *p, int *len);

int translateopt(char *p, int *len);

int cmp(const char *s, const char *d);

int calculate(node *n, double *r);

int sclt(int opr, double *opd);

int dclt(int opr, double *opd1, double opd2);

int prid(int c);

/*功能:表示式輸入和轉換

* 接收輸入並翻譯為操作符和運算元存入表示式鏈

*輸出:執行狀態,正確返回1,錯誤返回0

*/int input(node *in)

;int insi = 0;

char temp_in = 0;

int len = 0;

//檢測開頭的空格

while (' ' == (ins[0] = getchar()));

//檢測是不是直接輸入了乙個回車

if (ins[0] != '\n')

while (temp_in != '\n');

ins[insi] = 0;

}insi = 0;

//輸入回車直接輸出0

if (ins[0] == '\n')

in->tp = opd, in->opd = 0.0, in++;

else

//壓入表示式鏈

while (ins[insi])

//自動新增等號

if ((in - 1)->opt != '=')

in->opt = '=', in->tp = opt, in++;

in->opt = -1, in->tp = opt;

return 1;

}/*功能:翻譯字串為運算元或操作符

*輸出:翻譯結果狀態

*/int translate(char *p, node *re, int *len)

else if (*p == 'e' || *p == 'p')

else

else

return 0;}}

else

}/*功能:翻譯運算元

*/double translateopd(char *p, int *len)

while ((p[i] >= '0'&&p[i] <= '9') || p[i] == '.');

if (p[i] == ' ')

i++;

*len = i;

return temp;

}/*功能:翻譯運算元

* 如果運算子非法,則返回0,合法則返回非零標誌

*/int translateopt(char *p, int *len)

;int fu_int[num_opt] = ;

int i = 0;

for (i = 0; itp == opt && n->opt == '-')

oprd[db] = 0.0, db++;//push(&oprd,0.0);

while (1)

else

}break;

}else

oprt[tb] = n->opt, tb++, n++;//push(&oprt,n->opt),n++;

continue;

}if (prid(top) == 0)

else

return 0;

}if (prid(top) >= prid(n->opt))

else

return 0;

}else

}else

}else

return 0;

}else}}

}*r = oprd[db - 1];

return n - nb + 1;

}/*功能:單目運算

*/int sclt(int opr, double *opd)

else

*opd = asin(*opd);

break;

case 'a' + 'c':

if (*opd<-1 || *opd>1)

else

*opd = acos(*opd);

break;

case 'a' + 't':

if (*opd>-3.141592654 / 2 && *opd<3.141592654 / 2)

*opd = atan(*opd);

else

break;

case 'n':

if (*opd>0)

*opd = log(*opd);

else

break;

case 'g':

if (*opd>0)

*opd = log10(*opd);

else

break;

}return 1;

}/*功能:雙目運算

*/int dclt(int opr, double *opd1, double opd2)

break;

case '^':

*opd1 = pow(*opd1, opd2); break;

}return 1;

}/*功能:判斷優先順序

*/int prid(int c)

}int main()

;double r = 0.0;

//清空括號棧

bb = 0;//initstack(&brackets);

printf("enter: ");

//輸入

if (!input(nodes))

//計算

if (calculate(nodes, &r))

if (floor(r) == r)

printf("%d", (int)r);

else

printf("%.4f", r);

}c = getchar();

if (c == 'q')//退出

break;

else if (c == 'c')//清屏

system("clear");

if (c != '\n')

getchar();

}printf("quit...\n");

return 0;

}

c語言簡易計算器

c語言簡易計算器 表示式求值專案 多功能計算器 該專案主要包含了10個模組,10項功能 1 加法運算 主要進行兩個數的加法運算,可進行計算整數和浮點數 2 減法運算 主要進行兩個數的減法運算,可進行計算整數和浮點數 3 乘法運算 主要進行兩個數的乘法運算,可進行計算整數和浮點數 4 除法運算 主要進...

C語言的計算器

printf 半徑輸入錯誤!n break case 7 case 8 case 13 break case 9 case 10 printf 從1到輸入數之間的偶數和是 d n sum break case 12 break case 11 while i m printf 從1到輸入數之間所有3...

C語言實現計算器

同學,你好!附 c語言實現迷宮類小遊戲完整思路與 例項 design by 海上的雨 效果圖 完整 include include includevoid jingtailianbiao void dongtailianbiao int stu num define len sizeof struc...