[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷25及答案与解析.doc
《[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷25及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷25及答案与解析.doc(19页珍藏版)》请在麦多课文档分享上搜索。
1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 25 及答案与解析 1 阅读以下应用程序说明和 C程序,将 C程序段中 (1) (6)空缺处的语句填写完整。 【说明】 某大学征询学生意见,从各学院预选的 n(n60)位优秀大学生中,评选出 “十佳大学生 ”。以下【 C程序】对各位学生选票进行相关的统计、排序等处理。 (1)各学院预选的优秀大学生按 1, 2, 顺序连续编号,每个编号用两个字符表示,即 01, 02, 。 (2)所回收的选票按以下格式存于文件 source中,每行字符串对应一张选票。其中 ,姓名占 10个字符,学院名称占 30个字符,大学生编号占 20个字符。 (3)对应名次
2、的大学生编号可以有空缺,但必须用 00表示。 (4)若编号超出规定范围,或编号重复出现,按照废票处理。 (5)按选票中所列 “十佳大学生 ”顺序给出各名大学生的得分。评分标准如下: 一 二 三 四 五 六 七 八 九 十 15 12 9 7 6 5 4 3 2 1 (6)按各位大学生得分数由高到低顺序排队,并按以下格式列出 “十佳大学生 ”排行表。 名次 大学生编号 合计得分 合计得票数 若得分相同,则得票数多的在前;若得分和得票数都相同,则编号小的在前。 以下【 C程序】中所应用到的函数 fopen、 fclose和 fgets都是 I/O程序库中的函数。 【 C程序】 #include s
3、tdio. h #define n 60 long int tnn, tdn, scoren+110, ordern; char s80; int mark=(15,12,9,7,6,5,4,3,2,1); FILE *fp, *fopen(); Main() int c, g, k, I, j, b10; long int e, d, t, tt, dd; char * p; for(i=0; i =n; i+) for(j=0; j 10; j+) scoreij=0; fP=fopen(“source“, “r“); /*以 读方式打开文件 source*/ p=fgets(s, 80,
4、 fp); /*读 fp所指文件的下一行字符串于 s*/ while(*p) g=l; k=0; p+=40; while(k 10) c=(*p+)-0)*10+(*p+)-0); bk+=c) if(c =n) if(c) i=0; While( (1) ); If( (2) )g=0; break; elseg=0; break; If(g) For(i=0; i k; i+) If(bi) (3); p=fgets(s, 80, fP); Fclose(fp); /*关闭 fp所指文件 */ For(i=1; i n; i+) For(t=0, d=0, j=0; j 10; j+)
5、t +=(e=scoreij); d +=e * markj; tni-1=t; tdi-1=d; orderi-1=i; For(i=0; i n-1; i+) k=i; for(j=i+1; j n; j+) if(t=tdorderj-1) (d=tdorderk-1) k=j; else if(t=d) tt=(4); dd=(5); for(c=0; c 10; c+) if(e=(6) 0) k=j; break; else if(e 0)break; If(k!=i) t=orderk; orderk=orderi; orderi=t; For(i=0; i 10; i+) Pr
6、intf(“%2d%2d%d%dn“, i+1, orderi, tdorderi-1, tnorderi-1); 1 请将以上 C程序段中, (1) (6)空缺处的语句填写完整。 2 以上 C程序段中,采用了哪种算法对大学生得分进行排序 ? 3 阅读以下应用程序说明和 C程序,将 C程序段中 (1) (7)空缺处的语句填写完整。 【说明】 以下【 C程序】的功能是,逐一从指定课程成绩文件中读入学生的考号和成绩,对同一学生汇总他 (她 )的总 成绩,并按如图 6-14所示格式输出名次(按总成绩由高到底的顺序 )、总成绩、同一名次的学生人数、同一名次学生的学号(按学号由小到大的顺序 )。 该应用
7、程序约定学生学习课程不超过 30种,课程成绩文件的第 1个数字就是课程号。统计过程中,同一课程号的成绩文件不能重复输入。 该应用程序采用链表结构存储学生的相关信息,链表中的每个表元对应一位学生。在数据输入过程中,形成一个按学号从小到大顺序链接的有序链表。当数据输入结束后,程序按总成绩从高到低,学号从小到大的顺序对链表排序。最后程序按指定格式输出链表中的信息。 【 C程 序】 #include stdio.h #define M 30 #define NLEN 10 typedef struct node int cur_s; /* 最近输入成绩的科目 */ Char noNLEN; int s
8、core; struct node *next; NODE; int sM, sp, ss, i, mark, order, C; FILE *fp; NODE *h, *U, *V, *p; Char fname80, noNLEN, ans; main() for(h = NULL, sp = 0; ;) printf(“输入科目成绩文件名 (输入 aaaa表示强行结束 )。 n“); while(1) scanf(“%s“, fname); if (strcmp(fname, “aaaa“) = 0) break; if (fp = fopen(fname, “r“) = NULL) p
9、rintf(“不能打开文件 %s, 请重新输入科目文件名。 n“, fname); else break; if (strcmp(fname, “aaaa“) = 0) break; fscanf(fp, “%d“, /* 输入科目号 */ssp=s; for (i=0; si ! = ss; 1+); if ( (1) ) printf(“该科目的成绩已输入,请输入别的科目成绩文件。 n“); continue; sp+; while (fscanf(fp, “%s%d“, no, v != NULL u=v, v= v- next); if (v !=NULL /* 累计总成绩 */ v-
10、cur_s = ss; /* 同一科目成绩重复输入,后输入成绩被忽略 */ else p = (NODE *)malloc(sizeof(NODE); /* 一位新的学生 */ strcpy(p- no,no); p- score = mark; p- cur_s = ss; p- next = v; if ( v = h) (2) ; else (3) ; fclose(fp); printf(“ 还有科目成绩文件要输入吗 ? (Y/N) “); scanf(“%c“, if (ans = N | ans = n) break; /* 以下按总成绩和学号对链表排序 */ v = (NODE
11、*)malloc(sizeof(NODE); v- next = h; h = v; while (v- next != NULL) /* 在余下的部分链表中找总成绩高学号小的表元 */ for(p = v, u = v- next; u- next != NULL; u = u- next) if (u- next- score p-next- score | u- next- score = p- next- score if (p != v) u = p- next; p- next = (4) ; (5)= v- next; v-next = u; v = v- next; v = h
12、; h = h- next; free(v); printf(“ 名次 总成绩 人数 学号n “); /* 以下按格式要求输出 */ v = h; order = 1; while (v != NULL) for(c = 1, u = v- next; u != NULL (6); printf(“%4d%7d%8d “, order, v-score, c); for (order += c, i = 1;(7); v = v- next, i+) if (i 1 printf(“%s “, v- no); printf (“n“); 4 请阅读以下技术说明和 C代码,将程序段中 (1) (
13、5)空缺处的语句填写完整。 【说明】 著名的四色定理指出任何平面区域图均可用 4种颜色着色 ,使相邻区域着不同的颜色。以下 C程序对给定的区域图找出所有可能的不超过 4种颜色的着色方案。该程序中用 1 4分别表示 4种颜色。要着色的 N个区域用 0 -1编号,区域相邻关系用 adj矩阵表示,矩阵的 i行 j列的元素为 1,表示区域 i与区域了相邻;矩阵的 i行 j列的元素为 0,表示区域 i与区域 j不相邻。数组 color用来存储着色结果, colori的值为区域 i,所着颜色。 【 C程序】 #include stdio.h #define N 10 void output(int col
14、or) /*输出一种着色方案 */ int i ; for ( i = 0 ; i N ; i+ ) printf( “%4d“ , colori ) ; printf (“n“) ; int back(int *ip ,int color ) /*回溯 */ intc = 4 ; while ( c = 4 ) if ( *ip = 0 ) return 0 ; - (*ip) ; c =(1); color*ip =-1 ; return c ; /*检查区域 i,对 c种颜色的可用性 */ int colorOk(int i , intc , int N ,int color ) int
15、 j ; for (j = 0 ; j i ; j+ ) if ( (2) ) return 0 ; return 1 ; /*为区域 i选一种可着色的颜色 */ int select (int i ,int c ,int adj N ,int color ) int k ; for(k = c ; k = 4 ; k+ ) if( colorOK( (3) ) return k ; return 0 ; int coloring(int adj N) /*寻找各种着色方案 */ int colorN , i , c , cnt ; for(i = 0 ; i N ; i+) colori =
16、-1 ; i = c = 0 ; cnt = 0 ; while(1) if(c =(4) ) = 0 c = back( if( c = 0 ) return cnt; else (5); i+ ; if i = N) output(color); +cnt ; c = back( else c = 0 ; void main()( int adjN N = 0,1,0,1,1,1,1,1,1,1, 1,0,1,1,0,1,1,1,1,0, 0,1,0,1,0,1,1,0,1,1, 1,1,1,0,1,1,0,0,1,1, 1,0,0,1,0,1,0,0,0,0, 1,1,1,1,1,0,1
17、,0,0,1, 1,1,1,0,0,1,0,0,1,0, 1,1,0,0,0,0,0,0,1,1, 1,1,1,1,0,0,1,1,0,1, 1,0,1,1,0,1,0,1,1,0, ; printf(“共有 %d组解 .n“,coloring(adj); 5 阅读以下函数说明和 C代码,将 C程序中 (1) (5)空缺处的内容补充完整。 【说明】 对给定的字符集合及相应的权值,采用哈夫曼算法构造最优二叉树,并用结构数组存储最优二叉树。例如,给定字符集合 a,b,c,d及其权值 2、 7、 4、 5,可构造如图 6-15所示的最优二叉树,以及相应的结构数组 Ht(如表 6-14所示,其中数组元
18、素 Ht0不用 )。 结构数组Ht的类型定义如下: #define MAXLEAFNUM 20 struct node char ch; /*扫当前节点表示的字符,对于非叶子节点,此域不用 */ Int weight; /*当前节点的权值 */ int parent; /*当前节点的父节点的下标,为 0时表示无父节点 */ int lchild, rchild; /*当前节点的左、右孩子节点的下标,为 0时表示无对应的孩子节点*/ )Ht2*MAXLEAFNUM; 用 “0”或 “广标识最优二叉树中分支的规则是:从一个节点进入其左 (右 )孩子节点,就用 “0”(或 “1”)标识该分支,如图
19、6-15所示。 若用 上述规则标识最优二叉树的每条分支后,从根节点开始到叶子节点为止,按经过分支的次序将相应标识依次排列,可得到由 “0”、 “1”组成的一个序列,称此序列为该叶子节点的前缀编码。例如,图 6-15所示的叶子节点 a、 b、 c、 d的前缀编码分别是110、 0、 111、 10。 函数 void LeafCode(int root,int n)的功能是:采用非递归方法,遍历最优二叉树的全部叶子节点,为所有的叶子节点构造前缀编码。其中,形参 root为最优二叉树的根节点下标;形参 n为叶子节点个数。在函数 void LeafCode(int root,int n)构造过程中,将
20、 Htp.weight域用做被遍历节点的遍历状态标志。 函数 void Decode(char *buff,int root)的功能是:将前缀编码序列翻译成叶子节点的字符序列,并输出。其中,形参 root为最优二叉树的根节点下标;形参 buff指向前缀编码序列。 【函数 4.1】 char *HC; void LeafCode(int root, int n) /*为最优二叉树中的 n个叶子节点构造前缀编码, root是树的根节点下标 */ int I,p=root,cdlen=0; char code20; Hc = (char *)malloc(n+1)*sizeof(char *); /
21、*申请字符指针数组 */ For(i = 1;i = p;+I) Ht i. weight = 0; /*遍历最优二叉树时用做被遍历节点的状态标志 * / While (p) /*以非递归方法遍历最优二叉树,求树中每个叶子节点的编码 */ If(Htp.weight = 0) /*向左 */ Htp.weight = 1; If(Htp.lchild != 0) p = Htp.lchild; codecdlen+ = 0; else if(Htp.rchild = 0) /*若是叶子节点 ,则保存其前缀编码 */ Hcp = (char *)malloc(cdlen+1)*sizeof(ch
22、ar); (1); strcpy (Hc p,code); else if(Htp.weight = 1) /*向右 */ Ht p.weight = 2; If(Htp.rchild != 0) p = Ht p.rchild; codecdlen+ =1; else /*Htp.weight = 2,回退 / Ht p.weight = 0; p =(2); (3); /*退回父节点 */ / *while .结束 * / 【函数4.2】 void Decode(char *buff,int root) int pre = root,p; while(*buff != 0) p = roo
23、t; while(p != 0) /*存在下标为 p的节点 */ pre = p; if( (4) ) p = Htp.lchild; /*进入左子树 */ else p = Htp.rchild; /*进入右子树 */ else buff+; /*指向前缀编码序列的下一个字符 */ (5); printf(“%c“, Hrpre.ch); 6 以下是与 Visual Basic开发应用有关的 5个问题。对每一个问题,请将解答填入对应栏内。 1. 在 Visual Basic中,工程文件、窗体文件和标准模块文件的扩展名是什么 ?请从下列选项中选择: prg、 prj、 exe、 vbp、 fo
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 软件 水平 考试 初级 程序员 下午 应用技术 模拟 25 答案 解析 DOC
