二级C语言选择题专项强化真题试卷22
选择题
1.耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是( )。(B)
A. 提高耦合性、降低内聚性有利于提高模块的独立性
B. 降低耦合性、提高内聚性有利于提高模块的独立性
C. 耦合性是指一个模块内部各个元素间彼此结合的紧密程度
D. 内聚性是指模块间互相连接的紧密程度
解析:耦合性是指模块间互相连接的紧密程度,内聚性是指一个模块内部各个元素间彼此结合的紧密程度。提高内聚性、降低耦合性是提高模块独立性的方法。
2.设函数中有整型变量n,为保证其在未赋值的情况下初值为0,应选择的存储类别是( )。(C)
A. auto
B. register
C. static
D. auto或register
解析:静态存储类型定义变量在未对其初始化时会对其初始化默认值,其中int型的默认初始化值是0,其他选项的存储类型不能保证变量在未赋值情况的初值。
3.以下关于字符串的叙述中正确的是( )。(D)
A. C语言中有字符串类型的常量和变量
B. 两个字符串中的字符个数相同时才能进行字符串大小的比较
C. 可以用关系运算符对字符串的大小进行比较
D. 空串比空格打头的字符串小
解析:字符串比较的方法是:依次对s1和s2中对应位置上的字符两两进行比较,当出现第一对不相同的字符时,即由这两个字符决定所在串的大小(比较字符大小的依据是其ASCII码值)。空格是一种字符,所以空串肯定比空格打头的字符串小。
4.若有以下程序:
#include<stdio.h>
main()
{
int a=1,b=2,c=3,d=4;
if((a=2)&&(b=1))c=2;
if((c==3)||(d=—1))a=5;
printf(\\(C)
A. 2,2,2,4
B. 2,1,2,—1
C. 5,1,2,—1
D. 1,2,3,4
解析:第一个if语句的判断条件是逻辑与表达式,只有运算对象均非零,结果才为真。执行第一个if判断条件,均为赋值表达式,第一个运算对象a=2非零,判断第二个表达式b=1也非零,所以条件成立,执行c=2的赋值操作。执行第二个if判断条件的逻辑或表达式,只要有一个对象非零,结果就是真。本条件中c==3运算对象为假,所以需要判断第二个运算对象d=—1,结果为—1,非零,条件成立,执行a=5的操作,所以a值为5,b值为1,c值为2,d值为—1。
5.下列叙述中正确的是( )。(B)
A. 线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的
B. 线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构
C. 线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构
D. 线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性
解析:线性链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。
6.关于C语言函数说明的位置,以下叙述正确的是( )。(A)
A. 在函数说明之后对该函数进行调用,编译时不会出现错误信息
B. 函数说明可以出现在源程序的任意位置,在程序的所有位置对该函数的调用,编译时都不会出现错误信息
C. 函数说明只能出现在源程序的开头位置,否则编译时会出现错误信息
D. 函数说明只是为了美观和编译时检查参数类型是否一致,可以写也可以不写
解析:对被调用函数的说明有两种方式:外部说明和内部说明。在调用函数内对被调函数所作的声明称为内部说明,也称为局部说明;在函数外进行的函数说明称为外部说明,如果说明在程序最前端,外部声明又称为全局说明,因此B、C选项错误;函数“说明”是指利用它在程序的编译阶段对调用函数的合法性进行全面检查,因此D选项错误,故答案为A选项。
7.以下与存储类别有关的四组说明符中,全部属于静态类的一组是( )。(A)
A. extern和static
B. auto和static
C. register和static
D. re~ster和extern
解析:auto用于声明变量的生存期为自动,即不会将在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而将在函数中定义的变量视为局部变量。这个关键字通常会被省略,因为所有的变量默认就是auto的。
register定义的变量告诉编译器尽可能地将变量存在CPU内部寄存器中而不是通过内存寻址访问,这样可以提高效率。
static变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。当static用来修饰全局变量时,它就改变了全局变量的作用域。
extem将变量作用域限制在了当前文件里,但是没有改变其存放位置,还是在全局静态储存区。extem外部声明,该变量在其他地方有被定义过。因此,答案为A选项。
8.有以下程序:
#include
int sum(int*array,int len)
{
if(len==1)
return array[1];
else
return array[1]+sum(array+1,len-1);
}
main()
{
int arrayE 5]={0,9,1,2},res;
res=sum array,3);
printf(\\(D)
A. 27
B. 11
C. 8
D. 12
解析:main()函数先定义一个数组array,调用sum(array,3)函数,此时函数形参array指向数组首地址,形参len的值为3。在sum函数中,array[1]指向数组中元素9,sum()函数调用三次,完成的功能是将数组array[1]+array[2]+array[3]累加后返还并输出,累加后的值为12。因此答案为D选项。
9.关于函数返回值,以下叙述正确的是( )。(A)
A. 函数可以返回整个结构体,即使结构体中有数组
B. 函数只能返回基本数据类型的数值或指针
C. 函数不可以返回一个数组
D. 函数不能没有返回值
解析:函数返回值可以为整型、实型、字符型、指针和结构类型,也可以没有返回值,因此A选项正确,可以返回数组指针,因此可知B、C、D选项错误。故答案为A选项。
10.若有定义:char*ps[ ]={\\(C)
A. ps[0]是字符串\\
B. *ps[0]是字符串\\
C. ps[0]是字符串\\
D. *ps[0]是字符串\\
解析:定义一个字符串数组指针ps后,ps是指针变量,ps[0 ]指向的是数组首个元素的地址,即字符串“aa”的首地址,答案为C选项。
11.有以下程序段:
char name[20];
int num;
scanf(\\(D)
A. name=Lili num=1001
B. name=Lil
本文档预览:3600字符,共8325字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载