标题：程序员考试
考试介绍
软考程序员考试属于计算机软件水平考试（简称软考）中的一个初级计算机职称考试。对于软考程序员考试并无学历及资历条件限制，更无论年龄、专业与资历。一年可报考软考程序员考试两次，但一次考试只能报考一种资格，因此报考了程序员考试则无法再报考软考其他级别或科目的考试。同时软考程序员考试采用笔试形式，考试实行全国统一大纲、统一试题、统一时间、统一标准、统一证书的考试方式。[1]
报名流程
根据《计算机技术与软件专业技术资格（水平）考试实施办法》第八条相关规定：  程序员证书符合《暂行规定》（即《计算机技术与软件专业技术资格（水平）考试暂行规定》）第八条规定的人员，由本人提出申请，按规定携带身份证明到当地考试管理机构报名，领取准考证。凭准考证、身份证明在指定的时间、地点参加考试。
各地的报名办法由考生报考所在地的当地考试机构决定。考生相关报考费用标准由当地物价部门核准。
考生报名方式主要分为：网上报名[2]与考生本人到指定地点报名两种。
注：报名时依据的身份证明包括：居民身份证、军人的证件、护照、户口本等。
考试目标
通过本考试的合格人员能根据软件开发项目管理和软件工程的要求，按照程序设计规格说明书编制并调试程序，写出程序的相应文档，产生符合标准规范的、实现设计要求的、能正确可靠运行的程序；具有助理工程师（或技术员）的实际工作能力和业务水平。[3]
考前答疑解惑
1、软考采取什么考试形式？考试时间如何规定？[4]
除信息处理技术员和多媒体应用制作技术员采取笔试与上机操作考试相结合的形式外，其他各种考试都采用笔试形式。考试实行全国统一大纲、统一试题、统一时间、统一标准、统一证书的考试办法。
高级资格考试设综合知识、案例分析和论文3个科目；中级、初级资格考试设基础知识和应用技术2个科目。笔试安排在一天之内。上机考试将分期分批进行。
知识科目采用单项选择题，考试150分钟，考生需要用2B铅笔涂填答题卡；应用技术科目采用问答题，考试时间150分钟；上机考试时间为150分钟； 案例分析科目采用问答题，考试时间为90分钟；论文科目考试时间为120分钟。各个科目的满分均为75分。
2、软考每年考几次？各次考试是什么日期？
软考原则上每年组织两次，在每年第二季度和第四季度举行。上半年考试与下半年考试的种类不尽相同，所以，大多数类别的考试每年举行一次。
3、参加软考是否需要学历与资历条件？是否必须通过初级资格考试，才能报考中、高级资格考试？
由于信息技术发展迅速，计算机软件是年轻人的事业，为了不拘一格选拔人才，软考不设学历与资历条件，也不论年龄和专业，考生可根据自己的技术水平选择合适的级别合适的资格，但一次考试只能报考一种资格。
4、有没有统一的考试大纲和辅导教材，如何购买？
希赛教育软考学院组织编写各级别资格考试的辅导教材和参考用书，每次考试结束后，还编写试题分类精解，录制了培训视频教程、串讲视频教程、真题解析视频。这些考试用书和视频等都已在希赛教育软考学院上公布，考生可在“视频教学平台”或“希赛教育图书”中查询。
5、软考的试题是否很难？合格率如何？
软考属于专业水平的国家品牌考试，试题注重岗位知识和技能（不是背书），综合性和灵活性强，创意多，但只要考生掌握了相应岗位所需的基本知识和技能，就会认为考试并不难。对于死记硬背书本的人来说，可能就比较难。由于考试向社会开放，不设学历资历条件，知识和能力各个科目都及格才能合 格，因此合格率并不高。各级别总平均合格率大约是25%,初级资格的合格率约40%,中级资格的合格率20-30%,高级资格的合格率约20%.社会开放 考试的报考者中水平差异很大，不象学校考试那样大家水平比较接近，所以，确实掌握了基本知识又有工作经验的人，没有必要担心合格率问题。
软考并不是竞赛，只要成绩超过合格标准就能合格，没有预先规定合格人数界限。
科目内容
科目：基础知识1. 计算机科学基础
1.1 数制及其转换
二进制、十进制和十六进制等常用数制及其相互转换
1.2 数据的表示
数的表示（原码、反码、补码表示，整数和实数的机内表示方法，精度和溢出）
非数值表示（字符和汉字的机内表示、声音和图像的机内表示）
校验方法和校验码（奇偶校验码、海明校验码）
1.3 算术运算和逻辑运算
计算机中二进制数的运算方法
逻辑代数的基本运算和逻辑表达式的化简
1.4 数学应用
常用数值计算（矩阵、方程的近似求解、插值）
排列组合、应用统计（数据的统计分析）
1.5 常用数据结构
数组（表态数组、动态数组）、线性表、链表（单向链表、双向链表、循环链表）、队列、栈 
、树（二叉树、查找树）、图的定义、存储和操作
1.6 常用算法
常用的排序算法、查找算法、数值计算、字符串处理、数据压缩算法、递归算法、图的相关算 
法
算法与数据结构的关系，算法效率，算法设计，算法描述（流程图、伪代码、决策表）
2． 计算机系统基础知识
2.1 硬件基础知识
2.1.1　计算机系统的组成，硬件系统、软件系统及层次结构　
2.1.2 计算机类型和特点
微机、工作站、服务器、大型计算机、巨型计算机
2.1.3 中央处理器CPU
运算器和控制器的组成，常用的寄存器、指令系统、寻址方式、指令执行控制、处理机性能
2.1.4 主存和辅存
存储器系统
存储介质（半导体、硬盘、光盘、闪存、软盘、磁带等）
主存储器的组成、性能及基本原理
Cache的概念、虚拟存储的概念
辅存设备的类型、特性、性能和容量计算
2.1.5 I/O接口、I/O设备和通信设备
I/O接口（总线、DMA、通道、SCSI、并行口、RS232C、USB、IEEE1394）
I/O设备的类型和特性（键盘、鼠标、显示器、打印机、扫描仪、摄像头，以及各种辅存设备 
I/O设备控制方式（中断控制、DMA）
通信设备的类型和特性（Modem、集线器、交换机、中继器、路由器、网桥、网关）及其连接 
方法和连接介质（串行连接、并行连接，传输介质的类型和特性）
2.2 软件基础知识
2.2.1 操作系统基础知识
操作系统的类型和功能
操作系统的内核（中断控制）和进程概念
处理机管理、存储管理、设备管理、文件管理、作业管理
汉字处理
图形用户界面及其操作方法
2.3 网络基础知识
网络的功能、分类、组成和拓扑结构
网络体系结构与协议（OSI/RM，TCP/IP）
常用网络设备与网络通信设备，网络操作系统基础知识和使用
Client/Server结构、Browser/Server结构
LAN基础知识
Internet基础知识
2.4 数据库基础知识
数据库管理系统的主要功能和特征
数据库模型（概念模式、外模式、内模式）
数据模型，ER图
数据操作（关系运算）
数据库语言（SQL）
数据库的主要控制功能
2.5 多媒体基础知识
多媒体基础概念，常用多媒体设备性能特征，常用多媒体文件格式类型
简单图形的绘制，图像文件的基本处理方法
音频和视频信息的应用 
简单多媒体应用制作方法
2.6 系统性能指标
响应时间、吞吐量、周转时间等概念
可靠性、可维护性、可扩充性、可移植性、可用性、可重用性、安全性等概念
2.7 计算机应用基础知识和常用办公软件的操作方法
信息管理、数据处理、辅助设计、自动控制、科学计算、人工智能等概念
文字处理基础知识和常用操作方法
电子表格处理基础知识和常用操作方法
演示文稿制作方法
电子邮件处理操作方法
网页制作方法
3． 软件开发和运行维护基础知识
3.1 软件工程和项目管理基础知识
软件工程基本概念
软件开发各阶段的目标和任务 
软件过程基本知识
软件工程项目管理基本知识
面向对象开发方法基础知识
软件开发工具与环境基础知识（CASE）
软件质量管理基础知识
3.2 软件需求分析、需求定义及软件基础知识
结构化分析概念（数据流图（DFD）、实体关系图（ER））
面向对象设计、结构化设计基础知识
模拟设计、代码设计、人机界面设计要点
3.3 程序设计基础知识
结构设计程序设计，程序流程图，NS图，PAD图
程序设计风格
面向对象设计基础知识、可视化程序设计基础知识
3.4 程序测试基础知识
黑盒测试、白盒测试、灰盒测试基础知识 
测试工作流程
3.5 软件开发文档基础知识
3.6 软件运行和维护基础知识
软件运行基础知识
软件维护基础知识
4． 安全性基础知识
安全性基本概念
计算机病毒的防治，计算机犯罪的防范
访问控制
加密与解密基础知识
5． 标准化基础知识
标准化基本概念
国际标准、国家标准、行业标准、企业标准基础知识
代码标准、文件格式标准、安全标准、软件开发规范和文档标准基础知识
标准化机构
6． 信息化基本知识
信息化基本概念
全球信息化趋势，国家信息化战略，企业信息化战略和策略常识
有关的法律、法规要点 
过程教育、电子商务、电子政务等常识
企业信息资源管理常识
7． 计算机专业英语
掌握计算机技术的基本词汇
能正确阅读和理解本领域的简单英文资料科目：程序设计1．内部设计
1.1 理解外部设计
1.2 软件功能划分和确定结构
l 数据流图（DFD）、结构图。
1.3 物理数据设计
l 确定数据组织方式、存储介质、设计记录格式，处理方式。
1.4 详细输入输出设计
l 界面设计、报表设计等。
1.5 内部设计文档
l 程序接口、程序功能、人机界面、输入输出、测试计划。
1.6 内部设计评审
2．程序设计
2.1 模块划分（原则、方法、标准）
2.2 编写程序设计文档
l 模块规格说明书（程序处理逻辑、输入输出数据格式）。
l 测试要求说明书（测试类型和目标、测试用例、测试方法）。
2.3．程序设计评审
3．程序实现
3.1 编程
l 编程方法和规范。
l 程序设计语言的选择和使用。
l 人工走查。
l 程序文档化。
3.2 程序测试
l 测试环境和测试工具的选择和使用。
l 测试数据的设计。
l 测试报告的编写。
4．程序设计语言（C语言为必选，再在VB、C++、Java语言中任选一种）
4.1 C程序设计语言（C99标准）
4.2 C++程序设计语言（ANSI C++标准）
4.3 Java程序设计语言（Java2）
考试方式
（1）计算机硬软件基础知识，考试时间为150分钟，笔试，选择题；
（2）程序设计，考试时间为150分钟，笔试，问答题。
其他信息
（1）计算机硬软件基础知识
● 在下图所示的工作表中，若学生的最终成绩等于平时成绩的30%加上考试成绩的70%，那么应在E2单元格中填写 （3） ，并 （4） 拖动填充柄至E7单元格，则可自动算出这些学生的最终成绩。
  （3）A．=C2*30%,D2*70%
