[计算机类试卷]国家二级(C语言)机试模拟试卷383及答案与解析.doc

上传人:outsidejudge265 文档编号:503145 上传时间:2018-11-29 格式:DOC 页数:5 大小:30.50KB
下载 相关 举报
[计算机类试卷]国家二级(C语言)机试模拟试卷383及答案与解析.doc_第1页
第1页 / 共5页
[计算机类试卷]国家二级(C语言)机试模拟试卷383及答案与解析.doc_第2页
第2页 / 共5页
[计算机类试卷]国家二级(C语言)机试模拟试卷383及答案与解析.doc_第3页
第3页 / 共5页
[计算机类试卷]国家二级(C语言)机试模拟试卷383及答案与解析.doc_第4页
第4页 / 共5页
[计算机类试卷]国家二级(C语言)机试模拟试卷383及答案与解析.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、国家二级( C语言)机试模拟试卷 383及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:在形参 ss所指字符串数组中查找与形参 t所指字符串相同的串,找到后返回该串在字符串数组中的位置 (下标值 ),未找到则返回 -1。 ss所指字符串数组中共有 N个内容不同的字符串,且串长小于 M。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #include #define N 5 #define M 8 int fun(char

2、【 1】 (*ss)M, char * t) int i; *found* for(i=0; i1 ; i+) *found* if(strcmp(ssi, t)=0) return 【 2】; return 1; main() char chNM=“if“, “while“, “switch“, “int“, “for“, tM; int n, i; printf(“ nThe original string n n“); for(i=0; iN; i+)puts(chi); printf(“ n“); printf(“ nEnter a string for search: “); get

3、s(t); n=fun(ch, t); *found* if(n=【 3】 )printf(“ nDontfound! n“); else printf(“ nThe position is d n“, n); 二、程序修改题( 30分) 2 N个有序整数数列已放在一维数组中,给定下列程序中,函数 fun()的功能是:利用折半查找算法查找整数 m在数组中的位置。若找到,则返回其下标值:反之,则返回 -1。 折半查找的基本算法是:每次查找前先确定数组中待查的范围: low和 high(low high),然后把 m与中间位置 (mid)中元素的值进行比较。如果 m的值大于中间位置元素中的 值,则

4、下一次的查找范围放在中间位置之后的元素中;反之,下次查找范围落在中间位置之前的元素中。直到 low high,查找结束。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include stdio.h #define N 10 /*found*/ void fun(int a,int m) int low-0,high=N-l,mid; while (low =high) mid=(low+high)/2; if(m amid) high=mid-1; /*found*/ else if(m =a mid) low

5、=mid+1; else return(mid); return(-1); main () int i,aN=-3,4,7,9,13,24,67,89,100,180,k,m; printf (“a数组中的数据如下 : “); for(i=0;i N;i+) printf(“%d“,ai); printf (“Enter m: “); scanf (“%d“, k=fun (a,m); if (k =0) printf (“m=%d, index=%dn“,m, k); else printf(“Not be found!n“); 三、程序设计题( 40分) 3 请编写函数 fun(),对长度

6、为 7个字符的字符串,除首、尾字符外,将其余 5个字符按 ASCII码值升序排列。 例如:原来的字符串为 BdsihAd,则排序后输出为 BAdhisd。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中 的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 试题程序: #include stdio.h #include ctype.h #include conio.h int fun(char*s, int num) main() char s10; clrscr(); printf(“输入 7个字符的字符串: “); gets(s); fun(s, 7); prin

7、tf(“n%s“, s); 国家二级( C语言)机试模拟试卷 383答案与解析 一、程序填空题( 30分) 1 【正确答案】 (1)N (2)i (3)一 1 【试题解析】 第一空: “for(i=0; i1 ; i+)“补充循环的结束条件, fun的参数(*ss)M是指向 N行 M列的字符串数组,循环是逐行查找是否存在 t所指的字符串,因此循环次数是 N次,故第一空处应为 “N“。 第二空: “if(strcmp(ssi, t)=0)return【 2】; “说明两个字符串相同,按照题干要求,应返回该串在 字符串数组中的位置 i,故第二空处为 “i“。 第三空: “if(n=【 3】 )pt

8、intf(“nDont found!n“); “, fun函数未找到则返回 -1,因此这里是判断 n是否等于 -1,如果 n等于 -1标识没有找到,在屏幕上输出 “Dont found!“,因此第三空处为 “-1“。 二、程序修改题( 30分) 2 【正确答案】 (1)错误: void fun(int a, int m) 正确: int fun(int a, int m) (2)错误: else if(m =amid) 正确: else if(m amid) 【试题解析】 fun (int a,int m)函数的返回值为 int类型,所以定义函数时,函数的返回类型不能是 void,而是 int

9、类型。 else if(m =amid中的 m amid与 m=amid两个条件段的结果不一样,所以要分开考虑。 三、程序设计题( 40分) 3 【正确答案】 int fun(char*s, int num) char t; int i,j; for(i=1;i num-2; i+) /*下标值从 1开始,用循环依次取得字符串中的字符 */ for(j=i+1;j num-1; j+) /*将字符与其后的每个字符比较 */ if(si sj) /*如果后面字符的 ASCII码值小于该字符的 ASCII码值 */ t=si; /*则交换这两个字符 * si=sj; sj=t; 【试题解析】 本题考查利用循环来 控制数组元素的操作,首尾元素除外,因此,数组的下标值要从 1开始,用循环变量 i来依次取得数组中的元素,用数组中的元素 si和 sj进行比较,如果后一个元素的 ASCII码值小于前一个元素的 ASCII码值,则交换这两个数组元素的值。

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

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

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