【计算机类职业资格】初级程序员下午试题-12及答案解析.doc

上传人:ideacase155 文档编号:1330075 上传时间:2019-10-17 格式:DOC 页数:6 大小:55.50KB
下载 相关 举报
【计算机类职业资格】初级程序员下午试题-12及答案解析.doc_第1页
第1页 / 共6页
【计算机类职业资格】初级程序员下午试题-12及答案解析.doc_第2页
第2页 / 共6页
【计算机类职业资格】初级程序员下午试题-12及答案解析.doc_第3页
第3页 / 共6页
【计算机类职业资格】初级程序员下午试题-12及答案解析.doc_第4页
第4页 / 共6页
【计算机类职业资格】初级程序员下午试题-12及答案解析.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、初级程序员下午试题-12 及答案解析(总分:90.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.【说明】 有数组 A(4,4),把 1到 16个整数分别按顺序放入 A(1,1),A(1,4),A(2,1),A(2,4),A(3,1),A(3,4),A(4,1),A(4,4)中,下面的流程图用来获取数据并求出两条对角线元素之积。 【流程图】 (分数:15.00)_二、B试题二/B(总题数:1,分数:15.00)2.【说明】 实现矩阵(3 行 3列)的转置(即行列互换)。 例如,输入下面的矩阵: 100 200 300 400 500 600 700 800 90

2、0 程序输出: 100 400 700 200 500 800 300 600 900 【函数】 int fun(int array33) int i,j,t; for(i=0;U (1) /U;i+) for(j=0;U (2) /U;j+) t=arrayij; U (3) /U; U (4) /U; main() int i,j; int array33=100,200,300,400,500,600,700,800,900; clrscr(); for (i=0;i3;i+) for(j=0;j3;j+) printf(“%7d“,arrayij); printf(“/n“); fun

3、(U (5) /U); printf(“Converted array:/n“); for(i=0;i3;i+) for(j=0;j3;j+) printf(“%7d“,arrayij);printf(“/n“); (分数:15.00)_三、B试题三/B(总题数:1,分数:15.00)3.【说明】 对 20个数进行排序,可以利用选择法,即从后 19个比较过程中,选择一个最小的与第一个元素交换,依次类推,即用第二个元素与后 18个进行比较,并进行交换。 【函数】 #define N 20 main() int i,j,min,tem,aN; printf(“please input twenty

4、 num:/n“); for(i=0;iN;i) printf(“a%d=“,i); scanf(“%d“, printf(“/n“); for(i=0;iN;i) printf(“,“,ai); printf(“/n“); for(i=0;U (1) /U;i) min=U (2) /U; for(j=U (3) /U;jN;j+) if(U (4) /U) min=j; tem=ai; U (5) /U; amin=tem; printf(“After sorted /n“); for(i=0;iN;i+) printf(“,“,ai); (分数:15.00)_四、B试题四/B(总题数:1

5、,分数:15.00)4.【说明】 已知某数列的前两项为 2和 3,其后继项根据当前最后两项的乘积按下列规则生成: (1)若乘积为一位数,则该乘积即为数列的后继项; (2)若乘积为二位数,则该乘积的十位数和个位数依次作为数列的两个后继项。 本程序输出该数列的前 n项以及它们的和。其中,函数 sum(n,pa)返回数列的前 n项之和,并将生成的前 n项存放于首指针为 pa的数组中。程序中规定输入的 n值必须大于 2并且不超过给定的常数值 MAXNUM。 例如:若输入 n值为 10,则程序输出如下内容: sum(10)=44 2 3 6 1 8 8 6 4 2 4 #includestdio.h #

6、define MAXNUM 100 int sum(int n,int *pa) int count,total,temp; *pa=2; U (1) /U=3; total=5; count=2; while(count+n) temp+=*(pa-1)*pa; if(temp10) total+=temp; *(+pa)=temp; else U (2) /U=temp/10; total+=*pa; if(countn) count+;pa+; U (3) /U=temp%10; total+=*pa; U (4) /U; main() int n,*p,*q,numMAXNUM; do

7、 printf(“Input N=?(2N%d):“,MAXNUM+1); scanf(“%d“, while(U (5) /U); printf(“/nsum(%d)=%d/n“,n,sum(n,num); for(p=num,q=U (6) /U;pq;p+)printf(“%4d“,*p); printf(“/n“); (分数:15.00)_五、B试题五/B(总题数:1,分数:15.00)5.【说明】 冒泡排序算法,作为 OrderedlistT,size类的成员函数,last 是有序表的元素个数。 templatetypename T,int sizevoid OrderedlistT

8、,sizeBubbleSort() bool noswap; /交换标志 int i,j; T temp; for(i=0;ilast;i+) noswap=U (1) /U; for(j=U (2) /U;U (3) /U;U (4) /U) /从下往上冒泡 if(slistjslistj-1) temp=slistj; slistj=slistj-1; slistj-1=temp; noswap=U (5) /U; if(noswap)break; (分数:15.00)_六、B试题六/B(总题数:1,分数:15.00)6.【说明】 本程序根据输入的月份数,输出它是哪个季节。 【代码】 im

9、port java.io.*; public class season public static void main(String args) String strln=“; U (1) /Uin=new InputStreamReader(System.in); BufferedReader buffln=new BufferedReader(in); System.out.print(“Please enter a month(1-12):“); try strln=buffln.readLine();/从命令行读入数据 catch(U (2) /U) System.out.printl

10、n(e.toStdng(); int month=U (3) /U(strln);/将字符串转换成整数型 int season=0; if(month12 /计算季节的公式 U (4) /U(season) case 1: System.out.println(“the season is Springl“); break; case 2: System.out.println(“the season is Summer!“); case 3: System.out.println(“the season is Fall!“); case 4: System.out.println(“the

11、season is Winter!“); break; U (5) /U; System.out.println(“this is not correct month!“); (分数:15.00)_初级程序员下午试题-12 答案解析(总分:90.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.【说明】 有数组 A(4,4),把 1到 16个整数分别按顺序放入 A(1,1),A(1,4),A(2,1),A(2,4),A(3,1),A(3,4),A(4,1),A(4,4)中,下面的流程图用来获取数据并求出两条对角线元素之积。 【流程图】 (分数:15.00)_正确答

12、案:()解析:(1)1,4,1 (2)1,4,1 (3)1 (4)sAi,i (5)sA5-i,i 分析 本题考查用程序流程图描述数组及求对角线的和。 题目要求把 1到 16个整数分别按顺序放入 A(1,1),A(1,4),A(2,1),A(2,4), A(3,1),A(3,4),A(4,1),A(4,4)中,那么数组中的元素刚好构成一个方阵,用流程图求出这个方阵的对角线之积。下面来具体分析流程图。 第(1)空与第(2)空应该结合起来完成,它们都是一个循环判断语句的条件,从图中可以看出,如果这两个条件都成立,则读出当前数组中的元素值,根据题目要求,数组中的元素个数是每行 4个每列 4个,那么循

13、环的上界应该是 4,而下标是从 1开始的,因此这两个空答案为 1,4,1。 第(3)空是一个赋值语句,给变量 s赋一个初值,从图中后面的语句不难看出 s中存放的是求积的结果,那么在求积以前,s 的值应该为 1,因此此空答案为 1。 第(4)空也是一个赋值语句,是在循环条件判断语句下,我们已经知道变量 s中存放的是每次求积的结果,那么此空很明显是用来求积的,用当前取到的对角线元素乘以变量 s中存放的值,因此此空答案为 sAi,i。 第(5)空和上一空非常相似,但它是用来求另外一条对角线的积的,它也是在一个循环下来实现的,这条对角线的元素位置与上面那条具有对称的特点,因此此空答案为 sA5-i,i

14、。二、B试题二/B(总题数:1,分数:15.00)2.【说明】 实现矩阵(3 行 3列)的转置(即行列互换)。 例如,输入下面的矩阵: 100 200 300 400 500 600 700 800 900 程序输出: 100 400 700 200 500 800 300 600 900 【函数】 int fun(int array33) int i,j,t; for(i=0;U (1) /U;i+) for(j=0;U (2) /U;j+) t=arrayij; U (3) /U; U (4) /U; main() int i,j; int array33=100,200,300,400,

15、500,600,700,800,900; clrscr(); for (i=0;i3;i+) for(j=0;j3;j+) printf(“%7d“,arrayij); printf(“/n“); fun(U (5) /U); printf(“Converted array:/n“); for(i=0;i3;i+) for(j=0;j3;j+) printf(“%7d“,arrayij);printf(“/n“); (分数:15.00)_正确答案:()解析:(1)i3 (2)ji (3)arrayij=arrayji (4)arrayji=t (5)array 分析 本题考查用C语言实现矩阵的

16、转置。 题目要求程序实现矩阵(3 行 3列)的转置,其关键是将当前行列对应的元素与其对应的列行元素互换。题目中给出了具体的矩阵元素和结构,下面来具体分析程序。 第(1)空很明显是循环语句的判断条件,是上界条件,这个二重循环的作用是进行数组中元素的互换,而从题目中给出的已知条件可以判断出,这个数组是一个三维的数组,而在程序中下标是从 0开始的,那么其上界应该是不大于3,因此这个空的答案分别是 i3。 第(2)空也是循环的判断上界,在上面我们已经分析出了这个二重循环的作用是进行数组中元素的互换,而元素互换的过程是将当前行列对应的元素与其对应的列行元素互换,元素的下标都要在能互换的下标范围内,那么第

17、二重循环的上界应该是第一重循环变量的当前值,因此此空答案为 ji。 第(3)空在这个二重循环体中,从程序中不难发现,用一个临时变量 f来存放要置换的值,接下来就是此空,那么应该是将其中一个值放到其转置后的位置,再结合上面分析,可以得出此空答案为 arrayij=arrayji。 第(4)空是紧接着上一空而来的,在上面的程序中已经将当前位置中的值保存到了临时变量 t中,且把其对应的转置位置的元素值放到了这个位置,那么接下来应该是将临时变量中的值放到转置位置,因此此空答案为 arrayji=t。 第(5)空很明显是函数的参数,这个函数就是功能函数 fun(),用来实现矩阵的转置,根据程序中函数的定

18、义,它只有一个参数,这个参数是要被处理的数组。在主函数中,需要被处理的数组是 array,这里我们需要注意在数组作为函数的形参时,一般是通过传递其地址来实现参数传递的,因此此空答案为 array。三、B试题三/B(总题数:1,分数:15.00)3.【说明】 对 20个数进行排序,可以利用选择法,即从后 19个比较过程中,选择一个最小的与第一个元素交换,依次类推,即用第二个元素与后 18个进行比较,并进行交换。 【函数】 #define N 20 main() int i,j,min,tem,aN; printf(“please input twenty num:/n“); for(i=0;iN

19、;i) printf(“a%d=“,i); scanf(“%d“, printf(“/n“); for(i=0;iN;i) printf(“,“,ai); printf(“/n“); for(i=0;U (1) /U;i) min=U (2) /U; for(j=U (3) /U;jN;j+) if(U (4) /U) min=j; tem=ai; U (5) /U; amin=tem; printf(“After sorted /n“); for(i=0;iN;i+) printf(“,“,ai); (分数:15.00)_正确答案:()解析:(1)iN-1 (2)i (3)i+1 (4)am

20、inaj (5)ai=amin 分析 本题考查 C语言中的排序算法。题目要求对 20个数进行排序,并告诉我们利用选择法,即从后 19个比较过程中,选择一个最小的与第一个元素交换,依此类推,即用第二个元素与后 18个进行比较,并进行交换。它的每次排序的过程都是从元素中选取最小的一个排在当前排序序列的最前面,需要注意的是,程序中用数组的下标来协助完成排序。下面来具体分析程序。 第(1)空是循环的判断条件,而这个循环是一个二重循环的第一重,从程序中不难分析出,这个二重循环的作用是完成排序的过程,且这个排序的元素存放在数组 a中,元素的个数为N个,而数组的下标是从 0开始的,根据题目的意思,最多到最后

21、一个元素的时候就不需要再排序了,它就是最大的元素。那么循环的上界应该是不大于 N-1,因此此空答案为 iN-1。 第(2)空是给变量 min赋一个值,根据题目要求,这个变量中存放的是当前排序序列中最小的元素的数组下标,而在开始排序之前,这里存放的是当前排序序列的第一个元素,每次参加排序的序列的第一个元素下标就是 i,因此此空答案为 i。 第(3)空是给第二重循环的循环变量 j赋一个初值,这重循环的作用是从当前位置后面的元素中选一个最小的元素排在当前位置的后一个位置,那么循环应该是从当前位置的后一个位置开始,因此此空答案为 i+1。 第(4)空是条件判断语句的判断条件,很明显,这个条件判断语句的

22、作用是判断当前数组 min中的值(最小元素)与当前位置元素的大小关系,如果小则继续与下一个元素比较,如果大则把数组中当前位置的元素的下标存放到 min中,从 min=j可以看出,应该是大,因此此空答案为 aminaj。 第(5)空也在循环中,从程序中不难看出是用来调换序列中元素的位置,上面的程序是将 ai的值存放到临时变量 tem中,ai中存放的元素应该是参加排序的序列中最小的元素值,而数组中下标 min指明了序列中最小元素在数组中的位置,此空的任务就是将最小的元素放到数组的 i位置,因此此空答案为 ai=amin。四、B试题四/B(总题数:1,分数:15.00)4.【说明】 已知某数列的前两

23、项为 2和 3,其后继项根据当前最后两项的乘积按下列规则生成: (1)若乘积为一位数,则该乘积即为数列的后继项; (2)若乘积为二位数,则该乘积的十位数和个位数依次作为数列的两个后继项。 本程序输出该数列的前 n项以及它们的和。其中,函数 sum(n,pa)返回数列的前 n项之和,并将生成的前 n项存放于首指针为 pa的数组中。程序中规定输入的 n值必须大于 2并且不超过给定的常数值 MAXNUM。 例如:若输入 n值为 10,则程序输出如下内容: sum(10)=44 2 3 6 1 8 8 6 4 2 4 #includestdio.h #define MAXNUM 100 int sum

24、(int n,int *pa) int count,total,temp; *pa=2; U (1) /U=3; total=5; count=2; while(count+n) temp+=*(pa-1)*pa; if(temp10) total+=temp; *(+pa)=temp; else U (2) /U=temp/10; total+=*pa; if(countn) count+;pa+; U (3) /U=temp%10; total+=*pa; U (4) /U; main() int n,*p,*q,numMAXNUM; do printf(“Input N=?(2N%d):

25、“,MAXNUM+1); scanf(“%d“, while(U (5) /U); printf(“/nsum(%d)=%d/n“,n,sum(n,num); for(p=num,q=U (6) /U;pq;p+)printf(“%4d“,*p); printf(“/n“); (分数:15.00)_正确答案:()解析:(1)*+pa (2)*+pa (3)*pa (4)return(total) (5)n3|nMAXNUM (6)p+n 分析 本题考查用C语言对数列的操作。 通过程序说明部分的描述及实例,可以清楚地了解程序功能。由于真正的处理函数是 sum(),而主函数只是输入数据,调用 su

26、m(),以及输出结果,所以我们可以先分析 sum()。 int sum(im n,int*pa) int cotmt,total,temp; *pa=2; U (1) /U=3; 程序说明部分已经提到数列的前两个元素为 2和 3。*pa 存储了第一个元素“2”,很显然“3”应存在*(pa+1)中。又因为后面有语句“temp+=*(pa-1)*pa;”,这说明在求乘积时,pa 是指向要运算数的后者,例如要求 2*3,pa 指向 3,用*(pa-1)表示 2。所以(1)空应填*(+pa),而不能用*(pa+1)。 total=5;count=2; while(count+n) temp+=*(pa

27、-1)*pa; 这里是求两数列元素的乘积。 if(temp10) total+=temp; *(+pa)=temp; else U (2) /U=temp/10; 对应程序说明,当乘积小于 10时,直接把乘积作为数列的后继项;当乘积大于等于 10时,把该乘积的十位数字和个位数字依次作为数列的两个后继项。这时应当把大于等于 10的数(因为最大的数为 9*9=81,所以都为两位数)分解为单个的数字,“temp/10”求出的是十位数字,所以存入当前数列元素的后继项,即(2)空应填*(+pa)。 total+=*pa; 统计当前数列和。 if(countn) 如果当前数列元素个数没有达到指定值 n,则

28、把乘积的个位数(temp%10)作为数列的后继项;如果当前数列元素个数已经达到指定值 n,则可以退出循环,返回主函数了。 count+;pa+; U (3) /U=temp%10; 由于前面已经有“pa+”,所以(3)空应填*pa。 total+=*pa; U (4) /U; 又因为主函数有“printf(“/nsum(%d)=%d/n“,n,sum(n,num,);”,说明函数 sum()返回了数列和。因此,(4)空应填 return(total)。 当分析完函数 sum()的功能后,我们再来看 main(),就显得十分简单了。 do printf(“Input N=?(2N%d):“,MA

29、XNUM+1); scanf(“%d“, while(U (5) /U); 上面是输入 n的值,n 要保证是合法值才能继续下面的工作,所以当输入 n不合法时,应重新输入 n值。因此,(5)空应填 n3|nMAXNUM。 printf(“/nsum(%d)=%d/n“,n,sum(n,num); for(p=num,q=U (6) /U;pq;p+)printf(“%4d“,*p); 此 for循环用于输出数列,循环终止条件是“pq”,又因为 num是数列首指针且 n为数列长度,所以(6)空应填 p+n。五、B试题五/B(总题数:1,分数:15.00)5.【说明】 冒泡排序算法,作为 Order

30、edlistT,size类的成员函数,last 是有序表的元素个数。 templatetypename T,int sizevoid OrderedlistT,sizeBubbleSort() bool noswap; /交换标志 int i,j; T temp; for(i=0;ilast;i+) noswap=U (1) /U; for(j=U (2) /U;U (3) /U;U (4) /U) /从下往上冒泡 if(slistjslistj-1) temp=slistj; slistj=slistj-1; slistj-1=temp; noswap=U (5) /U; if(noswap

31、)break; (分数:15.00)_正确答案:()解析:true (2)last (3)ji(4)j- (5)false分析本题考查用 C+实现冒泡排序。题目要求用程序实现冒泡排序,其中 last是有序表的元素个数,即需排序元素的个数。首先我们需要了解一下冒泡排序的方法。冒泡排序将被排序的记录数组 R1n垂直排列,每个记录 Ri看做是重量为ki的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组 R:凡扫描到违反本原则的轻气泡,就使其向上“飘浮”。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。冒泡排序的具体过程为:第一步,先比较 k1和 k2,若 k1k 2,则交换 k

32、1和 k2所在的记录,否则不交换。继续对 k2和 k3重复上述过程,直到处理完 kn-1和 kn。这时最大的排序码记录转到了最后位置,称第 1次起泡,共执行 n-1次比较。第二步,与第一步类似,从 k1和 k2开始比较,到 kn-2和 kn-1为止,共执行 n-2次比较,称第 2次起泡。依此类推,共做 n-1次起泡,完成整个排序过程。下面我们来具体分析程序。第(1)空很明显是给布尔型交换标志变量 noswap赋一个初值,从程序中不难发现,这个变量为真时,当前元素才可以进行交换操作,那么其初值应该是一个为真的值,因此此空答案为 true。第(2)空是给循环变量赋一个初值,这个循环的作用注释已经给

33、出,是从下往上冒泡。题目中告诉我们序列中有 last个元素,那么最下面的元素应该是第 last个,因此此空答案为 last。第(3)空是循环的判断条件,根据我们上面的分析,每次起泡需要比较的次数为:总元素个数-已经起泡的次数,起泡的过程只需要执行到当前已经排好序的最后一个元素即可,因此此空答案为 ji。第(4)空也在循环中,很明显是用来改变循环变量 j的值,而这个循环变量是从 last开始依次往上的过程,因此循环变量 j的值应该是每次减少 1,所以此空答案为 j-。第(5)空是给布尔型交换标志变量 noswap赋一个值,它在循环的最后面,也就是说,在一次冒泡排序结束时的操作,根据题目的分析我们

34、可以知道,每次冒泡排序都能排好一个元素在序列中的位置,而这个已经排好序的元素以后就不需要再参加排序过程了,因此应该将其标志变量 noswap赋一个假值,因此此空答案为 false。六、B试题六/B(总题数:1,分数:15.00)6.【说明】 本程序根据输入的月份数,输出它是哪个季节。 【代码】 import java.io.*; public class season public static void main(String args) String strln=“; U (1) /Uin=new InputStreamReader(System.in); BufferedReader b

35、uffln=new BufferedReader(in); System.out.print(“Please enter a month(1-12):“); try strln=buffln.readLine();/从命令行读入数据 catch(U (2) /U) System.out.println(e.toStdng(); int month=U (3) /U(strln);/将字符串转换成整数型 int season=0; if(month12 /计算季节的公式 U (4) /U(season) case 1: System.out.println(“the season is Spri

36、ngl“); break; case 2: System.out.println(“the season is Summer!“); case 3: System.out.println(“the season is Fall!“); case 4: System.out.println(“the season is Winter!“); break; U (5) /U; System.out.println(“this is not correct month!“); (分数:15.00)_正确答案:()解析:(1)InputStreamReader (2)IOException e (3)

37、Integer.parseInt (4)switch (5)default 分析 本题考查 Java的基本语法知识与简单的算法实现。 题目要求用 Java语言实现根据输入的月份数,确定并输出这个月份的季节,这个算法应该是不难的,下面来具体分析程序。 第(1)空很明显是定义一个变量in,它指向一个 InputStreamReader类型的对象,那么这个变量 in一定是一个。InputStreamReader 类型的。因此,此空答案为 InputStreamReader。 第(2)空是 catch的参数,在 Java中,一般用 try与catch结合起来使用,用来处理异常,其执行过程是先执行 tr

38、y函数体,发现异常才执行 catch。从程序中可以知道,try的作用是从命令行读入数据,是一种输入操作,因此产生的应该是 I/O异常,那么 catch的参数应该是 IOException e,所以此空答案为 IOException e。 第(3)空是给对象 in的 month属性赋一个值,这行语句的功能注释已经给出,是将字符串转变成整数型,这需要用到整型类的parseInt方法,因此,此空答案为 Integer.parseInt。 第(4)空很明显是一个函数名,结合题目要求与程序,不难推断出这个函数的功能是用来输出计算得到的季节,而从后面的程序中可以看出这是个选择执行函数,那么这个函数的函数名应该是 switch,因此,此空答案为 switch。 第(5)空是在选择执行函数的最后面,在 4种情况都考虑了之后,它考虑的应该是在匹配没有成功的条件下程序执行的情况,在多分支选择结构中,如果匹配不成功,则执行 default后面的语句,因此,此空答案为 default。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1