【计算机类职业资格】计算机水平考试初级程序员2007年上半年下午真题及答案解析.doc
《【计算机类职业资格】计算机水平考试初级程序员2007年上半年下午真题及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】计算机水平考试初级程序员2007年上半年下午真题及答案解析.doc(11页珍藏版)》请在麦多课文档分享上搜索。
1、计算机水平考试初级程序员 2007 年上半年下午真题及答案解析(总分:129.00,做题时间:90 分钟)1.B试题一/B 阅读以下说明和流程图,回答问题 1 和问题 2。 【说明】 为便于管理,每本正式出版的图书都印有国际标准书号。标准书号由“ISBN”和 10 个数字组成,其格式为:ISBN 组号-出版者号-书名号-校验码。其中,校验码是根据前面 9 个数字计算得到的,用于计算机自动校验。假设标准书号的 10 个数字依次是 a(1),a(2),a(10),则校验码 a(10)的设置应使 S=10*a(1)+9*a(2)+8*a(3)+1*a(10)能被 11 整除。如果校验码 a(10)应
2、设置成 10,则规定以“X”表示之。例如,信息处理技术员考试大纲的标准书号为:ISBN 7-302-11191-X。第 1 段上的数字“7”是国际 ISBN 中心分配给中国ISBN 中心管理的组号。第 2 段上的“302”表示清华大学出版社。标准书号的校验过程如图 1-1 所示,计算校验码的过程如图 1-2 所示,其中,Mod(S,11)表示 S 除以 11 得到的余数。 【流程图】 (分数:12.00)_2.【问题 2】 设“程序员考试大纲”标准书号前 9 个数字为 7-302-08493,请写出其校验码。(分数:12.00)_二、B试题二/B(总题数:1,分数:15.00)3.【说明】 下
3、面待修改的 C 程序完成的功能是:对于给定的一个长正整数,从其个位数开始,每隔一位取一个数字(即取其个位、百位、万位等数字),形成一个新的整数并输出。例如,将该程序修改正确后,运行时若输入“14251382”,则输出的整数为“4532”。 下面给出的 C 程序代码中有五个错误,请指出所有的错误。 【C 程序代码】 01 #include stdio.h 02 03 int main() 04 05 long n, num; 06 int i; 07 08 do 09 printf(“请输入一个正整数:“); 10 scanf(“%ld“, n); 11 while(n = 0); 12 k =
4、 1; 13 for (i = 1; n = 0; i+) 14 if (i % 2 = 1) 15 num= num+ (n % 10) * k; 16 k = k * 10; 17 18 n = n / 10; 19 20 printf(“新数据为: %d /n“,num); 21 return 0; 22 (分数:15.00)_三、B试题三/B(总题数:1,分数:15.00)4.【说明】 函数 count months(DATE start,DATE end)的功能是:计算两个给定日期之间所包含的完整月份数。 该函数先算出起止日期中所含的完整年数,再计算余下的完整月份数。 规定两个相邻年
5、份的同月同日之间的间隔为 1 年。例如,2007.5.302008.5.30 的间隔为 1 年。若相邻两年中前一年是闰年,并且日期是 2 月 29 日,则到下一年的 2 月 28 日为 1 年,即 2008.2.292009.2.28 的间隔为 1 年。 规定两个相邻月份的相同日之间的间隔为 1 个月,但需要特别考虑月末的特殊情况。例如,2007.1.292007.2.28 的间隔为 1 个月,同理,2007.1.302007.2.28、2007.1.312007.2.28 的间隔都是 1 个月。 计算起止日期间隔不足一年的完整月份数时,分如下两种情况。 (1)起止日期不跨年度。先用终止日期的
6、月号减去起始日期的月号得到月份数,然后再根据情况进行修正。例如,起止日期为 2008.3.312008.9.20,通过月号算出月份数为 6。修正时,通过调用函数 makevalid 将 2008.9.31 改为 2008.9.30,与终止日期 2008.9.20 比较后,将月份数修正为 5。 (2)起止日期跨年度。计算方法如下例所示:对于起止日期 2008.7.252009.3.31,先计算 2008.7.252008.12.25 的月份数为 5,再算出 2008.12.252009.3.25 的月份数为 3,因此 2008.7.252009.3.31 之间的完整月份数为 8。 日期数据类型定
7、义如下:typedef struct int year; int month; int day; /*日期的年号(4 位)、月和口号*/ DATE; 程序中使用的函数 cmp_date()、isLeap Year()和 makevalid()说明如下。 (分数:15.00)_四、B试题四/B(总题数:1,分数:15.00)5.【说明】 函数 sort (NODE *head)的功能是;用冒泡排序法对单链表中的元素进行非递减排序。对于两个相邻结点中的元素,若较小的元素在前面,则交换这两个结点中的元素值。其中,head 指向链表的头结点。排序时,为了避免每趟都扫描到链表的尾结点,设置一个指针 en
8、dptr,使其指向下趟扫描需要到达的最后一个结点。例如,对于图 4-1(a)的链表进行一趟冒泡排序后,得到图 4-1(b)所示的链表。 (分数:15.00)_五、B试题五/B(总题数:1,分数:15.00)6.【应用说明】 某应用的登录界面如下: (分数:15.00)_六、B试题六/B(总题数:1,分数:15.00)(以下试题六至试题八任选一题)阅读下列说明和 C+代码,请回答问题 1 至问题 3。【说明】已知下列程序运行时的输出应为:1:11:11:1【C+程序】01 #include iostream02 using namespace std;03 class Stock04 prote
9、ct:05 U (1) /U;06 Stock(iht n, int pr=1)07 shares = n; share_val=pr;08 ;09 voidStock();10 public:11 /成员函数12 void output()13 U(2) /U shares “:“ share val endl;14 15 private:16 /成员变量17 int shares;18 int share_val;19 ;2021 void main()22 Stock a(1); a.output();23 Stock b; b.output();24 Stock c = Stock()
10、; c.output();25 (分数:15.00)(1).【问题 1】请补齐下述代码中的空缺 1 和 2。(分数:5.00)_(2).【问题 2】类 Stock 的定义中有两处错误,请指出错误所在行号并给出该行修改后的完整结果。(分数:5.00)_(3).【问题 3】指出该代码是否存在内存泄漏。(分数:5.00)_七、B试题七/B(总题数:1,分数:15.00)7.【应用说明】 某交通灯演示程序启动后,其运行窗口中包括红绿灯标志以及当前红绿灯状态剩余秒数的动态显示(如下图)。红灯与绿灯持续的时间分别为 30 秒与 40 秒。持续时间结束时,立即变更红绿灯,并重新显示剩余秒数。 (分数:15.
11、00)_八、B试题八/B(总题数:1,分数:15.00)阅读以下说明和 Java 代码,请回答问题 1 和问题 2。【说明】己知类 Stock 和类 cxyjava 都定义在 cxyjava.java 文件中,类 Stock 的定义中第 14 行前共有四行出现了错误,将下面代码修改正确并完善后的输出结果为:0:01:23【Java 代码】01 public class Stock02 static 03 shares = 0;04 share val = 0.0;O5 06 public Stock()getData();07 public Stock(int n, iht pr=0)08 s
12、hares = n;09 share val = pr;10 getData();11 12 public void getData() 13 System.out.println(shares + “:“+share_val);14 15 private int shares;16 private int share_val;17 ;1819 public class cxyjava20 public static void main(String args) 21 Stock a =U (1) /U;22 Stock b = new Stock(1,23);23 /其他无输出代码省略24
13、25 (分数:15.00)(1).【问题 1】请指出错误所在行号并给出该行修改后的完整结果。(分数:7.50)_(2).【问题 2】请补齐第 21 行代码中的空缺。(分数:7.50)_计算机水平考试初级程序员 2007 年上半年下午真题答案解析(总分:129.00,做题时间:90 分钟)1.B试题一/B 阅读以下说明和流程图,回答问题 1 和问题 2。 【说明】 为便于管理,每本正式出版的图书都印有国际标准书号。标准书号由“ISBN”和 10 个数字组成,其格式为:ISBN 组号-出版者号-书名号-校验码。其中,校验码是根据前面 9 个数字计算得到的,用于计算机自动校验。假设标准书号的 10
14、个数字依次是 a(1),a(2),a(10),则校验码 a(10)的设置应使 S=10*a(1)+9*a(2)+8*a(3)+1*a(10)能被 11 整除。如果校验码 a(10)应设置成 10,则规定以“X”表示之。例如,信息处理技术员考试大纲的标准书号为:ISBN 7-302-11191-X。第 1 段上的数字“7”是国际 ISBN 中心分配给中国ISBN 中心管理的组号。第 2 段上的“302”表示清华大学出版社。标准书号的校验过程如图 1-1 所示,计算校验码的过程如图 1-2 所示,其中,Mod(S,11)表示 S 除以 11 得到的余数。 【流程图】 (分数:12.00)_正确答案
15、:()解析:(1)(11-I)*aI(或 I*a(11-I) (2)9 (3)S+(11-I)*aIS(或 S+(I+1)*a(10-I)S) (4)MOD(11-R,11)2.【问题 2】 设“程序员考试大纲”标准书号前 9 个数字为 7-302-08493,请写出其校验码。(分数:12.00)_正确答案:()解析:9 分析 制订标准书号的目的是实现图书的国际统一编码,以便于实现计算机化的图书管理信息系统,使出版社内的图书管理、书库中的图书管理以及书店的图书销售管理具有更高的工作效率和管理水平。 标准书号采用分段编码,总长度是统一的,而段的长度是不统一的。例如,中国的出版者号规定为27 位数
16、字。对较大的出版社分配比较短的码,留出较长的书名号为较多的书进行编码。 标准书号的最后一位是校验码。设置校验码可以大大减少录入错误造成的管理混乱。 校验码一般由计算机程序产生。当操作人员录入前 9 个数字后,计算机就会自动启动计算校验码的过程,输出正确的校验码。 在书店(或书库),不论是建库还是查询检索,在手工输入带校验码的标准书号后,计算机就会自动启动校验过程,判断是否输入错误。 计算校验码的过程中,首先要计算 S=10*a(1)+9*a(2)+8*a(3)+2*a(9),这就要采用循环。在循环前应设置初始值 S=0,在循环体内应执行 S+(11-I)*a(1)S 或 S+ (I+1)*a(
17、10-I)S(其中的乘号“*”不要丢失)。该循环应对循环变量 I=19 进行(步长默认为 1),因此,(2)处应填9,(3)处填 S+(11-I)*a(I)S 或 S+(I+1)*a(10-I)S。 接着再计算该 S 值除以 11 的余数 R。显然 0R二、B试题二/B(总题数:1,分数:15.00)3.【说明】 下面待修改的 C 程序完成的功能是:对于给定的一个长正整数,从其个位数开始,每隔一位取一个数字(即取其个位、百位、万位等数字),形成一个新的整数并输出。例如,将该程序修改正确后,运行时若输入“14251382”,则输出的整数为“4532”。 下面给出的 C 程序代码中有五个错误,请指
18、出所有的错误。 【C 程序代码】 01 #include stdio.h 02 03 int main() 04 05 long n, num; 06 int i; 07 08 do 09 printf(“请输入一个正整数:“); 10 scanf(“%ld“, n); 11 while(n = 0); 12 k = 1; 13 for (i = 1; n = 0; i+) 14 if (i % 2 = 1) 15 num= num+ (n % 10) * k; 16 k = k * 10; 17 18 n = n / 10; 19 20 printf(“新数据为: %d /n“,num);
19、21 return 0; 22 (分数:15.00)_正确答案:()解析:错误 1:变量 k 没有声明(或定义)。 错误 2:变量 num 没有初始化,或者 num 应初始化为 0。 错误 3:第 10 行 scanf 函数参数错,或者“scanf(“%1d“,n);”中的 n 应该为“”。由于变量 num 没有赋初值,该语句运行的结果导致 num 的值是不确定的。 在本题给出的程序中,出现了如下错误。 (1)使用的变量 k 没有定义(语法错误,编译程序报告:k 是未定义的标识符)。 (2)变量 num 没有赋初始值就直接使用(动态语义错误),应将其初始值设为 0。由于 num是局部变量,使用
20、变量 num 的语句为“num=num+(n%10)*k”,系统不保证对其进行初始化,导致程序的运行结果不确定。 (3)第 14 行,误把“=”作为关系运算符“等于”(语法错误), (4)第 10 行,输入变量时忘记使用地址符号(动态语义错误),运行时变量 n 不能正确接收输入的数据。 (5)第 13 行,循环条件错误,导致无穷循环。 考生应多上机调试程序,这样就可以熟悉常见的程序错误,从而提高编程水平和效率。三、B试题三/B(总题数:1,分数:15.00)4.【说明】 函数 count months(DATE start,DATE end)的功能是:计算两个给定日期之间所包含的完整月份数。
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 计算机水平 考试 初级 程序员 2007 上半年 下午 答案 解析 DOC
