1、国家二级 C语言机试(选择题)模拟试卷 27 及答案与解析 一、选择题 1 一个栈的初始状态为空。现将元素 1、 2、 3、 4、 5、 A、 B、 C、 D、 E依次入栈,然后再依次出栈,则元素出栈的顺序是 ( )。 ( A) 12345ABCDE ( B) EDCBA54321 ( C) ABCDE12345 ( D) 54321EDCBA 2 下列叙述中正确的是 ( )。 ( A)循环队列有队头和队尾两个指针,因此,循环队列是非线性结构 ( B)在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况 ( C)在循环队列 中,只需要队尾指针就能反映队列中元素的动态变化情况 ( D)循
2、环队列中元素的个数是由队头指针和队尾指针共同决定 3 在长度为 n的有序线性表中进行二分查找,最坏情况下需要比较的次数是( )。 ( A) O(n) ( B) O(n 2) ( C) (log2n) ( D) O(nlog2n) 4 下列叙述中正确的是 ( )。 ( A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的 ( B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构 ( C)顺序存储结构能存储有序表,链式存储 结构不能存储有序表 ( D)链式存储结构比顺序存储结构节省存储空间 5 数据流图中带有箭头的线段表示的是 ( )。 ( A)控制流 ( B)事件驱动
3、 ( C)模块调用 ( D)数据流 6 在软件开发中,需求分析阶段可以使用的工具是 ( )。 ( A) N S图 ( B) DFD图 ( C) PAD图 ( D)程序流程图 7 在面向对象方法中,不属于 “对象 “基本特点的是 ( )。 ( A)一致性 ( B)分类性 ( C)多态性 ( D)标识唯一性 8 一间宿舍可住多个学生,则实体宿舍和学生之间的联系 是 ( )。 ( A)一对一 ( B)一对多 ( C)多对一 ( D)多对多 9 在数据管理技术发展的三个阶段中,数据共享最好的是 ( )。 ( A)人工管理阶段 ( B)文件系统阶段 ( C)数据库系统阶段 ( D)三个阶段相同 10 有
4、三个关系 R、 S和 T如下: 由关系 R和 S通过运算得到关系 T,则所使用的运算为。 ( A)笛卡尔积 ( B)交 ( C)并 ( D)自然连接 11 以下不能用于描述算法的是 ( A)文字叙述 ( B)程序语句 ( C)伪代码和流程图 ( D) E-R图 12 以 下选项中合法的实型常量是 ( A) 0 ( B) 3.13e-2.1 ( C) .914 ( D) 2.0*10 13 以下叙述中正确的是 ( A) a是实型变量, a=10在 C语言中是允许的,因此可以说:实型变量中可以存放整型数 ( B)在赋值表达式中,赋值号的右边可以是变量,也可以是任意表达式 ( C)若有 int a=
5、4,b=9; 执行了 a=b后, a的值已由原值改变为 b的值, b的值变为0 ( D)若有 int a=4,b=9; 执行了 a=b;b=a;之后, a的值为 9, b的值为 4 14 以下选项中合法的变量 是 ( A) 5a ( B) _10_ ( C) A% ( D) sizeof 15 不能正确表示数学式 的表达式是 ( A) a/c*b ( B) a*b/c ( C) a/ b* c ( D) a*(b/c) 16 有以下程序 #include main() int a=3; printf(“%dn“, ( a+=a-=a*a ); 程序运行后的输出结果是 ( A) 3 ( B) 9
6、 ( C) 0 ( D) -12 17 若变量已正确定义,以下选项中非法的表达式是 ( A) a!=4|b ( B) a=1/2*(x=y=20,x*3) ( C) a % 4 ( D) A + 32 18 有以下程序 #include main() int x=35, B; char z=B ; B = ( x ) printf(“%dn“, B ); 程序运行后的输出结果是 ( A) 1 ( B) 0 ( C) 35 ( D) 66 19 与数学表达式 xyz对应的 C语言表达式是 ( A) (x =y)|(y =x) ( B) (x =y =z) ( C) (x =y)!(y =z) (
7、 D) (x =y) if( x main() int i, sum; for( i=1; i 6; i+ ) sum+=i; printf(“%dn“, sum); 程序运行后的输出结果是 ( A)随机值 ( B) 0 ( C) 15 ( D) 16 22 有以下程序 #include main() int a = 3; do printf(“%d,“, a-=2 ); while( ! (-a) ); printf(“n“); 程序运行后的输出结果是 ( A) 1 ( B) 1, -2, ( C) 3,0, ( D) 1,0 23 有以下程序 #include void fun( int
8、a, int b, int c ) a=b; b=c; c=a; main() int a=10 , b=20, c=30; fun( a, b, c ); printf(“%d,%d,%dn“,c,b,a); 程序运行后的输出结果是 ( A) 10,20,30 ( B) 30,20,10 ( C) 20,30,10 ( D) 0,0,0 24 有以下程序 #include main() int c6=10,20,30,40,50,60, *p,*s; p = c;s = printf(“%dn“, s-p ); 程序运行后的输出结果是 ( A) 5 ( B) 50 ( C) 6 ( D) 6
9、0 25 有以下程序 #include main() int a3=0, i, j, k=2; for( i=0; i k; i+ ) for( j=0; j k; j+ ) aj = ai+1; printf(“%dn“, a1 ); 程序运行后的输出结果是 ( A) 0 ( B) 2 ( C) 1 ( D) 3 26 有以下程序 #include main() int a5=2,4,6,8,10, *p,*k; p = a;k = printf(“%d “, *( p+ ) ); printf(“%dn“, *k ); 程序运行后的输出结果是 ( A) 4 6 ( B) 4 4 ( C)
10、2 2 ( D) 2 4 27 有以下程序 #include main() int aa33= 2,4,6 , i, *p = for ( i=0; i 2; i+ ) if( i = 0 ) aaii+1 = *p + 1; else +p; printf(“%d “, *p ); 程序运行后的输出结果是 ( A) 2 6 ( B) 2 3 ( C) 4 3 ( D) 4 6 28 以下 fun函数返回数组中最大值的下标 #include int fun( int *s,int n ) int i , k; for( i=0 , k=i; i int fun( char s ) char *
11、p = s; while( *p != 0 ) p+; return ( p-s ); main() printf(“%dn“, fun(“0ABCDEF“) ); 程序运行后的输出结果是 ( A) 1 ( B) 6 ( C) 7 ( D) 0 30 若有以下程序段 char str412= “aa“,“bbb“,“ccccc“,“d“ , *strp4; int i; for( i = 0; i 4; i+ ) strpi = stri; 不能正确引用字符串的选项是 ( A) str0 ( B) strp ( C) strp3 ( D) *strp 31 有以下程序 #include #in
12、clude void fun ( char *s ) char a10; strcpy( a, “STRING“ ); s = a; main() char *p=“PROGRAM“; fun( p ); printf(“%sn“,p); 程序运行后的输出结果是(此处 代表空格 ) ( A) STRING ( B) STRING ( C) STRING ( D) PROGRAM 32 有以下程序 #include void fun ( int n ,int *s ) int f; if( n=1 ) *s = n+1 ; else fun( n-1, *s = f ; main() int x
13、 =0; fun( 4, printf(“%dn“,x); 程序运行后的输出结果是 ( A) 3 ( B) 1 ( C) 2 ( D) 4 33 有以下程序 #include main() char c25=“6938“,“8254“ , *p2; int i, j, s=0; for( i=0; i 2; i+ ) pi=ci; for( i=0; i 2; i+ ) for( j=0; pij0 ; j+=2 ) s=10*s+pij-0; printf(“%dn“,s); 程序运行后的输出结果是 ( A) 9284 ( B) 9824 ( C) 6982 ( D) 6385 34 有以下
14、程序 #include void fun ( int *s ) static int j=0; do sj += s j+1; while(+j #define SUB( X, Y ) (X+1)*Y main() int a=3, b=4; printf(“%dn“,SUB(a+ ,b+ ); 程序运行后的输出结果是 ( A) 25 ( B) 20 ( C) 12 ( D) 16 37 有以下程序 #include main() char c25=“6938“,“8254“ , *p2; int i, j, s=0; for( i=0; i 2; i+ ) pi=ci; for( i=0;
15、i 2; i+ ) for( j=0; pij0 ; j+=2 ) s=10*s+pij-0; printf(“%dn“,s); 程序运行后的输出结果是 ( A) 6938 ( B) 9824 ( C) 4528 ( D) 6385 38 若有以下程序段 struct st int n; struct st *next; ; struct st a3= 5, p= 则以下选项中值为 6的表达式是 ( A) p- n ( B) (*p).n ( C) p- n+ ( D) +(p- n) 39 有以下程序 #include main() int i=1; i = ii; printf(“%dn“
16、, i ); 程序运行后的输出结果是 ( A) 1 ( B) -1 ( C) 0 ( D) 7 40 以下程序用来统 计文件中字符的个数(函数 feof用以检查文件是否结束,结束时返回非零 ) #include main() FILE *fp; long num=0; fp=fopen(“fname.dat“,“r“); while(_) fgetc(fp); num+; printf(“num=%dn“,num); fclose( fp ); 下面选项中,填入横线处不能得到正确结果的是 ( A) feof(fp)=NULL ( B) !feof(fp) ( C) feof(fp) ( D)
17、feof(fp)=0 国家二级 C语言机试(选择题)模拟试卷 27 答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 栈是先进后出的原则组织数据,所以入栈最早的最后出栈,所以选择 B)。 2 【正确答案】 D 【试题解析】 循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所以 A)错误;在循环队列中只需要队头指针与队尾两个指针来共同反映队列中元素的动态变化情况,所以 B)与 C)错误。 3 【正确答案】 C 【试题解析】 当有序线性表为顺序存储时才能用二 分法查找。可以证明的是对于长度为 n 的有序线性表,在最坏情况下,二分法查找只需要比较 log2n 次,而顺序查找需要比
18、较 n 次。 4 【正确答案】 A 【试题解析】 链式存储结构既可以针对线性结构也可以针对非线性结构,所以 B)与 C)错误。链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以 D)错误。 5 【正确答案】 D 【试题解析】 数据流图中带箭头的线段表示的是数据流,即沿箭头方向传送数据的通道,一般在旁边标注数据流名。 6 【正确答案】 B 【试题解析】 在需 求分析阶段可以使用的工具有数据流图 DFD图,数据字典DD,判定树与判定表,所以选择 B)。 7 【正确答案】 A 【试题解析】 对象有如下一些基本特点:标识唯一性、分类性、多态性、封装性、模块独立性好。所以选择 A)
19、。 8 【正确答案】 B 【试题解析】 因为一间宿舍可以住多个学生即多个学生住在一个宿舍中,但一个学生只能住一间宿舍,所以实体宿舍和学生之间是一对多的关系。 9 【正确答案】 C 【试题解析】 数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段 。其中最后一个阶段结构简单,使用方便逻辑性强物理性少,在各方面的表现都最好,一直占据数据库领域的主导地位,所以选择 C)。 10 【正确答案】 D 【试题解析】 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据 T 关系中的有序组可知 R与 S 进行的是自
20、然连接操作。 11 【正确答案】 D 【试题解析】 算法的描述有伪代码、流程图、 N-S 结构图等, E-R是实体联系模型,所以选择 D。 12 【正确答案】 C 【试题解析 】 A选项为整型数据, B 选项中 e后面必须为整数, D选项是表达式,不是常量 ,所以选择 C。 13 【正确答案】 B 【试题解析】 B 选项中 a是实型变量 ,a=10在 C语言中是允许的 ,但是实型变量中不可以存放整型数 ?C选项中执行 a=b后 ,a的值变为 b 的值,为 9,b的值不变,仍为 9, D选项中执行 a=b 后, a的值为 9,b 的值为 9,执行 b=a后 ,a的值为 9,b的值也为 9,所以选
21、择 B。 14 【正确答案】 B 【试题解析】 变量的命名要符合标识符的命名规则 ,即由下划线、字母或数字组成 ,且必须以下划线或字 母开始 ,也不能和关键字相同 ,所以选择 B。 15 【正确答案】 C 【试题解析】 /号和 *号的优先级处于平级 ,结合性都是自左至右 ?所以选择 C,C式子表示的是 。 16 【正确答案】 D 【试题解析】 首先计算 a*a,结果为 9,然后执行 a=a-9,即 3-9,结果为 -6,然后执行a=(-6)+(-6),即 a=的值为 -12,所以选择 D。 17 【正确答案】 B 【试题解析】 A选项中 a即表示 a为字符常量,再给 a赋值 1/2*(x=y=
22、20,x*3),是不正确的。因此 B 选项正确。 18 【正确答案】 A 【试题解析】 本题重点考察逻辑运算符和关系运算符的相关知识,已知变量 x为整型变量,并赋值为 35,变量 z为字符型变量,并赋值为 B。语句B=(x)中, (x)的值为 1, B的 asscii码小于 b的 asscii 码,所以 (zb)的值也为 1, 1。依据 printf()函数输出类型中 f是以小数形式输出单、双精度实数。因此 C选项正确。 21 【正确答案】 A 【试题解析】 本题重点考察 for语句,变量没有初始化的情况下,默认值与编译器有关系,不同的编译器有不同的值。因此 A选项正确。 22 【正确答案】
23、B 【试题解析】 本题重点考察 dowhile 语句,该循环语句的特点是,先执行循环中的语句 ,然后再判断表达式是否为真 , 如果为真则继续循环;如果为假 , 则终止循环。因此 , do-while循环至少要执行一次循环语句。变量 a赋初值为 3,每循环一次需执行语句 a-=2一次,同时循环条件使变量 a自减 1,所以第一次循环后变量 a变为 1,第 2次循环后变量 a变为 -2。因此 A选项正确。 23 【正确答案】 B 【试题解析】 函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向 地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变
24、化。因此 B选项正确。 24 【正确答案】 A 【试题解析】 首先初始化一维数组 c6,语句 p = c;指将 c0元素的地址赋给指针变量 p;语句 s = 指将 c5 元素的地址赋给指针变量 s。程序最后输出 s-p,即结果为 5。因此 A选项正确。 25 【正确答案】 D 【试题解析】 该题首先初始化一维数组 a3所有元素都为 0;执行嵌套循环 for语句,当 i=0、 j=0时, a0=a0+1=1;当 i=0、 j=1时, a1=a0+1=2;当 i=1、j=0时, a0=a1+1=3;当 i=1、 j=1时, a1=a1+1=3;因此 D选项正确。 26 【正确答案】 D 【试题解析
25、】 首先通过 p=a使 p指向数组的第 1个元素,所以输出 2;在输出 2以后,由于 p+,即 p就指向数组的第 2个元素, *k就是取出 p 所指向元素的值,而 p 指向的是数组的第 2个元素,即输出 4。因此 D选项正确。 27 【正确答案】 B 【试题解析】 观察题目,可以发现, *p=&aa00语句实际是将数组 aa的首地址赋给了指针变量 p,将 i的值带入 for循环中, i=0时, aa01=3, *p=2; *p 输出的是指针所指向的数组值,此时 p所指向的是 aa00,输出 2,而 i=1时执行了 +p 操作使指针向后移动指向了 aa01,所以在输出 *p时应为 3。因此 B
26、选项正确。 28 【正确答案】 D 【试题解析】 fun 函数的功能是返回数组中最大值的下标。通过 for循环语句,每次将最大的数给 k,即 k=i。因此 D选项正确。 29 【正确答案】 C 【试题解析】 本题考查字符串作为函数参数以及 while语句,本题中传入字符串OABCDEF,然后执行 fun后,就得到了该字符串中字符的个数,不包括结尾符,该字符串有 7个字符,所以答案为 C。 30 【正确答案】 B 【试题解析】 本题考查字符串指针作为函数参数,本题中 p 作为字符串指针传入fun中, p指向的内容并没有发生变化,所以选项 B正确。 31 【正确答案】 D 【试题解析】 本题考查字
27、符串指针作为函数参数,本题中 p 作为字符串指针传入fun中, p指向的内容并没有发生变化,所以选项 D正确。 32 【正确答案】 C 【试题解析 】 本题考查函数的递归调用,将函数参数带入函数中,一步步递归即可得到结果,结果为 2,选项 C正确。 33 【正确答案】 D 【试题解析】 本题中首先是将二维字符数组 c赋值指针数组 p,然后遍历 p找到两个字符串中的偶数位置的字符并组成一个数值输出,根据代码执行即可得到结果为 6385。 34 【正确答案】 B 【试题解析】 本题主要考查 dowhile 语句,执行 fun 函数后, a数组里面的元素变为 35745,输出后四个字符,所以结果为
28、5745,选项 B正确。 35 【正确答案】 A 【试题 解析】 本题考查 malloc函数,题目中要求 p 指向一个 int型的动态存储单元,那么就应该将分配的存储单元转化为 int,所以选项 A正确。 36 【正确答案】 D 【试题解析】 本题考查宏定义,宏定义只是做个简单的替换,执行SUB(a+ ,b+)=(a+ +1)*b+=16,选项 D正确。 37 【正确答案】 D 【试题解析】 本题中首先是将二维字符数组 c赋值指针数组 p,然后遍历 p找到两个字符串中的偶数位置的字符并组成一个数值输出,根据代码执行即可得到结果为 6385。 38 【正确 答案】 D 【试题解析】 本题考查结构体变量的引用,其中 a为定义的结构体数组, D选项中 p- n为 5, +( p- n)为 6,所以 D选项正确。 39 【正确答案】 C 【试题解析】 本题考查位运算中按位异或运算符,异或运算只有在两个比较的位不同时其结果是 1,否则结果为 0, ii 运算符两边相同,所以结果为 0,选项 C正确。 40 【正确答案】 C 【试题解析】 本题考查文件的定位, feof 函数的用法是从输入流读取数据,如果到达文件末尾(遇文件结束符), eof函数值为非零值,否则为 0, while判断条件应是如果没有到达文件末尾,所以选项 C不能得到正确的结果。