1、国家二级 C语言程序设计机试(选择题)模拟试卷 3及答案与解析 一、选择题 1 下列数据结构中,属于非线性结构的是 ( )。 ( A)循环队列 ( B)带链队列 ( C)二叉树 ( D)带链栈 2 算法的空间复杂度是指 ( )。 ( A)算法在执行过程中所需要的计算机存储空间 ( B)算法所处理的数据量 ( C)算法程序中的语句或指令条数 ( D)算法在执行过程中所需要的临时工作单元数 3 下列数据结构中,能够按照 “先进后出 ”原则存取数据的是 ( )。 ( A)循环队列 ( B)栈 ( C)队列 ( D)二叉树 4 软件设计中划分模块的一个准则是 ( )。 ( A)低内聚、低耦合 ( B)
2、高内聚、低耦合 ( C)低内聚、高耦合 ( D)高内聚、高耦合 5 结构化程序的三种基本控制结构是 ( )。 ( A)顺序、选择和重复 (循环 ) ( B)过程、子程序和分程序 ( C)顺序、选择和调用 ( D)调用、返回和转移 6 软件需求规格说明书在软件开发中的作用不包括 ( )。 ( A)软件设计的依据 ( B)软件可行性分析的依据 ( C)软件验收的依据 ( D)用户和开发人员对 软件要做什么的共同理解 7 程序测试的目的是 ( )。 ( A)为被测程序设计正确的测试用例 ( B)发现并改正程序中的错误 ( C)发现程序中的错误 ( D)改正程序中的错误 8 数据库管理系统是 ( )。
3、 ( A)操作系统的一部分 ( B)在操作系统支持下的系统软件 ( C)一种编译系统 ( D)一种操作系统 9 设数据元素的集合 D=1, 2, 3, 4, 5,则满足下列关系 R的数据结构中为线性结构的是 ( )。 ( A) R=(1, 2), (3, 2), (5, 1), (4, 5) ( B) R=(1, 3), (4, 1), (3, 2), (5, 4) ( C) R=(1, 2), (2, 4), (4, 5), (2, 3) ( D) R=(1, 3), (2, 4), (3, 5), (1, 2) 10 以下叙述中正确的是 ( )。 ( A)转义字符要用双引号括起来,以便与普
4、通的字符常量区分开 ( B)字符常量在内存中占 2个字节 ( C)字符常量需要用单引号括起来 ( D)字符常量是不能进行关系运算的 11 以下关于结构化程序设计的叙述中正确的是 ( )。 ( A)由三种基本结构构成的程序只能解决小规模 的问题 ( B)结构化程序使用 goto语句会很便捷 ( C)一个结构化程序必须同时由顺序、分支、循环三种结构组成 ( D)在 C语言中,程序的模块化是利用函数实现的 12 以下叙述中正确的是 ( )。 ( A)计算机只接收由 0和 1代码组成的二进制指令或数据 ( B)计算机只接收由 0和 1代码组成的十进制指令或数据 ( C)计算机可直接接收并运行 C源程序
5、 ( D)计算机可直接接收并运行任意高级语言编写的源程序 13 关于 C语言标识符,以下叙述中错误的是 ( )。 ( A)标识符可全部由数字组成 ( B)标识符可全部由下画线组成 ( C)标识符可全部由小写字母组成 ( D)标识符可全部由大写字母组成 14 若有 c语言表达式 2+3*4+7 3,则以下选项中叙述正确的执行顺序是 ( )。 ( A)先执行 3*4得 12,再执行 2+12得 14,再执行 7 3得 2,最后执行 14+2得16 ( B)先执行 3*4得 12,再执行 7 3得 2 5,最后执行 2+12+2 5得 16 5 ( C)先执行 7 3得 2,再执行 3*4得 12,
6、再执行 12+2得 14,最后执行 2+14得16 ( D)先执行 2+3得 5,再执行 5*4得 20,再执行 20+7得 27,最后执行 27 3得9 15 以下定义语句中正确的是 ( )。 ( A) int a=b=0: ( B) char A=65+1, b=b; ( C) float a=1, *b=&; a, *c=&; b; ( D) double a=0 0; b=1 1; 16 有以下程序: #include main() int k=一 17: prinff(“ d, 0, x n”, k, 1一 k, 1一 k); 程序的运行结果是 ( )。 ( A)一 17, 22,
7、12 ( B)一 17, 12, 22 ( C)一 17,一 22,一 12 ( D) 17, 22, 12 17 若有以下程序: #include main() int a=0, b=0, c=0; c=(a一 =+a), (a+=b, b+=4); printf(“ d, d, d n”, a,b, c); 则程序的输出结果是 ( )。 ( A) 0, 4, 0 ( B) 0, 4, 4 ( C) 1, 4, 1 ( D) 1, 4, 4 18 有以下程序: #include double fun(double a) double x; x=a一 (int)a; return x; mai
8、n() double a=3 1415; printf(“ f n”, fun(a); 程序的运行结果是 ( )。 ( A) 0 141500 ( B) 3 141500 ( C) 30000000 ( D) 0 000000 19 有以下程序: #include main() int i, j; for(i=1; i main() char x=2, y=2, z; z=(Y1); prinff(“ d n”, z); 程序的输出结果是 ( )。 ( A) 1 ( B) 0 ( C) 4 ( D) 8 21 有以下程序 #include main() int a=一 1, b=一 1; fo
9、r(; +a; )+b; prinff(“ d d n”, a, b); 程序运行后的输出结果是 ( )。 ( A) 01 ( B) 0 0 ( C)一 1 1 ( D)结果不确定 22 有以下程序: #include main() char c; c=getchar(); do putchar(C+); while(C=getchar()!=#); 程序运行时从第一列开始输入 abcdefg#,则输出结果是 ( )。 ( A) abcdefg ( B) bcdefgh ( C) abcdefg# ( D) bcdefgh# 23 以下叙述中正确的是 ( )。 ( A)结构化程序必须包含所有三
10、种基本结构,缺一不可 ( B)在 C语言程序设计中,所有函数必须保存在一个源文件中 ( C)只要包含了三种基本结构的算法就是结构化程序 ( D)在算法设计时,可以把复杂任务分解成一些简单的子任务 24 有以下程序: #include char f(char x) return x*x 10+0: main() char a; int b=0; for(a=0; a #include main() char a=“1234”, *b=“ABC”; printf(“ d d d d n”, strlen(a), sizeof(a), strlen(b), sizeof(b); 程序运行后的输出结果
11、 是 ( )。 ( A) 4 5 3 4 ( B) 4 3 2 1 ( C) 4 5 3 3 ( D) 4 5 1 3 27 在源程序的开始处加上 #include进行文件引用的原因,以下叙述正确的是 ( )。 ( A) stdio h文件中包含标准输入输出函数的函数说明,通过引用此文件以便能正确使用 printf、 scanf等函数 ( B)将 stdio h中标准输入输出函数链接到编译生成的可执行文件中,以便能正确运行 ( C)将 stdio h中标准输入输出函数的源程序插入到引用处,以便 进行编译链接 ( D)将 stdio h中标准输入输出函数的二进制代码插入到引用处,以便进行编译链接
12、 28 若用数组名作为函数调用时的实参,则实际上传递给形参的是 ( )。 ( A)数组的第一个元素值 ( B)数组元素的个数 ( C)数组中全部元素的值 ( D)数组首地址 29 设有某函数的说明为: int*fune(int a10, int n); 则下列叙述中,正确的是 ( )。 ( A)形参 a对应的实参只能是数组名 ( B)说明中的 a10写成 a或 *a效果完全一样 ( C) func的函数体中不能对 a进行移动指针 (如 a+)的操作 ( D)只有指向 10个整数内存单元的指针,才能作为实参传给 a 30 有以下程序: #include int fun(int x, int y)
13、 if(x!=y)retum(x+y) 2); else return(x); main() int a=4, b=5, c=6; prinff(“ d n”, fun(2*a, fun(b, c); 程序运 行后的输出结果是 ( )。 ( A) 3 ( B) 6 ( C) 8 ( D) 12 31 要求定义一个具有 6个元素的 int型一维数组,以下选项中错误的是 ( )。 ( A) int N=6, aN; ( B) int a2*3=0; ( C) #define N 3 int aN+N; ( D) int a=1, 2, 3, 4, 5, 6; 32 若有以下程序: #include
14、 main() int a=1, b=2, c=3, d=4, r=0; if(a!=1); else r=1; if(b=2)r+=2; if(c!=3); r+=3; if(d=4)r+=4; printf(“ d n”, r); 则程序的输出结果是 ( )。 ( A) 3 ( B) 7 ( C) 6 ( D) 10 33 有以下程序: #include int fun(char*s) char*P=s; while(*P!=0)P+; return(Ps); main() prinff(“ d n”, fun(“goodbye!”); 程序的输出结果是 ( )。 ( A) 0 ( B)
15、6 ( C) 7 ( D) 8 34 如果定义 float a10, x;,则以下叙述中正确的是 ( )。 ( A)语句 a=&x;是非法的 ( B)表达式 a+1是非法的 ( C)三个表达式 a1、 *(a+1)、 *&a1表示的意思完全不同 ( D)表达式 *&a1是非法的,应该写成 *(&(a1) 35 关于地址和指针,以下说法中正确的是 ( )。 ( A)通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量 ( B)可以取一个常数的地址赋值给同类型的指针变量 ( C)可以取一个表达式的地址赋值给同类型的指针变量 ( D)可以取一个指针变量的地址赋值给基类型相同的指针变量
16、36 有以下程序: #include main() int c6=10, 20, 30, 40, 50, 60, *P, *s; P=c; s= c5; prinff(“ d n”, SP); 程序运行后的输出结果是 ( )。 ( A) 5 ( B) 50 ( C) 6 ( D) 60 37 有以下程序: #include #define PT 3 5; #define S(x)*x*x main() int a=1, b=2; prinff(“ 4 1f n”, S(a+b); 程序运行后的输出结果是 ( )。 ( A) 31 5 ( B) 7 5 ( C)程序有错无输出结果 ( D) 14
17、 0 38 设有定义: int x23; 则以下关于二维数组 X的叙述中错误的是 ( )。 ( A)元素 x0可看作由 3个整型元素组成的一维数组 ( B)数组 x可以看作由 x0和 x1两个元素组成的一维数组 ( C)可以用 x0=0;的形式为数组所有元素赋初值 0 ( D) x0和 x1是数组名,分别代表一个地址常量 39 有以下程序: #include void fun(int n, int*s) int f: if(n=1)*s=n+1; else fun(n一 1, &f); *s=f; main() int x=0; fun(4, &x); prinff(“ d n”, x); 程
18、序运行后的输出结果是 ( )。 ( A) 3 ( B) 1 ( C) 2 ( D) 4 40 设有如下语句: typedef struct Date int year; int month; int day; DATE; 则以下叙述中错误的是 ( )。 ( A) DATE是用户说明的新结构体类型名 ( B) struct Date是用户定义的结构体类型 ( C) DATE是用户定义的结构体变量 ( D) struct是结构体类型的关键字 国家二级 C语言程序设计机试(选择题)模拟试卷 3答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 线性结构的特点: 有且只有一个根结点; 每一个结
19、点最多有一个前驱,也最多有一个后继。不满足线性结构条件的称为非线性结构,二叉树的非叶子结点最多可 以用两个后继结点,属于非线性结构。 2 【正确答案】 A 【试题解析】 算法的空间复杂度是指算法在执行过程中所需要的内存空间,因此本题答案为 A。 3 【正确答案】 B 【试题解析】 栈是按 “先进后出 ”的原则组织数据的;队列是按 “先进先出 ”的原则组织数据的,因此本题答案为 B。 4 【正确答案】 B 【试题解析】 一般较优秀的软件设计应尽量做到高内聚、低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性,因此本题答案为B。 5 【正确答案】 A 【试 题解析】 结构化
20、程序设计中三种基本控制结构为顺序、选择和重复 (循环 ),故正确答案为 A。 6 【正确答案】 B 【试题解析】 需求分析就是分析软件用户的需求是什么,描述需求的文档称为软件需求规格说明书。软件需求规格说明书是需求分析阶段的最后成果。需求规格说明书是使开发人员获得设计和实现这些功能所需的所有必要信息,是软件设计的依据, A选项正确;软件需求规格说明书是软件测试和验收的依据,通过检查每项需求是否能通过设计测试用例或其他的验证方法,来确定产品是否确实按需求实现了, C选项正确;软件需求规格说明书 对所有需求说明的用户和开发人员都只能有一个明确统一的解释,是用户和开发人员对软件要做什么的共同理解,
21、D选项正确。可行性分析是项目立项阶段要做的工作,虽然也需要对用户需求进行调研,但此阶段不会形成软件需求规格说明书。故正确答案为 B。 7 【正确答案】 C 【试题解析】 程序测试是使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别,即为发现错误而执行程序的过程,而不是改正错误。故正确答案为 C。 8 【正确答案】 B 【试题解析 】 数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和提供数据服务等,是一种在操作系统支持下的系统软件,因此本题答案为 B。 9 【正确答案】 B
22、【试题解析】 A选项 2的前面有 1和 3两个数值,带有不确定性; c选项 2的后面有 4和 3两个数值; D选项 1的后面有 3和 2两个数值,所以只有 B选项是线性结构。 10 【正确答案】 C 【试题解析】 A选项中,转义字符是以反斜线 “ ”开头,后跟 1个或几个字符;B选项中,字符常量在内存中占 1个字节; D选 项中,字符常量可以进行关系运算,不能参与数值运算。因此 C选项正确。 11 【正确答案】 D 【试题解析】 D选项正确, c语言允许对函数单独进行编译,从而可以实现模块化。 A选项错误,使用三种基本结构组成的程序可以解决复杂的问题; B选项错误,使用 goto语句会使程序混
23、乱,程序中应该尽量避免使用 goto语句; C选项错误,一个结构化程序没有必要同时由顺序、分支、循环三种结构组成。 12 【正确答案】 A 【试题解析】 二进制数中只有两个字符 0和 1,表示具有两个不同稳定状态的元器件。例如,电路中有 无电流,有电流用 1表示,无电流用 0表示。类似的还比如电路中电压的高低,晶体管的导通和截止等。二进制数运算简单,大大简化了计算中运算部件的结构,故选项 A正确。 13 【正确答案】 A 【试题解析】 c语言标识符只能由字母、数字、下画线构成,且只能以字母、下画线开头,故选项 A不正确。 14 【正确答案】 A 【试题解析】 c语言表达式的执行顺序是从左向右,
24、当遇到优先级高的表达式组分时,先执行优先级高的表达式,故选项 A正确。 15 【正确答案】 B 【试题解析】 定义变量时不能用连等 ,所以 A选项错误; C选项中, b是指针,c定义为指向指针的指针才可以接受 b,所以 C选项错误; D选项, b=1 1前没有类型名,所以错误。 16 【正确答案】 A 【试题解析】 整型常量有 3种表示方法,分别是十进制数表示法、八进制数表示法和十六进制数表示法。十进制整常量没有前缀,输出格式控制符为 d;八进制整常量以 0作为前缀,输出格式控制符为 0;十六进制整常量以 0X或 0x作为前缀,输出格式控制符为 x。 1一 k=18,整型常量 18用八进制表示
25、为 22,十六进制表示为 12,故 A选项正确。 17 【正确 答案】 A 【试题解析】 逗号运算符的结合性从左到右,因此逗号表达式将从左到右进行计算。另外逗号运算符的优先级最低,所以先计算 c=(a一 =+a)这部分。其中,赋值运算符从右往左计算,先执行 +a, a自增 1后再赋值,所以 a的值为 1,执行 a=a一 1,即 a=11, a的值为 0,并将 0赋给变量 c。第二部分 (a+=b, b+=4),先执行 a=a+b, a=0+0,即 a的值为 0,然后执行 b+=4, b=0+4,即 bl的值为 4。所以输出结果为 0, 4, 0,故选项 A正确。 18 【正确答案】 A 【试题
26、解析】 这 里考查了强制转换的概念。在 fun函数中, x=a一 (int)a,表示 x取值为 a的小数部分,因此,输入 a为 3 1415,输出 x=0 141500,故 A选项正确。 19 【正确答案】 B 【试题解析】 考查 for循环及其嵌套。第一个 for循环用来控制输出行数,第二个 for循环用来控制每行输出的表达式个数。 当 i=1, j=1时,第一行输出 3个表达式: 1*1=1: 1 1*2=2 1*3=3 当 i-2, j=2时,第二行输出 2个表达式: 2*2=4 2*3=6 当 i=3, j=3时,第三行输出 1个表达式: 3*3=9 当 i=4时,第一个 for循环中
27、 41为 1,二者与运算后为0,故 B选项正确。 21 【正确答案】 A 【试题解析】 这是对 for循环的基本考查。其中 +a是判断条件,并且是 a先自增 1,再参与运算。 a初值为一 1,经 +a后, a值为 0, 0相当于 false,判断条件不成立,跳过 for循环后面的语句 +b,直接执行 printf语句,所以最后输出 a的值为 0, b的值没变,还是一 1。 22 【正确答案】 A 【试题解析】 运算符 “+”放在变量后面时,先参与其他操作,再对变量 +1。putchar(c+)表示先输出当前 c值,再对 c值 +1。当输入 abcde#时,在 while语句中,程序输入 #时循
28、环退出。因此输出为 abcd吨,故 A选项正确。 23 【正确答案】 D 【试题解析】 c语言可以包含一个到多个源文件,每个源文件可以包含一个到多个函数,选项 B错误;结构化的程序可以包含三种基本结构中的一种或者几种,除此之外还要遵循一些重要的原则: 自顶向下、逐步求精、模块化和限制使用goto语句,选项 A、 C错误;把复杂任务分解成一些简单的子任务是程序模块化的思想,答案选 D。 24 【正确答案】 C 【试题解析】 该题目中 x*x 10,即 x和 x相乘后,结果再对 10求余操作。主函数中通过 for语句使变量 a从 0到 4进行取值,当 a=0时,调用函数 f后,返回值为 0,赋给
29、b,并且进行字符输出;当 a=1时,返回值为 1赋给 b,并且进行字符输出;当 a=2时,返回值为 4赋给 b,并且进行字符输出;当 a=3时,返回值为9赋给 b,并且进行字符输出;当 a=4时,返回值 为 6赋给 b,并且进行字符输出。故 C选项正确。 25 【正确答案】 A 【试题解析】 考查字符串比较函数 strcmp的功能。 26 【正确答案】 A 【试题解析】 对于字符数组 a,含有 4个元素,所以 strlen为 4,而 sizeof包括最后隐藏的 0,故 sizeof有 5个。对于字符串 b, strlen为 3,关键是 sizeof,这里的 sizeof不再是指数组的长度,因为
30、 b是一个地址值,整型数据,所以占用了 4个字节。 27 【正确答案】 A 【试题解析】 stdio h包含标准库函数头文 件,很多库函数的声明都在 stdio h这个文件中,包含之后就可以用其中的库函数,例如 printf函数, scanf函数等。 28 【正确答案】 D 【试题解析】 形参是在函数的定义中,放在括号里声明的变量;实参是调用函数时,传入的参数。数组在进行形参实参结合的,就是传递数组的首地址,并不是把整个数组复制一份放入函数里运行。故 D选项正确。 29 【正确答案】 B 【试题解析】 考查数组名作为函数参数。传递给形参的实参可以是数组名,还可以是指向该数组的指针变量,选项 A
31、错误; a10、 a、 *a做形参都是接受实参数组首地址,效果一样,选项 B正确;数组名可以看作一个指针常量,对其进行自加自减运算相当于指针变量的自加自减,选项 C错误;数组名作为函数参数时,只传递数组的首地址而不检查形参数组的长度,所以形参表中可以不给出形参数组的长度,形参数组和实参数组长度也可以不同,选项 D错误。故答案选 B。 30 【正确答案】 B 【试题解析】 考查函数的调用。输出结果为 fun(2*a, fun(b, c)=fun(8, 5)=6,答案选 B。 31 【正确答案】 A 【试题解析】 数组定义中长度不 能为变量。 32 【正确答案】 D 【试题解析】 第一个 if语句
32、 a!=1条件为假,所以执行 else后的语句 r=1。第二个 if语句 b=2条件成立,执行 r+=2, r的值变为 3第三个 if语句 c!=3条件为假,所以不做任何操作。执行下面的 r+=3操作, r的值变为 6。判断第四个 if条件, d=4条件成立,执行 r+=4操作,结果为 10。故 D选项正确。 33 【正确答案】 D 【试题解析】 本题主要考查函数定义及调用,以及 while循环语句。执行 fun函数后,首先找到最后一个字符的地址,然后减去第 一个地址得到的就是这个字符串的长度,因此本题答案为 8。 34 【正确答案】 A 【试题解析】 数组名表示该数组的首地址,是一个地址常量
33、,不能对它重新赋值,选项 A正确。但是可以把数组名看作一个指针常量,则表达式 a+1表示的是数组中第二个元素的地址,选项 B错误。表达式 a1、 *(a+1)、 * a1都指的是数组 a中第二个元素的值,选项 C错误。 运算符的优先级高于 *、 &,取值 *和取址 &运算符优先级相等,是同一优先级的运算符,运算次序由结合方向所决定,*&a1在运算符优先级和结合性上没有问题,并 且取值 *和取址 &运算符互逆,*&a1和 a1等价,相当于求得数组 a第二个元素的值,选项 D错误。故正确答案为 A。 35 【正确答案】 A 【试题解析】 考查对指针变量赋值的理解。 36 【正确答案】 A 【试题解
34、析】 本题主要考查数组和指针。首先初始化一维数组 c6,语句 p=c;表示将 c0元素的地址赋给指针变量 p;语句 s: c5;表示将 c5元素的地址赋给指针变量 s。程序最后输出 sp,即结果为 5。故 A选项正确。 37 【正确答案】 C 【试题解析】 宏定义不是 C语句,结尾不加 “; ”,所以该程序会出现编译错误,答案选 C。 38 【正确答案】 C 【试题解析】 x0可看作由 3个整型元素组成的一维数组,不可以用语句x0=0;为数组所有元素赋初值 0。故 C选项正确。 39 【正确答案】 C 【试题解析】 本题考查函数的递归调用。将函数参数带入函数中,一步步递归即可得到结果,结果为 2。故选项 C正确。 40 【正确答案】 C 【试题解析】 该定义语句把结构体 struct Date命名为一个新的类型名 “DATE”,DATE相当于 “struct Date”,是结构体类型名,选项 C描述错误,答案选 C。