1、国家二级( C语言)笔试模拟试卷 140及答案与解析 1 算法的时间复杂度是指 ( )。 ( A)执行算法程序所需要的时间 ( B)算法程序的长度 ( C)算法执行过程中所需要的基本运算次数 ( D)算法程序中的指令条数 2 下列描述中,不是线性表顺序存储结构特征的是 ( )。 ( A)不便于插入和删除 ( B)需要连续的存储空间 ( C)可随机访问 ( D)需另外开辟空间来保存元素之间的关系 3 按照 “先进后出 ”原则组织数据的数据结构是 ( )。 ( A)队列 ( B)栈 ( C)双向 链表 ( D)二叉树 4 有下列二叉树,对此二叉树前序遍历的结果为 ( )。 ( A) ACBEDGF
2、H ( B) ABDGCEHF ( C) HGFEDCBA ( D) ABCDEFGH 5 对建立良好的程序设计风格,下列描述正确的是 ( )。 ( A)程序应该简单、清晰、可读性好 ( B)符号名的命名只需要符合语法 ( C)充分考虑程序的执行效率 ( D)程序的注释可有可无 6 下列不属于软件工程的 3个要素的是 ( )。 ( A)工具 ( B)过程 ( C)方法 ( D)环境 7 下列选项 中不属于软件生命周期开发阶段任务的是 ( )。 ( A)软件测试 ( B)概要设计 ( C)软件维护 ( D)详细设计 8 使用白盒测试法时,确定测试数据应该根据 ( )和指定的覆盖标准。 ( A)程
3、序的内部逻辑 ( B)程序的复杂结构 ( C)使用说明书 ( D)程序的功能 9 数据库 DB、数据库系统 DBS、数据库管理系统 DBMS之间的关系是 ( )。 ( A) DB包括 DBS和 DBMS ( B) DBMS包括 DB和 DBS ( C) DBS包括 DB和 DBMS ( D)没有任何关系 10 对关系 S和只进行集合运算,结果中既包含 S中的所有元组也包含只中的所有元组,这样的集合运算称为 ( )。 ( A)并运算 ( B)交运算 ( C)差运算 ( D)积运算 11 C语言可执行程序的开始执行点是 ( )。 ( A)包含文件中的第一个函数 ( B)程序中第一个函数 ( C)程
4、序中的 main()函数 ( D)程序中第一条语句 12 可以在 C语言程序中用做用户标识符的一组标识符是 ( )。 ( A) void 123 BBN ( B) aa _abc cas ( C) as+b3 -123 If ( D) 6f Do SIG 13 下列正确的实型常量是 ( )。 ( A) E3.4 ( B) -12345 ( C) 2.2e0.8 ( D) 4 14 下列表达式中,可以正确表示 x0或 x1的关系是 ( )。 ( A) (x =1)(x =0) ( B) x 1x=0 ( C) x =10Rx =0 ( D) x =1,则表达式 a%=(b%2) 运算后, a的值
5、为 ( )。 ( A) 0 ( B) 1 ( C) 11 ( D) 3 16 已知 i、 j、 k为血型变量,若要从键盘输入 2、 3、 4 CR,使 i、 j、 k的值分别为 2、 3、 4,下列正确的输入语句是 ( )。 ( A) scanf( “%3d,%3d,%3d”, ( B) scanf(“%d,%d,%d”, ( C) scanf(“%d%d%d”, ( D) scanf(“i=%d,%d,k=%d”, 17 下列程序的输出结果是 ( )。 main() int p8=11,12,13,14,15,16,17,18,i=0,j=0; while(i+ 7) if(pi%2) j+
6、=pi; printf(“%dn“,j); ( A) 42 ( B) 45 ( C) 56 ( D) 60 18 若有下列定义 (设 int类型变量占 2个字节 ): int i=8,j=9; 则下列语句: printf(“i=%u,j%xn“,i,j); 输出的结果是 ( )。 ( A) i=8,j=9 ( B) 8.9 ( C) 8 9 ( D) i=8,j=8 19 设有定义: int k=1,m=2;float f=7;则下列选项中错误的表达式是 ( )。 ( A) k=k =k ( B) -k+ ( C) k%int(f) ( D) k =f =m 20 若执行下列程序时从键盘上输入
7、 2,则输出结果是 ( )。 #inClude Stdio h main() int a; scanf(“%d“, if(a+ 3) printf(“%dn“,a); elseprintf(“%dn“,a-); ( A) 1 ( B) 3 ( C) 2 ( D) 4 21 已定义下列函数: int fun(int*p) return*p;) fun函数返回值是 ( )。 ( A)不确定的值 ( B)一个整数 ( C)形参 p中存放的值 ( D)形参 p的地址值 22 下列程序的输出结果是 ( )。 #include stdio h main() int a=2,b=3,p; p=f(a,B)
8、; pdntf(“%d“,p); int f(a,B) int c; if(a B) c=1; else if(a=B) c=0; elSe c=-1; return(C) ; ( A) -1 ( B) 0 ( C) 1 ( D) 2 23 有下列程序: fun(int x,int y) statlc int m=0,i=2; i+=m+1;m=i+X+y;return m; main() int j=1,m=1,k; k=fun(j,m);printf(“%d,“,k); k=fun(j,m);printf(“%dn“,k); 执行后的输出结果是 ( )。 ( A) 5,5 ( B) 5,1
9、1 ( C) 11,11 ( D) 11,5 24 下列循环体的执行次数是 ( )。 #include stdio.h main() inti,j; for(i=0,j=1;i j+1;i+=1,j-) phntf(“%dn“,j); ( A) 3 ( B) 2 ( C) 1 ( D) 0 25 设变量 x和 y均已正确定义并赋值。下列 if语句中,在编译时将产生错误信息的是 ( )。 ( A) if(x+); ( B) if(x y ( C) if(x 0)x- elsey+; ( D) if(y 0); else x+; 26 下列字符数组初始化语句中,不正确的是 ( )。 ( A) ch
10、ar c=goodmorning; ( B) char c20“goodmoming“; ( C) charc=a,b,c,d; ( D) char c=“goodmorning“; 27 下列程序的输出结果是 ( )。 #include stdio h VOid p(int *x) printf(“%d“,+*x); void main() int y=3; p( ( A) 3 ( B) 4 ( C) 2 ( D) 5 28 下列程序的运行结果为 ( )。 #include stdio h voidabc(Char*str) inta,b,i,j; for(i=j=0;stri!=0;i+)
11、 if(stri!=a) strj+=stri; strj=0; void main() char str=“abcdef“; abc(str); printf(“str=%s“,str); ( A) str=bcdef ( B) str=abcdef ( C) str=a ( D) str=ab 29 变量 m的值为 8, m的地址为 1010,若欲使 p为指向 m的指针变量,则下列赋值正确的是 ( )。 ( A) ( B) int(*q)(); ( C) int*q; ( D) int*q(); 31 下列二维数组初始化语句中,不正确的是 ( )。 ( A) int b2=1,2,3,4,
12、5,6,7; ( B) int b35=0,0,0; ( C) intb4=1,2,3,4,5,6; ( D) int b32=(1,2) ,(3,4) ,(5,6) ; 32 下列程序中函数 sort()的功能是对数组 a中的数据进行由大到小的排序。 #include stdio h voidsort(int a,int n) int i,j,t; for(i=0;i n-1;i+) for(j=i+1;j n;j+) if(ai aj) t=ai;ai=aj;aj=t; main() int a 10=1,2,3,4,5,6,7,8,9,10,i; sort( for(i:0;i 10;i
13、+)printf(“%d,“,ai); 程序运行后的输出结果是 ( )。 ( A) 1,2,3,4,5,6,7,8,9,10, ( B) 10,9,8,7,6,5,4,3,2,1, ( C) 1,8,7,6,5,4,3,2,9,10, ( D) 1,2,10,9,8,7,6,5,4,3, 33 下列判断正确的是 ( )。 ( 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) c
14、har c5=“ABCD“,d5=“ABCD“;等价于 char c5=d5=“ABCD“; 34 下列语句中,在字符串 s1和 s2相等时显示 “they are Equal“的是 ( )。 ( A) if(*s1=*s2) puts(“they are Equal“); ( B) if(!strcmp(s1,s2) puts(“they are Equal“); ( C) if(s1=s2) Puts(“they are Equal“); ( D) if(strcmp(s1,s2) ) puts(“they are Equal“); 35 下列叙述中错误的是 ( )。 ( A)在 C语言中
15、,函数中的自动变量可以赋初值,每调用一次赋一次初值 ( B)在 C语言中,在调用函数时,实参和对应形参在类型上只需赋值兼容 ( C)在 C语言中,外部变量的隐含类型是自动存储类别 ( D)在 C语言中,函数形参的存储类型是自动 (auto)类型的变量 36 下列程序的输出结果是 ( )。 #include stdio h #define F(x)2.84+x #define w(y)printf(“%d“,(int)(y) #define P(y)w(y)putchar(n) main() int x=2; P(F(5) *x); ( A) 12 ( B) 13 ( C) 14 ( D) 16
16、 37 若有下列说明和语句,则对结构体变量 st中成员 i的引用方式不正确的是( )。 Stmct stu int i; int name; st,*p; p= ( A) st.i ( B) *p.i ( C) (*p).i ( D) p- i 38 下列说法错误的是 ( )。 ( A)下列结构体定义时,占据了 5个字节的空间 struct student “nt num; int age; char sex; ( B)结构体的成员名可以与程序中的变量名相同 ( C)对结构体中的成员可以单独使用,它的作用相当于普通变量 ( D)结构体可以嵌套定义 39 若 x=10010111,则 表达式 (
17、3+(int)(x) if(x y) if(y 0)z=0; else z+=1; printf(“%dn“,z); 49 在循环中, continue语句与 break语句的区别是: _语句只是结束本次循环,然后进行循环的条件判定。 50 若有定义: int a44=1,2,3,4,0,4,6,8,10,1,3,5,7,则初始化后, a22得到的初值是 _。 51 下列语句的输出结果是 _。 char s20=“aaaa“,*sp=s; puts(strcat(sp,“AAAAA“); 52 下列程序的运行结果是 _。 #define POWER(x)(x)*(x) main() int i
18、=1; printf(“%d,%d“,POWER(i+),i); 53 下列程序的输出结果是 _。 main() int i,sum; for(i=1;i 7;i+) sum+=i; printf(“%d“,sum); 54 设有下列的程序段: char str=“Hello“; char*ptr; ptr=str; 执行上面的程序段后, *(ptr+5)的值为 _。 55 下列程序的输出结果是 _。 #include stdio.h fun() static int a=0; a+=3;printf(“%d“,a); main() int cc; for(cc=1 ;cc 5;cc+)fun
19、(); printf(“n“); 国家二级( C语言)笔试模拟试卷 140答案与解析 1 【正确答案】 C 【试题解析】 所谓的算法的时间复杂度,是指执行算法所需要的工作量,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。 2 【正确答案】 D 【试题解析】 线性表的顺序存储是用一片连续的空间来存放数据元素,其特点是逻辑上相邻的元素在物理位置上也相邻。数据元素之间逻辑上的先后关系自动隐含在物理位置的相邻元 素之中,因此,不需要另外开辟空间来保存元素之间的关系。 3 【正确答案】 B 【试题解析】 栈是一种特殊的线性表,其插入和删除运算都只在线性表的一端进行,而另一端是封闭的。进
20、行插入、删除的一端称为栈顶,封闭的一端称为栈底。栈顶元素是最后被插入的元素,不是最后被删除的,是按先进后出的原则组织数据的。 4 【正确答案】 B 【试题解析】 对二叉树的前序遍历是指:先访问根结点,然后访问左子树,最后访问右子树,并且,在访问左、右子树时,先访问根结点,再依次访问其左、右子树。 5 【正确答案】 A 【试题解析】 “清晰第一,效率第二 ”,在考虑到程序的执行效率的同时,一定要保证程序清晰、可读;对符号名的命名,除了要符合语法要求外,还要具有一定的含义:程序的注释可以帮助程序员理解程序,不是可有可无的。 6 【正确答案】 D 【试题解析】 软件工程包括 3个要素,即方法、工具和
21、过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理和文档生成:过程支持软件开发的各个环节的控制、管理。 7 【正确答案】 C 【试题解析】 软件的生命周期可分为软件定义、软件开发及软件运行维 护 3个阶段。其中软件定义阶段的主要工作有可行性研究与计划制定和需求分析等:软件开发阶段的主要工作有概要设计、详细设计和测试等;软件运行维护阶段的主要工作是软件的运行及后期的维护等。 8 【正确答案】 A 【试题解析】 白盒测试是把测试对象看作是一个打开的盒子,允许测试人员利用程序内部的逻辑结构及相关信息宋设计或选择测试用例,对程序所有的逻辑路径进行测试。所以,白盒测试的对象基本上是源程序,
22、以程序的内部逻辑和指定的覆盖标准测试数据。 9 【正确答案】 C 【试题解析】 数据库系统 (DBS)由数据库 (DBS)、数据库管理系统 (DBMS)、数据库管理员、硬件平台和软件平台 5个部分组成,可见 DB和 DBMS都是 DBS的组成部分。 10 【正确答案】 A 【试题解析】 关系的并运算是指,由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元组。 11 【正确答案】 C 【试题解析】 每个 C程序有且只有一个主函数 main(),且程序必须从 main函数开始执行,并在 main()函数中结束。 12 【正确答案】 B 【试题解析】 C语言规定,标识符是由字母、
23、数字 或下画线组成,并且它的第一个字符必须是字母或者下画线。 13 【正确答案】 B 【试题解析】 实型常量有两种书写形式。 小数形式,它由符号、整数部分、小数点及小数部分组成; 指数形式,由 +进制小数形式加上指数部分组成,其形式为: +进制小数 e指数或 +进制小数 E指数。注: e或 E后面的指数必须是整数,并且在 e或 E的前面必须有数字。本题中,选项 A)中 E的前面没有数字,因此错误。选项 C)中 0.8不是整数,因此错误。选项 D)中 4是整型常量而不是实型常量。 14 【正确答案】 A 【试题解析】 题中要 求 x的取值是小于等于 0或者大于等于 1,这说明表达式是或的关系,所
24、以在写成 C语言表达式应是逻辑或的关系,逻辑或运算符是 “”。 15 【正确答案】 A 【试题解析】 本题考查 “%”运算符的使用。运算符 “%”要求两个运算对象都为整型,其结果是整数除法的余数。本题中表达式 a%=(b%2) 等价于 a=a% (b%2)=5%(7%2)=5%1=0。 16 【正确答案】 B 【试题解析】 函数 scanf()的调用形式是: scanf(格式字符串,输入项地址表 )。其中, “格式字符串 ”是要输入的变量的格 式符; “输入项地址表 ”是要输入的变量的地址。 若在格式符中插入了其他字符,则在输入时要求按一一对应的位置原样输入这些字符,其中的逗号也必须输入。 1
25、7 【正确答案】 B 【试题解析】 在 C语言中,数组的下标默认为 0,因此数组 p的下标范围为:0 7。程序循环过程为:第 1次循环 i=0,执行循环,并且 i自加,得 i=1,因此pi为 p1=12,12%2=0,不执行后面的语句:接着进行第 2次循环,此时 i=1,小于 7执行循环,并且 i自加,得 i=2,因此 pi为 p2=13, 13%2=1,执行 后面的语句;这样一直到退出循环。最后 i的值为 i=13+15+17=45。 18 【正确答案】 A 【试题解析】 本题考查函数 printf()的格式。 “%x”表示以 +六进制输出整型数据; “%u”表示以 +进制无符号型输出整型数
26、据。 printf函数中格式说明符之前插入的任何字符都原样输出。 19 【正确答案】 C 【试题解析】 在 C语言中,求余运算符 “%”两边的运算对象都应为整型数据,所以需要对变量 f进行强制类型转换,正确的写法为 k%(int)f。在 C语言中,逻辑运算符与赋值运算符、算术运算符 、关系运算符之间从高到低的运算优先次序是: !(逻辑 “非 ”)、算术运算符、关系运算符、 i 7;i+)决定了循环次数为 6次,每次执行的操作是sum+=i,但由于 sum没有初始化,并不知道 sum的初值是多少,所以结果无定值。 54 【正确答案】 0 【试题解析】 本题涉及字符数组和指针的两个知识点: 在 C语言中,字符型数组在存放字符串时会自动在末尾加上字符串结束标识符 0,所以题中数组 str有 6个元素。 ptr指向数组 str的首地址, ptr+5是指向 str5, *(ptr+5)是引用str5的值,即 0。 55 【正确答案】 3 6 9 12 【试题解析 】 本题考查最基本的 for循环: for(cc=1;cc 5;cc+)规定循环次数为4次,每次 a+=3即每次 a的值增 3,但因为 fun函数中变量 a为 static类型,所以每次调用完子函数之后,变量 a所做的改变都要保存。