初赛复习
1.语言的分类
1.编译性语言
由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它例:C/C++、Pascal/Object Pascal(Delphi)、VB等
2.解释性语言
一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言
例:Java、JavaScript、VBScript、Perl、Python、MATLAB等
带Script的一般都是解释性语言
2.历史
1.中国计算机学会于1984年创办全国青少年计算机程序设计竞赛。
3.杂
1.小数的二进制计算
十进制转二进制:和整数的二进制计算相似,从第一位往后依次代表有几个2-1, 2-2 , 23,依次分即可
二进制转十进制:加法原理或者依次乘二取整数位
2.前序,中序,后序表达式
1.计算方法
前序:从右到左依次进栈,如果是数字则直接进栈,如果是运算符则取出栈顶的两个数字,进行相应运算
中序:就是我们平时见到的运算式
后序:从左到右进栈,其他与前序的处理方式相同
中序转前序
1、反转输入字符串,如“ 2 * 3 / (2-1) + 3(4-1)” 反转后为“ )1-4(3+)1-2(/3*2 ”,
2、从字符串中取出下一个字符
2.1.如果是操作数,则直接输出
2.2.如果是“)”,压入栈中
2.3.如果是运算符但不是“(”,“)”,则不断循环进行以下处理
2.3.1.如果栈为空,则此运算符进栈,结束此步骤
2.3.2.如果栈顶是“)”,则此运算符进栈,结束此步骤
2.3.2.如果此运算符与栈顶优先级相同或者更高,此运算符进栈,结束此步骤
2.3.4.否则,运算符连续出栈输出,直到满足上述三个条件之一,然后此运算符进栈
2.4、如果是“(”,则运算符连续出栈输出,直到遇见“)”为止,将“)”出栈且丢弃之
3、如果还有更多的字符串,则转到第2步
4、不在有未处理的字符串了,输出栈中剩余元素
5、再次反转字符串得到最终结果中序转后序
从左向右扫描,遇到操作数,则直接输出;当遇到操作符(+、-、*)和左括号时,则从栈中弹出栈元素并写到输出直到发现优先级(+优先级最低,左括号优先级最高)更低的元素为止(注意,不弹出这个优先级更低的元素),但是有一个例外,即除非在处理右括号的时候,否则我们绝不从栈中弹出左括号,当从栈弹出元素的工作完成后,再将当操作符压入栈中;当遇到右括号的时候,则将栈中元素弹出并写入到输出直到遇到一个左括号,但是这个左括号只是被弹出,并没有写到输出中。如果从左向右扫描结束,栈中还有元素,则将栈中元素弹出并写到输出,直到栈为空
例如:中序表达式(23+3445/(5+6+7))转换成后序表达式23 34 45 5 6 + 7 + / +