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