实现需要借助一个运算符栈和一个数字栈,利用算符优先法对表达式求值。
首先给操作数分别赋值,然后从左到右扫描表达式,若遇到操作数直接入栈等待,若遇到运算符,则必须与栈顶算符比较;若当前读到的运算符级别高于栈顶运算符则进栈,否则退出栈顶的关系运算符,并退出两个操作数,开始执行关系运算,将结果1或0再次入操作数栈;若当前读到的运算符级别等于栈顶运算符,表明左右()相遇,这时继续读下一个字符跳过括号;当表达式读完,操作数栈里的值即为结果。
c语言用关系表达式编写计算器
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- CSDN专家-黄老师 2021-07-03 09:21关注
/*项目名称:简单计算器 项目拓展:除了加减乘除之外要求该程序能实现平方根、倒数、幂次方功能 */ #include <stdio.h> #include <math.h> void main() { int a , b; //声明两个整形变量,作为计算器运算的基数 char op; //字符型变量,作为表现的运算符号 while (1) //while(1)可以进行无限循环,达到计算器运算的要求 //相对而言的,while (0)就代表不会运行其中的循环语句 { printf("--------------------------\n"); printf("请输入两个操作数和运算符\n"); scanf_s("%c", &op); //输入使用字符类型%c scanf_s("%d %d", &a, &b); int s = sqrt(a); int p = pow(a, b); //对于一些不好运算的计算,可先算完 switch (op) //switch函数将输入的变变量代入以下不同情况来进行运算 { case'+': printf("%d+%d=%d\n", a, b, a + b); break;//加法运算 case'-': printf("%d-%d=%d\n", a, b, a - b); break;//减法运算 case'*': printf("%d*%d=%d\n", a, b, a * b); break;//乘法运算 case'/': printf("%d/%d=%d\n", a, b, a / b); break;//除法运算 case'|': printf("%d的平方根=%d\n", a, s); break; //平方根运算 case'$': printf("%d/%d的倒数=%d\n", a, b, b / a); break;//倒数运算 case'^': printf("%d的%d次幂=%d\n", a, b, p); break;//幂次方运算 default:printf("ERROR!!!!!\n"); break;//switch函数运行时,如果输入没有定义好的变量情况 //则输出所有其他情况的结果 } getchar(); /*前面调用了scanf读取字符的函数,则需键入新值调用getchar(),因为scanf的调 用必须使用回车键才能执行,因此除了字符变量op还有回车键也在缓存区中 因此需要调用getchar函数将读入的字符带给程序*/ } }
如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 VS2022+WDK驱动开发环境
- ¥30 关于#java#的问题,请各位专家解答!
- ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
- ¥20 pcf8563时钟芯片不启振
- ¥20 pip2.40更新pip2.43时报错
- ¥15 换yum源但仍然用不了httpd
- ¥50 C# 使用DEVMOD设置打印机首选项
- ¥15 麒麟V10 arm安装gdal
- ¥20 OPENVPN连接问题
- ¥15 flask实现搜索框访问数据库