1、二级 C 语言-220 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:100.00)1.下面关于算法的叙述中,正确的是_。(分数:2.50)A.算法的执行效率与数据的存储结构无关B.算法的有穷性是指算法必须能在执行有限个步骤之后终止C.算法的空间复杂度是指算法程序中指令(或语句)的条数D.以上三种描述都正确2.下列二叉树描述中,正确的是_。(分数:2.50)A.任何一棵二叉树必须有一个度为 2 的结点B.二叉树的度可以小于 2C.非空二叉树有 0 个或 1 个根结点D.至少有 2 个根结点3.如果进栈序列为 A,B,C,D,则可能的出栈序列是_。(分数:
2、2.50)A.C,A,D,BB.B,D,C,AC.C,D,A,BD.任意顺序4.下列各选项中,不属于序言性注释的是_。(分数:2.50)A.程序标题B.程序设计者C.主要算法D.数据状态5.下列模式中,能够给出数据库物理存储结构与物理存取方法的是_。(分数:2.50)A.内模式B.外模式C.概念模式D.逻辑模式6.下列叙述中,不属于软件需求规格说明书的作用的是_。(分数:2.50)A.便于用户,开发人员进行理解和交流B.反映出用户问题的结构,可以作为软件开发工作的基础和依据C.作为确认测试和验收的依据D.便于开发人员进行需求分析7.下列不属于软件工程 3 个要素的是_。(分数:2.50)A.工
3、具B.过程C.方法D.环境8.数据库系统在其内部具有 3 级模式,用来描述数据库中全体数据的全局逻辑结构和特性的是_。(分数:2.50)A.外模式B.概念模式C.内模式D.存储模式9.将 E-R 图转换到关系模式时,实体与联系都可以表示成_。(分数:2.50)A.属性B.关系C.记录D码10.某二叉树中度为 2 的结点有 10 个,则该二叉树中有_个叶子结点。(分数:2.50)A.9B.10C.11D.1211.以下叙述中正确的是_。(分数:2.50)A.C 程序中注释部分可以出现在程序中任意合适的地方B.C 程序的书写格式是固定的,每行只能写一条语句C.构成 C 程序的基本单位是函数,所有函
4、数名都可以由用户命名D.在对 C 语言程序进行编译时,可以发现注释行中的拼写错误12.下面的程序在编译时产生错误,其出错原因是_。 #include stdio.h main() int 1_case;float printF; printf (“请输入 2 个数:“); scanf(“%d%f“, printf(“%d%f/n“,1_case,printF); (分数:2.50)A.定义语句出错,1_case 不能作为变量名B.定义语句出错,printF 不能用作用户自定义标识符C.定义语句无错,scanf 不能作为输入函数使用D.定义语句无错,printf 不能输出 1_case 的值13
5、.以下不正确的转义字符是_。(分数:2.50)A.“/“B.“/d“C.“/s“D.“088“14.下面程序的运行结果是_。 y=5;x=14;y=(x=3*y,x+6),x-1); print f(“x=%d,y=%d“,x,y);(分数:2.50)A.x=27,y=27B.x=12,y=13C.x=15,y=14D.x=y=2715.sizeof(char)是_。(分数:2.50)A.一种函数调用B.一个整型表达式C.一个字符型表达式D.一个不合法的表达式16.下列 4 个程序中,完全正确的是_。(分数:2.50)A.#include stdio.hmain();/*programming
6、*/printf(“programming!/n“);B.#include stdio.hmain()/*/programming/*/printf(“programming!/n“);C.#include stdio.hmain()/*/programming*/*/printf(“programming!/n“);D.include stdio.hmain()/*programming*/printf(“programming!/n“);17.设变量均已正确定义,若要通过 scanf(“%d%c%d%c“,语句为变量 a1 和 a2 赋数值 10和 20,为变量 c1 和 c2 赋字符 X
7、 和 Y。下列所示的输入形式中正确的是(注:代表空格字符)_。(分数:2.50)A.10X20YCRB.10X20YCRC.10XCR20YCRD.10XCR20YCR18.两次运行下面的程序,如果从键盘上分别输入 3 和 2,则输出结果是_。 #includestdio.h main() int x; scanf(“%d“, if(x+2) printf(“%d“,x); else printf(“%d/n“,x-); (分数:2.50)A.4 和 3B.4 和 2C.4 和 1D.3 和 219.以下叙述中不正确的是_。(分数:2.50)A.在不同的函数中可以使用相同的名字的变量B.函数中
8、的形式参数是局部变量C.在一个函数内定义的变量只在本函数范围内有效D.在一个函数内的复合语句中定义的变量在本函数范围内有效20.运行下面的程序,输入字符串 Microsoft Visual Studio,则程序的执行结果是_。 #includestdio.h main() char Chr20; scanf(“%s“, printf(“%s/n“,Chr); (分数:2.50)A.Microsoft Visual StudioBMC.MicrosoftD.MicrosoftVisualStudio21.若有“double a;”,则正确的输入语句是_。(分数:2.50)A.scanf(“%lf
9、“,a);B.scanf(“%f“,C.scanf(“%lf“,22.if 语句的基本形式为:if(表达式) 语句,其中“表达式”_。(分数:2.50)A.可以是任意合法的表达式B.必须是逻辑表达式C.必须是逻辑表达式或关系表达式D.必须是关系表达式23.若 i、j 已定义成 int 型,则以下程序段中内循环体的总执行次数是_。 for(i=6;i0;i-) for(j=0;j4;j+).(分数:2.50)A.20B.24C.25D.3024.以下选项中非法的字符常量是_。(分数:2.50)A.“/“B.“/0201“C.“/xAA“D.“0“25.以下程序的输出结果是_。 #includes
10、tdio.h int m=13; int fun(int x,int y) int m=2; return(x*y-m); main() int a=7,b=6; printf(“%d“,fun(a,b)/m); (分数:2.50)A.1B.3C.7D.1026.下面程序运行后的输出结果是_。 #includestdio.h main() int a5=1,0,4,2,0,b5=1,2,3,4,5,i,s=0; for(i=0;i5;i+)s=s+bai; printf(“%d/n“,s); (分数:2.50)A.12B.15C.11D.827.已知下列函数定义: fun(int *b,int
11、 c,int n,int data) int k; for(k=0;km*n;k+) *b=data; b+; 则调用此函数的正确写法是(假设变量 a 的说明为 int a50)_。(分数:2.50)A.fun(*a,4,5,1);B.fun(C.fun(int*)a,4,5,1);D.fun(a,4,5,1);28.以下程序段的输出结果是_。 #includestdio.h main() char p4=“ABC“,“DEF“,“GHI“; int i; for(i=0;i3;i+) puts(pi); (分数:2.50)A.ABCB.ADGC.ABCDEFGHID.ABC29.下面程序的运
12、行结果是_。 #includestdio.h #includestring.h main() char*s1=“abDuj“; char*s2=“ABdUG“; int t; t=strcmp(s1,s2); printf(“%d“,t); (分数:2.50)A.正数B.负数C零D.不确定的值30.已知:int c34;,则对数组元素引用正确的是_。(分数:2.50)A.c14B.c1.50C.c1+00D.以上表达都错误31.以下程序: #includestdio.h #includestring.h main() char str=“abcd/n/123/xab“; printf(“%d“
13、,strlen(str); 运行后的输出结果是_。(分数:2.50)A.10B.9C.7D.1432.C 语言中允许用外部说明来指定变量、函数和其他标识符的特征,这里所说的外部指的是_。(分数:2.50)A.冠以关键字 externB.位置在函数体外部C.作用范围是全程的D.位置在函数的外部33.有以下程序: #include stdio.h int fun(int x,int y) if(x=y)return(x); else return(x+y)/2); main() int a=1,b=2,c=3; printf(%d/n“,fun(2*a,fun(b,c); 程序运行后的输出结果是_
14、。(分数:2.50)A.2B.3C.4D.534.若有 char s33=“AAA“,“BBB“,“CCC“;说明语句,则与它等价的语句是_。(分数:2.50)A.char*s=“AAA“,“BBB“,“CCC“;B.char*s3=“AAA“,“BBB“,“CCC“;C.char s5=“AAA“,“BBB“,“CCC“;D.char s3=“AAA“,“BBB“,“CCC“;35.计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是_。(分数:2.50)A.C 语言程序仅可以编译执行B.C 语言程序仅可以解释执行C.C 语言程序既可以编译执行又可以解释执行D.以上说法都
15、不对36.若有如下说明,且 int 类型占两个字节,则正确的叙述为_。 struct st int a; int b2; a;(分数:2.50)A.结构体变量 a 与结构体成员 a 同名,定义是合法的B.程序只在执行到该结构体时才为结构体 st 分配存储单元C.程序运行时为结构体 st 分配 8 字节存储单元D.类型名 struct st 可以通过 extern 关键字提前引用37.有以下程序: #include stdio.h int fun(int *k) int b=0; b=*k+b; return(b); main() int a10=1,2,3,4,5,6,7,8,i; for(i
16、=2;i4;i+)printf(“%d“,fun( printf(“/n“); 程序运行后的输出结果是_。(分数:2.50)A.10 12B.8 10C.3 4D.10 2838.设有一联合体变量定义如下: union data long a; float b; int c; char d; ; union data x; 执行下列语句后,正确的联合体变量 x 的值是_。 x.a=111111; x.b=2222; x.c=2.1546; x.d=“R“;(分数:2.50)A.111111B.2222C.2.1546DR39.若 x=2,y=3,则 x int age; float p6; 定
17、义一个数组:struct a number10; 假定文件已正确打开,不能正确地从文件中读入 10 名工人数据到数组 b 中的是_。(分数:2.50)A.fread(b,sizeof(struct a),10,fp);B.for(i=0;i10;i+)fread(bi,sizeof(struct a),1,fp);C.for(i=0;i10;i+)fread(b+i,sizeof(struct a),1,fp);D.for(i=0;i5;i+=2)fread(b+i,sezeof(struct a),2,fp);二级 C 语言-220 答案解析(总分:100.00,做题时间:90 分钟)一、选
18、择题(总题数:40,分数:100.00)1.下面关于算法的叙述中,正确的是_。(分数:2.50)A.算法的执行效率与数据的存储结构无关B.算法的有穷性是指算法必须能在执行有限个步骤之后终止 C.算法的空间复杂度是指算法程序中指令(或语句)的条数D.以上三种描述都正确解析:解析 算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度。算法的有穷性是指一个算法必须在执行有限的步骤后结束。2.下列二叉树描述中,正确的是_。(分数:2.50)A.任何一棵二叉树必须有一个度为 2 的结点B.二叉树的度可以小于 2 C.非空二叉树有 0 个或 1 个根结点D.至少有 2 个根结点解析:解析 二叉树是由
19、n0 个结点的有限集合构成,此集合或者为空集,或者由一个根结点及两棵互不相交的左右子树组成,并且左右子树都是二叉树。二叉树可以是空集合,根可以有空的左子树或空的右子树。二叉树不是树的特殊情况,它们是两个概念。 二叉树具有如下两个特点: 非空二叉树只有一个根结点; 每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。3.如果进栈序列为 A,B,C,D,则可能的出栈序列是_。(分数:2.50)A.C,A,D,BB.B,D,C,A C.C,D,A,BD.任意顺序解析:解析 栈的操作原则为后进先出。选项 B 中出栈顺序可按“A 进,B 进,B 出,C 进,D 进,D 出,C 出,A 出”实现。
20、4.下列各选项中,不属于序言性注释的是_。(分数:2.50)A.程序标题B.程序设计者C.主要算法D.数据状态 解析:解析 注释一般为序言性注释和功能性注释。序言性注释常位于程序开头部分,它包括程序标题、程序功能说明、主要算法、接口说明、程序位置、开发简历、程序设计者、复审者、复审日期及修改日期等。功能性注释一般嵌在源程序体之中,用于描述其后的语句或程序的主要功能。5.下列模式中,能够给出数据库物理存储结构与物理存取方法的是_。(分数:2.50)A.内模式 B.外模式C.概念模式D.逻辑模式解析:解析 数据库管理系统的三级模式结构由外模式、模式和内模式组成。 外模式,或子模式,或用户模式,是指
21、数据库用户所看到的数据结构,是用户看到的数据视图。模式,或逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所有用户所见到的数据视图的总和。外模式是模式的一部分。内模式,或存储模式,或物理模式,是指数据在数据库系统内的存储介质上的表示,即对数据的物理结构和存取方式的描述。6.下列叙述中,不属于软件需求规格说明书的作用的是_。(分数:2.50)A.便于用户,开发人员进行理解和交流B.反映出用户问题的结构,可以作为软件开发工作的基础和依据C.作为确认测试和验收的依据D.便于开发人员进行需求分析 解析:解析 软件需求规格说明书有以下几个方面的作用: 便于用户、开发人员进行理解和交流; 反映出用
22、户问题的结构,可以作为软件开发工作的基础和依据; 作为确认测试和验收的依据。7.下列不属于软件工程 3 个要素的是_。(分数:2.50)A.工具B.过程C.方法D.环境 解析:解析 软件工程包括 3 个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。8.数据库系统在其内部具有 3 级模式,用来描述数据库中全体数据的全局逻辑结构和特性的是_。(分数:2.50)A.外模式B.概念模式 C.内模式D.存储模式解析:解析 概念模式,也称逻辑模式,是对数据库系统中全局数据逻辑结构的描述,是全体用户应用公共数据视图。它
23、不涉及具体的硬件环境与平台,与具体的软件环境也无关。9.将 E-R 图转换到关系模式时,实体与联系都可以表示成_。(分数:2.50)A.属性B.关系 C.记录D码解析:解析 E-R 图由实体、实体的属性和实体之间的联系 3 个要素组成,关系模型的逻辑结构是一组关系模式的集合,将 E-R 图转换为关系模型:将实体、实体的属性和实体之间的联系转化为关系模式。如下表所示。 E-R 模型与关系间的比较表 E-R 模型 关系 E-R 模型 关系 属性 属性 实体集 关系 实体 元组 联系 关系 10.某二叉树中度为 2 的结点有 10 个,则该二叉树中有_个叶子结点。(分数:2.50)A.9B.10C.
24、11 D.12解析:解析 根据二叉树的性质 3:对任何一棵二叉树,度为 0 的结点(即叶子结点)总是比度为 2 的结点多一个。11.以下叙述中正确的是_。(分数:2.50)A.C 程序中注释部分可以出现在程序中任意合适的地方 B.C 程序的书写格式是固定的,每行只能写一条语句C.构成 C 程序的基本单位是函数,所有函数名都可以由用户命名D.在对 C 语言程序进行编译时,可以发现注释行中的拼写错误解析:解析 本题考查的是 C 语言程序设计的初步知识。选项 A,程序中“/*/”表示注释部分,注释只是给人看的,对程序的编译和运行不起作用,可以在程序中的任何位置;选项 B,C 语言的书写格式自由,一行
25、可以写多条语句,一条语句也可以写在不同行上;选项 C,一个 C 程序中必须有且只能有一个由“main”命名的主函数,其他函数由用户自行命名;选项 D,程序的注释仅仅是提供阅读之用,并不参与程序的编译,所以编译也就不会发现注释行中的错误。12.下面的程序在编译时产生错误,其出错原因是_。 #include stdio.h main() int 1_case;float printF; printf (“请输入 2 个数:“); scanf(“%d%f“, printf(“%d%f/n“,1_case,printF); (分数:2.50)A.定义语句出错,1_case 不能作为变量名 B.定义语句
26、出错,printF 不能用作用户自定义标识符C.定义语句无错,scanf 不能作为输入函数使用D.定义语句无错,printf 不能输出 1_case 的值解析:解析 C 语言变量名可由数字,字母,下划线构成,但首字符不能为数字。13.以下不正确的转义字符是_。(分数:2.50)A.“/“B.“/d“C.“/s“D.“088“ 解析:解析 “/“”是反斜线符,“/d“”是整型变量转义字符,“/s“”是字符串型转义字符,C 语言中没有规定“088“”为转义字符。14.下面程序的运行结果是_。 y=5;x=14;y=(x=3*y,x+6),x-1); print f(“x=%d,y=%d“,x,y)
27、;(分数:2.50)A.x=27,y=27B.x=12,y=13C.x=15,y=14 D.x=y=27解析:解析 本题考查的是逗号表达式。逗号表达式的求解步骤是先求解表达式 1,然后依次求解表达式 2,直到表达式 N 的值。整个逗号表达式的值就是最后一个表达式 N 的值。表达式“(x=3*y,x+6)”中,“x=15”。表达式“y=x-1=14”。15.sizeof(char)是_。(分数:2.50)A.一种函数调用B.一个整型表达式 C.一个字符型表达式D.一个不合法的表达式解析:解析 “sizeof(char)”是一个 C 语言的关键字,它不是函数调用。“sizeof”的功能是计算出运算
28、对象在计算机的内存中所占用的字节数量,该表达式的返回值是一个整数,而不是一个字符型表达式。16.下列 4 个程序中,完全正确的是_。(分数:2.50)A.#include stdio.hmain();/*programming*/printf(“programming!/n“);B.#include stdio.hmain()/*/programming/*/printf(“programming!/n“); C.#include stdio.hmain()/*/programming*/*/printf(“programming!/n“);D.include stdio.hmain()/*p
29、rogramming*/printf(“programming!/n“);解析:解析 选项 A 中,main()函数后面的分号是错误的,C 语言在函数名后面不能有分号;在 C 语言中注释内容必须放在“/*”和“*/”之间,“/*”和“*/”必须成对出现,按语法规定在注释之间不可再嵌套“*/”和“*/”,选项 C 的程序段中注释语句之间有嵌套;C 语言用#include 命令行来实现文件包含的功能。#include 命令行的形式为:#include “文件名”,选项 D 中的 include 前面少了一个#符号。17.设变量均已正确定义,若要通过 scanf(“%d%c%d%c“,语句为变量 a
30、1 和 a2 赋数值 10和 20,为变量 c1 和 c2 赋字符 X 和 Y。下列所示的输入形式中正确的是(注:代表空格字符)_。(分数:2.50)A.10X20YCR B.10X20YCRC.10XCR20YCRD.10XCR20YCR解析:解析 在使用 scanf 函数进行输入数据时,输入的数据之间必须用空格、回车符、制表符(Tab 键)等间隔符隔开。18.两次运行下面的程序,如果从键盘上分别输入 3 和 2,则输出结果是_。 #includestdio.h main() int x; scanf(“%d“, if(x+2) printf(“%d“,x); else printf(“%d
31、/n“,x-); (分数:2.50)A.4 和 3 B.4 和 2C.4 和 1D.3 和 2解析:解析 本题考查 if-else 语句。首先,scanf 函数通过键盘读入 x 的值。当 x=3 时,第一个 if 语句先判断条件,取 x 的值 3 和 2 比较,然后将 x 的值加 1,if 条件成立,执行下面的 printf 语句,输出x 的值 4。当 x=2 时,第一个 if 语句先判断条件,先取 x 的值 2 和 2 比较,然后将 x 的值加 1(x 的值变为3),if 条件不成立,执行下面的 else 语句,先输出 x 的值 3,再将 x 的值减 1。19.以下叙述中不正确的是_。(分数
32、:2.50)A.在不同的函数中可以使用相同的名字的变量B.函数中的形式参数是局部变量C.在一个函数内定义的变量只在本函数范围内有效D.在一个函数内的复合语句中定义的变量在本函数范围内有效 解析:解析 此题考查的是变量的作用范围。选项 D 中,在一个函数的复合语句中定义的变量是局部变量,只在定义此变量的复合语句内有效,并不是在整个函数体内都有效。20.运行下面的程序,输入字符串 Microsoft Visual Studio,则程序的执行结果是_。 #includestdio.h main() char Chr20; scanf(“%s“, printf(“%s/n“,Chr); (分数:2.5
33、0)A.Microsoft Visual StudioBMC.Microsoft D.MicrosoftVisualStudio解析:解析 当从键盘输入“Microsoft Visual Studio”时,由于“scanf”输入函数的特点是遇到空格时结束读入字符,因此,该程序只将“Microsoft”这 9 个字符送到了字符数组 str 中,并在其后自动加上结束符“/0”。21.若有“double a;”,则正确的输入语句是_。(分数:2.50)A.scanf(“%lf“,a);B.scanf(“%f“,C.scanf(“%lf“,解析:解析 scanf 函数的调用形式是:scanf(“格式字
34、符串“,输入项地址表)。其中,“格式字符串”是要输入的变量的格式符;“输入项地址表”是要输入的变量的地址。a 是 double 型数据,格式字符串可以用“%lf”,“%f”是浮点型。 题中定义变量 a 为双精度型变量,双精度变量的格式符为“%lf”;变量的地址用取地址符“i0;i-) for(j=0;j4;j+).(分数:2.50)A.20B.24 C.25D.30解析:解析 本题考查的是嵌套 for 循环执行次数。对于外层 i 的循环中任何一个 i,内层 j 的循环中的 j 都要从 0 变化到 3,j=4 时退出循环;然后外层 i 循环的 i 减少 1,内层循环的 j 仍要从 0 变化到3,
35、j=4 时退出循环直到外层 i 循环的 i 变为 0,退出 i 循环。所以执行多重循环时,对外层循环变量的每一个值,内层循环的循环变量都要从初始值变化到终值。对外层循环的每一次循环,内层循环要执行完整的循环语句。外层 for 语句执行 6 次,内层 for 语句执行 4 次,所以内循环体执行 6*4=24 次。24.以下选项中非法的字符常量是_。(分数:2.50)A.“/“B.“/0201“ C.“/xAA“D.“0“解析:解析 选项 A 表示的是反斜杠字符;一般可以用 13 位八进制数表示的字符,而选项 B 中“/0201“”有 4 位八进制数,所以错误;选项 C 是用两位十六进制数 AA
36、表示的 ASCII 码字符;选项 D 表示的是字符 0 对应的 ASCII 码值。25.以下程序的输出结果是_。 #includestdio.h int m=13; int fun(int x,int y) int m=2; return(x*y-m); main() int a=7,b=6; printf(“%d“,fun(a,b)/m); (分数:2.50)A.1B.3 C.7D.10解析:解析 本题考查的是函数调用时的参数的作用域。在函数调用时,当全局变量和局部变量的名称相同时,在局部变量的作用城内,局部变量起作用,因而在 fun 函数内 m 的应该等于 2,main 中的 m 为13,
37、所以返回值为 76-2=40,而 fun(a,b)/m 值为 40/13=3。26.下面程序运行后的输出结果是_。 #includestdio.h main() int a5=1,0,4,2,0,b5=1,2,3,4,5,i,s=0; for(i=0;i5;i+)s=s+bai; printf(“%d/n“,s); (分数:2.50)A.12 B.15C.11D.8解析:解析 这道题目是计算一维数组 b 中某些元素的和。这些元素的下标值是一维数组 a 中元素值。s=0+b1+b0+b4+b2+b0=2+1+5+3+1=12。27.已知下列函数定义: fun(int *b,int c,int n
38、,int data) int k; for(k=0;km*n;k+) *b=data; b+; 则调用此函数的正确写法是(假设变量 a 的说明为 int a50)_。(分数:2.50)A.fun(*a,4,5,1);B.fun(C.fun(int*)a,4,5,1);D.fun(a,4,5,1); 解析:解析 本题考查函数调用时的参数传递。fun 函数的调用形式为“fun(int *b,int m,int n,int data)”,而调用数组时,用数组名表示一个指向数组第一个元素的指针,因此调用时的形式为fun(a,4,5,1)。28.以下程序段的输出结果是_。 #includestdio.h
39、 main() char p4=“ABC“,“DEF“,“GHI“; int i; for(i=0;i3;i+) puts(pi); (分数:2.50)A.ABCB.ADGC.ABCDEFGHI D.ABC解析:解析 本题首先定义了一个字符串数组 p,通过 for 循环输出 p0、p1、p2的值。29.下面程序的运行结果是_。 #includestdio.h #includestring.h main() char*s1=“abDuj“; char*s2=“ABdUG“; int t; t=strcmp(s1,s2); printf(“%d“,t); (分数:2.50)A.正数 B.负数C零D
40、.不确定的值解析:解析 本题考查字符串比较函数和字符串的比较原则的两个知识点:原则是依次比较两个字符串同一位置的一对字符,若它们的 ASCII 码值相同,则继续比较下一对字符,若它们的 ASCII 码值不同,则 ASCII 码值较大的字符所在的字符串较大:若所有字符相同,则两个字符串相等:若一个字符串全部 i个字符与另一个字符串的前 i 个字符相同,则字符串较长的较大。strcmp(s1,s2)的返回值,当“str1str2”时,返回值0;当“str1=str2”时,返回 0;当“str1str2”,返回值0。30.已知:int c34;,则对数组元素引用正确的是_。(分数:2.50)A.c1
41、4B.c1.50C.c1+00 D.以上表达都错误解析:解析 此题考查的是数组元素的引用。对于已定义的数组 aMN,数组元素的正确引用必须满足行下标小于 M,列下标小于 N,且为正整数。因此,选项 A 中列下标溢出;选项 B 中行下标出现小数;选项 C 满足要求。31.以下程序: #includestdio.h #includestring.h main() char str=“abcd/n/123/xab“; printf(“%d“,strlen(str); 运行后的输出结果是_。(分数:2.50)A.10B.9C.7 D.14解析:解析 本题考查字符串的长度,需注意转义字符串,例如,“/n
42、”表示换行,为一个长度,“/123”表示 3 位八进制数 123 表示的字符,为一个长度,“/xab”表示二位十六进制数 ab 表示的字符,也为一个长度。32.C 语言中允许用外部说明来指定变量、函数和其他标识符的特征,这里所说的外部指的是_。(分数:2.50)A.冠以关键字 externB.位置在函数体外部C.作用范围是全程的D.位置在函数的外部 解析:解析 C 语言中允许用位置在函数外部的说明来指定变量、函数和其他标识符的特征。33.有以下程序: #include stdio.h int fun(int x,int y) if(x=y)return(x); else return(x+y)
43、/2); main() int a=1,b=2,c=3; printf(%d/n“,fun(2*a,fun(b,c); 程序运行后的输出结果是_。(分数:2.50)A.2 B.3C.4D.5解析:解析 fun(b,c)即 fun(2,3),2!=3,所以返回(2+3)/2=2;fun(2*a,2)即 fun(2,2),2=2,所以返回2。34.若有 char s33=“AAA“,“BBB“,“CCC“;说明语句,则与它等价的语句是_。(分数:2.50)A.char*s=“AAA“,“BBB“,“CCC“;B.char*s3=“AAA“,“BBB“,“CCC“;C.char s5=“AAA“,“
44、BBB“,“CCC“;D.char s3=“AAA“,“BBB“,“CCC“; 解析:解析 二维字符数组在定义时可省略第一维的维数,根据初始化有 3 个字符串,所以选项 D 中数组有 3 行,与已知说明语句等价。35.计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是_。(分数:2.50)A.C 语言程序仅可以编译执行 B.C 语言程序仅可以解释执行C.C 语言程序既可以编译执行又可以解释执行D.以上说法都不对解析:解析 C 语言作为计算机高级语言,用它编写的程序必须经过 C 语言的编译器编译后,转换为二进制的机器码来运行。36.若有如下说明,且 int 类型占两个字节,
45、则正确的叙述为_。 struct st int a; int b2; a;(分数:2.50)A.结构体变量 a 与结构体成员 a 同名,定义是合法的 B.程序只在执行到该结构体时才为结构体 st 分配存储单元C.程序运行时为结构体 st 分配 8 字节存储单元D.类型名 struct st 可以通过 extern 关键字提前引用解析:解析 本题主要考查结构体的用法:结构体变量 a 与结构体成员 a 同名,定义合法;在程序编译的时候结构的定义并不会使系统为该结构分配内存空间,只有在说明结构变量时才分配内存空间;int a 占 2 个字节,int b2占 4 个字节,共 6 个;类型名“struc
46、t st”不可以通过 extern 关键字提前引用。37.有以下程序: #include stdio.h int fun(int *k) int b=0; b=*k+b; return(b); main() int a10=1,2,3,4,5,6,7,8,i; for(i=2;i4;i+)printf(“%d“,fun( printf(“/n“); 程序运行后的输出结果是_。(分数:2.50)A.10 12B.8 10C.3 4 D.10 28解析:解析 b 是局部变量,因此当 i=2 时,fun 的返回值值为 3,i=3 时 fun 返回值为 438.设有一联合体变量定义如下: union data long a; float b; int c; char d; ; union data x; 执行下列语句后,正确的联合体变量 x 的值是_。 x.a=111111; x.b=2222; x.c=2.1546; x.d=“R“;(分数:2.50)A.111111B.2222C.2.1546DR 解析:解析 本题主要考查的知识点是联合体的内存使用。联合体与结构体的定义相同,其本质区别就在于内存使用方式的不同。联合体所占用的内存空间