/*******************
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...