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

上传人:sofeeling205 文档编号:502851 上传时间:2018-11-29 格式:DOC 页数:28 大小:78.50KB
下载 相关 举报
[计算机类试卷]国家二级(C语言)机试模拟试卷116及答案与解析.doc_第1页
第1页 / 共28页
[计算机类试卷]国家二级(C语言)机试模拟试卷116及答案与解析.doc_第2页
第2页 / 共28页
[计算机类试卷]国家二级(C语言)机试模拟试卷116及答案与解析.doc_第3页
第3页 / 共28页
[计算机类试卷]国家二级(C语言)机试模拟试卷116及答案与解析.doc_第4页
第4页 / 共28页
[计算机类试卷]国家二级(C语言)机试模拟试卷116及答案与解析.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、国家二级( C语言)机试模拟试卷 116及答案与解析 一、选择题 1 下面关于算法的叙述中,正确的是 ( )。 ( A)算法的执行效率与数据的存储结构无关 ( B)算法的有穷性是指算法必须能在执行有限个步骤之后终止 ( C)算法的空间复杂度是指算法程序中指令(或语句)的条数 ( D)以上三种描述都正确 2 下列二叉树描述中,正确的是 ( )。 ( A)任何一棵二叉树必须有一个度为 2的结点 ( B)二叉树的度可以小于 2 ( C)非空二叉树有 0个或 1个根结点 ( D)至少有 2个根结点 3 如果 进栈序列为 A, B, C, D,则可能的出栈序列是 ( )。 ( A) C, A, D, B

2、 ( B) B, D, C, A ( C) C, D, A, B ( D)任意顺序 4 下列各选项中,不属于序言性注释的是 ( )。 ( A)程序标题 ( B)程序设计者 ( C)主要算法 ( D)数据状态 5 下列模式中,能够给出数据库物理存储结构与物理存取方法的是 ( )。 ( A)内模式 ( B)外模式 ( C)概念模式 ( D)逻辑模式 6 下列叙述中,不属于软件需求规格说明书的作用的是 ( )。 ( A)便于 用户,开发人员进行理解和交流 ( B)反映出用户问题的结构,可以作为软件开发工作的基础和依据 ( C)作为确认测试和验收的依据 ( D)便于开发人员进行需求分析 7 下列不属于

3、软件工程 3个要素的是 ( )。 ( A)工具 ( B)过程 ( C)方法 ( D)环境 8 数据库系统在其内部具有 3级模式,用来描述数据库中全体数据的全局逻辑结构和特性的是 ( )。 ( A)外模式 ( B)概念模式 ( C)内模式 ( D)存储模式 9 将 ER图转换到关系模式时,实体与联系都可以表示成 ( )。 ( A)属性 ( B)关系 ( C)记录 ( D)码 10 某二叉树中度为 2的结点有 10个,则该二叉树中有 ( )个叶子结点。 ( A) 9 ( B) 10 ( C) 11 ( D) 12 11 以下叙述中正确的是 ( )。 ( A) C程序中注释部分可以出现在程序中任意合

4、适的地方 ( B) C程序的书写格式是固定的,每行只能写一条语句 ( C)构成 C程序的基本单位是函数,所有函数名都可以由用户命名 ( D)在对 C语言程序进行编译时,可以发现注释行中的拼写错误 12 下面的程序在编译时产生错误 ,其出错原因是 ( )。 #inc1ude main() int 1_case; float printF; printf( “请输入 2个数: “); scanf(“ d f“, &1_case, &printF); printf(“ d fn“, 1_case, printF); ( A)定义语句出错, 1 case不能作为变量名 ( B)定义语句出错, prin

