本文实例为大家分享了C语言实现计算器的具体代码,供大家参考,具体内容如下
/*===============================================* \ * *设计目的:简单计算器,计算形如10 *(20.2 - -30.6)+ 5.0/2的表达式值 * *简要原理:中缀式转逆波兰式(后缀式) * * IDE: Dev-Cpp 4.9.9.2 * *注意事项:括号必须是英文状态的 * *时间:2014-6-17/*===============================================*/# include & lt; stdio.h> # include & lt; string.h> # include & lt; stdlib.h> #定义maxn 1000 字符缓冲区(maxn) str maxn, signStack maxn, ch [2]; int len, id、idSign艾丹?,我,n; 双ans (maxn); 空白checkSign (char标志){ 如果(标志==' (')signStack [idSign + +]=符号; else if(标志==?’| |标志=='/'){ 而(idSign,,(signStack [idSign-1]==?’| | signStack [idSign-1]=='/')) str [id + +]=signStack [——idSign]; signStack [idSign + +]=符号; }else if(标志==)){ 而(signStack [idSign-1] !=' (') str [id + +]=signStack [——idSign]; ——idSign; 其他}{ 而(idSign,,signStack [idSign-1] !=' (') str [id + +]=signStack [——idSign]; signStack [idSign + +]=符号; } str [id + +]=" "; } int检查(aa, char) { 如果(a==0,,符号=='/'){ printf("除数不能为0 !,程序结束。\ n”); 系统(“暂停”); 退出(EXIT_FAILURE); } 返回1; } 双卡尔(双,双b, char标志){ 开关(信号){ 例“+”:返回一个+ b; 情况下“-”:返回a - b; 案例‘*’:返回一个* b; 例“/?返回a/b; } } int main () { printf (" \ \ t \ \ t简单计算器\ n \ n”); printf (" \ \ t======================================\ n "); printf (" \ \ t | |支持+ - */()等符号和负数输入| | \ n”); printf (" \ \ t======================================\ n "); printf (" \ t \ t \ \ \ \ t原创邱正钢\ n”); printf (" \ t \ t \ \ \ \ t完成时间:2014年6月17日\ n”); printf (" \ t \ \ t \ t \ \ tEmail: 2276479303 @qq.com \ n”); printf(“请输入一个表达式,如-10 * (20.2 - -30.6)+ 5.0/2 \ n以回车结束:\ n”); {做 得到(buf);id=idSign=艾丹?=0; 如果((len=strlen (buf))==0)继续; int国旗=0;//这个是用来判断”——“字符是负号还是减号的。1表示数字,0表示+ */(/*判断原理:如果第一次读取就碰到,那么一定是负号,若最近一次读取是+ * -/(那么 也一定是负号,如果是右括号或数字那么是减号*/(我=0;我& lt;兰;+ + i) { 如果(buf[我]==' ')继续; 如果(buf[我]祝辞=' 0 ',,buf[我]& lt;=' 9 ' | | buf[我]==薄!眧 | buf[我]=='——',,!国旗){ str [id + +]=buf[我];标志=1; } 其他{ str [id + +]=" ";checkSign (buf[我]); 如果(buf[我]!=))国旗=0; 其他标志=1; } } 而(idSign) str [id + +]=signStack [——idSign]; (我=0,n=0;我& lt;id;+ + i) { 如果(str[我]==' ')继续;/*用增加空格的方式判断”——“字符是负号还是减号,若”——“后面挨着数字或小数点,那么一定是负号*/如果(str[我]祝辞=' 0 ',,str[我]& lt;=' 9 ' | | str[我]==薄!皘 | str[我]==' - ' ,,(str (i + 1)祝辞=' 0 ',,str (i + 1) & lt;=' 9 ' | | str (i + 1)=='。')) { sscanf (str +我,“%低频% n”, ans(艾丹?+ +),n); 我+=n - 1;继续; }else if(检查(ans (idAns-1) str[我])){ ans (idAns-2)=卡尔(ans (idAns-2), ans (idAns-1) str[我]); ——艾丹?; } } printf("结果是%。2如果\ n”, ans [0]); printf("输入Y继续,N退出:”); scanf (“% s”, ch); },(ch [0]==' Y ' | | ch [0]==' Y '); printf("感谢您的使用!再见\ n”); 系统(“暂停”); 返回0; }
关于计算器的精彩文章请查看《计算器专题》,更多精彩等你来发现!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。