【计算机类职业资格】初级程序员下午试题-11及答案解析.doc
《【计算机类职业资格】初级程序员下午试题-11及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】初级程序员下午试题-11及答案解析.doc(6页珍藏版)》请在麦多课文档分享上搜索。
1、初级程序员下午试题-11 及答案解析(总分:90.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.【说明】 设学生(学生数少于 50 人)某次考试的成绩按学号顺序逐行存放于某文件中,文件以单行句点“.”为结束符。下面的流程图用于读取该文件,并把全部成绩从高到低排序到数组 B50中。 【流程图】(分数:15.00)_二、B试题二/B(总题数:1,分数:15.00)2.【说明】 设有 n 个人围坐一圈并按顺时针方向从 1 到 n 编号,从第 s 个人开始进行 1 到 m 的报数,报数到第 m 个人,则此人出圈,再从他的下一个人重新开始 1 到 m 的报数,如此进行下
2、去,直到所有的人都出圈为止。 现要求按出圈次序,每 10 人一组,给出这 n 个人的顺序表。 设 n=100,s=1,m=10。 (1)将1 到 n 个人的序号存入一维数组 p 中; (2)若第 i 个人报数后出圈,则将 p 置于数组的倒数第 i 个位置上,而原来第 i+1 个至倒数第 i 个元素依次向前移动一个位置: (3)重复第(2)步,直至圈中只剩下 p1为止。#includestdio.h #define N 100 #define S 1 #define M 10 void main() int p100,n,s,m; m=M; n=N; s=S; int i,j,s1,w; s1=
3、s; for(i=1;U (1) /U;i+) (2)=i; for(i=n;i=2;i-) s1=U (3) /U; if(s1=0)s1=i; w=U (4) /U; for(j=s1;ji;j+) pj-1=pj; pi-1=U (5) /U; printf(“%4d“,pi) (分数:15.00)_三、B试题三/B(总题数:1,分数:15.00)3.【说明】 给定函数 fun 的功能是:将从键盘上输入的每个单词的第一个字母转换为大写字母,输入时各单词必须用空格隔开,用“.”结束输入。 【函数】 int fun(char *c,int status) if(U (1) /U=) retu
4、rn 1; else if(U (2) /U return 0; main() int flag=1; char ch; printf(“请输入一字符串,用点号结束输入!/n“); do ch=getchar(); flag=fun( putchar(ch); while(ch!=.); printf(“/n“); (分数:15.00)_四、B试题四/B(总题数:1,分数:15.00)4.【说明】 编写程序,生成一个新文本文件,它由一个已知文本文件的所有偶数行组成。要求已知文本文件名和新文本文件名均从键盘输入。请填空完善程序。 【C 语言程序】 #includestdio.h main() F
5、ILE *oldf,*newf; char ch,fname20; int i; do printf(“Enter name of existed text file to be read:“); scanf(“%s“,fname); if(oldf=fopen(fname,“r“)=NULL) printf(“File %s cant open!/n“,fname); while(oldf=NULL); do printf(“Enter mane of new text file to be written:“); scanf(“%s“,fname); if(U (1) /U=NULL) p
6、rintf(“File %s cant open!/n“,fname); while(U (2) /U); i=1; while(!feof(oldf) while(ch=fgetc(oldf)!=U (3) /U) if(i%2=U (4) /U) fputc(ch,newf); fputc(/n,newf); U (5) /U; fclose(oldf); fclose(newf); (分数:15.00)_五、B试题五/B(总题数:1,分数:15.00)5.【说明】 在下面函数横线处填上适当的字句,使其输出结果为: 构造函数. 构造函数. 1,2 5,6 析构函数 析构函数. 【C+代码】
7、 #include “iostream.h“ class AA public; AA(int i,int j) A=i; B=j; cout“构造函数./n“; AA()U (1) /U; void print(); private: int A, B; ; void AAprint() coutA“,“Bendl; void main() AA *a1, *a2; U(2) /U=new AA(1, 2); a2=new AA(5, 6); U(3) /U; a2-print(); U(4) /Ua1; U(5) /Ua2; (分数:15.00)_六、B试题六/B(总题数:1,分数:15.0
8、0)6.【Java 代码】 class usethread implementsU (1) /U int num usethread(int n) num=n; public voidU (2) /U for(int i=0;i3;i+) System.out.println(“running:“+num); System.out.println(“finished:“+num); public class multhread public static void main(String args)U (3) /UInterruptedException Thread m1=new Threa
9、d(new usethread(1); Thread m2=new Thread(new usethread(2); m1.start(); m2.start(); m1.join(); m2.join(); 【问题 1】 补充完整上面 Java 代码中U (n) /U处。 【问题 2】 写出上面Java 代码运行的结果。(分数:15.00)_初级程序员下午试题-11 答案解析(总分:90.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.【说明】 设学生(学生数少于 50 人)某次考试的成绩按学号顺序逐行存放于某文件中,文件以单行句点“.”为结束符。下面的流程图
10、用于读取该文件,并把全部成绩从高到低排序到数组 B50中。 【流程图】(分数:15.00)_正确答案:()解析:(1)B0a (2)i0 (3)a=“.“ (4)aBj (5)j- 分析 本题考查用程序流程图来描述排序。 题目要求将文件中学生的成绩读出,并把全部成绩从高到低排序到数组 B50中。这里面涉及两个问题,第一是从文件中读数,文件中的数据是以单行句点“.”为结束符的,在未读到此符号前,应该将继续取数据。第二是排序,每取到一个学生的成绩都要与数组的学生成绩比较,按照从高到低的顺序在数组中找到合适的位置存放。下面来具体分析流程图。 第(1)空在条件判断为假的情况下执行流程中,如果条件为假说
11、明从文件中取到的数据是学生成绩。从程序流程图中可以看到,从文件中读的数据存放在变量 a 中,而此空是第一次取数据,应该存放数组 B 的第一个位置,因此此空答案为 B0a。 第(2)空是紧接着第(1)空来的,在上面已经把从文件中读到的第一个数存放到了数组中,接下来应该处理数组的下标问题,从后面的流程中可以推断出变量 i 是存放数组当前下标的,而且没有初值,那么此空的任务应该是用来给变量 i 赋一个初值,而对数组的操作应该从头开始,因此此空答案为 i0。 第(3)空是循环的判断条件,如果条件成立则结束,在这之前又对文件进行了一次读数,根据我们上面的分析只有在读到了结束符时程序才结束,那么此空肯定是
12、判断从文件中读到的数据是否为结束符,因此此空答案为 a=“.“?。 第(4)空也是一个循环的判断条件,如果条件成立,则将取到的数存放到数组的当前下标位置;如果不成立,则循环找到合适的位置再存放。从这里我们不难推断出,流程图中是将从文件取到的成绩与当前数组中的最小成绩进行比较的,而当前数组中的最小成绩存放在位置 j 中,因此此空答案为 aBi?。 第(5)空在循环体中,这个循环的作用是为当前从文件中读到的成绩在已经排好序的数组元素中找到合适的位置,找到了就要插入,数组中的元素是按从大到小排列的,在查找合适位置时是从后往前依次比较,因此此空的任务应该是将数组的下标往前移动,所以此空答案为“i-”。
13、二、B试题二/B(总题数:1,分数:15.00)2.【说明】 设有 n 个人围坐一圈并按顺时针方向从 1 到 n 编号,从第 s 个人开始进行 1 到 m 的报数,报数到第 m 个人,则此人出圈,再从他的下一个人重新开始 1 到 m 的报数,如此进行下去,直到所有的人都出圈为止。 现要求按出圈次序,每 10 人一组,给出这 n 个人的顺序表。 设 n=100,s=1,m=10。 (1)将1 到 n 个人的序号存入一维数组 p 中; (2)若第 i 个人报数后出圈,则将 p 置于数组的倒数第 i 个位置上,而原来第 i+1 个至倒数第 i 个元素依次向前移动一个位置: (3)重复第(2)步,直至
14、圈中只剩下 p1为止。#includestdio.h #define N 100 #define S 1 #define M 10 void main() int p100,n,s,m; m=M; n=N; s=S; int i,j,s1,w; s1=s; for(i=1;U (1) /U;i+) (2)=i; for(i=n;i=2;i-) s1=U (3) /U; if(s1=0)s1=i; w=U (4) /U; for(j=s1;ji;j+) pj-1=pj; pi-1=U (5) /U; printf(“%4d“,pi) (分数:15.00)_正确答案:()解析:(1)i=n (2)
15、pi-1 (3)(s1+m-1)%i (4)ps1-1 (5)w 分析 题目中给出了 n 个人出圈问题的具体实现方法,要求用 C 语言来实现,结合题目中给出的方法,我们来具体分析程序。 第(1)空是循环的判断条件,根据题目的要求和程序来看,这个循环应该用来把 n 个人的编号存放到数组 p 中,总共是 n 个人,那么循环上界应该是 n,从程序中可以知道循环变量是 i,因此此空答案为 i=n。 第(2)空在循环体中,从上面的分析已经知道,这个循环实现将 n 个人的编号存放到数组 p 中,第一个人的编号应该存放到数组下标为 0 的位置,而第二个人的编号就存放到数组下标为 1 的位置,依此类推。因此此
16、空答案为 pi-1。第(3)空在另一个循环体中,结合整个程序来看,不难推断出此循环体应该用来实现题目中的第二个与第三个要求。此空是用来给变量 s1 赋一个值,从后面的程序中可以推断出,变量 s1 中存放的是判断当前报数的人是否该出圈,如果为 0,则出圈,因此此空答案为(s1+m-1)%i。 第(4)空是给一个变量 w 赋一个值,从此空上面的程序我们知道找到了要出圈的人,根据题目要求,应将出圈人的编号置于数组的倒数第 i 个位置上,在将其存放到倒数第 i 个位置时肯定要移动数组中的元素,而元素的移动是以当前位置为前提的,那么需要将当前位置人的编号先保存到变量 w 中,而当前位置人的编号存放在数组
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 初级 程序员 下午 试题 11 答案 解析 DOC
