1、国家二级( C语言)笔试模拟试卷 109及答案与解析 1 下列叙述中错误的是 ( )。 ( A)一种数据的逻辑结构可以有多种存储结构 ( B)数据的存储结构与数据的处理效率无关 ( C)数据的存储结构与数据的处理效率密切相关 ( D)数据的存储结构在计算机中所占的空间不一定是连续的 2 下列叙述中错误的是 ( )。 ( A)线性表是由 n个元素组成的一个有限序列 ( B)线性表是一种线性结构 ( C)线性表的所有结点有且仅有一个前件和后件 ( D)线性表可以是空表 3 下列关于栈的描述中错误的 是 ( )。 ( A)栈是先进先出的线性表 ( B)栈只能顺序存储 ( C)栈具有记忆作用 ( D)
2、对栈的插入与删除操作中,不需要改变栈底指针 4 对长度为 n的线性表进行顺序查找,在最坏情况下需要比较的次数为 ( )。 ( A) 125 ( B) n/2 ( C) n ( D) n+1 5 下列叙述中正确的是 ( )。 ( A)在模块化程序设计中,一个模块应该尽量多的包括与其他模块联系的信息 ( B)在自顶向下、逐步细化的设计过程中,首先应设计解决问题的第一个细节 ( C)在模块化程序设计中,一 个模块内部的控制结构也要符合结构化原则 ( D)在程序设计过程中,不能同时采用结构化程序设计方法与模块化程序设计方法 6 下列特征中不是面向对象方法的主要特征的是 ( )。 ( A)多态性 ( B
3、)继承 ( C)封装性 ( D)模块化 7 有下列二叉树,对此二叉树中序遍历的结果为 ( )。 ( A) BDYEACFXZ ( B) DYBEAFCZX ( C) ABCDEFXYZ ( D) ABDYECFXZ 8 下列不属于软件工程的 3个要素的是 ( )。 ( A)工具 ( B)过程 ( C)方法 ( D)环境 9 设计软件结构是在软件生命周期的 ( )。 ( A)软件定义期 ( B)软件开发期 ( C)软件维护期 ( D)以上 3个都不是 10 下列工具中为需求分析常用工具的是 ( )。 ( A) PAD ( B) PFD ( C) N-S ( D) DFD 11 下列说法不正确的是
4、 ( )。 ( A) C程序是以函数为基本单位的,整个程序由函数组成 ( B) C语言程序的一条语句可以写在不同的行上 ( C) C程序的注释行对程序的运行功能不起任何作用,所以注释应该尽可能少写 ( D) C程序 的每个语句都以分号结束 12 下列标识符不是关键字的是 ( )。 ( A) break ( B) char ( C) Switch ( D) retum 13 下列程序的执行结果是 ( )。 #include stdio.h main() int a, b, c; a=b=2: c=(a+)-1; printf(“%d, %d“, a, c) ; c+=(a+=-a+(+B) ;p
5、rintf(“%d, %d“, a, c) ; ( A) 3, 1 4, 1 ( B) 3, 1 4, 2 ( C) 2, 04, 1 ( D) 2, 1 4, 1 14 下列选项中不合法的十六进制数是 ( )。 ( A) Oxff ( B) OX11 ( C) Oxlg ( D) OXabc 15 若 w、 x、 y、 z、 m均为 int型变量,则执行下列的语句后 m的值是 ( )。w=2, x=3, y=4, z=5; m=(w x)?w: x; m=(m z)?m: z; m=(m y)?m: y; ( A) 2 ( B) 3 ( C) 5 ( D) 4 16 已知 i、 j、 k为
6、int型变量,若要从键盘输入 2、 3、 4 CR,使 I、 j、 k的值分别为 2、 3、 4,下列正确的输入语句是 ( )。 ( A) scanf(“%3d, %3d, %3d“, c=getchar(); if(c =a else if(c =g else printf(“input error!n“); putchar(c); ( A) f ( B) t ( C) e ( D) d 22 在 C语言中,函数调用时 ( )。 ( A)实参和形参各占独立的存储单元 ( B)实参和形参共用存储单元 ( C)由系统自动确定实参和形参是否共用存储单元 ( D)由用户指定实参和形参是否共用存储单元
7、 23 下列程序的输出结果是 ( )。 #include stdio.h int b=2; int func(int*a) b+=*a;return b; main() int a=1,t=2; t+=func( printf(“%dn“,t); ( A) 4 ( B) 5 ( C) 6 ( D) 8 24 若有定义 float a=25,b,*p=, 则下列对赋值语句 *p=a;和 p=的正确解释为( )。 ( A)两个语句都是将变量 a的值赋予变量 p ( B) *p=a是使 p指向变量 a,而 p= t=*x,*x=*y;*y=t; main( ) int a8=1,2,3,4,5,6,
8、7,8,i,*p,*q; p=a;q= while(p q) f(p,q); p+ +; q-; for (i=0;i 8;i+) printf(“%d,“,ai); ( A) 8,2,3,4,5,6,7,1 ( B) 5,6,7,8,1,2,3,4 ( C) 1,2,3,4,5,6,7,8 ( D) 8,7,6,5,4,3,2,1 28 对两个数组 a和 b进行下列初始化: char m=“1234567“; char n= 1,2,3,4,5,6,7; 则下列叙述正确的是 ( )。 ( A)数组 m与数组 n完全相同 ( B)数组 m与数组 n长度相同 ( C)数组 m比数组 n长 1 (
9、 D)数组 m与数组 n中都存放字符串 29 下列程序的输出结果是 ( )。 #include stdio.h main() char a= a,b,c,d,e,f,0; int i,j; i=sizeof(a); j=strlen(a); print f(“%d,%d“,i,j ); ( A) 7,7 ( B) 7,6 ( C) 6,6 ( D) 6,7 30 设变量已正确定义,则下列能正确计算 f=n!的程序段是 ( )。 ( A) f=0; for(i=1 ;i =n;i+ +) f*=i; ( B) f=1; for(i=1;i n;i+ +) f*=i; ( C) f=1; for(
10、i=n;i 1;i+ +)f*=i; ( D) f=1; for(i=n;i =2;i-)f*=i; 31 设有定义: int n1=0,n2,*p=,下列赋值语句中与 n2=n1; 语句等价的是( )。 ( A) *p=*q; ( B) p=q; ( C) *p= ( D) p=*q; 32 设已包含头文件 string.h , 下列程序段的运行结果是 ( )。 char s1=“ACDEF“; char s2=“ABC“; strcpy(s1,s2); printf(“%d“,strlen(s1); ( A) 3 ( B) 4 ( C) 6 ( D) 5 33 设 fp为指向某二进制文件的
11、指针,且已读到此文件末尾,则函数 feof(fp)的返回值为 ( )。 ( A) EOF ( B)非 0值 ( C) 0 ( D) NULL 34 下列程序执行的输出结果是 ( )。 #include stdio.h main() char a24; strcpy(a,“are“);strcpy(a1,“you“); a03= printf(“%sn“,a); ( A) are int s=ADD(m+n)*k; printf(“s=%d“,s); ( A) sum=18 ( B) sum=10 ( C) sum=9 ( D) sum=25 37 当说明一个结构体变量时系统分配给它的内存是 (
12、 )。 ( A)各成员所需要内存量的总和 ( B)结构中第一个成员所需的内存量 ( C)成员中占内存最大者所需的容量 ( D)结构中最后一个成员 所需要的内存量 38 下列语句段中,正确的是 ( )。 ( A) street int x; float y; int a2; unsigned b3; char name 10; ; ( B) struct stu unsigned a3; unsigned b4; x; int *p= ( C) stmct stu int a; float x4; y=1,1.0; float data=y.x; ( D) struct nd int a,b;
13、unsigned c2=5; ; 39 设 x=011050, 则 x=x”定义了一个字符型数组并进行了初始化, C语言规定,在字符串的末尾自动加上串结束标记, 0,因此数组 m的长度是 8;而数组 n是按照字符方式对数组进行初始化,系统不会自动加上串结束标记 0,因此数组 n的长度是7。 29 【正确答案】 B 【试题解析】 sizeof()函数的功能是返回字符串所占的字节数, strlen()函数的功能是返回字符串的长度,其中 0是一个转义字符,它占存储空间,但不计入串的长度。 30 【正确答案】 D 【试题解 析】 要正确计算函数 f=n!,由 n!的数学定义可知 n!=n*(n-1)*
14、(n-2)*1 。在选项 A)中,由于 f的初值为 0,在 for循环语句中, f依次乘以 1,2, 3, , n。最后计算 f=n!=O,所以选项 A)不正确。在选项 B)中, f的初值为 1,在 for循环语句中, f依次乘以 1, 2, 3, , (n-1)。最后计算得到 f=(n-1)!,所以选项 B)不正确。在选项 C)中, f的初值为 1,在 for循环语句中, f依次乘以 n, n+1, n+2, ,所以选项 C)不正确。在选项 D)中, f的初值为 1,在for循环语句中 , f依次乘以 n, n-1, n-2, , 2。最后计算 f=n!,所以选项 D)正确。 31 【正确答
15、案】 A 【试题解析】 在定义指针变量 p和 q时,分别把变量 n2和 n1的地址赋给了指针变量 p和 q,所以 *p和 *q中内容就分别是变量 n2和 n1的值,所以语句 *p=*q与语句 n2=n1等价。因此选项 A)正确。 32 【正确答案】 A 【试题解析】 头文件 string.h是字符串处理函数对应的头文件,要想调用 C语言的库函数时,都要在程序中嵌入该函数对应的头文件,否则无法使用库函数。 strcpy(s1, s2)把 s2中的字符串复制到 s1中,所以结果就为 s2的长度。 33 【正确答案】 B 【试题解析】 ANSI C提供的 feof函数的功能是判断 fp所指的文件的位
16、置是否已达到文件尾,如果达到文件尾,则 feof函数的值为 1,否则为 0,表示文件尚未结束。 34 【正确答案】 A 【试题解析】 strcpy(a,“are“)中数组名 a代表数组首地址的地址常量,该操作把are复制到 a中, aO3=&,且 strepy(a1.“you“)把 you复制到 a1中,故输出a为 “are&you”。 35 【正确答案】 D 【试题解析】 一个源文件中的外部变量的作用域是从定义该变量的位置开始到本文件结束。 36 【正确答案】 B 【试题解析】 本题考查带参数的宏的定义及相关运算:s=m+n+m+n*k=1+2+1+2*3=10。 37 【正确答案】 A 【
17、试题解析】 本题主要考查结构体的内存使用:对结构体而言,结构中不同的成员分别使用不同的内存空间,一个结构所占内存空间的大小是结构中每个成员所占内存空间大小的总和,结构中每个成员相互独立。 38 【正确答案】 A 【试题解析】 本题主要考查的知识点是结构类型的概念和定义,结构定义的一般形式是: struct结构类型名称 数据类型 成员名 1; 数据类型 成员名 2; 数据类型 成员名 n; ; struct为关键字,是结构的标识符: 中包围的是组成该结构的成员项;每个成员的数据类型既可以是简单的数据类型,也可以是复杂的数据类型。整个定义作为一个完整的语句,用分号结束。结构类型名称是可以省略的 ,
18、此时定义的结构称为无名结构。 39 【正确答案】 A 【试题解析】 本题主要考查按位与运算, x=011050的二进制形式为000100100010t000, 01252的二进制形式为 0000001010101010,两者相与得0000001000101000。 40 【正确答案】 C 【试题解析】 数据块读取函数调用形式: fread(buffer,size,count,fp)。 fread函数参数说明: “buffer”是一个指针,对 fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。 “size”是要读写的字节数: “count”是要进行读写多少个 siz
19、e字节的数据项; “fp”是指文件型指针。 41 【正确答案】 软件开发 【试题解析】 软件生命周期分为 3个时期共 8个阶段:软件定义期 (问题定义、可行性研究和需求分析 )、软件开发期 (系统设计、详细设计、编码和测试 )、软件维护期 (即运行维护阶段 )。 42 【正确答案】 数据流 【试题解析】 结构化分析方法的实质是着眼于数据流, 自顶向下,逐层分解,建立系统的处理流程,以数据流图和数据字典为主要 工具,建立系统的逻辑模型。 43 【正确答案】 模块 【试题解析】 矩形表示的是模块,箭头表示的是模块间的调用关系。用带实心圆的箭头表示传递的是控制信息,用带空心圆的箭头表示传递的是数据。
20、 44 【正确答案】 驱动模块 【试题解析】 由于模块通常不是独立的程序,自己不能运行,而需要其他模块调用或驱动,同时被测试模块还要去调用其他模块,前者称为驱动模块,后者称为承接模块。其中驱动模块的作用是将测试数据传送给被测试的模块,并显示被测试模块所产生的结果;承接模块的作用是代替被测模块,调用其 他模块。 45 【正确答案】 调试 【试题解析】 程序设计的任务是诊断和改正程序中的错误程序调试活动由两部分组成,其一是根据错误的迹象确定程序中错误的确切性、原因和位置;其二是对程序进行修改,排除这个错误。 46 【正确答案】 float 【试题解析】 在此表达式中 x是 float类型的变量,经
21、过开方所得到的结果仍是float类型,再和 2.8进行运算时,应该先将 2.8转换成 float类型再运算,最后结果仍是 float型。 47 【正确答案】 (y%4=0)&(y%100!=0)|(y%400=0) 【试题解析】 考查逻辑表达。年号能被 4整除 (y%4=0)但不能被 100整除(y%100!=0),两者是与的关系,年号能被 400整除即 y%400=0,与前两项是或的关系。 48 【正确答案】 1, 13,7 【试题解析】 本题考查 3个知识点: 余数的计算,题中的 a=10, b=3,a%b=1: (表达式 1,表达式 2)形式的结果为最后一个表达式的值,题中的a=10,
22、b=3, (a-b, a+b)=a+b=13; 条件运算符的使用,题中的 a-b?a-b: a+b,判断语句 a-b=7不为 0,所以执行 a-b,结果为 7。 49 【正确答案】 8 【试题解析】 本题考查基本的 for循环条件, i+=2表示 i每次递增 2,从 0开始,输出 5个整数则需要的条件是 i =8。 50 【正确答案】 6 【试题解析】 分析程序可知,每循环一次, x的值加 1,然后检测循环控制条件(y!=19)&(x 7),因 y的值不变,故满足 x 7时循环 6次。 51 【正确答案】 buf的首地址 【试题解析】 考查 fgets()函数的功能, fgets()函数用来从
23、文件中读入字符串。 调用格式为: fgets(buf,n,fp)。此处, fp是文件指针, buf是存放字符串的起始地址,n是一个 int型变量。调用函数 fgets()时,最多能读入 n-1个字符,系统自动在最后加字符串结束标志,并以 buf作为函数值返回。 52 【正确答案】 p+=2, *(p+) 【试题解析】 由题可知 a2=3,因此只要使指针 p指向 a3,然后再引用指针的值就可以了。 53 【正确答案】 -1 【试题解析】 strcmp(s1, s2)函数的作用是:对字符数组 s2和字符数组 s1进行比较。如 果 s1 s2,则返回负数;如果 s1=s2,则返回 0;如果 s1 s
24、2,则返回正数。 54 【正确答案】 字符串 【试题解析】 本题考查字符替换格式: #define标识符字符串。 55 【正确答案】 8651 【试题解析】 主程序中,第一次循环时, i=0,调用 sb(s, x)子函数,此时 n=3,x=sn=s3=8,然后将 n减 1变为 2;第二次循环时, i=1,调用 sb(s, x)子函数,因为将 n定义为了静态变量,所以此时 n=2,返回 x=sn=s2=6;第三次循环时, i=2,调用 sb(s, x)子函数,此时 n=1,返回 x=sn=s1=5;第四次循环时,i=3,调用 sb(s, x)子函数,此时 n=0,返回 x=sn=s0=1。此程序实际上是将数组 s逆序输出。