【计算机类职业资格】计算机水平考试初级程序员2008年上半年下午真题及答案解析.doc
《【计算机类职业资格】计算机水平考试初级程序员2008年上半年下午真题及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】计算机水平考试初级程序员2008年上半年下午真题及答案解析.doc(7页珍藏版)》请在麦多课文档分享上搜索。
1、计算机水平考试初级程序员 2008 年上半年下午真题及答案解析(总分:105.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.【说明】 假设数组 A 中的各元素 A(1),A(2),A(M)已经按从小到大排序(M1);数组 B 中的各元素 B(1),B(2),B(N)也已经按从小到大排序(N1)。执行下面的流程图后,可以将数组 A 与数组 B中所有的元素全都存入数组 C 中,且按从小到大排序 (注意:序列中相同的数全部保留并不计排列顺序)。例如,设数组 A 中有元素:2,5, 6,7,9;数组 B 中有元素 2,3,4,7:则数组 C 中将有元素:2,2,3,4
2、,5,6,7, 7, 9。 【流程图】 (分数:15.00)_二、B试题二/B(总题数:1,分数:15.00)2.【说明】 下面的程序按照以下规则输出给定名词的复数形式。 a若名词以“y”结尾,则删除 y 并添加“ies”; b若名词以“s”、“ch”或“sh”结尾,则添加“es”; c其他所有情况,直接添加“s”。 【C 程序】 #include stdioh #include stringh char*plural(char *word) int n; char *pstr; nstrlen(word); /*求给定单词的长度*/ pstr(char*)malloc(n+3);/*申请给定
3、单词的复数形式存储空间*/ if (!pstr|n2) return NULL; strcpy(pstr,word); /*复制给定单词*/ if (U (1) /U) pstrn-1i;pstrn e;pstrn+1s;U (2) /U; else if(pstrn-1s| |pstrn-1h&(U (3) /U) pstrne;pstrn+1s;pstrn+2/0; else pstrns;pstrn+1/0;) U (4) /U; main() int i; char *ps; char wc910 “chair“,“dairy“,“boss“,“circus“,“fly“,“dog“,
4、“church“,“clue“,“dish“); for(i 0;i9; i+) psU (5) /U; printf(“%s: %s/n“,wci,ps); /*输出单词及其复数形式*/ free(ps); /*释放空间*/ system(“pause“); (分数:15.00)_三、B试题三/B(总题数:1,分数:15.00)3.【说明】 下面的程序用 DoleRob 算法生成 N 阶(N 为奇数)魔方阵(各行、列、对角线数字之和相等)。该算法的过程为:从 1 开始,按如下方法依次插入各自然数,直到 N2 为止。 a在第一行的正中插入1。 b新位置应当处于最近插入位置的右上方,若该位置已超
5、出方阵的上边界,则新位置取应选列的最下一个位置;若超出右边界,则新位置取应选行的最左一个位置。 c若最近插入的元素是 N 的整数倍,则选同列的下一行位置为新位置。 例如,3 阶魔方阵如下所示: 8 1 6 3 5 7 4 9 2 【C 程序】 #includestdio.h #includestdlib.h #define SIZE 50 main( ) int row, col, n,value; int aSIZE+1SIZE+1; /*不使用下标为 0 的元素*/ printf(“请输入要输出魔方阵的阶数n(奇数,%d):n“,SIZE); scanf(“%d“,&n); if (!(n
6、 % 2)|n 1 |U (1) /U) printf(“输入数据有误!/n“); exit(0); row1; col (n+1)/2; value1; while(value U (2) /U) arowcol value; /*计算下一位置*/ if(value%n !0) row-; U (3) /U; if(row1) rown; if(coln)U (4) /U; else row+; value U(5) /U; printf(“/n%d 阶魔方阵如下所示:/n/n“,n); for(row 1;row n; row+) for(col 1; col n; col+) print
7、f(“%5d“,arowcol); printf(“/n“); (分数:15.00)_四、B试题四/B(总题数:1,分数:15.00)4.【说明】 计算机在处理算术表达式时,首先将其转换为后缀表达式。例如,表达式“46+5*(120-37)”的后缀表达式形式为“46 512037-*+”。 计算后缀表达式时,从左至右扫描后缀表达式:若遇到运算对象,则压入栈中;遇,到运算符,则从栈中弹出相关运算对象进行计算,并将运算结果压入栈中。重复以上过程,直到后缀表达式扫描结束。例如,后缀表达式“46 5120 37-*+”的计算过程如下。 a依次将46、5、120、37 压入栈中; b遇到“-”,取出 3
8、7、120,计算 120-37=83,将其压入栈中: c遇到“*”,取出 83、5,计算 583=415,将其压入栈中; d遇到“+”,取出 415、46,计算46+415=461,将其压入栈中; e表达式结束,则计算过程完成。 函数 computing(char expr,int *result)的功能是基于栈计算后缀形式的表达式(以串形式存入字符数组 expr)的值,并通过参数 result返回该值。函数的返回值为-1/0,分别表示表达式有/无错误。假设表达式中仅包含数字、空格和算术运算符号,其中所有项均以空格分隔,且运算符仅包含加(“+”)、减(“-”)、乘(“*”)、除(“/”)。 函
9、数 computing 中所用栈的基本操作的函数原型说明如下。 void InitStack(STACK *s):初始化栈。 void Push(STACK,s,int e):将一个整数压栈,栈中元素数目增 1。 void Pop(STACK *s):栈顶元素出栈,栈中元素数目减 1。 int Top(STACK s):返回非空栈的栈顶元素值,栈中元素数目不变。 int IsEmpty(STACKs):若 s 是空栈,则返回 1;否则返回 0。 【C 函数】 int computing (char expr,int *result) STACK s; int tnum,a,b; char *p
10、tr; InitStack(&s); ptrexpr;pstr /*字符指针指向后缀表达式串的第一个字符*/ while(*ptr!/0) if(*ptr= ) /*当前字符是空格*/ U (1) /U; /*字符指针指向下一字符*/ continue; else if(isdigit (*ptr) /*当前字符是数字,则将该数字开始的数字串转换为数值*/ tnumU (2) /U; while (*ptr0 & *ptr 9) tnumtnum * 10 + U(3) /U; ptr+; Push(U (4) /U); else /*当前字符是运算符或其他符号*/ if (*ptr+|*pt
11、r-|*ptr*|*ptr/) if(!IsEmpty(s) aTop(s);Pop(&s); /*取运算符的第二个运算数*/ if(!IsEmpty(s) bTop(s);Pop(&s);/*取运算符的第一个运算数*/ else return -1; else return -1; switch (*ptr) case +: Push(&s,b+a); break; case -:Push(&s,b-a);break; case *:Push(&s,b*a); break; case /:Push(&s,b/a); break; else return -1; ptr+; /*字符指针指向下
12、一字符*/ /*while*/ if(IsEmpty(s) return -1; else U(5) /UTop(s); Pop(&s); /*取运算结果*/ if(!IsEmpty(s) return -1; return 0; (分数:15.00)_五、B试题五/B(总题数:1,分数:15.00)5.【说明】 已知对某载客车辆(Car)进行类建模,如图 5-1 所示,其中类 Engine 表示发动机引擎,类Wheel 表示车轮,类 Body 表示车身,类 Driver 表示司机,类 Passenger 表示乘客。 (分数:15.00)_六、B试题六/B(总题数:1,分数:15.00)6.【
13、应用说明】 某应用程序可选择打开用户指定的文本文件,将其内容显示在指定的文本框内供用户编辑,并将编辑后的结果保存在用户指定的文件中。运行时的窗口如图 6-1 所示,其中有 6 个标签、一个驱动器列表框、一个目录列表框、一个文件列表框、一个文件类型组合框、一个文件编辑文本框、一个文件名文本框以及两个命令按钮。 (分数:15.00)_七、B试题七/B(总题数:1,分数:15.00)7.【说明】 已知对某载客车辆(Car)进行类建模,如图 7-1 所示,其中类 Engine 表示发动机引擎,类Wheel 表示车轮,类 Body 表示车身,类 Driver 表示司机,类 Passenger 表示乘客。
14、 (分数:15.00)_计算机水平考试初级程序员 2008 年上半年下午真题答案解析(总分:105.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.【说明】 假设数组 A 中的各元素 A(1),A(2),A(M)已经按从小到大排序(M1);数组 B 中的各元素 B(1),B(2),B(N)也已经按从小到大排序(N1)。执行下面的流程图后,可以将数组 A 与数组 B中所有的元素全都存入数组 C 中,且按从小到大排序 (注意:序列中相同的数全部保留并不计排列顺序)。例如,设数组 A 中有元素:2,5, 6,7,9;数组 B 中有元素 2,3,4,7:则数组 C 中将
15、有元素:2,2,3,4,5,6,7, 7, 9。 【流程图】 (分数:15.00)_正确答案:()解析:(1)1 (2)A(i) (3)B(j) (4)i (5)j (6)B(j) (7)A(i) (8)j (9)i 分析 这是最常见的一种合并排序方法。为对较大的序列进行排序,先将其分割成容量相当的几个部分,分别进行排序,最后再合并在一起。当然,这些排序要么都是升序,要么都是降序。本题全部是按升序排序的。 例如,为了将整副扑克牌按升序进行排序,先将其分割成两个部分(数量大致相当),对每个部分完成升序排序后,就形成了两叠已排序的牌。如何将其合并呢?办法如下。 每次都比较各叠最上面的两张牌,取出比
16、较小的,放入新堆,再继续比较。直到其中一堆空了,就将另一堆剩余的牌逐张放入新堆。新堆就是合并后的已完成排序的序列。 在数据排序时,遇到相同的数比较时,任取一个就可以了。 对本题来说,i、j、k 是数组 A、B、C的下标,初始时,都应该是 1。因此,空(1)处应填写 1。 将 A(i)与 B(j)进行比较后,如果 A(i)B(j),那么应该将 A(i)C(k)。这是升序的要求。因此,空(2)处应填 A(i)。如果 A(i)B(j),则应将 B(j)C (k)。因此,空(3)处应填 B(j)。 在 A(i)C(k)后,i 应增加 1,为下次取 A(i)再比较做准备(k 也需要增加 1,为下次存入
17、C(k)做准备)。这时,需要比较数组 A 是否已经取完,即判断 iM 是否成立。如果iM,则表示数组 A 中的元素已经全部取出,需要将数组 B 中剩余的元素逐个移入 C(k)。因此,空(4)处应填 i,空(6)处应填 B(j)。数组 B 处的元素何时移完呢?这就需要判断 iN 是否成立。因此,空(8)处应填 j。 同样,空(3)处将 B(j)存入 C(k),直到,jN 时数组 B 中的元素取完。此时,需要将数组 A 中剩余的元素逐个移入 C(k),直到 iM 时全部完成。因此,空(5)处应填 j,空(7)处应填 A(i),空(9)处应填 i。二、B试题二/B(总题数:1,分数:15.00)2.
18、【说明】 下面的程序按照以下规则输出给定名词的复数形式。 a若名词以“y”结尾,则删除 y 并添加“ies”; b若名词以“s”、“ch”或“sh”结尾,则添加“es”; c其他所有情况,直接添加“s”。 【C 程序】 #include stdioh #include stringh char*plural(char *word) int n; char *pstr; nstrlen(word); /*求给定单词的长度*/ pstr(char*)malloc(n+3);/*申请给定单词的复数形式存储空间*/ if (!pstr|n2) return NULL; strcpy(pstr,word
19、); /*复制给定单词*/ if (U (1) /U) pstrn-1i;pstrn e;pstrn+1s;U (2) /U; else if(pstrn-1s| |pstrn-1h&(U (3) /U) pstrne;pstrn+1s;pstrn+2/0; else pstrns;pstrn+1/0;) U (4) /U; main() int i; char *ps; char wc910 “chair“,“dairy“,“boss“,“circus“,“fly“,“dog“,“church“,“clue“,“dish“); for(i 0;i9; i+) psU (5) /U; prin
20、tf(“%s: %s/n“,wci,ps); /*输出单词及其复数形式*/ free(ps); /*释放空间*/ system(“pause“); (分数:15.00)_正确答案:()解析:(1)pstrn-1y,或*(pstr+n-1)=y,或其等价表示 (2)pstrn+2=/0,或*(pstr+n+2)=/0,或其等价表示 (3)pstrn-2c|pstrn-2s,或其等价表示 (4)return pstr (5)plural(wci),或其等价表示 分析 本题考查 C 程序设计基本能力和字符串处理基本操作。 C 程序中字符串存储在字符数组中,串的结尾需要设置结束标志符号/0。若已知串
21、pstr 的长度为 n(不包括结束标志),则串中的字符依次存储在 pstr0,pstr1,pstrn-1中。因此,名词的最后一个字符 pstrn-1若等于字符“y”,则按照规则 a 求其复数形式。下面的 if 语句处理的是以“y”结尾的名词,因此,空(1)处应填入“pstrn-1y”或其等价形式。由于串 pstr 的长度发生了变化,所以需要设置新的结束标志,空(2)处应填入“pstrn+2/0”或其等价形式。 if(U (1) /U) pstrn-1 I; pstrn e; pstrn+1 s;U (2) /U; 显然,下面的 if 语句处理规则 b 所示的情况,即串的末尾为“s”、“ch”或
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 计算机水平 考试 初级 程序员 2008 上半年 下午 答案 解析 DOC
