1、国家二级( C语言)笔试模拟试卷 266 及答案与解析 1 下列叙述中正确的是 _。 ( A)一个逻辑数据结构只能有一种存储结构 ( B)数据的逻辑结构属于线性结构,存储结构属于非线性结构 ( C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理效率 ( D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理效率 2 下列关于队列的叙述中正确的是 ( A)在队列中只能插入数据 ( B)在队列中只能删除数据 ( C)队列是先进先出的线性表 ( D)队列是先进后出的线性表 3 有下列二叉树,对此二叉树前序遍历的结果为 ( )。 ( A) ACFXDBEYZ ( B) A
2、BEFXYZCD ( C) ABCDEFXYZ ( D) ABDYECFXZ 4 有下列二叉树, 对此二叉树前序遍历的结果为 ( )。 ( A) ACFXDBEYZ ( B) ABEFXYZCD ( C) ABCDEFXYZ ( D) ABDYECFXZ 5 程序流程图 (PFD)中的箭头代表的是 ( )。 ( A)数据流 ( B)控制流 ( C)调用关系 ( D)组成关系 6 结构化程序设计主要强调的是 ( )。 ( A)程序的规模 ( B)程序的效率 ( C)程序设计语言的先进性 ( D)程序的易读性 7 在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数
3、据独立性最高的阶段是 ( A)数据库系统 ( B)文件系统 ( C)人工管理 ( D)数据项管理 8 在下列表达式中,属于逻辑表达式的是 ( ) ( A) x 60 1 ( B) x+60*(x 60) ( C) x 60 ( B) char s5=A,B,C,D,E; ( C) char *s=“ABCDE“; ( D) char *s; scanf(“%s“,*s); 17 若 x和 y代表整型数,以下表达式中不能正确表示数学关系 x-y 10的是 ( A) abs(x-y) 10 ( B) x-y -10 ( B) a=0,b=0,c=0; ( C) if(a0); ( D) if(b=
4、0) m=1;n=2; 21 当变量 c的值不为 2、 4、 6时,值也为 “真 ”的表达式是 ( )。 ( A) (c=2)(c=4)(c=6) ( B) (c =2 for(i=1;i=0 j-; cj+1=t; for(i=0;i int F(int t,int n); main() int a4=(1,2,3,4),s; s =F(a,4);printF(“%dn”,s); int F(int t,int n) iF(n0) return tn-1+F(t,n-1); Else return 0; 程序运行后的输出结果是 ( A) 4 ( B) 10 ( C) 14 ( D) 6 41
5、 _(黑箱或白箱 )测试方法完全不考虑程序的内部结构和内部特征。 42 数据管理技术发展过程经过人工管理、文件系统和数据库系统三个阶段,其中数据独立性最高的阶段是 _。 43 在运算过程中,能够使空表与非空表的运算统一的结构是【 】。 44 在关系数据库中,把数据表示成二维表,每一个二:维表称为【 】。 45 测试用例包括输入值集和【 】值集。 46 下面程序的功能是:对字符串从小到大进行排序并输出,请填空。 #include“string.h“ #include“stdio.h“ sort(char *a,int n) int i,j; char *p; for(j=1;j =n-1;j+)
6、 for(i=0;i n-j;i+) if( ) 0) p=ai; ai=ai+1; ai+1=p; main() int i; char *book=“itisme“,“itisyou“,“howareyou“,“fine“,“goodnight“,“goodbye“; sort( ); for(i=0;i 6;i+) printf(“%sn“,booki); 47 与二维表中的 “行 ”的概念最接近的概念是 ( )。 48 若有定义 floatb15,*p b;,且数组 b的首地址为 200H,则 p/13所指向的数组元素的地址为 _。 49 语句 “int(*ptr)();“的含义是 _
7、是指向函数的指针,该函数返回一个 int型数据。 50 以下程序的功能是:求出数组 x中各相邻两个元素的和依次存放到 a数组中,然后输出。请填空。 main( ) int x10, a9,i; for(i=0;i 10;i+) scanf(“%d“, xi); for( 11 ;i 10;i+) ai-1=xi+ 12 ; for(i=0;i 9;i+) printf(“%d“,ai); printf(“); 51 设 int a=5, b=6,表达式 (+a=b-)?+a: -b的值是【 】。 52 以下程序的输出结果是【 】。 #define MCRA(m) 2*m #define MCR
8、B(n,m) 2*MCRA(n)+m main() int i=2,j=3; printf(“%dn“,MCRB(j,MCRA(i); 53 以下程序运行后的输出结果是【 】。 main() int x=15; while(x 10 char a4=“1234“,b6=“abcdef“; if(fp=fopen(“【 】 “,“wb“)=NULL)exit(0); fwrite(a,sizeof(char),4,fp); fwrite(b,【 】 ,1,fp); fclose(fp); 56 下面程序由两个源程序文件: t4.h和 t4.c组成,程序编译运行的结果是: 。 t4.h的源程序为:
9、 #define N 10 #define t2 (x) (x*N) t4.c 的源程序为: #include stdio.h #define M 8 #define f(x) (x)*M) #include “t4.h“ main() int i,j; i=f(1 1); j=f2(1 1); printf(“%d%dn“,i,j); 国家二级( C语言)笔试模拟试卷 266 答案与解析 1 【正确答案】 D 【试题解析】 逻辑结构是反映了元素之间的逻辑关系的数据结构,存储结构是逻辑结构在计算机中的存放形式 ,它们都具有线性结构和非线性结构。逻辑结构有顺序、链接、索引等存储结构,采用不同的存
10、储结构,数据处理的效率不同。 2 【正确答案】 C 【试题解析】 队列是一种操作受限的线性表。它只允许在线性表的一端进行插入操作 ,另一端进行删除操作。其中 ,允许插入的一端称为队尾 (rear),允许删除的一端称为队首 (front)。队列具有先进先出的特点 ,它是按 “先进先出 “的原则组织数据的。 3 【正确答案】 D 【试题解析】 对二叉树的前序遍历是指:先访问根结点,然后访问左子树,最后访问右子树,并且,在访 问左、右子树时,先访问根结点,再依次访问其左、右子树。记住 3种遍历的顺序: 前序,访问根一按前序遍历左子树一按前序遍历右子树; 中序,按中序遍历左子树一访问根一按中序遍历右子
11、树; 后序,按后序遍历左子树一按后序遍历右子树一访问根。 4 【正确答案】 D 【试题解析】 对二叉树的前序遍历是指:先访问根结点,然后访问左子树,最后访问右于树,并且,在访问左、右子树时,先访问根结点,再依次访问其左、右子树。记住 3种遍历的顺序: 前序,访问根一按前序遍历左子树一按前序遍历右子树: 中序,按中序遍历左子树一访 问根一按中序遍历右子树; 后序,按后序遍历左子树呻按后序遍历右子树一访问根。 5 【正确答案】 B 【试题解析】 程序流程图 (PFD)是一种传统的、应用广泛的软件过程设计表示工具,通常也称为程序框图,其箭头代表的是控制流。 6 【正确答案】 D 【试题解析】 结构化
12、程序设计方法的主要原则可以概括为自顶向下、逐步求精、模块化及限制使用 goto语句,总的来说可使程序结构良好、易读、易理解、易维护。 7 【正确答案】 A 【试题解析】 人工管理阶段是在 20世纪 50年代中期以前出现的, 数据不独立,完全依赖于程序;文件系统是数据库系统发展的初级阶段,数据独立性差;数据库系统具有高度的物理独立性和一定的逻辑独立性。 8 【正确答案】 C 9 【正确答案】 D 10 【正确答案】 A 【试题解析】 软件调试的任务是诊断和改正程序中的错误,本题正确答案为 A。其他三项描述不正确,选项 B描述不全面,选项 C描述太绝对,选项 D描述不符合定义。 11 【正确答案】
13、 C 【试题解析】 因为 fun(int x)是一个递归函数,所以主函数中 fun(7)经过三次递归调用,其过程可以描 述为 “fun(7)=7-fun(5)=7-(5-fun(3)=7-(5-(3-fun(1)=7-(5-(3-3)=7-5=2”,所以最后的输出结果为 2。 12 【正确答案】 A 【试题解析】 C语言的字符型常量中,允许用一种特殊形式的字符常量,就是以一个 “”开头的字符。其中, “ddd”表示用 ASCII码 (八进制数 )表示一个字符,本题中的 char c=72H口表示占一个字符的变量 c的 ASCII码值。 13 【正确答案】 B 【试题解析】 本题主要考查按位与运
14、算的知识点 。按位与是对两个运算量相应的位进行逻辑与, “i 2;i+)pi=chi; ”是将字符串 “6937“和 “8254“的首地址分别赋给指针数组 p的两个元素。下面的 for循环嵌套是取二维字符数组 ch 偶数列上 的数字字符,将它们组成一个数。所以选项 D符合题意。 36 【正确答案】 C 【试题解析】 变量 k的初值为 2,循环执行了 3次,分别输出 m20、 m21和 m22,其值分别为 3, 6, 9。 37 【正确答案】 C 【试题解析】 alpha0指向 “ABCD”的首地址; alpha1指向 “EFGH”的首地址;alpha2指向 “IJKL”的首地址,依此类推。当执
15、行 p=alpha后, p指向指针数组alpha的首地址。 for循环中输出了 4个字符串。 38 【正确答案】 D 【试题解析】 C语言规定,函数的形参要么为空,要么是变量。如果是变量则用以接收主函数传递过来的数据。 39 【正确答案】 A 【试题解析】 选项 A正确,原因是语句 p=str表示指针变量 p 指向数组 str20的首地址也就是 str0。所以 *p与 str0中的值相等。 40 【正确答案】 D 【试题解析】 要给结构体成员输入数据,在 scanf语句中需要使用结构体成员的地址。函数 scanf是 C语言的标准输入函数,其作用是在终端设备上输入数据,而且要求输入项必须是某个存
16、储地址。选 项 A中是引用结构体数组 s的第 0个元素s0的 name成员, name是包含 10个元素的数组,数组名就表示数组的地址,也就代表 s0.name的地址,所以选项 A是正确的。选项 B显然也是正确的,选项C是先用指针变量引用结构体的成员 sex后取它的地址,也是正确的。选项 D用指针变量引用结构体的成员 sex后没有再继续取其地址,所以是错误的。 41 【正确答案】 B 42 【正确答案】 数据库系统 或 数据库系统阶段或数据库或数据库阶段或数据库管理技术阶段 【试题解析】 在数据库系统管理阶段,数据是结构 化的,是面向系统的,数据的冗余度小,从而节省了数据的存储空间,也减少了对
17、数据的存取时间,提高了访问效率,避免了数据的不一致性,同时提高了数据的可扩充性和数据应用的灵活性;数据具有独立性,通过系统提供的映象功能,使数据具有两方面的独立性:一是物理独立性,二是逻辑独立性;保证了数据的完整性、安全性和并发性 -综上所述,数据独立性最高的阶段是数据库系统管理阶段。 43 【正确答案】 循环链表 【试题解析】 在链表的运算过程中,采用链接方式即循环链表的结构把空表与非空表的运算统一起来。循环链表具有两个特点: 在循环链表中增加了一个表头结点,其数据域为任意或根据需要来设置,指针域指向线性表的第一个元素的结点。循环链表的头指针指向表头结点。 循环表中最后一个结点的指针不是空,
18、而是指向表头结点。 44 【正确答案】 关系 【试题解析】 在关系数据库中,把数据表示成二维表,而一个二维表就是一个关系。 45 【正确答案】 输出 【试题解析】 测试用例曲测试输入数据 (输入值集 )和与之对应的预期输出结果 (输出值集 )两部分组成。 46 【正确答案】 strcmp(ai,ai+1) book,6 【试题解析】 此程序段的功能是使字符串从大到小进行排列。显然,第一空白处,是利用 strcmp 函数比较字符串 ai和 ai+1的大小,若不符合题意,就进行调换; main 函数中, sort函数是对数组 book中的字符串按从小到大进行排序,所以第二空白处填入 “book,6
19、”(6是指 book所指向的字符串的个数 )。 47 【正确答案】 元组 【试题解析】 在关系模型中,数据结构用单一的二维表结构来表示实体及实体间的联系。一个关系对应一个二维表。二维表中的列称为属性,属性值的取值范围称为值域 。二维表中的一行称为一个元组。 48 【正确答案】 252H 【试题解析】 要解答本题,首先要明白在对指针进行加、减运算时,数字 “1“不是十进制数的 “1“,而是指 “1“个存储单元长度。 1个存储单元长度占存储空间的多少,应该视具体情况而定,如果存储单元的基类型是 int型,则移动 1个存储单元的长度就是位移 2个字节;如果存储单元基类型是 float型,则移动 1个
20、存储单元的长度就是位移 4个字节。所以旷 13所指向的数组元素的地址为:200H+(13*4)H 252H。 49 【正确答案】 ptr 【 试题解析】 本题考查函数指针的概念。函数指针的定义格式是:类型标识符 (*旨针变量名 )()。注: “类型标识符 ”为函数返回值的类型。 50 【正确答案】 i=1 xi-1 【试题解析】 对于 10 个数,相邻的两个数相加取和,总共要进行 9次加法运算,所以空 11处应填入 i=1。相邻的两个数相加取和,放在数组 a中, x0与 x1的和存放在 a0中,所以空 12处应填入 xi-1。 51 【正确答案】 7 【试题解析】 此表达式为三目运算符, +a
21、的值为 6, b -的值为 6,则整个表达式的值为 +a的值, +a的值为 7。请注意前缀 +, -和后缀 +, -的区别。 52 【正确答案】 16 【试题解析】 带参数宏定义首先将程序中宏替换掉,先把 “MCRA(i)”替换成“2*i”,然后把 “MCRA(j, 2, *i)”替换成 “2*2*j+2*i”,经计算该表达式的值为16,所以最后输出为 16。 53 【正确答案】 17 【试题解析】 bteak 语句只能在循环体和 switch 语句体内使用,当 break 出现在循环体中的 switch 语句体内时,其作用只是跳出该 switch 语句体。 当 break 出现在循环体中,但
22、不在 switch 语句体内时,则在执行 break 后,跳出本层循环体。而 continue语句的作用时结束本次循环;即跳过本次循环中余下尚未执行的语句,接着再一次进行循环的条件判定。本题中首先定义了一个变量 x并赋初值15,然后判断循环条件 “x 5&x 50”,即 “x 5&x 50”,为真,执行循环体。语句 “x+; ”执行后, x的值变为 16, “x/3”的值为 5为真,执行其后的语句“x+; ”, x的值变为 17,执行语句 “break”,退出循环,输出 x的值为 17。 54 【正确答 案】 ptr 【试题解析】 本题考查函数指针的概念。函数指针的定义格式是:类型标识符(叶旨
23、针变量名 )()。注: “类型标识符 ”为函数返回值的类型。 55 【正确答案】 letter.dat 6*sizeof(char) 【试题解析】 本题主要考查函数 fwrite(char *pt, unsigned size, unsigned n, FILE *fp),把 pt所指向的 n*size个字节输出到 fp所指文件中。 56 【正确答案】 16 11 【试题解析】 在编译时预处理程序用 “替 换文本 ”来替换宏,并用刘应的实参来替换 “替换文本 ”。此题中的替换文本分别为: x*N、 (x)*M。弓,用带参的宏名 i=f(1 1),在经过宏替换后将成为: i=(1 1)*M=2*8=16。与上相同 j在引用带参的宏名并替换展开后变为; j=1 1*N=1 1*10=11(注:因为在对宏 f2(x)的替换中 x没有加括号,所以对宏 f2(x)的替换文本展开后就变为: 1 1*N形式 ),所以答案为16 11。