B．= C2*30%:D2*70%
C．=SUM(C2*30%,D2*70%）
D．=SUM(C2*70%:D2*30%)
（4）A．向水平方向
B．向垂直方向
C．按住Shift键向水平方向
D．按住Shift键向垂直方向
（2）程序设计
试题一（共15分）
阅读以下说明和流程图，填补流程图中的空缺（1）~（5），将解答填入答题纸的对应栏内。
【说明】
求连续函数f(x)的根（方程f(x)=0的解）的最简单方法是二分法。为此，首先需要在若干点上检查函数值的符号，如果发现f(a)与f(b)符号相反(a<b)，则在区间(a, b)中必然存在f(x)的根。因为当x从a变到b时，连续函数的值将从正变到负（或从负变到正），必然要经过0。区间(a, b)就是根的初始范围。
取该区间的中点m,如果f(m)=0，则根就是m。如果f(a)与f(m)符号相反，则根一定在区间(a, m)中；如果f(m)与f(b)符号相反，则根一定在区间(m, b)中。因此，根的范围缩小了一半。
依此类推，将区间一半一半地分下去，当区间的长度很小（达到根的精度要求，例如0.001）时，或者当区间中点处的函数值几乎接近于0（即绝对值小于预先规定的微小量，例如0.001）时，近似计算就可以结束了。
以下流程图描述了用二分法近似计算区间（a, b）中f(x)的根的过程。
【流程图】
  
（3）2009年下半年程序员考试真题。见参考资料。[5]