1、国家二级( C语言)机试模拟试卷 141及答案与解析 一、选择题 1 下列关于数据链表的叙述中正确的是 ( )。 ( A)只有一个根节点的数据结构不一定是线性结构 ( B)有一个以上根节点的数据结构不一定是非线性结构 ( C)循环链表是非线性结构 ( D)双向链表是非线性结构 2 关于算法和程序,以下叙述中正确的是 ( )。 ( A)算法就是程序 ( B)设计算法时只需要考虑数据结构的设计 ( C)设计算法时只需要考虑结果的可靠性 ( D)以上三种说法都不对 3 下列关于二叉树的叙述中,正确的是 ( )。 ( A)叶子节点总是比度为 2的节点多 1个 ( B)叶子节点总是比度为 2的节点多 2
2、个 ( C)叶子节点数是度为 2的节点数的两倍 ( D)度为 2的节点数是度为 1的节点数的两倍 4 软件生命周期中的各个阶段都不包括的活动是 ( )。 ( A)市场调研 ( B)需求分析 ( C)软件测试 ( D)软件维护 5 某系统总体结构图如下图所示: 该系统总体结构图的深度是 ( )。 ( A) 7 ( B) 6 ( C) 3 ( D) 2 6 程序测试的主要目的是 ( )。 ( A)设计测试程序 ( B)验证程序的 正确性 ( C)发现程序中的错误 ( D)改正程序中的错误 7 下列有关数据库的描述中正确的是 ( )。 ( A)在需求分析阶段建立数据字典 ( B)在概念设计阶段建立数
3、据字典 ( C)在逻辑设计阶段建立数据字典 ( D)在物理设计阶段建立数据字典 8 数据库系统的三级模式不包括 ( )。 ( A)数据模式 ( B)内模式 ( C)外模式 ( D)概念模式 9 有三个关系 R、 S和 T如下:则由关系 R和 S得到关系 T的操作是 ( )。 ( A)并 ( B)交 ( C)投影 ( D)自然连接 10 面 向对象设计方法的主要特征是 ( )。 ( A)继承 ( B)自顶向下 ( C)模块化 ( D)逐步求精 11 关于 C语言常量的叙述中错误的是 ( )。 ( A)经常被使用的变量可以定义成常量 ( B)常量分为整型常量、实型常量、字符常量和字符串常量 ( C
4、)常量可分为数值型常量和非数值型常量 ( D)所谓常量,是指在程序运行过程中,其值不能被改变的量 12 以下关于 C语言的相关叙述中正确的是 ( )。 ( A)简单 C语句必须以分号结束 ( B) C程序中的每一行只能写一条语句 ( C) C语言程序中的注 释必须与语句写在同一行 ( D) C语句必须在一行内写完 13 以下关于算法的叙述中错误的是 ( )。 ( A)算法正确的程序可以有零个输入 ( B)算法正确的程序可以有零个输出 ( C)算法正确的程序最终一定会结束 ( D)算法正确的程序对于相同的输入一定有相同的结果 14 关于 C语言的用户标识符中,不合法的是 ( )。 ( A) a_
5、1 ( B) Xa3c ( C) A一一 x ( D) _1 15 关于 C语言的赋值语句,合法的是 ( )。 ( A) a=b=1; ( B) e=n 3; ( C) x+y=u; ( D) x=2=6+2; 16 在使用 scanf( 2d f, &a, &b);语句并从键盘输入 123 456后, a和b的值分别是 ( )。 ( A) 12和 3 0 ( B) 123和 456 0 ( C) 12和 456 0 ( D) 12和 345 6 0 17 下列 C语言语句会出现错误的是 ( )。 ( A) char a=123 ( B) char a= n; ( C) char a=a; (
6、 D) char = x2d; 18 下列表达式的值当变量 c的值不为 2、 4、 6时 也为 “真 ”的是 ( )。 ( A) (c =2&c =6)&(c 2! =1) ( B) (c=2)(c=4)(c=6) ( C) c =2&c =6)&! (c 2) ( D) (c =2&c =6)(c! =3)(c! =5) 19 C语句中不能够正确计算下述公式的程序段是 ( )f= ( A) if(x =0) f=sqrt(x); if(x 0) f=sqrt( x); ( B) if(x =0) f=sqrt(x); else f=sqrt( x); ( C) f=sqrt(x) if(x
7、0) f=sqrt( x); ( D) f=sqrt(x =0? x: x); 20 有以下程序: #include main() int m=20; while(m ); printf(y= d n, m); 程序执行后的输出结果是 ( )。 ( A) m= 1 ( B) m=0 ( C) m=1 ( D) while构成无限循环 21 有以下程序: #include main() int i; for(i=1; i =40; i+) if(i+ 5=0) if(i+ 8=0)print( d, i) printf( d, i); 程序执行后的输出结果是 ( ) ( A) 17 ( B) 2
8、4 ( C) 32 ( D) 12 22 有以下程序: #include main() int s; scanf( d, &s); while(s 0) switch(s) case 1: printf( d, s+5) case 2: printf( d, s+4); break; case 3: printf( d, s+3); case 4: printf( d, s+2); default: printf( d, s+1); break; scanf( d, &s) 运行时,若输入 123450回车则输出的结果是 ( A) 6.56655e+008 ( B) 6.56646e+006
9、( C) 6.66665e+006 ( D) 6.66666e+006 23 关于 return语句叙述中错误的是 ( )。 ( A)函数的 return语句中可以没有表达式 ( B)用户定义的函数中可以有多个 return语句,以便可以调用一次返回多个函数值 ( C)用户定义的函数中若没有 return语句,则应当定义为 void类型 ( D)用户定义的函数中可以没有 return语句 24 有以下程序: #include stdio h void fun(char *c, int d) *c=*c+1; d=d+1; printf( c, c, *c, d); main() char x=
10、1, y=A; fun(&x, y); printf( c, c n, x, y) ( A) 2, B, 2, A ( B) 2, B, B, A ( C) 1, B, B, 1 ( D) 1, B, a, B 25 下列选项中,能正确定义数组的语句是 ( )。 ( A) int a0 10 ( B) int b; ( C) int N=10; int cN; ( D) #define N 10 int dN 26 以下函数实现按每行 5个输出 a所指数组中的数据: #include void fun(int*a, int n) int i; for(i=0; i n; i+) printf(
11、 d, ai); printf( n); 在横线处应填入的语句是 ( )。 ( A) if(i 5=0)printf( n); ( B) if(i 5=0)continue; ( C) if(i 5=0)prinff( n); ( D) if(i 5=0)continue; 27 有以下程序: #include void if(char*c) while(*c) if(*c =a&*c =z) *c=*c一 (a一 A); c+; main() char s21; gets(s); ff(s); puts(s); 当执行程序时从键盘上输入 Hello World,则程序运行后的输出结果是 (
12、)。 ( A) hello world; ( B) Hello World ( C) HELLO WORLD ( D) hELLO World 28 有以下程序: #include main() int a44=1, 2, 3, 4, 2, 4, 3, 1, 1, 7, 1, 5, 5, 6, 7, 8; int i, j, k, t; for(i=0; i 4; i+) for(j=0; j 3; j+) for(k=j+1; k 4; k+) if(aji aki) t=aji; aji=aki; aki=t; *按列排序 * for(i=0; i 4; i+) printf( d, ,
13、aii); 程序运行后的输出结果是 ( )。 ( A) 1, 4, 3, 8, ( B) 1, 7, 3, 1, ( C) 4, 7, 5, 8, ( D) 1, 2, 5, 4, 29 有以下程序 (strcat函数用于连接两个字符串 ): #nclude #include main() char s20=Welcome 0to 0, t=Beijing; strcat(s, t); printf( s n, s); 程序运行后的输出结果是 ( )。 ( A) Welcome to Beijing ( B) Welcome 0to 0Beijing ( C) WelcomeBeijing (
14、 D) Beijing 30 有以下程序段: char name20; int Bum; scanf(name= s num= d, name, &hum); 当执行上述程序段,并从键盘输入: name=David num=101后, name的值为( )。 ( A) name=David ( B) name=David num=101 ( C) David ( D) David Bum=101 31 有以下程序: #include main() char ch=12345, *P; p=ch; printf( c n, *(p+3); 程序运行后的输出结果是 ( )。 ( A) 2 ( B)
15、 3 ( C) 4 ( D)一个地址值 32 有以下程序: #include main() char s=012abc; int i, n=0; for(i=0; si! =0; i+) if(si a&si =z) n+; printf( d n, n); 程序运行后的输 出结果是 ( )。 ( A) 0 ( B) 3 ( C) 5 ( D) 6 33 有以下程序: #include int fun(int n) if(n=1) return 1; else return(n+fun(n一 1); main() int y; scanf( d, &y); y=fun(y); printf(
16、d n, y); 执行程序时,输入 5,程序运行后的输出结果是 ( )。 ( A) 5 ( B) 10 ( C) 15 ( D) 20 34 有以下程序: #include int fun(int m) static int n=( ); n+=m return n; main() int i=l; pfintf( d, , fun(i+); printf( d n, fun(+i); 程序运行后的输出结果是 ( )。 ( A) 1, 4 ( B) 1, 1 ( C) 2, 4 ( D) 2, 2 35 有以下程序: #include struct S int a, b; st2=3, 4,
17、5, 6; main() struct S*p=st; printf( d, , +(p一 a); printf( d n, +(p一 b); 程序运行后的输出结果是 ( )。 ( A) 3, 4 ( B) 4, 5 ( C) 3, 5 ( D) 4, 6 36 设有以下语句: typedef struct S char c; int a4; PN; 则下面叙述中正确的是 ( )。 ( A) PN是 struct S类型的变量 ( B) S是 struct类型的变量 ( C)可以用 S定义 结构体变量 ( D)可以用 PN定义结构体变量 37 有以下程序: #include #define S
18、UB(x)(x)一 (x) main() int a=l, b=2, c=3, s; s=SUB(a+b)*c; printf( d n, s); 程序运行后的输出结果是 ( )。 ( A) 0 ( B)一 6 ( C)一 1 ( D) 3 38 有以下程序: #include main() int x=1, y; V=x 2: printf( d n, y); 程序运行后的输出结果是 ( )。 ( A) 1 ( B) 2 ( C) 4 ( D) 8 39 下列关于文件概念的叙述中正确的是 ( )。 ( A)文件由 ASC 码组成,只能构成二进制文件 ( B)文件由结构序列组成,可以构成二进制
19、文件或文本文件 ( C)文件由字符序列组成,其类型只能是文本文件 ( D)文件由数据序列组成,可以构成二进制文件或文本文件 40 有以下程序: #include main() FILE*fp; int a10=a, b, C, d, i; fp=fopen(d2 dat, wb); fwrite(a, sizeof(int), 5, fp); fwrite(a, sizeof(int), 5, fp); fclose(fp); fp=fopen(d2 dat, rb); fread(a, sizeof(int), 10, fp); fclose(fp); for(i=0; i 10; i+)
20、printf( d, , a i); 程序运行后的输出结果是 ( )。 ( A) a, b, c, d, ( B) a, b, C, d, 0, a, b, c, d ( C) a, b, c, d, a, b, c, d, ( D) a, b, C, d, a, b, c, d, 0 二、程序填空题 41 下列给定程序中,函数 fun的功能是:把数组中的元素按 “最小、最大、次小、次大 的顺序排列。 例如,若 a所指数组中的数据最初排列为: 1、 2、 3、 4、 5、 6、 7、 8、 9;则按规则移动后,数据排列为: 1、 9、 2、 8、 3、 7、 4、 6、 5。形参 n中存放 a
21、所指数组中数据的个数。 规定 fun函数中的 max存放当前所找的最大值, px存放当前所找最大值的下标。 请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。不得增行或删行,也不得更改程序的结构! #include #define N 9 void fun(int a int n) int i, j, max, min, px, pn, t; for(i=0; i n一 i; j+=2) *found* max=min=【 1】 px=pn=i; for(j=i+1; j n; j+) *found* if(max 【 2】 )
22、 max=aj; px=j; *found* if(min 【 3】 ) max=aj; pn=j; if(pn! =i), t=ai; ai=min; apn=t; if(px=i)px=pn; if(px! =i+1) t=ai+1; ai+1=max; apx=t; main() int bN=9, 1, 4, 2, 3, 6, 5, 8, 7, i; printf( nThe original data: n); for(i=0; i N; i+)printf( 4d, bi); printf( n); fun(b, N); printf( nThe data after moving
23、: h n); for(i=0; i N; i+)printf( 4d, bi); printf( n); 三、程序修改题 42 下列给定程序中函数 fun的功能是:将 tt所指字符串中 的小写字母全部改为对应的大写 字母,其他字符不变。 例如,若输入 “Ab, cD”,则输出 “AB, CD”。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 MOD11 C中,不得增行或删行,也不得更改程序的结构! #include #include char*fun(char tt) int i; for(i=0; tti; i+) *found* if(a =tti)(tti =z)
24、 *found* tti+=32; return(tt); main() char tt81; printf( nPlease enter a str: ng: ); gets(tt); printf( nThe result string is: n s, fun(tt); 四、程序设计题 43 请编写函数 fun,其功能是分别统计形参 t所指二维数组中字母 #和 *的个数。 注意:部分源程序存在 PROG1 C中,请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 试题程序: #include #include #define M 14 voi
25、d NONO(); void fun(char(*t)M, int*a, int*c) void get(char(*s)M) inti, j; for(i=0; i M; i+) for(j=0; j M; j+) sij=65+rand() 12; printf( c, sij); printf( n); main() char aMM; int x, y; get(a); fun(a, &x, &y); printf(#= d*= d n, x, y); NONO(); void NON0() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE*fp, *wf;
26、 int i, j, x, y; char aMM; fp=fopen(c: test in dat, r); wf=fopen(c: test out dat, w); for(i=0: i M; +) for(j=0; j M; j+) fscanf(fp, n c, &aij; fun(a, &x, &y); fprintf(wf, #= d n, x); fprintf(wf, *= d n, y); fclose(fp); fclose(wf); 国家二级( C语言)机试模拟试卷 141答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 二叉树只有一个根节点,但不是线性结构,
27、 所以 A正确。有一个以上根节点的结构一定是非线性结构,链表是线性结构。 2 【正确答案】 D 【试题解析】 算法是程序的一部分;设计算法时不只考虑数据结构和结果的可靠性,还应该考虑数据对象的运算和操作等其他方面,所以选 D。 3 【正确答案】 A 【试题解析】 二叉树中的叶子节点总比度为 2的节点多 1个。 4 【正确答案】 A 【试题解析】 软件生命周期是指产品从提出、实现、使用、维护到停止使用退役的过程,因此,它不包括市场调研活动。 5 【正确答案】 C 【试题解析】 可 知:该树的深度为 3,例如,系统功能 2功能 2 1,就是最深的度数的一个表现。 6 【正确答案】 D 【试题解析】
28、 程序测试的主要目的是改正程序中的错误。 7 【正确答案】 A 【试题解析】 数据字典是在需求分析阶段建立的。 8 【正确答案】 A 【试题解析】 数据库系统的三级模式是概念模式、内模式和外模式。 9 【正确答案】 D 【试题解析】 自然连接要求两个关系的属性一致,并将其进行并操作。所以,答案为 D。 10 【正确答案】 A 【试题解析】 面向对象 设计方法的基本特征:封装性、继承性、多态性、抽样性。 11 【正确答案】 A 【试题解析】 常量和变量的概念不同,常量是指在程序运行中,其值不能被改变的量,变量是在程序运行过程中会发生变化的量,所以选项 A不正确,常量分为整型常量、实型常量、字符常
29、量和字符串常量,也可分为数值型常量和非数值型常量。 12 【正确答案】 A 【试题解析】 简单 C语句必须以分号结束,多条语句可以写在同一行上,注释也可以单独成行或有多行注释,另外, C语句不一定要写在一行上,除了特别的一些地方 (如字符串引用 )之外, C语句可以用硬回车连接。 13 【正确答案】 B 【试题解析】 程序可以不用输入,但一定要有输出,所以 B不正确;算法正确的程序一定会结束,而且相对于相同的输入输出一定相同。 14 【正确答案】 C 【试题解析】 C语言的用户标识符由数字、字母和下划线构成,选项 C中出现的短线不是下划线,所以不合法。 15 【正确答案】 B 【试题解析】 常
30、量不能被赋值,所以 D错,表达式不能被赋值,所以 C错,赋值运算的级别高手逻辑运算符,所以 A错,若写成 a=(b=1)则是合法的表达式。 16 【正确答案】 A 【试题解析】 scanf是严格执照格式输入的, 2d指只输入两位数字,所以 a=12,b=3,另外,题目中没有 c格式用来输入字符,所以空格将会被看作是分隔符 (此处为结束符 )。 17 【正确答案】 A 【试题解析】 选项 A将一个字符串赋给了一个字符变量是不正确的;选项 B和C是字符赋值,正确;选项 D是十六进制表示法。也正确。 18 【正确答案】 D 【试题解析】 是或运算符,即只要其中有一个表达式为真,结果即为真,当 c=3
31、或 c=5时,选项 D最左边的表达式为真,所以整 个表达式为真。 19 【正确答案】 C 【试题解析】 选项 C中在没有判断 x的正负之前便进行了开方运算,所以和公式不符。 20 【正确答案】 A 【试题解析】 注意 while循环体为空语句, m是先使用值再减 1,所以当 m=0时退出循环,再减 1,结果为一 1。 21 【正确答案】 A 【试题解析】 i+是在表达式中先使用 i的值,表达式执行完成后将 i加 1。题目的意思是在 1 40的数中先找到能被 5整除的数,如 5, 10, 15, 20等,若找到则将其加 1并判断是否能被 8整除,如果能则再加 1,执 行输出操作。所以只有15能被
32、 5整除,且加 1后也能被 8整除,再加 1后为 17。 22 【正确答案】 A 【试题解析】 case语句执行后若没有 break,则会继续执行后面的 case语句,直到碰到 break或 switch结束。当输入 1时输出 65,输入 2时输出 6,输入 3时输出 654,当输入 4时输出 65,当输入 5时输出 6,当输入 0时 while语句结束。 23 【正确答案】 B 【试题解析】 函数中可以没有 return语句, return语句中也可以没有表达式,若没有 return则函数要定义成 void类型,一个函数中也可以有多个 return语句,但要确保执行时只调用其中一个 retu
33、rn语句,不能一次返回多个函数值。 24 【正确答案】 A 【试题解析】 这里主要考查形参和实参之间的值传递,子函数的形参第一个是指针,第二个是实徽,所以第一个参数的值在子函数中改变后在主函数中会体现出来,而第二个参数在子函数中改变后在主函数中不会体现出来;另外,字符可以当作特殊的整数对待,因此在子函数中打印出的是 “2, B, ”,在主函数中再打印时 x的值发生了变化,但 y的值没有发生变化,所以打印出的是 “2, A”。 25 【正确答案】 D 【试题解析】 A的 中的内容错误, B中若没有确定数组的长度,则需要在定义的时候同时赋值, C中不能用变量定义数组长度。 26 【正确答案】 C
34、【试题解析】 一行输出 5个,所以应该判断数组下标是否为 5的整数倍,若是则输出一个换行符。 27 【正确答案】 C 【试题解析】 子函数的功能是将字符串中的字母变成大写,所以答案为 C。 28 【正确答案】 A 【试题解析】 前面的 for循环的目的是按列排序,最后一个 for循环是打印数组对角线上的值,所以答案是 1, 4, 3, 8。 29 【正确答案】 C 【试题解析】 系统会在字符串后面补一个结束符 0,也就是说系统会将 0作为字符串的结束符,在 strcat操作时 s=Welcome, t=“Beijing,所以操作后s=WelcomeBeijing。 30 【正确答案】 C 【试
35、题解析】 scanf在输入内容时严格按照格式要求接收字符,沣意到 s后面有个空格,所以 name的值将是 David。 31 【正确答案】 C 【试题解析】 字符指针只指向字符串或字符数组的首地 址即 ch0的地址,对其进行加减操作时是将其向后或向前移动一个字符的位置,所以 (p+3)指向了数组的第 4个字符, *(p+3)提取了这个字符。 32 【正确答案】 A 【试题解析】 for循环的功能是统计字符中的小写字母的个数,但此处判断条件写成了 si! =0,而不是 si! = 0,所以当 i=0时,第一个字符便是 0,循环结束, n=0。 33 【正确答案】 C 【试题解析】 子函数的功能是
36、迭代求和,输入 5的迭代过程是 5+4+3+2+1=15。 34 【正确答案】 A 【试题解析】 static变量在内存中固定位置存放,只在第一次赋初值;第一次调用子函数时传入的数值是 1,返回的 n值是 1;第二次调用子函数时,传入的值是3,此时子函数中的依然是 1,所以返回值是 4。 35 【正确答案】 B 【试题解析】 指针 p指向的是结构体数组的第一个元素,所以引用的值是 3和4,因为 +操作是先加再使用。所以输出的值是 4, 5。 36 【正确答案】 D 【试题解析】 typedef作用是定义别名,即将 struct S及其大括号中的内容定义成别名为 PN的类型,所以可以用 PN来定
37、义这变量。如果要用 S来定义变量就得使用 Struet S的形式。 37 【正确答案】 B 【试题解析】 是位运算符, 1的二进制表示是 00000001,向左移动 2位后为00000100,为 4。 38 【正确答案】 C 【试题解析】 是位运算符, 1的二进制表示是 00000001,向左移动 2位后为00000100,为 4。 39 【正确答案】 D 【试题解析】 文件由数据序列组成,可以构成二进制文件或文本文件。 40 【正确答案】 C 【试题解析】 文件先写入再读出 ,写入的内容是数组的内容,进行了两次写入,所以读出的内容是原来数组的内容的两份拷贝。 二、程序填空题 41 【正确答案
38、】 1 ai; 2 aj; 3 aj; 【试题解析】 填空 1: for循环语句循环体中将数组元素 ai赋值给变量 max和变量 min。 填空 2:通过一次 for循环,找到数组中的最大值, if语句的条件表达式是 maxaj。 填空 3:同理,此处 if语句的条件表达式是 min aj。 求最大值或者最小值的题目,一般都是假设一个元素最大或最小,然后通过 if条件语句将该元素 和其他元素进行比较操作来完成。 三、程序修改题 42 【正确答案】 1 if(tti =a)&(tti =z) 2 tti一 =32; 【试题解析】 1分析本题可知,要判断字符是否为小写字母,即判断其是否在a z,所
39、以这里需要进行连续的比较。用 &。 2从 ASC 码表中可以看出,小写字母的 ASC 码值比对应大写字母的 ASC值大 32。将字符串中的小写字母改为大写字母的方法是:从字符串第一个字符开始,根据 ASC 码值判断该字母是不是小写字母,若是,则 ASC 码值减 32即可。 四、程序设计题 43 【正确答案】 int i=0, j=0;循环统计的下标 *a=0;初始化 a字符统计的个数 *c=0;初始化 c字符统计的个数 for(i=0; i M; i+)行 for(j=0; j M; j+),列 if(tij=#)字符是 a,计数 (*a)+; if(tij=*)字符是 c,计数 (*c)+; 【试题解析】 对二维数组的行列分别循环,行优先,查找数组中元素为 #或者 *,分别对其进行计数。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1