一、问题重述

【问题描述】

从标准输入中读入一个整数算术运算表达式,如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语言实现整数四则运算表达式的计算相关推荐

  1. c语言整数四则运算表达式的输出格式控制,Educoder CC++基本输入输出

    第1关:重要的事情说三遍 1.这里结合的一个具体场景是:程序接受一个输入字符,然后将该字符输出三遍,再输出一个!. // 包含标准输入输出函数库 #include // 定义main函数 int ma ...

  2. c语言整数四则运算表达式的输出格式控制,四则运算

    网页简易四则运算器2021-05-18 22:35:40 下载地址:https://download.csdn.net/download/qq_31293575/18340399 项目介绍 Calcu ...

  3. c语言头文件命名规则,C语言头文件规则.doc

    C语言头文件规则.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档所得收 ...

  4. 头哥实践教学平台 CC++程序设计(计算机程序设计)基本输入输出 第2关:整数四则运算表达式的输出格式控制

    //包含标准输入输出函数库 #include <stdio.h> int main() { //声明两个整型变量,用于存储输入的两个整数 int x,y; //请在Begin-End之间添 ...

  5. C语言程序设计-算数运算符、赋值运算符、逗号运算符及表达式

    目录 1.5 运算符和表达式 1.5.1 算术运算符和表达式 1.5.2 赋值运算符和表达式 1.5.3 逗号运算符和表达式 传送门上一节:C语言程序设计-常量与变量 传送门下一节:C语言程序设计-不 ...

  6. c语言规定标识符 字符串,c语言中标识符命名规则是怎样的

    一).变量类型和表示方法 1.什么是变量? 一句话,变量是存储数据的值的空间.由于数值的类型有多种,有整数.小数(浮点数).字符等等,那么对应的变量就有整型变量.浮点型变量.字符型变量.变量还有其他的 ...

  7. c语言程序设计课件第二章,c语言程序设计课件张元国 ISBN9787566300386 PPT第二章数据类型 运算符与表达式...

    1.第2章 数据类型.运算符与表达式,语言的数据类型 常量与变量 运算符与表达式 不同类型数据间的转换,2.1语言的数据类型,数据是计算机程序处理的所有信息的总称,数值.字符.文本等都是数据,在各种程 ...

  8. c语言 4则运算符,C语言学习之路之四-----------C语言的运算符与表达式

    C语言的运算符与表达式 运算符与表达式 C语言的运算符又称为操作符,是数据间进行运算的符号.C语言的运算符按运算类型可分为赋值运算符.算术运算符.逻辑运算符.关系运算符.位运算符.指针运算符和取成员运 ...

  9. C语言(第二章):数据类型、运算符、表达式

    .:.:第二章:数据类型.运算符.表达式:.:. 第二章: 数据类型.运算符.表达式 C语言的数据类型 在第一课中,我们已经看到程序中使用的各种变量都应预先加以说明,即先说明,后使用.对变量的说明可以 ...

最新文章

  1. 三代测序技术特点比较
  2. 自学python推荐书籍2019-2019年Python入门书籍推荐
  3. Spring cloud gateway的自定义异常响应
  4. DeepHSV:号称可以商用的计算机笔迹鉴别算法
  5. python论坛签到_论坛自动签到教程
  6. 【python】获取列表中最长连续数字
  7. python实现连续数列相加_技术 | Python经典面试题解析实现斐波那契数列
  8. 陕西省计算机二级报名流程,计算机二级考试报名流程
  9. java bitset_Java BitSet cardinality()方法与示例
  10. C++ 常用查找算法
  11. 机器学习 | EM 算法原理
  12. AKKA 集群中的发布与订阅Distributed Publish Subscribe in Cluster
  13. unityar自动识别人脸_unity人脸识别源码Dlib FaceLandmark Detector
  14. win8优化(win8优化大师设置开始界面)
  15. 印象笔记如何html导出数据,印象笔记如何导出导入笔记?
  16. InletexEMC 多人屏幕共享工具
  17. 转:量化投资新手指南-初识量化交易
  18. 数论 · 幂函数求导
  19. 用Python写一个任务管理器进行工作协调
  20. 【MME】云CloudMain

热门文章

  1. html保存导入word文档格式,WordPress网站在导入Word文档时如何保持原有格式
  2. 判断成绩linux程序编程,程序输入输出 ,编写判断成绩的程序
  3. vm linux数据恢复,VMWARE虚拟机数据恢复
  4. BZOJ 2716: [Violet 3]天使玩偶 | CDQ分治
  5. Android中使用logwrapper来重定向应用程序的标准输出
  6. jQuery中live函数的替代-【jQuery】
  7. 使用SQLite数据库存储数据(2)-向表中插入记录
  8. MySQL深度剖析之SQL语句更新流程(2021)
  9. proguard java enum,Proguard没有这么说就不会混淆课堂
  10. java jar metainf_java – 从生成的jar文件中排除META-INF / maven文件夹