1. c语言作业,计算三个数字间的加减乘除,三个数字两个运算符两个括号,考虑优先级
所谓后缀表达式,就是将a @ b写成 a b @
其中前者是我们日常生活中的中缀表达式,后面的就是后缀表达式。
例如7*8 化为 7 8 *
例如6-9 化为 6 9 -
例如5*(3+2),化成后缀表达式就是5 3 2 + *
可知后缀表达式无括号。
然后依次扫描符号,数字就直接进栈,遇到运算符就将前两个数字出栈、运算后结果再进栈:
例如5 3 2 + *
扫描5——>5
扫描3——>5 3
扫描2——>5 3 2
扫描+——>5 5
扫描*——>25
所以你现在要解决的问题是如何将中缀表达式转化成后缀表达式。
这个依然是通过栈来实现。
从左到右扫描,遇到数字直接输出,遇到符号比较优先级进栈或输出(优先级大的进栈,小的或相等的直接输出。其中左括号优先级大于乘除大于加减),遇到左括号则进栈,遇到右括号则将栈内左括号之内的符号都输出,遇到末尾就将栈内的所有符号都输出。
例如5*(3+2)
扫描5 直接输出
扫描* 进栈(栈内:*)
扫描( 进栈(站内:* ()
扫描3 直接输出
扫描+ +的优先级小于(的优先级,进栈,(栈内:* ( +)
扫描2 直接输出
扫描) 将站内(之前的全部输出,即输出了+
扫描到末尾,将栈内所有东西全部输出,即输出了*
综上,输出了5 3 2 + *
你可以看这个链接http://..com/question/552455212079542532.html?oldq=1
也是我回答的
2. C语言中的括号运算
理论上来说
增加括号只会增加编译的时间 并且对运行的时间是没有差别的
也就是增加了把你从c/c++代码变成exe的时间,但是不会影响exe运行的时间
而且 增加一两个括号 对于计算机编译时间的影响是微乎其微的
计算机一秒计算数量以亿算 怎么会差这一个括号呢
关于代码运行效率 更应该注意的是算法,而不是这些语句 那个才能从本质上提高程序运行效率
多行的代码 运行效率就不一定比单行的要低
作为源代码重要的一是算法 二是可读性 增加括号和增加有必要的换行不但不会降低运行效率,反而会使代码更加容易理解 减少歧义的产生
3. 用简单的C语言实现带括号的四则运算
#include<stdio.h> /*库文件包含*/
#include<string.h> /*用于字符串操作*/
#include<stdlib.h> /*用于exit函数*/
/**************************************************************************
int check(char *c)
输入参数:
char *c: 输入的字符串
返回参数:
0:字符串中有不符合规定的字符
1: 字符串字符符合规定,没有不符合规定的字符.
功能:
检查字符串中有否除了 0-9, +,-,*,/,(,),之外的其他字符,
如果有,则返回0, 表示出现错误。
若没有,则返回1,表式字符串符合规定。
**************************************************************************/
int check(char *c)
{
int k=0;
while(*c!='