5、tF不能用作用户自定义标识符 ( C)定义语句无错, scanf不能作为输入函数使用 ( D)定义语句无错, printf不能输出 1 case的值 13 以下不正确的转义字符是 ( )。 ( A) f ( B) d ( C) s ( D) 088 14 下面程序的运行结果是 ( )。 y=5; x=14; y=(x=3*y, x+6), x1); printf(“x= d, y= d“, x, y); ( A) x=27, y=27 ( B) x=12, y=13 ( C) x=15, y=14 ( D) x=y=27 15 sizeof(char)是 ( )。 ( A)一种函数调用 ( B

6、)一个整型表达式 ( C) 个字符型表达式 ( D)一个不合法的表达式 16 下列 4个程序中,完全正确的是 ( )。 ( A) #inc1ude main(); /*programming*/ printf(“programming! n“); ( B) #inc1ude main() * programming * printf(“programming! n“); ( C) #inc1ude main() * programming*/* printf(“programming! n“); ( D) inc1ude main() /*programming* printf(”progra

7、mming! n“); 17 设变量均已正确定义,若要通过 scanf(“ d c d c“, &a1, &c1, &a2,&c2);语句为变量 a1和 a2赋数值 10和 20, 为变量 c1和 c2赋字符 X和 Y。下列所示的输入形式中正确的是(注:口代表空格字符) ( )。 ( A) 10X20Y ( B) 10X20Y ( C) 10X D10X20Y 20口 Y 18 两次运行下面的程序,如果从键盘上分别输入 3和 2,则输出结果是 ( )。 #inc1ude main() int x; scanf(” d”, &x); if(x+2) printf(” d”, X); else p

8、rintf(“ dn“, x ); ( A) 4和 3 ( B) 4和 2 ( C) 4和 1 ( D) 3和 2 19 以下叙述中不正确的是 ( )。 ( A)在不同的函数中可以使用相同的名字的变量 ( B)函数中的形式参数是局部变量 ( C)在一个函数内定义的变量只在本函数范围内有效 ( D)在一个函数内的复合语句中定义的变量在本函数范围内有效 20 运行下面的程序,输入字符串 “Microsoft Visua1 Studio”,则程序的执行结果是( )。 #inc1ude main() char Chr20; scanf(“ s“, Chr); printf(“ s n“, Chr);

9、( A) Microsoft Visua1 Studio ( B) M ( C) Microsofi ( D) MicrosoftVisuaIStudio 21 若有 “double a: ”,则正确的输入语句是 ( )。 ( A) scanf(“ lf“, a); ( B) scanf(“ f“, &a); ( C) scanf(“ lf, &a) ( D) scanf(“ 1e“, a); 22 if语句的基本形式为: if(表达式)语句,其中 “表达式 ”( )。 ( A)可以是任意合法的表达式 ( B)必须是逻辑表达式 ( C)必须是逻辑表达式或关系表达式 ( D)必须是关系表达式 2

