1.getchar()函数
getchar()函数经常应用于c中,由于接收用户输入的内容,getchar 函数是以行为单位存取的( 并不是单个字符 )
while( ( c = getchar() ) != EOF ) {
putchar( c ) ;
}
上边代码运行结果,并不是一个字符字符的输出,而是一次性一起输出.
在一般情况下 getchar 返回的是一个字符,但是也可能是负值 即 返回 EOF ( 在 windows中 EOF = ctrl + z , 在linux中 EOF = ctrl + d )
2.表达式标识法于求值 ( 只限 二元运算 )
4 + 2 * 3 - 10 / 5 这是一个表达式
表达式有三种表示法 ( 前缀 , 中缀 , 后缀 , 正好对应树的先序 , 中序 , 后序 遍历 )
表达式求值使用的是 后缀式
设 Exp = s1 + op + s2
前缀 : op + s1 + s2
中缀 :s1 + op + s2 丢失括号信息。有问题
后缀 : s1 + s2 + op
例如 :Exp = a * b + ( c - d / e ) * f
前缀 :+* a b * - c / d e f //逐层分解 , 最开始 a*b 作为第 1 操作数 s1 , ( c - d / e) * f 作为第 2 操作数
中缀 : a * b + c - d / e * f //逐层分解,但是运算结果会发生改变,丢掉了括号信息
后缀 :a b * c d e / - f * + //逐层分拣,使用这种求值
结论 : 操作数之间的相对次序不变。
运算符的相对次序发生改变( 中缀不变 ) 中缀丢失了 括号信息。
前缀 ,连续出现的两个操作符和它们之前紧靠的运算附组成最小表达式 ( 从左到右扫描 )
后缀, 先找运算符,和这个运算符之前紧靠的两个操作数组成最小表达式 ( 从左到右扫描 )
3. 求后缀式 ( 逆波兰式 )
建立操作符栈和运算符栈 , 运算符栈 , 栈底为 ' # ' , 碰到 ( ) , ( 左括号直接进运算符栈 , ) 等待 左 ( 出栈 )