1、国家二级( C语言)笔试模拟试卷 262 及答案与解析 1 下列叙述中正确的是 ( )。 ( A)线性链表是线性表的链式存储结构 ( B)栈与队列是非线性结构 ( C)双向链表是非线性结构 ( D)只有根节点的二叉树是线性结构 2 下列数据模型中 ,具有坚实理论基础的是 ( A)层次模型 ( B)网状模型 ( C)关系模型 ( D)以上 3个都是 3 在 C语言中,表达式 10!=9的值是 _。 ( A)真 ( B)非零值 ( C) 0 ( D) 1 4 在 C语言中,如果下面的变量都是血类型 ,则输出的结果是 _。 sum=pad=5; pAd=sum+, pad+, +pAd; print
2、f(“%dn“, pad); ( A) 7 ( B) 6 ( C) 5 ( D) 4 5 软件开发的结构化生命周期方法将软件生命周期划分成 ( A)定义、开发、运行维护 ( B)设计阶段、编程阶段、测试阶段 ( C)总体设计、详细设计、编程调试 ( D)需求分析、功能定义、系统设计 6 在关系数据库中,对一个关系做投影操作后,新关系的元组个数将 ( ) ( A)等于原来关系中的元组个数 ( B)大于原来关系中的元组个数 ( C)小于原来关系中的元组个数 ( D)不能确定元组个数 7 下列数据模型中,具有坚实理论基础的是 ( )。 ( A)关系模型 ( B)网状模型 ( C)层次模型 ( D)以
3、上三个都是 8 200个 3232点阵的汉字字模信息所占用的字节数为 ( ) ( A) 25600 ( B) 2560 ( C) 6400 ( D) 12800 9 下列对于软件测试的描述中正确的是 _。 ( A)软件测试的目的是证明程序是否正确 ( B)软件测试的目的是使程序运行结果 正确 ( C)软件测试的目的是尽可能多地发现程序中的错误 ( D)软件测试的目的是使程序符合结构化原则 10 下列叙述中正确的是 _。 ( A)软件交付使用后还需要进行维护 ( B)软件一旦交付使用就不需要再进行维护 ( C)软件交付使用后其生命周期就结束 ( D)软件维护是指修复程序中被破坏的指令 11 若变
4、量已正确定义并赋值,以下符合 C语言语法的表达式是 ( A) a: =b+1 ( B) a=b=c+2 ( C) int 18.5%3 ( D) a=a+7=c+b 12 下列程序的运行结果是 #include“stdio.h“ main() intx=-9, y=5, z=8; if(x y) if(y 0)z=0; else z+=1; printf(“%dn“, z); ( A) 6 ( B) 7 ( C) 8 ( D) 9 13 数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和 ( )。 ( A)编码设计 ( B)测试阶段 ( C)运行阶段 ( D)物理设计 14 设有如下 关系
5、表: 则下列操作中正确的是 ( A) T=RS ( B) T=R S ( C) T=RS ( D) T=R/S 15 C语言源程序名的后缀是 ( )。 ( A) .exe ( B) .c ( C) .obj ( D) .cp 16 有如下程序 main() int y=3,x=3,z=1; printf(“%d%dn“,(+x,y+),z+2); 运行该程序的输出结果是 _。 ( A) 3 4 ( B) 4 2 ( C) 4 3 ( D) 3 3 17 以下程序的输出结果是 _。 main() int m=5; if(m+ 5) printf(“%dn“,m); else printf(“%d
6、n“,m-); ( A) 7 ( B) 6 ( C) 5 ( D) 4 18 若已知 a=10, b=20,则表达式 !a b的值为 _。 ( A) 10 ( B) 1 ( C) 20 ( D) 30 19 下列程序的输出结果是 _。 main() int i; for(i=1; i+1; i+) if(i 4)printf(“%d“,i+); break; printf(“%d“,i+); ( A) 55 ( B) 56 ( C)程序错误,没有输出 ( D)循环条件永远为真,死循环 20 以下选项中合法的实型常数是 ( A) 5E2.0 ( B) E-3 ( C) 2.00E+00 ( D)
7、 1.3E 21 C语言的基本单位是 ( )。 ( A)函数 ( B)过程 ( C)子程序 ( D) 子函数 22 以下叙述中正确的是 _。 ( A)全局变量的作用域一定比局部变量的作用域范围大 ( B)静态 (statiC) 类别变量的生存期贯穿于整个程序的运行期间 ( C)函数的形参都属于全局变量 ( D)未在定义语句中赋初值的 auto变量和 static变量的初值都是随机值 23 若有如下说明,且 int类型占两个字节,则正确的叙述为 ( )。 struct st int a; int b2; a; ( A)结构体变量 a与结构体成员 a同名,定义是合法的 ( B)程序只在执行到该结构
8、体时才为结构体 st分配存储单元 ( C)程序运行时为结构体 st分配 8字节存储单元 ( D)类型名 struct st可以通过 extern关键字提前引用 24 若定义下列结构体,结构体变量 p的出生年份赋值正确的语句是 ( )。 struct st int x; int y; int z; struct worker char name20; char sex; struct st birth; p; ( A) x=1987 ( B) birth.x=1987; ( C) p.birth.x=1987; ( D) p.x=1987; 25 下列程序的运行结果为 ( ) #include
9、stdio.h main() struc tdate int year,month,day; )today; printf(“%dn“,sizeof(struct date); ( A) 8 ( B) 6 ( C) 10 ( D) 12 26 下列判断正确的是 ( )。 ( A) char a=“ABCD“;等价于 char*a; *a=“ABCD“; ( B) char str10=“ABCD“;等价于 char str10; str=“ABCD“); ( C) char*s=“ABCD“;等价于 char s; *s=“ABCD“; ( D) char c5=“ABCD“, d5=“ABC
10、D“;等价于 char cs-d5=“ABCD“; 27 现有以下结构体说明和变量定义,如图所示,指针 p、 q、 r分别指定一个链表中连 续的 3个结点。 struct node har data; struct node*next; *p, *q, *r; 现要将 q和 r所指结点交换前后位置,同时要保持链表的结构,下列不能完成此操作的语句是 ( )。 ( A) q- next=r- next; p- next=r; r- next=q; ( B) q- next=r; q- next=r- next; r- next=q; ( C) q- next=r- next; r- next=q;
11、 p- next=r; ( D) q- next=q; p- next=-r; q- next=r- next; 28 若有定义: int a=2,b=3; float x=3.5, y=2.5;则下面表达式的值为 _。(float)(a+b)/2+(int)x%(int)y ( A) 3.5 ( B) 35 ( C) 3.5 ( D) 35 29 软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指_。 ( A)模块间的关系 ( B)系统结构部件转换成软件的过程描述 ( C)软件层次结构 ( D)软件开发过程 30 在循环双链表的 p结点之后插入 s结点的操作是 _。 ( A)
12、 p- next=s; p- next- prior=s; s- prior=p; s- next=p- next; ( B) s- next=p; s- next=p- next; p- next=s; p- next- prior=s; ( C) p- next=s; 3- prior=p; p- next- prior=s; s- next=p- next; ( D) s- prior=p; s- next=p- next; p- next- prior=s; p- next=s; 31 程序中对 fun()函数有如下说明 void *fun(); 此说明的含义是 _。 ( A) fun
13、函数无返回值 ( B) fun函数的返回值可以是任意的数据类型 ( C) fun函数的返回值是无值型的指针类型 ( D)指针 fun指向一个函数,该函数无返回值 32 下列描述中不正确的是 ( )。 ( A)字符型数组中可以存放字符串 ( B)可以对字符型数组进行整体输入、输出 ( C)可以对整型数组进行整体输入、输出 ( D)不能在赋值语句中通过赋值运算符 “=”对字符型数组进行整体赋值 33 设有定义语句 int x6=(2,4,6,8,5,7.), *p=x, i; 要求依次输出 x数组 6个元素中的值,不能完成此操作的语句是 ( A) for(i=0; i 6; i+) printf(
14、“%2d”,* (p+); ( B) for(i=0; i 6; i+) printf(“%2d”, *(p+ i); ( C) for(i=0; i 6; i+) printf(“%2d”, *p+); ( D) for(i=0; i 6; i+) printf(“%2d”, *(p)+); 34 以下程序的运行结果为 _。 main() int i, f1, f2; f1=f2=1; for(i=0; i 4; i+) printf(“%d %d“, f1, f2); f1+=f2; f2+=f1; ( A) 1 1 2 3 5 8 13 21 ( B) 1 1 2 2 5 5 10 10
15、 ( C) 1 2 5 8 9 8 13 21 ( D) 0 1 1 2 4 5 15 21 35 设有 static char str=“Beijing“; 则执行 printf(“%dn“,strlen(strcpy(str,“China“); 后的输出结果为 _。 ( A) 5 ( B) 7 ( C) 12 ( D) 14 36 假定 int类型变量占用两个字节,若有定义: int x10=0,2,4;,则数组 X在内存中所占字节数是 _。 ( A) 3 ( B) 6 ( C) 10 ( D) 20 37 设有下列定义: struct sk int m; float x; data, *
16、q;若要使 q指向 data中的 m域,正确的赋值语句是 ( )。 ( A) q=i+) len+=strlen(argvi); printf(“%dn“, len); 程序编译连接后生成的可执行文件是 exl exe,若运行时输入带参数的命令行是: exl abcd efg 10回车 则运行的结果是 ( A) 22 ( B) 17 ( C) 12 ( D) 9 39 有以下程序: #define P3 void F(int x)return(P*x*x); main() printf(“%dn“,F(3+5); 程序运行后的输出结果是 _。 ( A) 192 ( B) 29 ( C) 25
17、( D)编译出错 40 有以下程序 main() char s=“abcde“; s =2; printf(“%dn“,s0); 执行后的结果是 _。 ( A)输出字符 a的 ASC 码 ( B)输出字符 c的 ASC 码 ( C)输出字符 c ( D)程序出错 41 软件设计模块化的目的是【 】。 42 一棵二叉树第六层 (根结点为第一层 )的结点数最多为 _个。 43 若有以下定义语句,则不移动指针 p,并且通过指针 p引用值为 98的数组元素的表达式是【 】。 int w10=23, 54, 10, 33, 47, 98, 72, 80, 61, *p=w; 44 数据库系统的三级模式分
18、别为【 】模式、内部级模式与外部级模式。 45 有一个学生选课的关系,其中学生的关系模式为:学生(学号,姓名,班级,年龄),课程的关系模式为 :课程(课号,课程名,学时),其中两个关系模式的键分别是学号和课号,则关系模式选课可定义为:选课(学号,【 】,成绩)。 46 写出下列程序的执行结果。 swap(p1, p2) int*p1, *p2; int p; p=*p1;*p1=*p2; *p2=p; main() int a,b, *p1, *p2; scanf(“%d%d“, main ( ) int a3 4 = 12,41,36,28, 19,33,15,27, 3,27,19,1 ,
19、b3 ,i; fun(3,4,a,b); for(i =0;i 3;i + ) printf( “%4d“ ,bi ); prinff(“ n“ ); void fun(int m,int n,int ar 4 ,int* br) int i,j,x; for(i =0;i m;i + ) x = ari 0 ; for(j = 0;j n;j + ) if(x ari j ) x = ari j; 【 】 =x; 50 函数 fun的功能是计算 xn。 double fun(double x,int n) int i; double y=1; for(i=1;i =n;i+) y=y*x;
20、return y; 主函数中已经正确定义变量 m, a, b并赋值,要调用函数 fun计算: m=a4+b4-(a+b)3。实现这一计算的函数调用语句为【 】。 51 若给 fun函数的形参 s传送字符串 “ 6354abc“(其中 表示空格字符 ),则函数的返回值是【 】。 long fun(char s) long n; int sign; for(; isspace(*s); s+); sign=(*s=-)? -1:1; if(*s=+|*s=-) s+; for(n=0; isdigit(*s); s+) n=10*n+( *s-0); return sign*n; 52 以下程序的
21、输出结果是【 】。 fun(int x, int y, int z) z =x*x+y*y; main() int a=31; fun(6, 3, a) printf(“%d, a) 53 层次模型的典型代表是 IBM公司的【 】数据库管理系统。 54 以下函数将 b字符串连接到 a字符串的后面,并返回 a中新字符串的长度。 strcen(char aC), char b) int num=0, n=0; while(*(a+num)!=【 】 ) num+; while(bn)*(a+num)=bn; num+;【 】 ;) return(num); 55 以下函数用于求出一个 24矩阵中的
22、最大元素值。 max_value(arr) int arr4; int i,j,max; max=arrO0; for(i=0;i 2;i+) for(j=0; 【 】 ;j+) if( 【 】 max)max= 【 】; return(max); 国家二级( C语言)笔试模拟试卷 262 答案与解析 1 【正确答案】 A 【试题解析】 线性表是一种线性结构,数据元素在线性表中的位置只取决于它们自己的序号,即数据元素之间的相对位置是线性的;栈、队列、线性链表实际上也是线性表,故也是线性结构。线性链表:线性表的链式存储结构称为线性链表,是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑
23、顺序是通过链表中的指针链接来实现的。 2 【正确答案】 C 【试题解析】 本题 考查了数据模型。关系模型较之格式化模型 (网状模型和层次模型 )有以下几方面的优点 ,即数据结构比较简单、具有很高的数据独立性、可以直接处理多对多的联系 ,以及有坚实的理论基础。 3 【正确答案】 D 4 【正确答案】 C 5 【正确答案】 A 【试题解析】 通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。它可以分为软件定义、软件开发及软件运行维护 3个阶段。 6 【正确答案】 A 7 【正确答案】 A 【试题解析】 在层次模型和网状模型的系统研究和数据库设 计中,其性能和质量主要决定于
24、设计者的经验和技术水平,缺乏一定的理论指导。关系模型有坚实的理论基础,它以数学理论为基础,从而避免了层次模型和网状模型系统中存在的问题。 8 【正确答案】 A 9 【正确答案】 C 【试题解析】 关于软件测试的目的, Grenford J Myers在 The Art of Software Testing 一书中给出了深刻的阐述,整体来说,软件测试的目的就是尽可能多地发现程序中错误。 10 【正确答案】 A 【试题解析】 软件的运行和维护是指将已交付的软件投入 运行,并在运行使用中不断地维护,根据新提出的需求进行必要而且可能的扩充和删改。而软件生命周期是指软件产品从提出、实现、使用维护到停止
25、使用退役的过程。 11 【正确答案】 B 【试题解析】 选项 A)中包含一个不合法的运算符 “: =”;选项 C)应改为(int)18.5%3;选项 D)可理解为两个表达式: a+7=c+b 和 a=a+7,其中第一个是错的,因为 C语言规定赋值号的左边只能是单个变量,不能是表达式或常量等。因此,正确答案是选项 B),它实际上相当于 a=(b=c+2),进而可分解为两个表达式:b=c+2和 a=b。 12 【正确答案】 D 【试题解析】 ifelse 语句的执行过程如下,首先计算 if后面一对圆括号内表达式的值,若表达式的值为非 0,执行 if子句,然后跳过 else子句,去执行 if 语句后
26、的下一条语句;若表达式的值为 0,跳过 if子句,去执行 else子句,接着去执行if 语句后的下一条语句。 C语言的语法规定, else子句总是与前面最近的不带 else的 if匹配,与书写格式无关,本题目的后一个 if-else相当于嵌套在第一个 if子句里,相当于 x y”错误,故程序出错。 41 【正确答案】 降低复杂性 【试题解析】 模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程,由此分解来降低复杂性。 42 【正确答案】 32 【试题解析】 二叉树的一个性质是,在二叉树的第 k 层上,最多有 2k-1(k1)个结点。由此, 26-1=32所以答案为 32。
27、43 【正确答案】 *(p+5) 44 【正确答案】 概念 或 概念级 【试题解析】 数据库系统在其内部具有三级模式及二级映射,三级模式分别是概念级模式、内部级模式和外部级模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户 (应用 )公共数据视图。内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法,如数据存储的文件结构、索引、集簇及 hash 等存取方式与存取路径,内模式的物理性主要体现在操作系统及文件级上,它还未深入到设备级上 (如磁盘及磁盘操作 )。 外模式也称子模式或用户模式,它是用户的数据视图,也就是用户所见到的数据模式,它由概念模式推导而出。 45 【正确答案】
28、 课号 46 【正确答案】 a=8, b=7 46 【试题解析】 小写字母在内存中以 ASCII的形式存入,且从 a到 z依次递增,所以可以直接用 c a 【试题解析】 函数 fun 的功能是计算 x的 n次方, a的 4次方的调用函数为fun(a,4), b的 4次方的调用函数为 fun(b,4), (a+b)的 3次方的调用函数为fun(a+b),3),计算 m=a4+b4-(a+b)3的函数调用语句为: fun(a,4)+fun(b,4)-fun(a+b),3); 51 【正确答案】 6354 【试题解析】 函数 fun 的第一个 for循环跳过字符串的前导空白符,接着判断第一个非空白符
29、是否是负号,若是,则置变量 sign 为 -1;否则,置变量 sign 为 1。接着的 if语句在第一个非空白字符是负号或正号时,跳过该字符。以后的 for循环将后面的数字符当作十进制数的各位数字转换为一个长整数 n,当遇字符 a时,结束循环。最后,函数返回 sign 与 n的乘积。所以若调用函数时提供的实参是“ 6354abc”,则函数的返回值是 6354。 52 【正确答案】 31 【试题解析】 在函数调用时,形参值和改变,不会改变实参的值。 53 【正确答案】 IMS(information Management System) 54 【正确答案】 0, n+ 55 【正确答案】 j 4 arrij arrij 【试题解析】 2*4矩阵实际上就是一个二维数组,结合本题应为 arr24,所以在第一个循环中应当填写 “4”;第二个横线处是要判断当前的数组元素值是否大于max,所以应填写 arrij;第三 个横线处是要将当前大于 max的数组元素的值赋给变量 max,所以应当填写 “arrij”。