1、国家二级( C语言)笔试模拟试卷 51及答案与解析 1 在下列选项中, _不是一个算法一般应该具有的基本特征。 ( A)确定性 ( B)可行性 ( C)无穷性 ( D)拥有足够的情报 2 希尔排序法属于 _类型的排序法。 ( A)交换类排序法 ( B)插入类排序法 ( C)选择类排序法 ( D)建堆排序法 3 下列关于队列的叙述中正确的是 _。 ( A)在队列中只能插入数据 ( B)在队列中只能删除数据 ( C)队列是先进先出的线性表 ( D)队列是先进后出的线性表 4 对长度为 N的线性表进行顺序查找,在最坏情况下所需要的比较次数为_。 ( A) N+1 ( B) N ( C) (N+1)/
2、2 ( D) N/2 5 信息隐蔽的概念与下述 _概念直接相关。 ( A)软件结构定义 ( B)模块独立性 ( C)模块类型划分 ( D)模拟耦合度 6 面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本原理是_。 ( A)模拟现实世界中不同事物之间的联系 ( B)强调模拟现实世界中的算法而不强调概念 ( C)使用现实世界的概念抽象地思考问题从而自然 地解决问题 ( D)鼓励开发者在软件开发的绝大部分中都用实际领域的概念去思考 7 在结构化方法中,软件功能分解属于软件开发中的 _阶段。 ( A)详细设计 ( B)需求分析 ( C)总体设计 ( D)编程调试 8 软件调试的目的是 _。
3、 ( A)发现错误 ( B)改正错误 ( C)改善软件的性能 ( D)挖掘软件的潜能 9 按条件 f对关系 R进行选择,其关系代数表达式为 _。 ( A) RR ( B) ( C) f(R) ( D) f(R) 10 数据库的物理设计是为 一个给定的逻辑结构选取一个适合应用环境的 _的过程,包括确定数据库在物理设备上的存储结构和存取方法。 ( A)逻辑结构 ( B)物理结构 ( C)概念结构 ( D)层次结构 11 表示关系 xyz应使用 C语言表达式 ( ) ( A) (x y) else printf(“%f“, -x); ( C) if(x 0); x x+1; printf(“%f“,
4、 x); else printf(“%f“, -x); ( D) if(x 0) x=x+1; printf(“%f“, x) else printf(“%f“, -x); 14 以下叙述中正确的是 ( ) ( A)在 C程序中,语句之间必须要用分号 (;)分隔 ( B)在 C程序中 #include行和 #define行不是 C语句 ( C)程序中的注释部分可有可无,通常可以省略 ( D)当输入数值数据时,对于整型变量只能输入整型值:对于实型变量只能输入实型值 15 以下语句的输出结果是 ( ) printf(“%d, %d, %un“, 016, 16, -16); ( A) 16, 16
5、, 65420 ( B) 14, 16, 6542 ( C) 16, 16, -16 ( D) 14, 16, -16 16 以下选项中,与 k=n+完全等价的表达式是 ( ) ( A) k=n, n=n+1 ( B) n=n+1, k n ( C) k=+n ( D) k+=n+1 17 以下合法的赋值语句是 ( ) ( A) x=y 100 ( B) d-; ( C) x+y; ( D) c=int(a+b) ; 18 设 a、 b, c为 int型变量,若从键盘给 a、 b, c输入数据,则正确的输入语句是( ) ( A) scanf(“%d%d%d“, a, b, c) ; ( B)
6、put(“%d%d%d“, a, b, c); ( C) input(“%d%d%d“, a, b, c); ( D) scanf(“%d%d%d“, unsinged long w=5; double x=1.42, y=5.2 则以下符合 C语言语法的表达式是 ( ) ( A) a+=a-=(b=4)*(a=3) ( B) x%(-3); ( C) a a*3 2 ( D) y float(i) 21 能正确表示逻辑关系 “a10或 a0“,的 C语言表达式是 _。 ( A) a =10 or a =0 ( B) a =0|a =10 ( C) a =10b+; printf(“a=%d,
7、b=%dn“, a,B) ; 该程序的输出结 果是 _。 ( A) a=2,b=1 ( B) a=1,b=1 ( C) a=1,b=0 ( D) a=2,b=2 24 有如下程序 main() float x=2.0,y; if(x 0.0)y=0.0; else if(x10.0)y=1.0/x; else y=1.0; printf(“%fn“, y); 该程序输出结果是_。 ( A) 0 ( B) 0.25 ( C) 0.5 ( D) 1 25 有以下函数定义: void fun(int n,double x) 若以下选项中的变量都已正确定义并赋值,则对函数 fun正确调用语句是 ( A
8、) fun(int y,double m); ( B) k=fun(10,12.5); ( C) fun(x,n); ( D) void fun(n, x); 26 有如下程序 main() int i,sum; for(i=1;i =3; sum+)sum +=i; printf(“%dn“,sum); 该程序的执行结果是 _。 ( A) 6 ( B) 3 ( C)死循环 ( D) 0 27 下列函数定义中,会出现编译错误的是 _。 ( A) max(int x,int y,int *z) *z=x y?x:y; z=x y?x:y; return z; ( B) int max(int x
9、,y) int z; ( C) max(int x,int y) int z; z=x y?x:y; return(z); ( D) int max(int x,int y) return x y?x:y; 28 有如下程序 main() int x=3; do prinff(“ d“,x-); while(!x); 该程序的执行结果是 _。 ( A) 321 ( B) 3 ( C)不输出任何内容 ( D)陷入死循环 29 设有声明语句 char a=72;,则变量 a_。 ( A)包含 1个字符 ( B)包 含 2个字符 ( C)包含 3个字符 ( D)声明不合法 30 有以下程序段: ma
10、in() int a=5, *b, *c; c= r=func(func(x,y), z); printf(“%dn“,r); 该程序的输出结果是 _。 ( A) 12 ( B) 13 ( C) 14 ( D) 15 34 有如下程序段 int *p,a=10, b=1; p= 执行该程序段后, a的值为 _。 ( A) 12 ( B) 11 ( C) 10 ( D)编译出错 35 有以下程序: int *f(int *x,int*y) if(*x *y)return x; else return y; main() int a=7, b=8, *p, *q, *r; p= printf(“%
11、d,%d,%dn“,*p,*q, *r); 程序运行后输出结果是 _。 ( A) 7,8,8 ( B) 7,8,7 ( C) 8,7,7 ( D) 8,7,8 36 有如下程序: long fib(int n) if(n 2) return(fib(n-1)+fib(n-2); else return(2); main() printf(“%ldn“,fib(3); 该程序的输出结果是 _。 ( A) 2 ( B) 4 ( C) 6 ( D) 8 37 下面程序的输出结果是 _。 main() char str10, c=a; int i=0; for (;i 5; i+) stri=c+;
12、printf(“%s“,str); ( A) abcde ( B) a ( C)不确定 ( D) bcdef 38 在 C语言中,函数中变量的隐含存储类别是 _。 ( A) auto ( B) static ( C) extern ( D)无存储类别 39 有如下程序: #define n 2 #define m N+1 #define NUM 2*m+1 main() int i; for(i=1; i =NUM; i+)printf(“%dn“,i); 该 程序中的 for循环执行的次数是 _。 ( A) 5 ( B) 6 ( C) 7 ( D) 8 40 假设在 turboc2.0采用
13、small模式编译如下程序 main() char a4=a, b; char *b=“abc“; printf(“%d,%d“,sizeof(A) ,sizeof(B) ); 其输出结果为 _。 ( A) 4,2 ( B) 4,4 ( C) 4,3 ( D) 2,2 41 有以下函数 char *fun(char*p) return p; 该函数的返回值是 _。 ( A)无确切的值 ( B)形参 p中存放的地址值 ( C)一个临时存储单元的地址 ( D)形参 p自身的地址值 42 有如下程序段: #include stdio.h #define Max(a,B) a b?a:b main()
14、 int a=5,b=6,c=4,d; d=c+Max(a,b); printf(“%d“, d); 其输出结果为_。 ( A) 10 ( B) 5 ( C) 6 ( D)编译错误 43 有如下程序段 int a=14,b=15,x; char c=A; x=(a 执行该程序段后, x的值为 _。 ( A)真 ( B)假 ( C) 0 ( D) 1 44 下述关于 C语言文件的操作的结论中,正确的是 _。 ( A)对文件操作必须先关闭文件 ( B)对文件操作必须先打开文件 ( C)对文件操作顺序无要求 ( D)对文件操作前必须先测文件是否存在,然后 再打开文件 45 下列关键字中,不属于 C语
15、言变量存储类别的是 _。 ( A) register ( B) auto ( C) extern ( D) public 46 有如下说明: int a10=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, *p=a; 则数值为 9的表达式是 _。 ( A) *p+9 ( B) *(p+8) ( C) *p+=9 ( D) p+8 47 若有以下定义: int t32;,能正确表示 t数组元素地址的表达式是 _。 ( A) ( A) 5 ( B) 6 ( C) 7 ( D) 8 49 有如下程序: main() int a33=1, 2, 3, 4), 5, 6, i,j,s=0;
16、 for(i=1; i 3; i+) for(j=0; j =i; j+) s+=aij; printf(“%dn“,s); 该程序的输出结果是 _。 ( A) 18 ( B) 19 ( C) 20 ( D) 21 50 若已建立如下图所示的单向链表结构:在该链表结构中,指针 p、 s分别指向图中所示结点,则不能将 s所指的结点插入到链表末尾仍构成单向链表的语句组是 _。 ( A) p=p- next; s- next=p; p- next=s; ( B) p=p- next; s- next=p- next; p- next=s; ( C) s- next=NULL; p=p- next;
17、p- next=s; ( D) p=(*p).next; (*s).next=(*p).next; (*p).next=s; 51 在具有 n个单元、顺序存储的循环队列中,队满时,共有【 】个元素。 52 开发软件所需要的高成本和产品的低质量之间有着尖锐的矛盾,这种现象被人们称之为【 】。 53 数据模型是数据库系统中用于提供信息表示和操作手段的结构形式。实际数据库系统中所支持的数据模型主要有层次模型、网状模型和【 】 3种。 54 程序的运行结果为【 】。 main() int x, y, z; x=24; y=024; z=0x24; printf(“%d, %d, %dn“, x, y,
18、 z); 55 在线性表的顺序存储中,元素之间的逻辑关系是通过【 】决定的;在线性表的链接存储中,元素之间的逻辑关系是通过【 】决定的。 56 若输入 12、 3、 2、 5、 7,则以下程序的运行结果为【 】。 int max, min; void max_min_value(); main() int i, number5; printf(“输入 5个整数; n“); for(i=0; i 5; i+) scanf(“%d“, ,实参与形参的个数应相等,类型应一致,在调用函数时,不要指定其返回类型,对于返回类型为 void的函数,不能作为赋值表达式的组成部分,所以选 C。 26 【正确答案
19、】 C 【试题解析】 在循环过程中, i的值一直没有被改变,所以这是一个死循环。 27 【正确答案】 B 【试题解析】 在 C语言中,不可以在函数的参数声明列表中用一个类 型名指定多个参数。故选项 B是错误的。其正确的表示方式应为: int max(int x,int y) 或 int max(x,y) int x,y; 28 【正确答案】 B 【试题解析】 本题 x赋初值为 3,当执行 printf(“%d“,x-);时,由于 x-的作用是先运算 x,再将 x的值减 1,所以, printf输出的 x值为 3,等输出后, x的值减 1变为 2,继续执行,判断条件 !x为假,循环只被执行一次。
20、 29 【正确答案】 A 【试题解析】 转义字符常量 “xx可以把 后面的数字转换为对应的 ASCII字符。 30 【正确答案】 C 【试题解析】 指针变量是用来存放地址的。 后, p指向整数 a, *p即 p的目标变量,也就是 a;所以 a=*p+b等价于 a=a+b,可知 a的值最终为 11。 35 【正确答案】 B 【试题解析】 f函数的功能是返回地址为 x,y的两个数中值较的数的地址,本题输出结果是 7,8,7。 36 【正确答案】 B 【试题解析】 函数 fib内部有两个递归调用,当 n=3时, fib(n-1)返回 2, fib(n-2)也返回 2,所以 fib(n-1)+fib(
21、n-2)的值为 4。 37 【正确答案】 C 【试题解析】 字符串少一个结束标志,所以输出的结果不确定。 38 【正确答案】 A 【试题解析】 函数中变量的存储类别包括 auto, static, extern,其中 auto为隐含存储类别, static为静态存储类别, register是寄存器存储类别。 39 【正确答案】 B 【试题解析】 在 C语言中,宏定义在编译时将被直接替换,所以 NUM最后会被替换成 2*N+1+1,即 2*2+1+1,值为 6。因此, for循环执行的次数为 6。 40 【正确答案】 A 【试题解析】 用 small模式编译,指针变量占 2个字节。 sizeof
22、(array):数组名array代表数组本身, sizeof函数测出的是整个数组的大小。 a数组的大小为 4, b指针变量的大小为 2。 41 【正确答案】 B 【 试题解析】 p本身就是一个字符型指针变量,返回 p也就是返回变量 p中存放的地址值。 42 【正确答案】 B 【试题解析】 在 C语言中,宏定义是直接替换的,所以在 c+a b?a:b这个条件表达式中, c+a b为真,所以用 a的值作为整个表达式的值,而 a的值为 5,所以整个表达式的值为 5。 43 【正确答案】 D 【试题解析】 as的确已插到了链表的末尾,但它的 next却并没有为 NULL,而是指向了它的直接前趋 p,这
23、样它就不是一个单向链表 (单向链表最后一个结点的 next指针一定是一个NULL)。 51 【正确答案】 n-1 52 【正确答案】 软件危机 53 【正确答案】 关系模型 54 【正确答案】 24, 20, 36 55 【正确答案】 相邻位置 邻接指针 56 【正确答案】 max=12, min=2 57 【正确答案】 1, 1 3, 3 9, 9 58 【正确答案】 6, 2, 11, 34, 23, 21 59 【正确答案】 I HAVE A TEST 60 【正确答案】 1 3 4 12 23 12 is the 4th number 61 【正确答案】 unsigned int getbits() value&0100000 z= value+1