[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷29及答案与解析.doc
《[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷29及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷29及答案与解析.doc(15页珍藏版)》请在麦多课文档分享上搜索。
1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 29 及答案与解析 1 阅读以下说明和流程图,将应填入 (n)处的字句写在对应栏内。 【说明】 已知头指针分别为 La和 lb的有序单链表,其数据元素都是按值非递减排列。现要归并La 和 Lb得到单链表 Lc,使得 Lc中的元素按值非递减排列。程序流程图如下所示: 2 阅读以下函数说明和 C语言函数,将应填入 (n)处的语句写在对应栏内。 【函数 2.1说明】 将一个正整数分解质因数。例如:输入 90,打印出 90=2*3*3*5。 【函数 2.1】 Fun1 (int n) int i; for(i=2;i =n;i+) while (1)
2、 if (n%i=0) printf(“%d*“,i); (2); else break; printf(“%d“,n); 【函数 2.2说明】 下面程序的功能是:海滩上有一堆桃子, 5只猴子来分。第 1只猴子把这堆桃子平均分为 5份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第 2只猴子把剩下的桃子又平均分成 5份,又多了一个,它同样把多的一个扔入海中,拿走了一份。第 3、 4、 5只猴子都是这样做的,问海滩上原来最少有多少个猴子 ? 【函数 2.2】 main() int i,m,j,k,count; for(i=4;i 10000;i+=4) count=0; (3); for(
3、k=0;k 5;k+) (4); i=j; if(j%4=0) (5); else break; i=m; if(count=4) printf(“%dn“,count); break; 3 阅读以下说 明和 C语言函数,将应填入 (n)处的语句写在对应栏内。 【说明】 下面的程序构造一棵以二叉链表为存储结构的二叉树。 【函数】 BitTree *createbt(BitTree *bt) BitTree *q; struct node *s30; int j,i; char x; printf(“i,x=“); scant(“%d,%c“, while(i!=0 /生成一个结点 (1); q
4、- lchild=NULL; q- rchild=NULL; (2) ; if (3) j=i/2; / j为 i的双亲结点 if(i%2=0) (4); /i为 j的左孩子 else (5); /i为 j的右孩子 printf(“i,x=“); scanf(“%d,%c“, return si; 4 阅读以下说明和 C语言函数,将应填入 (n)处的语句写在对应栏内。 【说明】 本程序从正文文件 text.in中读入一篇英文短文,统计该短文中不同单词及出现次数,并按词典编辑顺序将单词及出现次数输出到正文文件 word.out中。 程序用一棵有序二叉树存储这些单词及其出现的次数,边读入边建立,然
5、后中序遍历该二叉树,将遍历经过的二叉树上的结点内容输出。 【函数】 # include stdio.h # include malloc.h # include ctype.h # include string.h # define INF “text.in“ # define OUTF “word.our typedef struct treenode char *word; int count; struct treenode *left, *right; BNODE; int getword(FILE *fpt, char *word) char c; c=fgetc(tpt); if
6、(c=EOF) return 0; while(!(tolower(c) = a if (c=EOF) return 0; /* 跳过单词间的所有非字母字符 */ while(tolower(c) = a c=fgetc(fpt); *word=0; return 1; void binary_tree(BNODE *t, char *word) BNODE *ptr, *p; int compres; p=NULL; (1); while (ptr) /* 寻找插入位置 */ compres=strcmp(word, ptr- word);/* 保存当前比较结果 */ if (!compre
7、s) (2); return; else p=ptr; ptr=compres 0 ? ptr- right: ptr- left; ptr=(BNODE *)malloc(sizeof(BNODE); ptr- left=ptr- right=NULL; ptr- word=(char *)malloc(strlen(word)+1); strcpy(ptr- word, word); (3); if (p=NULL) *t=ptr; else if (compres 0) p- right=ptr; else p- left=ptr; void midorder(FILE *fpt, BN
8、ODE *t) if (t=NULL) return; midorder(fpt,(4); fprintf(fpt, “%s %dn“, t- word, t- count); midorder(fpt, t- right); void main() FILE *fpt; char word40; BNODE *root=NULL; if (fpt=fopen(INF, “r“)=NULL) printf(“Cant open file %sn“, INF); return; while(getword(fpt, word)=1) binary_tree(5); fclose(fpt); fp
9、t=fopen(OUTF, “w“); if (fpt=NULL) printf(“Cant open fife %sn“, OUTF); return; midorder(fpt, root); fclose(fpt); 5 阅读以下说明及 C+程序代码,将应填入 (n)处的语句写在对应栏内。 【说明】 本程序的功能是生成螺旋方阵,用户可以输入该方阵的行列数,然后就生成对应的螺旋方阵。例如:当 n=5时,对应的螺旋方阵如下: 1 16 15 14 13 2 17 24 23 12 3 18 25 22 11 4 19 20 21 10 5 6 7 8 9 【 C+代码】 #include“s
10、tdio.h“ #include“iostream,h“ int array1111; int temp; int ROW; void godown(int temp =ROW;temp+) if(arraytempa=0) arraytempa=(1); a+; void goright(int temp =ROW;temp+) if(arraybtemp=0) arraybtemp=m+; b-; void goup(int temp 0;temp-) if(arraytempc=0) arraytempc=m+; c-; void goleft(int temp 0;temp-) if(
11、arraydtemp=0) arraydtemp=m+; (2); void main() int a,b,c,d,max,m; cin ROW; cout end1; for(a=1;a =ROW;a+) for(b=1;b =ROW;b+) (3); m=1; a=d=1; b=c=ROW; max=(4); whiie(m =max) godown(m,a); (5) (m,b); goup(m,c); goleft(m,d): for(a=1;a =ROW;a+) for(b=1;b =ROW;b+) printf(“%3d “,arrayab); cout end1; 6 阅读以下说
12、明和 Java代码,将应填入 (n)处的语句写在对应栏内。 【说明】 主窗口有一个按钮、 一个文本框和一个复选框,初始时窗口大小不能调整,选中复选框后窗口大小可以调整,如果撤销复选框的选择,则窗口的大小又不能调整,如下图所示。 【 Java代码】 import java.awt.*; import java.awt.event.*; class MyFrame extends Frame implements ItemListener,ActionListener Checkbox box; TextArea text; Button button; MyFrame(1) super(s);
13、box=new Checkbox(“设置窗口是否可调整大小 “); text=new TextArea(12,12); button=(2) (“关闭窗口 “); button.addActionListener(this); box.addltemListener(this); setBounds(100,100,200,300); setVisible(true); add(text,BorderLayout.CENTER); add(box,BorderLayout.SOUTH); add(button,BorderLayout.NORTH); setResizable(3); vali
14、date(); public void itemStateChanged(ItemEvent e) if(box.getState()=true) setResizable(true); else setResizable(false); public void actionPerformed(ActionEvent e) (4); class simple public static void main(String args) (5) (“simple“); 软件水平考试(初级)程序员下午(应用技术)模拟试卷 29 答案与解析 1 【正确答案】 (1)pa- data =pb- data
15、(2)pc- next=pa (3)pc=pb (4)pb=pb- next (5)pc- next=pa?pa:pb 【试题解析】 本题考查程序流程图和有序链表的归并。 题目要求我们归并头指针分别为 La和 Lb的有序单链表,组成一个新的有序单链表 Lc,而 Lc又是指向 La的。首先,我们来了解一下单链表的结构。单链表中一般有两个域,一个是数据域,用来存放链表中的数据;另一个是指针域,用来存放指向下个结点的指针。其归并的过程应该是先比较链表 La和 Lb 中第一个元素,将较小的从其链表中取出放到 k中,再取下一个结点的值去比较,重复这个过程,直到一个链表被全部取完,再将另一个链表剩下的部分
16、连接到 Lc后面即可。 下面,我们来看程序流程图的内容。首先是用两个指针变量 pa和 pb分别 指向La和 Lb的当前待比较插入的结点,而 pc指向 Lc表中当前最后一个结点。再下面是一个条件判断语句,其作用是判断链表 La 和 Lb是否为空,如果有一个为空,只要将另一个链表剩下的部分连接到 Lc后面,程序应该就可以结束了。 第 (1)空是条件判断语句的条件,根据我们上面的分析,再结合流程图下面的内容,我们可以知道,这个条件语句的作用是比较当前待插入的两个值的大小,而指针变量 pa和 pb分别指向 La和 Lb的当前待比较插入的结点,因此,此空的答案为 pa- data =pb- data。
17、第 (2)空是在条件为 真的情况下执行的语句,如果条件判断为真,应该将 pa所指结点连接到 pc所指结点后面,因此, pc所指结点的指针域应该存放 pa所指结点的地址。所以,此空的答案为 pc- next=pa。 第 (3)空和第 (4)空都是在条件为假的情况下执行的语句,如果条件为假,说明 pb所指结点的值小于 pa所指结点的值,应该将 pb所指结点连接到 pc所指结点后面,图中已经实现这一功能,要我们完成的是在插入后的后继工作。由于 pc指向的是 Lc表中当前最后一个结点,在插入一个结点后,要修改 pc的值。在将 pb所指结点插入后,链表中的最后一 个结点就是 pb 所指结点,第 (3)空
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 软件 水平 考试 初级 程序员 下午 应用技术 模拟 29 答案 解析 DOC