10、3 若 i、 j已定义成 int型,则以下程序段中内循环体的总执行次数是 ( )。 for(1=6; i0; i ) for(j=0; j int m=13; int fun(int x, int) int m=2; return(x*ym); main() int a=7, b=6; printf(“ d“, fun(a, b)/m); ( A) 1 ( B) 3 ( C) 7 ( D) 10 26 下面程序运行后的输出结果是 ( )。 #inc1ude main() int a5=1, 0, 4, 2, 0, b5=1, 2, 3, 4, 5, i, s=0; for(i=0; i mai

11、n() char p4=“ABC“, “DEF“, “GHI“; int i: for(i=0; i #inc1ude main() char*s1=“abDuj“; char*s2=“ABdUG“; intt; t= strcmp(s1, s2); printf(“ d“, t); ( A)正数 ( B)负数 ( C)零 ( D)不确定的值 30 已知: int c34;,则对数组元素引用正确的是 ( )。 ( A) c14 ( B) c1 50 ( C) c1+00D)以上表达都错误 31 以下程序: #inc1ude #inc1ude main() char str=“abcdn123x

12、ab“; printf(“ d“, strlen (str); 运行后的输出结果是 ( )。 ( A) 10 ( B) 9 ( C) 7 ( D) 14 32 C语言中允许用外部说明来指定变量、函数和其他标识符的特征,这里所说的外部指的是 ( )。 ( A)冠以关键字 extern ( B)位置在函数体外部 ( C)作用范围是全程的 ( D)位置在函数的外部 33 有以下程序: #inc1ude int fun(int x, int y) if(x=y)retum(x); else return(x+y)/2); main() int a=1, b=2, c=3; printf(“ dn“,

13、fun(2*a, fun(b, c); 程序运行后的输出结果是 ( )。 ( A) 2 ( B) 3 ( C) 4 ( D) 5 34 若有 “char s33=“AAA“, “BBB“, “CCC“); ”说明语句,则与它等价的语句是 ( )。 ( A) char*s=“AAA“, “BBB“, “CCC“; ( B) char*s3=“AAA“, “BBB“, “CCC“; ( C) char s5=“AAA“, “BBB“, “CCC“; ( D) char s3=“AAA“, “BBB“, “CCC”; 35 计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是 (

14、 )。 ( A) C语言程序仅可以编译执行 ( B) C语言程序仅可以解释执行 ( C) C语言程序既可以编译执行又可以解释执行 ( D)以上说法都不对 36 若有如下说明,且 int类型占两个字节,则正确的叙述为 ( )。 struct st int a; int b2; a. ( A)结构体变量 a与结构体成员 a同名,定义是合法的 ( B)程序只在执行到该结构体时才为结构体 st分配存储单元 ( C)程序运行时为结构体 st分配 8字节存储单元 ( D)类型名 struct st可以通过 extern关键字提前引用 37 有以下程序: #inc1ude int fun(int *k) i

15、nt b=0; b=*k(+b: return(b); main() int a10=1, 2, 3, 4, 5, 6, 7, 8), i; for(i=2; i #include #define N 10 double fun (double *x) int i, j; double av, yN; av=0; i=0; while (i=0) main () char sl81; int numl5, 1; printf ( “nPlease enter a string: fun (s1, num1) ; for (i=0; i typedef struct char num8; dou

16、ble score L2 ; STU; double fun(STU std, int n) int i; double sum ; sum += std i score 1 ; return sum/n; main () STU std = “N1001“, 76 5, 82 0 , “N1002“, 66 5, 73 0, “N1005“, 80 5,66 0, “N1006“, 81 0/56 0; printf(“第 1 门课程的平均分 是 : lfn“, fun (std, 4) ; 四、程序设计题 43 请编写函数 fun,其功能是分别统计形参 t所指二维数组中字母 A和 C的个数

17、。 注意:部分源程序存在 PROG1 C中,请勿改动主函数 main和其他函数中的任何内 容,仅在函数 fun的花括号中填入所编写的若干语句。 #include #include #define M 14 void NONO () ; void fun (char (*t) M , int*a, int*c) void get (char (*s) M ) int i, j ; si j=65+rand() 12; printf (“n“) ; main () char aM M; int x, y; get (a) ; printf(“A= d C= dn“, x, y); NONO();

18、void NONO() /*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf; int i, j, x, y; char aMM; fp=fopen(“in dat“, “r“) ; wf=fopen (“out dat“, “w“) ; for( i=0; istr2”,返回值 0。 30 【正确答案】 C 【试题解析】 此题考查的是数组元素的引用。对于已定义的数组 aMN,数组元素的正确引用必须满足行下标小于 M,列下标小于 N,且为正整数。因此,选项 A)中列下标溢出;选项 B)中行下标出现小数;选项 C)满 足要求。 31 【正确答案】 C

19、 【试题解析】 本题考查字符串的长度,需注意转义字符串,例如, “n”表示换行,为一个长度, “123”表示 3位八进制数 123表示的字符,为一个长度,“xab“表示二位十六进制数 ab表示的字符,也为一个长度。 32 【正确答案】 D 【试题解析】 C语言中允许用位置在函数外部的说明来指定变量、函数和其他标识符的特征。 33 【正确答案】 A 【试题解析】 fun(b, c)即 fun(2, 3), 2!=3,所以返回 (2+3)/2=2; fun(2*a, 2)即fun(2, 2), 2=2,所以返回 2。 34 【正确答案】 D 【试题解析】 二维字符数组在定义时可省略第一维的维数,根

20、据初始化有 3个字符串,所以选项 D)中数组有 3行,与已知说明语句等价。 35 【正确答案】 A 【试题解析】 C语言作为计算机高级语言,用它编写的程序必须经过 C语言的编译器编译后,转换为二进制的机器码来运行。 36 【正确答案】 A 【试题解析】 本题主要考查结构体的用法: 结构体变量 a与结构体成员 a同名,定义合法; 在程序编译的时候结构的定义并不会 使系统为该结构分配内存空间,只有在说明结构变量时才分配内存空间; int a占 2个字节, int b2占 4个字节,共 6个; 类型名 “struct st”不可以通过 extern关键字提前引用。 37 【正确答案】 C 【试题解析

21、】 b是局部变量,因此当 i=2时, fun的返回值值为 3, i=3时 fun返回值为 4。 38 【正确答案】 D 【试题解析】 本题主要考查的知识点是联合体的内存使用。联合体与结构体的定义相同,其本质区别就在于内存使用方式的不同。联合体所占用的内存空间为最长的成员所占用 的空间,各个成员分量全部是从低地址方向开始使用内存单元;联合体中的空间在某一时刻只能保持某一个成员的数据,所以本题执行完一系列赋值后,只得到最后执行的字符 R。 39 【正确答案】 B 【试题解析】 本题主要考查按位与 (&)运算的知识点。 “ ”是对两个运算量相应的位进行逻辑与, “ ”的规则与逻辑与 “&“相同。 x

22、=2的二进制为 00000010,y=3的二进制为 00000011, x&y: 00000010,转化为十进制即为 2。 40 【正确答案】 B 【试题解析】 数据块输入 /输出函数 的调用形式为:fread(buffer,size,count,fp) fread函数参数说明: “buffer”是一个指针,对 fread来说,它是读入数据的存放地址。对 fwrite来说,是要输出数据的地址。 “size”是要读写的字节数; “count”是要进行读写多少个 size字节的数据项; “fp”是指文件型指针。选项 B)中 bi是一个数组,不是指针,需改为 bi。注意:完成一次读操作 (fread

23、()后,如果没有关闭流 (fc1ose(),则指针 (FILE*fp)自动向后移动前一次读写的长度,不关闭流则 继续下一次读操作,接着上次的输出继续输出。 二、程序填空题 41 【正确答案】 (1)xi/N (2)j+或 j =j+1 (3)i+或 i=i+1 【试题解析】 本题中函数 fun的功能是计算形参 x所指数组中 N个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至 x所指数组的后部。在 fun函数中,首先求平均值,然后拿平均值逐个和数组元素比较,如果元素值小于平均值则保存在数组 y中,再把大于等于平均值的元素放在数组 y后面,最

24、后把 v数组内的元素拷贝 到 x所指的数组中。 第一空: “for(i0; iN; i+)av+_1_; ”在该循环的下一个循环内是逐个比较元素 xi是否小于 av,即该循环的功能是求出平均值。由“aw(x0+x1+xN 1)/N: X0/N+X1/N+ +xN一 1/N”可知,第一空处应为 “Xi/N”。 第二空: “if(Xiav)yjxi; xi=一 1; _2_; ”如果 xi小于平均值则将 xi存储在 y数组中,变量 i是循环变量,变量 i记录数组 y的下标变 化,下一次执行 if内部语句时, y数组的下标应为下一个位置,故第二空处应为 j加 l,即第二空出为 “j+”或 “j=j+

25、1”。 第三空: 1为 while循环的循环变量,第一次进入 while的时候 i为 0,判断第一个元素 x0是否是一 1,第二次进入的时候判断第二个元素 x1是否是 1,依此类推直到 i=N退出循环,故第三处是变量 i自增,即第三空处为 “IH”或 “i=i+1”。 三、程序修改题 42 【正确答案】 (1) double sum改为 double sum=0 (2)for(i=0; i2; i+)改 为 for(i=0; in; i+) (3)sum+=stdi score1改为 sum+=std i score 0 【试题解析】 本题 fun函数的主要功能是:在有 n名学生, 2门课成绩

26、的结构体数组 std中,计算出第 1门课程的平均分,作为函数值返回。这里就是很基本的求平均数,只不过这里涉及到结构体,稍微要比普通的求平均数复杂一点。 fun0函数就是相加求和,注意结构体涉及的细节问题即可。 (1)第一个错误在定义单门课程所有人总分 sum时,因为 sum是总分,而后面的计算式也确定为 “sum+=stdi score1”。很明显地,这里的 sum需要定义一个初始值才能正确计算,而初始值只能是为 0计算才是正确的,所以这里应该是 “double sum“改为 “double sum=0: ”。 第二个错误在 fun函数的 for循环条件中。这里的 for循环是为了求各科的分数

27、和然后计算平均分,因此 for循环的次数和计算平均分的个数是一样的, fun函数是计算 n个学生第一门课的平均分,所以这里的 sum的循环肯定也是要进行 n次,而原程序却是 “i2”,这样明显只会进行 2次循环,显然是不对的,所以为了进行必要的分 数相加,这里的 “i2”应该改成 “in”。 第三个错误在 for循环的求和算式中,这里是结构体变量的求和,语法上本来是没有任何错误的,但是要看清题目要求的计算学生第 1门课程的平均分,然后再作为函数值返回。这里 “sum+=stdi score1”变量看起来是第一门,但根据数组从0位开始我们就能发现这里其实求的是学生第 2门课程的总分,然后求出来的

28、平均分也是第二门学科的,这完全不是题目的要求,所以这里的“sum+=stdi score1”应该要改为 “sum+=stdi score0”。 四、程序设计题 43 【正确答案】 void fun ( char (*t) M , int*a ,int *c)int 1, j; * a=0; * c=0; for( i=0; iM; i+ ) for(j=0; jM; j+)i f(tij=A)* a=* a+1; el se i f(tij=C)* c=* c+1; 【试题解析】 本题中 fun函数实现的功能的主要功能是找出二维数组中 A和 C的个数,最先就 能想到用条件语句进行判断和统计。解

29、题步骤主要为:第一步,要得到所需要的二维数组,第二步,二维数组进入 fun函数中进行数据处理, fun函数中需要 if条件语句来进行判断,判断数组中的字母是否为 A或者 C,数组中的每个数据都需要进行判断,要注意 A和 C是分开统计的,所以这里需要同时统计 A和 C,然后分别得到结果;第三步,输出得到的结果:字母 A和字母 C的个数。 本题首先需要一个二维数组,二维数组的大小在程序开始就进行了定义“define=14”,这个大小比较合适,然后利用 gets函数得到数组,然后数据就可以进入 fun函数 中进行处理应用。进入 fun函数, fun函数首先肯定需要 for循环语句将二维数组中的数据进行排序使用,然后需要条件语句进行判断处理,这两步是一体,见程序第 9 11行, for循环保证全部使用了二维数组中数据,并且是依次使用, if语句判断了字母是否为 A或者 C或者都不是,并且进行了统计相加得到了 A的个数 a, C的个数 c,这样循环完成后, A和 C的个数 a、 c就能继续返回主函数进行输出了,见程序 26行,最终得到结果。

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

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

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