C语言表达式的求解规则,C语言实现整数四则运算表达式的计算
一、问题重述
【问题描述】
从标准输入中读入一个整数算术运算表达式,如5 - 1 * 2 * 3 + 12 / 2 / 2 = 。计算表达式结果,并输出。
要求:
1、表达式运算符只有+、-、*、/,表达式末尾的’=’字符表示表达式输入结束,表达式中可能会出现空格;
2、表达式中不含圆括号,不会出现错误的表达式;
3、出现除号/时,以整数相除进行运算,结果仍为整数,例如:5/3结果应为1。
【输入形式】
在控制台中输入一个以’=’结尾的整数算术运算表达式。
【输出形式】
向控制台输出计算结果(为整数)。
【样例1输入】
5 - 1 * 2 * 3 + 12 / 2 / 2 =
【样例1输出】
2
【样例2输入】
500 =
【样例2输出】
500
【样例1说明】
输入的表达式为5 - 1 * 2 * 3 + 12 / 2 / 2 =,按照整数运算规则,计算结果为2,故输出2。
【样例2说明】
输入的表达式为500 = ,没有运算符参与运算,故直接输出500。
算法之一提示:
1、可以利用gets函数,读取整行表达式;
2、对于空格,可以考虑首先去除表达式中的所有空格
3、可以设一计数器用来记录已读取、但未参加运算的运算符的个数,根据该计数器来判断如何进行运算;
4、可以设计一函数:实现二元整数算术运算。
【评分标准】
该题要求输出整数表达式的计算结果,共有5个测试点。上传C语言文件名为example1c.c。
二、算法概述
这里提供一个我的老师提过的一个算法,概括来说就是:从左向右依次运算,遇到乘除就先算乘除。下面用一个例子来解释:
5 - 1 * 2 * 3 + 12 / 2 / 2 =
1.该等式等价于0+5 - 1 * 2 * 3 + 12 / 2 / 2 = ,所以我们先设a1=0 , op1=+
2.读取数据a2=5 , op2=-
3.a1=a1+a2=5 , op1=op2=-,读取a2=1 , op2=*
4.因为op2是*,所以我们继续读取后面的数据把它计算完,a3=2 , op3=*
5.计算a2=a2*a3,并令op2=op3,继续如此计算直到读到加减或者等号
6.计算完第一个连乘,此时a1=5,op1=-,a2=6,op2=+
7.计算op1所在的运算,a1=-1,op1=+
8.后面的操作类似,就不多说了
这个算法的关键技巧,我认为是每次读取一个数字和一个运算符。
三、C语言实现
#include
#include
#include
#include
int main()
{
int a1,a2,a3;
char op1,op2,op3;
//为了保证结构,在最开始加上一个0+
a1 = 0;
op1 = '+';
while(op1!='=')
{
scanf("%d %c",&a2,&op2); //这里用一个空格来忽略空白符
//计算乘除
while(op2=='*' || op2=='/')
{
scanf("%d %c",&a3,&op3);
if(op2=='*')
a2 *= a3;
else if(op2=='/')
a2 /= a3;
op2 = op3; //此处注意
}
//将两项相加(减)
if(op1=='+')
a1 += a2;
else if(op1=='-')
a1 -= a2;
op1 = op2; //此处注意
}
printf("%d",a1);
return 0;
}
四、思路拓展
关于运算的顺序还可以用栈来维护,通过建立运算符优先级表来决定入栈和出栈顺序,从而控制运算顺序。同学们可以尝试一下,如果允许括号运算该如何处理?如何把中缀表达式改为前缀或后缀的?
C语言表达式的求解规则,C语言实现整数四则运算表达式的计算相关推荐
- c语言整数四则运算表达式的输出格式控制,Educoder CC++基本输入输出
第1关:重要的事情说三遍 1.这里结合的一个具体场景是:程序接受一个输入字符,然后将该字符输出三遍,再输出一个!. // 包含标准输入输出函数库 #include // 定义main函数 int ma ...
- c语言整数四则运算表达式的输出格式控制,四则运算
网页简易四则运算器2021-05-18 22:35:40 下载地址:https://download.csdn.net/download/qq_31293575/18340399 项目介绍 Calcu ...
- c语言头文件命名规则,C语言头文件规则.doc
C语言头文件规则.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档所得收 ...
- 头哥实践教学平台 CC++程序设计(计算机程序设计)基本输入输出 第2关:整数四则运算表达式的输出格式控制
//包含标准输入输出函数库 #include <stdio.h> int main() { //声明两个整型变量,用于存储输入的两个整数 int x,y; //请在Begin-End之间添 ...
- C语言程序设计-算数运算符、赋值运算符、逗号运算符及表达式
目录 1.5 运算符和表达式 1.5.1 算术运算符和表达式 1.5.2 赋值运算符和表达式 1.5.3 逗号运算符和表达式 传送门上一节:C语言程序设计-常量与变量 传送门下一节:C语言程序设计-不 ...
- c语言规定标识符 字符串,c语言中标识符命名规则是怎样的
一).变量类型和表示方法 1.什么是变量? 一句话,变量是存储数据的值的空间.由于数值的类型有多种,有整数.小数(浮点数).字符等等,那么对应的变量就有整型变量.浮点型变量.字符型变量.变量还有其他的 ...
- c语言程序设计课件第二章,c语言程序设计课件张元国 ISBN9787566300386 PPT第二章数据类型 运算符与表达式...
1.第2章 数据类型.运算符与表达式,语言的数据类型 常量与变量 运算符与表达式 不同类型数据间的转换,2.1语言的数据类型,数据是计算机程序处理的所有信息的总称,数值.字符.文本等都是数据,在各种程 ...
- c语言 4则运算符,C语言学习之路之四-----------C语言的运算符与表达式
C语言的运算符与表达式 运算符与表达式 C语言的运算符又称为操作符,是数据间进行运算的符号.C语言的运算符按运算类型可分为赋值运算符.算术运算符.逻辑运算符.关系运算符.位运算符.指针运算符和取成员运 ...
- C语言(第二章):数据类型、运算符、表达式
.:.:第二章:数据类型.运算符.表达式:.:. 第二章: 数据类型.运算符.表达式 C语言的数据类型 在第一课中,我们已经看到程序中使用的各种变量都应预先加以说明,即先说明,后使用.对变量的说明可以 ...
最新文章
- 三代测序技术特点比较
- 自学python推荐书籍2019-2019年Python入门书籍推荐
- Spring cloud gateway的自定义异常响应
- DeepHSV:号称可以商用的计算机笔迹鉴别算法
- python论坛签到_论坛自动签到教程
- 【python】获取列表中最长连续数字
- python实现连续数列相加_技术 | Python经典面试题解析实现斐波那契数列
- 陕西省计算机二级报名流程,计算机二级考试报名流程
- java bitset_Java BitSet cardinality()方法与示例
- C++ 常用查找算法
- 机器学习 | EM 算法原理
- AKKA 集群中的发布与订阅Distributed Publish Subscribe in Cluster
- unityar自动识别人脸_unity人脸识别源码Dlib FaceLandmark Detector
- win8优化(win8优化大师设置开始界面)
- 印象笔记如何html导出数据,印象笔记如何导出导入笔记?
- InletexEMC 多人屏幕共享工具
- 转:量化投资新手指南-初识量化交易
- 数论 · 幂函数求导
- 用Python写一个任务管理器进行工作协调
- 【MME】云CloudMain
热门文章
- html保存导入word文档格式,WordPress网站在导入Word文档时如何保持原有格式
- 判断成绩linux程序编程,程序输入输出 ,编写判断成绩的程序
- vm linux数据恢复,VMWARE虚拟机数据恢复
- BZOJ 2716: [Violet 3]天使玩偶 | CDQ分治
- Android中使用logwrapper来重定向应用程序的标准输出
- jQuery中live函数的替代-【jQuery】
- 使用SQLite数据库存储数据(2)-向表中插入记录
- MySQL深度剖析之SQL语句更新流程(2021)
- proguard java enum,Proguard没有这么说就不会混淆课堂
- java jar metainf_java – 从生成的jar文件中排除META-INF / maven文件夹