1、国家二级( C语言)笔试模拟试卷 138及答案与解析 1 按照 “先进后出 ”原则组织数据的数据结构是 ( )。 ( A)队列 ( B)栈 ( C)双向链表 ( D)二叉树 2 常采用的两种存储结构是 ( )。 ( A)顺序存储结构和链式存储结构 ( B)散列方法和索引方式 ( C)链表存储结构和数组 ( D)线性存储结构和非线性存储结构 3 树是结点的集合,它的根结点的数目是 ( )。 ( A)有且只有 1个 ( B) 1或多于 1 ( C) 0或 1 ( D)至少有 2个 4 已知一个有序线性表 为 (13,18,24,35,47,50,62,83,90,115,134) ,当用二分法查找
2、值为 90的元素时,查找成功的比较次数为 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 9 5 结构化程序设计主要强调的是 ( )。 ( A)程序的规模 ( B)程序的效率 ( C)程序设计语言的先进性 ( D)程序的易读性 6 结构化程序设计的核心和基础是 ( )。 ( A)结构化分析方法 ( B)结构化设计方法 ( C)结构化设计理论 ( D)结构化编程方法 7 在面向对象方法中, ( )描述的是具有相似属性与操作的一组对象。 ( A)属性 ( B)事件 ( C)方法 ( D)类 8 需求分析阶段的任务是 ( )。 ( A)软件开发方法 ( B)软件开发工具 ( C)软件开
3、发费用 ( D)软件系统功能 9 有下列二叉树,对此二叉树前序遍历的结果为 ( )。 ( A) ACFXDBEYZ ( B) ABEFXYZCD ( C) ABCDEFXYZ ( D) ABDYECFXZ 10 设 R是一个二元关系, S是一个三元关系,则下列运算中正确的是 ( )。 ( A) R-S ( B) RS ( C) Rs ( D) R S 11 下列说法不正确的是 ( )。 ( A)一个 C语言源程序可以由一个函数组成也可以由多个函数组成 ( B) main()中的 “()”是函数的参数部分,括号内可为空,但括号不能省略 ( C) C语言程序是以函数为基本单位的 ( D)在 C语言
4、程序中,注释行只能位于一条语句的后面 12 sizeof(float)是 ( )。 ( A)一种函数调用 ( B)一种函数定义 ( C)一个浮点表达式 ( D)一个整型表达式 13 下列合法的声明语句是 ( )。 ( A) int_abc=50; ( B) double int=3+5e2.5 ( C) long do=1L; ( D) float 3_asd=3e-3; 14 下列叙述中正确的是 ( )。 ( A)在赋值表达式中,赋值号的左边既可以是变量,也可以是任意表达式 ( B)实型变量中允许存放整型数 ( C)若 a和 b类型相同,在执行了赋值 a=b后, b中的值将放入 a中,但 b
5、中的值不变 ( D)在 C程序中,求余运算符 “%”两边的类型相同时才能进行运算 15 设 x、 y和 z是 int型变量,且 x=4, y=6, z=8,则下列表达式中值为 0的是( )。 ( A) x ( B) char c=32; ( C) float f=f+1.1; ( D) double x=12.3E2.5; 18 若 ch为 char型变量, k为 int型变量 (已知字符 a的 ASCII码是 97),则执行下列语句后输出的结果为 ( )。 ch=b; k=10; printf(“%x,%o,“,ch,ch,k); printf(“k:%dn“,k); ( A)因变量类型与格
6、式描述符的类型不匹配,输出无定值 ( B)输出项与格式描述符个数不符,输出为 0值或不定值 ( C) 62,142,k=%d ( D) 62,142,k=%10 19 有下列程序: fun(int x,int y)return(x+y); main() inta=l1b=2,c=3,sum; sum=fun(a+,b+,a+b),C+); printf(“%dn“,sum); 执行后的输出结果是 ( )。 ( A) 6 ( B) 7 ( C) 8 ( D) 9 20 下列程序的输出结果是 ( )。 main() int a=4,b=5,c; if(a b) c=a*b;printf(“%d,%
7、d,%dn“,b,a,c); else c=b/a; printf(“%d,%d,%dn“,b,a,c); ( A) 4,5,12 ( B) 20 ( C) 5,4,20 ( D) 12 21 下列程序的输出结果是 ( )。 main() int i=1 j=2,k=3; if(i+=1 ( A) 1 2 3 ( B) 2 3 4 ( C) 2 2 3 ( D) 2 3 3 22 下列程序的输出结果是 ( )。 #include stdio.h main() int a=0,i; for(i=1;i 5;i+) switch(i) case 0: case 3:a+=1; case 1: ca
8、se2:a+=2; default:a+=3; printf(“%d“,a); ( A) 19 ( B) 18 ( C) 6 ( D) 8 23 在 C语言中, while和 dowhile 循环的主要区别是 ( )。 ( A) dowhile 的循环体不能是复合语句 ( B) dowhile 允许从循环体外转到循环体内 ( C) whil8的循环体至少被执行一次 ( D) dowhile 的循环体至少被执行一次 24 若各选项中所用变量已正确定义, fun()函数中通过 return语句返回一个函数值,下列选项中错误的程序是 ( )。 ( A) main() x=fun(2,10); flo
9、at fun(int a,int b) ( B) float fun(int a,int b) main() x=fun(i,j); ( C) float fun(int,int); main() x=fun(2,10); float fun(int a,int b) ( D) main() float fun(int I,intj); x=fun(i,j); float fun(int a,int b) 25 判断 char型变量 c1是否为小写字母的正确表达式为 ( )。 ( A) a =c1 =z ( B) (c1 =a)c1 =z) ( C) (a= c1(z =c1) ( D) (c
10、1 =a) while(-k) printf(“%d“,k-=3); printf(“n“); 执行后的输出结果是 ( )。 ( A) 1 ( B) 2 ( C) 4 ( D)死循环 27 若函数调用时,参数为基本数据类型的变量,下列叙述中正确的是 ( )。 ( A)实参与其对应的形参共占存储单元 ( B)只有当实参与其对应的形参同名时才共占存储单元 ( C)实参与其对应的形参分别占用不同的存储单元 ( D)实参将数据传递给形参后,立即释放原先占用 的存储单元 28 在 C语言程序中,下列说法正确的是 ( )。 ( A)函数的定义和函数的调用均可以嵌套 ( B)函数的定义不可以嵌套,但函数的调
11、用可以嵌套 ( C)函数的定义可以嵌套,但函数的调用不可以嵌套 ( D)函数的定义和函数的调用均不可以嵌套 29 下列说法中不正确的是 ( )。 ( A)指针是一个变量 ( B)指针中存放的是数值 ( C)指针可以进行加、减等算术运算 ( D)指针变量占用存储空间 30 若有定义和语句: int*pp,*p,a=20,b=10; pp=p=p=printf(“%d,%dn“,*p,*pp); 则输出结果是 ( )。 ( A) 20,10 ( B) 20,20 ( C) 10,20 ( D) 10,10 31 下列二维数组的说明中,不正确的是 ( )。 ( A) float a4=0,1,8,5
12、,9; ( B) int a34; ( C) )#define N 5 float a N3; ( D) int a 29.5; 32 若有定义: “int a 23;”则对 a数组的第 i行第 j列元素的正确引用为 ( )。 ( A) *(*(a+i)+j) ( B) (a+i)j ( C) *(a+i+j) ( D) *(a+i)+j 33 下列能正确进行字符串赋值的是 ( )。 ( A) char s5=“ABCDE“; ( B) char s5=A,B,C,D,E; ( C) char*s;s=“ABCDE“; ( D) char*s;printf(“%s“,s); 34 若有说明 c
13、har s130=“abc“,s2=“defghi“;,则在使用函数 strcat(s1,s2)后,结果是 ( )。 ( A) s1的内容更新为 abcdefghi ( B) s1的内容更新为 defghi0 ( C) s1的内容更新为 defghiabc0 ( D) s1的内容更新为 abcdefghi0 35 设有变量说明 int(*p)m,其中的标识符 p是 ( )。 ( A) m个指向整型变量的指针 ( B)指向 m个整型变量的指针 ( C)一个指向具有 m个整型元素的一维数组的指针 ( D)具有 m个指针元素的一维指针数组,每个元 素都指向整型变量 36 下列描述中正确的是 ( )。
14、 ( A)在 C语言程序中预处理是指完成宏替换和文件包含指定的文件的调用 ( B)预处理指令只能位于 C源程序文件的首部 ( C)预处理命令可以放在程序中的任何位置 ( D)预处理命令结尾需要加分号 37 若有结构体定义: struct stu int num; char sex; int age; a1,a2; 则下列语句中错误的是 ( )。 ( A) printf(“%d%c,%d“,a1); ( B) a2.age=a1.age; ( C) a1.age+; ( D) a1.num=5; 38 C语言结构体类型变量在程序执行期间 ( )。 ( A)所有成员一直驻留在内存中 ( B)没有成
15、员驻留在内存中 ( C)部分成员驻留在内存中 ( D)只有一个成员驻留在内存中 39 在位运算中,操作数每右移两位,其结果相当于 ( )。 ( A)操作数乘以 2 ( B)操作数除以 2 ( C)操作数除以 4 ( D)操作数乘以 4 40 在 “文件包含 ”预处理语句的使用形式中,当 #include后面的文件名用 “(双撇号 )括起时,寻找被包含文件的方式是 ( )。 ( A)直接按系统设定的标准方式搜索目录 ( B)先在源程序所在的目录搜索,如没找到,再按系统设定的标准方式搜索 ( C)仅仅搜索源程序所在目录 ( D)仅仅搜索当前目录 41 设一棵完全二叉树共有 700个结点,则在该二叉
16、树中有 _个叶子结点。 42 常用的黑箱测试有等价类划分法、 _和错误推测法 3种。 43 数据库管理系统常见的数据模型有层次模型、网状模型和 _3种。 44 通常,将软件产品从提出、实现、使 用维护到停止使用退役的过程称为_。 45 数据库保护分为:安全性控制、 _、并发性控制和数据的恢复。 46 已有定义: char c= ;int a=1,b;(此处 c的初值为空格字符 ),执行 b=!c后 b的值为 _。 47 以下程序的输出结果是 _。 main( ) int y=9; for(;y 0;y-) if(y%3=0) printf(“%d“,-y);continue; 48 下面 程序
17、的功能是:计算 1 10之间的奇数之和与偶数之和,请填空。 #include stdio.h main( ) int a,b,c,i; a=c=0; for(i=0;i =10;i+=2) a+=i; _; c+=b; printf(“偶数之和 =%dn“,a); printf(“奇数之和 =%dn“,c-11); 49 设有以下定义和语句,则 *(*(p+2) +1) 的值为 _。 int a32=10,20,30,40,50,60,(*p) 2; p=a; 50 以下程序的输出结果是 _。 #include stdio.h void swap(int *a, int *b) int *t;
18、 t=a;a=b;b=t; main( ) int i=3,j=5,*p= i,*q= j; swap(p,q); printf(“%d %dn“,*p,*q); 51 以下程序的输出结果是 _。 #include stdio.h main( ) int a5=2,4,6,8,10,*p; p=a;p+; printf(“%d“,*p); 52 阅读下列程序,则程序的输出结果为 _。 #include “stdio.h“ struet ty int data; char c; main( ) street ty a=30,x; fun(a); printf(“%d%c“,a.data,a.c)
19、; fun(struct ty b) b.data=20; b.c=y; 53 以下程序的运行结果是 _。 #include stdio.h main( ) FILE *fp;int a10=1,2,3,0,0,i; fp=fopen(“d2.dat“,“wb“); fwtite(a,sizeof(int) ,5,fp); fwrite(a,sizeof(int) ,5,fp); fclose(fp); fp=fopen(“d2.dat“,“rb“); fread(a,sizeof(int) ,10,fp); fclose(fp); for(i=0;i 10;i+)printf(“%d“,ai
20、); 国家二级( C语言)笔试模拟试卷 138答案与解析 1 【正确答案】 B 【试题解析】 栈是一种特殊的线性表,其插入和删除运算都只在线性表的一端进行 ,而另一端是封闭的。进行插入、删除的一端称为栈顶,封闭的一端称为栈底。栈顶元素是最后被插入的元素,也是最后被删除的,是按先进后出的原则组织数据的。 2 【正确答案】 A 【试题解析】 线性表的存储通常要用两种存储结构:顺序存储结构和链式存储结构。 3 【正确答案】 C 【试题解析】 树具有明显的层次关系,即树是一种层次结构。在树结构中,根结点在第一层上。当树为非空时,树中有且只有一个根结点,当树为空时,树中根结点的数目为 0。 4 【正确答
21、案】 B 【试题解析】 根据二分法查找需要两次: 首先将 90与表中间的元素 50进行比较,由于 90大于 50,所以在线性表的后半部分查找。 第二次比较的元素是后半部分的中间元素,即 90,这时两者相等,即查找成功。 5 【正确答案】 D 【试题解析】 程序不光是编写完就结束了,为了测试和维护程序,往往还有其他人阅读和跟踪程序,因此程序设计的风格应该强调简单和清晰,即程序的易读性, “清晰第一,效率第二 ”。 6 【正确答案】 C 【试题解析】 结构化程序设计的核心和基础是结构化设计理论,其中包括:结构化 分析方法、结构化设计方法和结构化编程方法。 7 【正确答案】 D 【试题解析】 类 (
22、class)描述的是具有相似属性与操作的一组对象,而一个具体对象则是其对应类的一个实例。 8 【正确答案】 D 【试题解析】 需求分析是软件定义时期的最后一个阶段,它的基本任务就是详细调查现实世界要处理的对象,充分了解原系统的工作概况,明确用户的各种需求,然后在这些基础上确定新系统的功能。 9 【正确答案】 D 【试题解析】 对二叉树的前序遍历是指:先访问根结点,然后访问左子树,最后访问右子树, 并且,在访问左、右子树时,先访问根结点,再依次访问其左、右子树。记住 3种遍历的顺序: 前序,访问根一按前序遍历左子树一按前序遍历右子树; 中序,按中序遍历左子树一访问根一按中序遍历右子树; 后序,按
23、后序遍历左子树一按后序遍历右子树一访问根。 10 【正确答案】 B 【试题解析】 关系的交 ()、并 ( )和差 (-)运算要求两个关系是同元的,显然作为二元的 R和三元 S只能做笛卡儿积运算。 11 【正确答案】 D 【试题解析】 本题涉及 C语言基本的 3个知识点: C语言是以函数为基本单位的,每一个 函数完成相对独立的功能,一个程序可以包括多个函数,但有且仅有一个主函数; 主函数 main()的圆括号内是填写参数的,可以没有参数,但括号不可以省略: 程序的注释部分应该在 “/*/” 之间,它允许出现在程序的任何位置。 12 【正确答案】 D 【试题解析】 sizeof(float)是 C
24、语言内部规定的用于计算单精度型变量 (float)在计算机的内存中所占用的字节数量的函数,返回一个整数值。 13 【正确答案】 A 【试题解析】 C语言规定,标识符是由字母、数字或下画线组成,并且它的 第一个字符必须是字母或者下画线。另外 C语言规定了一些专用的标识符,它们有着固定的含义,不能更改。 int就是表达变量类型的标识符,它不能再用做变量名和函数名。 d。是 C语言的一个关键字,也不能再用做变量名和函数名。 14 【正确答案】 B 【试题解析】 选项 A,在赋值表达式中,赋值号的左边只能是变量或者是代表某个存储单元的表达式,不能是任意表达式。在判断选项 B)时首先应该建立这样的概念,
25、整型变量中只能存放整型数,实型变量中能存放实型数,也能存放整型数。选项 C),执行表达式 a=b后,将把变量 b存储单元中 的值赋给变量 a,从而覆盖 a中原有的值,但 b中原有的值并不改变。选项 D),在 C程序中,求余运算符 “%”两边的类型均为整型数据。 15 【正确答案】 D 【试题解析】 本题考查逻辑运算符的使用。当 “p+使用指针 p指向数组 a1,所 以输出结果为 4。 52 【正确答案】 30x 【试题解析】 本题的参数传递属于值传递,所以被调用函数内不能改变调用函数中的数据。 53 【正确答案】 1,2,3,0,0,1,2,3,0,0, 【试题解析】 本题考查文件读写函数 fread和 fwrite的用法。 fwrite函数将数组a的前 5个元素输出到文件 fp中两次,共 10个字节,再调用 fread函数从文件 fp中读取这 10个字节的数据到数组 a中,此时数组 a的内容就变为1,2,3,0,0,1,2,3,0,0,最后的输出结果为 “1,2,3,0,0,1,2,3,0,0”。