程序员考试科目2——程序设计,也就是我们常说的下午题,是以笔试填空的方式进行考试,1996年以前是考C语言和CASL汇编语言,1996年到1998年考C语言和FORTRAN语言,1999年到2004年都只考C语言,2004年出了新考纲后就扩充到必选C,可选C++、Java、VB中一种语言,并且一年考试两次,让考生有更多的机会参加这个考试。
1999年以后,程序员考纲上所涉及的面比较广,但实际上所考的内容主要是C语言基础上的数据结构,在2004年新考纲之前,虽然有提及C++和面向对象的设计方法,但实际上考试的内容全部是C语言,新考纲出来之后,试题的题型结构有所改变,可以选做部分试题,加入了面向对象的程序设计,使用的语言也从单一的C语言扩充到C++、Java、VB,让考生有更多的选择机会,但同时也增加了一定的难度,使得考生必须在掌握C语言之外还要掌握一门面向对象的程序设计语言。当然,这也是程序设计语言的一个必然的发展方向。下面是从2000年到2005年上半年所有试题所涉及的考点进行列表分析
1.1 历年试题及考点分析
1.1.1 2000至2005年试题
2000年下午试题一共有4道题,25个空,所涉及的算法、知识点及数据存储结构如表1.1所示。
表1.1 2000年下午试题考点分析
题号
算法
知识点
存储结构
一
链表合并
线性表
指针
判断数组元素递增
数组、递归
数组
二
长整数格式化
整数
数组
求组合
整数
数组
三
中缀表达式转后缀
栈
指针
表达式计算
栈
四
贪心算法
数组
数组
2001年下午试题一共5道题,25个空,所涉及的算法、知识点及数据存储结构如表1.2所示。
表1.2 2001年下午试题考点分析
题号
算法
知识点
存储结构
一
字符串比较
字符串
指针
计算鞍点
矩阵
数组
二
链表逆置
线性表
指针
三
文件的合并与恢复
文件操作
文件
四
双向循环链表操作
线性表
指针
五
整数的分解
数组、递归
数组
2002年下午试题一共5道题,25个空,所涉及的算法、知识点及数据存储结构如表1.3所示。
表1.3 2002年下午试题考点分析
题号
算法
知识点
存储结构
一
显示器编程
多媒体、移位及逻辑运算
数组
二
字符串连接
字符串
指针
求数组中最大元素下标
数组
数组
三
直接插入排序
排序
数组
数组逆置
数组、递归
数组
四
素数筛选
素数
数组
五
二叉排序树结点插入
二叉排序树、查找、递归
指针
2003年下午试题一共5道题,25个空,所涉及的算法、知识点及数据存储结构如表1.4所示。
表1.4 2003年下午试题考点分析
题号
算法
知识点
存储结构
一
查找
折半查找、流程图
数组
二
查找
字符串
指针
查找
五叉排序树、非递归
指针
三
排序
线性表、链表操作
指针
四
元素移动
数组
数组
五
栈和队列的操作
栈和队列
指针
2004年上半年下午试题一共9道题,可以选做其中的25个空(或问题),所涉及的算法、知识点及数据存储结构如表1.5所示。
表1.5 2004年上半年下午试题考点分析
题号
算法
知识点
存储结构
一
快速排序
快速排序、N-S图、递归
数组
任选一题
二
判断回文
字符串
指针
字符串处理
字符串
数组
三
VB基础
VB基础知识
任选一题
四
进制转换
数组、栈操作
数组
五
VB组件应用
下拉列表框、文本框
任选一题
六
链表操作
线性表
指针
七
VB窗口操作
时间组件
任选一题
八
所得税计算
数组
数组
九
VB个人税计算
选择结构程序设计
2004年下半年下午试题一共8道题,可以选做其中的25个空(或问题),所涉及的算法、知识点及数据存储结构如表1.6所示。
表1.6 2004年下半年下午试题考点分析
题号
算法
知识点
存储结构
一
二进制求补
流程图
数组
二
排序
交换排序及其效率
数组
三
元素移动
指针运算、链表操作
链表
任选一题
四
统计竞赛结果
结构体、选择排序
结构体、数组
五
VB(程序内容和第四题C语言一样)
常用控件、基本函数
任选一题
六
C++基础
继承、抽象类、动态绑定
七
VB数据库应用
文本框、命令按钮、数据控件
八
Java基础
继承、抽象类、动态绑定
2005年上半年下午试题一共8道题,可以选做其中的25个空(或问题),所涉及的算法、知识点及数据存储结构如表1.7所示。
表1.7 2005年上半年下午试题考点分析
题号
算法
知识点
存储结构
一
奇偶校验
异或运算、流程图
二
最大公约数
最大公约数
字符串处理
字符串
指针
三
二叉树节点的查找与删除
二叉树
二叉树
任选一题
四
子方阵查找
二维数组
数组
五
VB基础组件
列表框的常用属性
任选一题
六
Java应用程序
Java Applet类
七
VB基础组件
VB内部组件DriveListBox、DirListBox、FileListBox
八
C++基础
枚举类型
2005年下半年下午试题一共8道题,可以选做其中的25个空(或问题),所涉及的算法、知识点及数据存储结构如表1.8所示。
表1.8 2005年下半年下午试题考点分析
题号
算法
知识点
存储结构
一
字符串处理
字符串处理、流程图
数组
二
线性表查找
线性表
数组
三
二分法查找
线性表、二分查找
数组
任选一题
四
VB基础
标签、文本框、命令按钮
五
二叉排序树
创建二叉排序树
树
任选一题
六
C++基础
类的定义、查错
七
VB基础
时钟组件及图形编程
八
Java类基础
Stock类和JavaMain类
1.1.2 命题方向的变化及分析
对上面的列表进行分析,我们可以看出一些程序员考试命题方向的变化,现从几方面列举如下。
1.语言的选择上
从96年以前的C语言和CASL汇编语言,到C语言和FORTRAN语言,再到只考C语言,以及到现在的在C语言和C++、Java、VB中进行选择,可见软考始终紧跟着社会的需要,也紧跟着编程语言的发展方向,唯有发展与改变才能让软考充满活力。这也许是软考越来越受到社会认同的一个重要原因吧!
下面我们再来看一个表,分析一下所考语言的选择上有什么变化,如表1.10所示。
表1.10 程序语言题量变化表(单位:空)
时间
C
VB
C++
Java
最多可选C语言数量
最多可选VB数量
最多可选Java数量
最多可选C++数量
2000年
25
0
0
0
25
0
0
0
2001年
25
0
0
0
25
0
0
0
2002年
25
0
0
0
25
0
0
0
2003年
25
0
0
0
25
0
0
0
2004年上半年
25
20
0
0
25
20
0
0
2004年下半年
20
10
5
5
20
10
5
5
2005年上半年
20
10
5
5
20
10
5
5
2005年下半年
20
10
5
5
20
10
5
5
从上面的表里面我们可以得到一个信息:C语言始终是考试的最重点,在2004年上半年改了考纲后的第一次考试中,最多可以选择20个VB空,而只选5个C语言的空,但在接下来的下半年考试中,这个情况就马上改了,最多只可选10个VB空,最少要做15个C语言空,而且一直延用至今。在考纲所增加的几种语言当中,Java语言具有面向对象、平台无关性、安全、稳定和多线程等优良特性,是目前软件设计中极为强大的编程语言。Java语言不仅可以用来开发大型的应用程序,而且特别适合Internet的应用开发。尤其是JavaSwing推出之后,不仅使Java的功能更加强大,而且使Java具备了“处处可用”的特点,Java已成为网络时代最重要的语言之一。出于以上的原因,本书将以绝大多数的篇幅来讲解C语言及数据结构,并且在最后一章讲解Java语言。希望可以为读者冲刺程序员考试提供一定的帮助。
2.知识点的选择上
从2000年到2005年试题所考查的知识点上来看,C语言及数据结构的主要考查的知识点上没有太大的变化,线性表、链表、字符串、二叉树、排序和查找等几大主要知识点在不断的轮着出现。所以,本书将对这些主要知识点在解题中的运用进行重点讲解和分析,但关于这些知识点本身的基本概念则只略提,读者可通过查阅数据结构的相关教材去复习那些基础知识。
3.题型的选择上
从软考的题型来看,2002年以前的考试基本上是以传统题型为主,2002年的下午第一题就不再以传统的方式出题,而是以算法分析的方式,或是说程序文档化的方式进行考查,要求能够读懂对问题的分析。这是一个很大的突破,要求应试者不只是会做一些传统的题目,还要学会分析一个问题,从而得出解决问题的算法。到2003年的下午第一题,在02年的基础上,题型进一步改成以伪代码的形式。到2004年上半年新考纲后,下午第一题变为用N-S盒图形式描述算法的题型,由于流程图、N-S图都是用来描述算法的非常科学而且经典的方法,所以从2004年上半年出现这种题型后,一直到2005年下半年的考试,每次的下午题第一题都是这种题型,相信以后这种题型还会继续出现。
其它的一些题目的题型上也有一定的变化,以前传统的各种较为经典的算法越来越少出现,取而代之的是各种比较新的应用型的题目,或者是把各种经典的算法集中到一起出一些比较综合性质的题目。
当然,只要我们把基础的算法都较为熟练的掌握后,题型上的变化并不会给我们解题带来多大的影响。
1.2 个人经验总结及应试建议
1.2.1 作者对程序员考试下午题的见解