1、二级 C 语言笔试-393 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.数据处理的最小单位是( )。A) 数据 B) 数据元素 C) 数据项 D) 数据结构(分数:1.00)A.B.C.D.2.下列叙述中正确的是( )。A) 线性表是线性结构 B) 栈与队列是非线性结构C) 线性链表是非线性结构 D) 二叉树是线性结构(分数:1.00)A.B.C.D.3.下列关于栈的叙述中正确的是( )。A) 在栈中只能插入数据 B) 在栈中只能删除数据C) 栈是先进先出的线性表 D) 栈是先进后出的线性表(分数:1.00)A.B.C.D.4.在设计程
2、序时,应采纳的原则之一是( )。A) 不限制 goto 语句的使用B) 减少或取消注解行C) 程序越短越好D) 程序结构应有助于读者理解(分数:1.00)A.B.C.D.5.以下不是面向对象思想中的主要特征的是( )。A) 多态 B) 继承 C) 封装 D) 类比性(分数:1.00)A.B.C.D.6.软件工程的出现是由于( )。A) 程序设计方法学的影响 B) 软件产业化的需要C) 软件危机的出现 D) 计算机的发展(分数:1.00)A.B.C.D.7.软件生命周期中所花费用最多的阶段是( )。A) 详细设计 B) 软件编码 C) 软件测试 D) 软件维护(分数:1.00)A.B.C.D.8
3、.数据库、数据库系统和数据库管理系统之间的关系是( )。A) 数据库包括数据库系统和数据库管理系统B) 数据库系统包括数据库和数据库管理系统C) 数据库管理系统包括数据库和数据库系统D) 三者没有明显的包含关系(分数:1.00)A.B.C.D.9.相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和( )。A) 可重用性差 B) 安全性差 C) 非持久性 D) 冗余性(分数:1.00)A.B.C.D.10.下列叙述中,正确的是( )。A) 用 E-R 图能够表示实体集间一对一的联系、一对多的联系和多对多的联系B) 用 E-R 图只能表示实体集之间一对一的联系C) 用 E-R 图只能
4、表示实体集之间一对多的联系D) 用 E-R 图表示的概念数据模型只能转换为关系数据模型(分数:1.00)A.B.C.D.11.计算机能直接执行的程序是( )。A) 源程序 B) 目标程序 C) 汇编程序 D) 可执行程序(分数:1.00)A.B.C.D.12.以下 4 个程序中,完全正确的是( )。A) #include stdio.hmain(); /*programming*/printf(“programming!/n“); B) #include stdio.hmain() /*/programming/*/printf(“programming!/n“); C) #include s
5、tdio.hmain() /*/*programming*/*/printf(“programming!/n“); D) include stdio.hmain() /*programming*/printf(“programming!/n“);(分数:1.00)A.B.C.D.13.有以下程序段:char ch; int k; ch=a; k=12; printf(“%c, %d, “, ch, ch); printf(“k=%d/n“, k); 已知字符 a 的 ASCII 码值为 97,则执行上述程序段后输出结果是( )。A) 因变量类型与格式描述符的类型不匹配,输出无定值B) 输出项与
6、格式描述符个数不符,输出为零值或不定值C) a, 97, 12k=12D) a, 97, k=12(分数:1.00)A.B.C.D.14.有定义语句:int x, y; 。若要通过 scanf(“%d, %d“, x, y); 语句使变量 x 得到数值 11,变量y 得到数值 12,下面四组输入形式中,错误的是( )。A) 11 12 B) 11, 12 C) 11, 12, D) 11,12(分数:1.00)A.B.C.D.15.当把以下四个表达式用作 if 句的控制表达式时,有一个选项与其他三个选项含义不同,这个选项是( )。A) k%2 B) k%2=1 C) (k%2) !=0 D)
7、!k%2=1(分数:1.00)A.B.C.D.16.若执行下面的程序时,从键盘输入 5 和 2,则输出结果是( )。#include stdio.hmain() int a, b, k; scan(“%d, %d“, a, b); k=a; if(ab) k=a%b; else k=b%a; printf(“%d/n“,k); A) 5 B) 3 C) 2 D) 0(分数:1.00)A.B.C.D.17.有如下程序:#include stdio.hmain() int n=9; while(n6) n-; printf(“%d“,n); 该程序的输出结果是( )。A) 987 B) 876 C
8、) 8765 D) 9876(分数:1.00)A.B.C.D.18.有以下程序:main() int k=5, n=0; doswitch(k) case 1:case 3:n+=1; k-; break; default:n=0; k-; case 2:case 4:n+=2; k-; break; printf(“%d“, n); while(k0n5); 程序运行后的输出结果是( )。A) 235 B) 0235 C) 02356 D) 2356(分数:1.00)A.B.C.D.19.以下选项中不属于字符常量的是( )。A) C B) “C“ C) /xCC D) /072(分数:1.0
9、0)A.B.C.D.20.若有说明语句:char c=/72; ,则变量 c( )。A) 包含 1 个字符 B) 包含 2 个字符C) 包含 3 个字符 D) 说明不合法,c 的值不确定(分数:1.00)A.B.C.D.21.已有定义:char c; ,程序前面已在命令行中包含 ctype.h 文件,不能用于判断 c 中的字符是否为大写字母的表达式是( )。A) isupper(C) B) A=c=ZC) A=cc=Z D) c=(z-32) (a-32) =c(分数:1.00)A.B.C.D.22.C 语言规定,在一个源程序中,main 函数的位置( )。A) 必须在最开始B) 必须在系统调
10、用的库函数的后面C) 可以任意D) 必须在最后(分数:1.00)A.B.C.D.23.若有定义:int x=0, *p=x; ,则语句 printf(“%d/n, *p); 的输出结果是( )。A) 随机值 B) 0 C) x 的地址 D) p 的地址(分数:1.00)A.B.C.D.24.设有定义:int a, *pa=a; ,以下 scanf 语句中能正确为变量 a 读入数据的是( )。A) seanf(“%d“, pa); B) seanf(“%d“, a); C) scanf(“%d“, pa); D) scanf(“%d“, *pa);(分数:1.00)A.B.C.D.25.若要求定
11、义具有 10 个 int 型元素的一维数组 a,则以下定义语句中错误的是( )。A) #define N 10int aN; B) #define n 5int a 2*n; C) int a5+5; D) int n=10, an;(分数:1.00)A.B.C.D.26.以下叙述中错误的是( )。A) 对于 double 类型数组,不可以直接用数组名对数组进行整体输入或输出B) 数组名代表的是数组所占存储区的首地址,其值不可改变C) 当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D) 可以通过赋初值的方式确定数组元素的个数(分数:1.00)A.B.C.D
12、.27.现有如下程序段:#include stdio.hmain() int k30=12, 324, 45, 6, 768, 98, 21, 34, 453, 456; int count=0, i=0; while(ki) if(ki%2=0|ki%5=0) count+; i+; printf(“%d, %d/n“, count, i); 则程序段的输出结果为( )。A) 7, 8 B) 8, 8 C) 7, 10 D) 8, 10(分数:1.00)A.B.C.D.28.以下不正确的定义语句是( )。A) double x5=2.0, 4.0, 6.0, 8.0, 10.0; B) in
13、t y5=0, 1, 3, 5, 7, 9; C) char c1=1, 2, 3, 4, 5; D) char c2=/x10, /xa, /x8;(分数:1.00)A.B.C.D.29.有以下程序:#include stdio.hmain() int a=2, 4, 6, 8, 10, y=0, x, *p; p=a1; for(x=1; x3; x+) y+=px; printf(“%d/n“, y); 程序运行后的输出结果是( )。A) 10 B) 11 C) 14 D) 15(分数:1.00)A.B.C.D.30.已有定义:char a=“xyz“, b=x, y, z; ,以下叙述
14、中正确的是( )。A) 数组 a 和 b 的长度相同 B) a 数组长度小于 b 数组长度C) a 数组长度大于 b 数组长度 D) 以上说法都不对(分数:1.00)A.B.C.D.31.有以下程序:#include stdio.hmain() char s=“ABCD“, *p; for(p=s+1; ps+4; p+) printf(“%s/n“, p); 程序运行后的输出结果是( )。A) ABCDBCDCDDB) ABCDC) BCDD) BCDCDD(分数:1.00)A.B.C.D.32.设有如下程序段:char s20=“Beijing“, *p; p=s; 执行 p=s; 语句后
15、,以下叙述正确的是( )。A) 可以用*p 表示 s0B) s 数组中元素的个数和 p 所指字符串长度相等C) s 和 p 都是指针变量D) 数组 s 中的内容和指针变量 p 中的内容相同(分数:1.00)A.B.C.D.33.以下程序的输出结果是( )。#includestdio.hint fun(int n, int *s) int f1, f2; if(n=0|n=1) *s=1; elsefun(n-1, f1); fun(n-2, f2); *s=f1+f2; void main() int x; fun(6, x); printf(“/n% d“, x); A) 7 B) 13 C
16、) 9 D) 10(分数:1.00)A.B.C.D.34.阅读下列程序,则运行结果为( )。#include stdio.hfun() static int x=5; x+; return x; main() fint i, x, for(i=0; i3; i+) x=fun(); printf(“%d/n“, x); A) 5 B) 6 C) 7 D) 8(分数:1.00)A.B.C.D.35.以下程序的运行结果是( )。#define MAX(A, B) (A) (B) ?(A):(B) #define PRINT(Y) printf(“Y=%d/t“, Y) main() int a=1
17、, b=2, c=3, d=4, t; t=MAX(a+b, c+d); PRINT(t); A) Y=3 B) 存在语法错误C) Y=7 D) Y=0(分数:1.00)A.B.C.D.36.设有如下说明:typedef struct STlong a; int b; char c2; NEW; 则下面叙述中正确的是( )。A) 以上的说明形式非法 B) ST 是一个结构体类型C) NEW 是一个结构体类型 D) NEW 是一个结构体变量(分数:1.00)A.B.C.D.37.设有以下语句:typedef struct S(int g; char h; ) T; 则下面叙述中正确的是( )。A
18、) 可用 S 定义结构体变量B) 可以用 T 定义结构体变量C) S 是 struct 类型的变量D) T 是 struct s 类型的变量(分数:1.00)A.B.C.D.38.在 16 位 IBM-PC 上使用 C 语言,若有如下定义:struct datafint i; char ch; double f:b; 则结构变量 b 占用内存的字节数是( )。A) 1 B) 2 C) 7 D) 11(分数:1.00)A.B.C.D.39.设有定义语句:char c1=92, c2=92; ,则以下表达式中值为零的是( )。A) c1c2 B) c1c2 C) c2 D) c1|c2(分数:1.
19、00)A.B.C.D.40.如果需要打开一个已经存在的非空文件“Demo”进行修改,下面选项中正确的是( )。A) fp=fopen(“Demo“, “r“); B) fp=fopen(“Demo“, “ab+“); C) fp=fopen(“Demo“, “w+“); D) fp=fopen(“Dem0“, “r+“)(分数:1.00)A.B.C.D.二、程序填空题(总题数:1,分数:18.00)下列给定程序中,函数 fun 的功能是:将形参 s 所指字符串中下标为奇数的字符取出,并按 ASCII 码大小递增排序,将排序后的字符存入形参 p 所指的字符数组中,形成一个新串。请在下划线处填入正
20、确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includestdio.hvoid fun(char*s, char *p)int i, j, n, x, t; n=0; for(i=0; si!=/0; i+)n+; for(i=1; in-2; i=i+2)/*found*/(1) ; /*found*/for(j= (2) +2; jn; j=j+2)if(stsD)t=j; if(t!; i)x=si; si=stst=x; for(i=1, j=0; in; i-i+2, j+)pj=si; /*found*
21、/pj= (3) ; main()char s80=“baawrskjghzlicda“, p50; printf(“/nThe original string is:%s/n“, s); fun(s, p); printf(“/nThe result is:%s/n“, p); (分数:18.00)填空项 1:_填空项 1:_填空项 1:_三、程序改错题(总题数:1,分数:18.00)41.下列给定程序中,函数 fun 的功能是:用下面的公式求 的近似值,直到最后一项的绝对值小于指定的数(参数 num)为止。(分数:18.00)_四、程序设计题(总题数:1,分数:24.00)42.编写函数
22、fun,其功能是:删除一个字符串中指定下标的字符。其中,a 指向原字符串,删除指定字符后的字符串存放在 b 所指的数组中,n 放指定的下标。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。试题程序:#includestdio.h#includeconio.h#define LEN 20void fun(char a, char b, int n)void main()char str1LEN, str2LEN; int n; printf(“Enter the string:/n“); gets(str1); pri
23、ntf(“Enter the position of the string deleted:“); scanf(“%d“,n); fun(str1, str2, n); printf(“The new string is:%s/n“, str2); (分数:24.00)_二级 C 语言笔试-393 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.数据处理的最小单位是( )。A) 数据 B) 数据元素 C) 数据项 D) 数据结构(分数:1.00)A.B.C. D.解析:解析 数据处理的最小单位是数据项;由若干数据项组成数据元素;数据是指能够被
24、计算机识别、存储和加工处理的信息载体;数据结构是指数据之间的相互关系和数据运算。2.下列叙述中正确的是( )。A) 线性表是线性结构 B) 栈与队列是非线性结构C) 线性链表是非线性结构 D) 二叉树是线性结构(分数:1.00)A. B.C.D.解析:解析 根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。如果一个非空的数据结构满足下列两个条件:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构,又称线性表。所以线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。3.下列关于栈的叙述中正确的是(
25、)。A) 在栈中只能插入数据 B) 在栈中只能删除数据C) 栈是先进先出的线性表 D) 栈是先进后出的线性表(分数:1.00)A.B.C.D. 解析:解析 栈是限定在一端进行插入与删除的线性表。栈是按照“先进后出”或“后进先出”的原则组织数据的,因此,栈也被称为“先进后出”表或“后进先出”表。4.在设计程序时,应采纳的原则之一是( )。A) 不限制 goto 语句的使用B) 减少或取消注解行C) 程序越短越好D) 程序结构应有助于读者理解(分数:1.00)A.B.C.D. 解析:解析 滥用 goto 语句将使程序流程无规律,可读性差,因此 A)不选;注解行有利于对程序的理解,不应减少或取消,B
26、)也不选;程序的长短要依照实际情况而论,而不是越短越好,C)也不选。5.以下不是面向对象思想中的主要特征的是( )。A) 多态 B) 继承 C) 封装 D) 类比性(分数:1.00)A.B.C.D. 解析:解析 面向对象思想中的三个主要特征是:封装性、继承性和多态性。6.软件工程的出现是由于( )。A) 程序设计方法学的影响 B) 软件产业化的需要C) 软件危机的出现 D) 计算机的发展(分数:1.00)A.B.C. D.解析:解析 软件工程概念的出现源自软件危机。为了消除软件危机,通过认真研究解决软件危机的方法,认识到软件工程是使计算机软件走向工程科学的途径,逐步形成了软件工程的概念。7.软
27、件生命周期中所花费用最多的阶段是( )。A) 详细设计 B) 软件编码 C) 软件测试 D) 软件维护(分数:1.00)A.B.C.D. 解析:解析 软件生命周期分为软件定义、软件开发及软件运行维护 3 个阶段。本题中,详细设计、软件编码和软件测试都属于软件开发阶段;维护是软件生命周期的最后一个阶段,也是持续时间最长、花费代价最大的一个阶段,软件工程学的一个目的就是提高软件的可维护性,降低维护的代价。8.数据库、数据库系统和数据库管理系统之间的关系是( )。A) 数据库包括数据库系统和数据库管理系统B) 数据库系统包括数据库和数据库管理系统C) 数据库管理系统包括数据库和数据库系统D) 三者没
28、有明显的包含关系(分数:1.00)A.B. C.D.解析:解析 数据库系统(Database System, DBS),包括数据库(Database, DB)和数据库管理系统(Database Management System, DBMS)。9.相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和( )。A) 可重用性差 B) 安全性差 C) 非持久性 D) 冗余性(分数:1.00)A.B.C.D. 解析:解析 文件系统所管理的数据文件基本上是分散的、相互独立的,因此相对于数据库系统,文件系统数据处理存在 3 个缺点,即数据冗余大、数据的不一致性、程序与数据的相互依赖(简称为数据
29、依赖)。10.下列叙述中,正确的是( )。A) 用 E-R 图能够表示实体集间一对一的联系、一对多的联系和多对多的联系B) 用 E-R 图只能表示实体集之间一对一的联系C) 用 E-R 图只能表示实体集之间一对多的联系D) 用 E-R 图表示的概念数据模型只能转换为关系数据模型(分数:1.00)A. B.C.D.解析:解析 两个实体之间的联系实际上是实体集间的函数关系,这种函数关系可以有下面几种,即一对一的联系、一对多(或多对一)的联系和多对多的联系;概念模型便于向各种模型转换。由于概念模型不依赖于具体的数据库管理系统,因此,容易向关系模型、网状模型和层次模型等各种模型转换。11.计算机能直接
30、执行的程序是( )。A) 源程序 B) 目标程序 C) 汇编程序 D) 可执行程序(分数:1.00)A.B.C.D. 解析:解析 本题考查的是 C 程序的基本概念。C 语言是一种高级语言,C 语言源程序经过 C 语言编译程序编译之后,生成一个后缀为obj 的二进制文件(称为目标程序),最后还要由称为“连接程序”(Link)的软件,把此obj 文件与 C 语言提供的各种库函数连接在一起,生成一个后缀.exe 的可执行程序。显然C 语言源程序不能立即执行,故选项 A)错误。根据以上定义,选项 B)和选项 C)错误。故本题应该选择 D)。12.以下 4 个程序中,完全正确的是( )。A) #incl
31、ude 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() /*programming*/printf(“programming!/n“);(分数:1.00)A.B. C.D.解析:解析 选项 A)main()
32、; 的分号是错误的,不能有分号;选项 C)的注释语句多了两个*/号;选项 D)include 前面没有#。13.有以下程序段:char ch; int k; ch=a; k=12; printf(“%c, %d, “, ch, ch); printf(“k=%d/n“, k); 已知字符 a 的 ASCII 码值为 97,则执行上述程序段后输出结果是( )。A) 因变量类型与格式描述符的类型不匹配,输出无定值B) 输出项与格式描述符个数不符,输出为零值或不定值C) a, 97, 12k=12D) a, 97, k=12(分数:1.00)A.B.C.D. 解析:解析 考查 printf 函数的相
33、关知识。输出格式控制符%e 表示将变量以字符的形式输出;输出格式控制符%d 表示将变量以带符号的十进制整型数输出,所以第一个输出语句输出的结果为 a, 97; 第二个输出语句输出的结果为 k=12。所以选项 D)为正确答案。14.有定义语句:int x, y; 。若要通过 scanf(“%d, %d“, x, y); 语句使变量 x 得到数值 11,变量y 得到数值 12,下面四组输入形式中,错误的是( )。A) 11 12 B) 11, 12 C) 11, 12, D) 11,12(分数:1.00)A. B.C.D.解析:解析 本题的考查点是格式输入函数。格式输入函数的一般形式:scanf(
34、格式控制,地址表列)。需要注意的是:如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符。所以输入的两个数字之间的逗号是不可少的。故本题答案为 A)。15.当把以下四个表达式用作 if 句的控制表达式时,有一个选项与其他三个选项含义不同,这个选项是( )。A) k%2 B) k%2=1 C) (k%2) !=0 D) !k%2=1(分数:1.00)A.B.C.D. 解析:解析 本题考查的是判断奇偶数。选项 A)、B)和 C)中都是当 k 是奇数时表达式的值为 1,否则为0。而选项 D)中因为逻辑非!运算符的优先级最高,所以当 k 为 0 的时候!k
35、的值为 1,整个表达式的值也就是 1,而当 k 为非 0 的时候!k 的值为 0,整个表达式的值为 o。所以本题应该选择 D)。16.若执行下面的程序时,从键盘输入 5 和 2,则输出结果是( )。#include stdio.hmain() int a, b, k; scan(“%d, %d“, a, b); k=a; if(ab) k=a%b; else k=b%a; printf(“%d/n“,k); A) 5 B) 3 C) 2 D) 0(分数:1.00)A.B.C. D.解析:解析 本题考查简单的 ifelse 语句。先执行条件 if(ab),显然不成立,再执行 else 语句。17
36、.有如下程序:#include stdio.hmain() int n=9; while(n6) n-; printf(“%d“,n); 该程序的输出结果是( )。A) 987 B) 876 C) 8765 D) 9876(分数:1.00)A.B. C.D.解析:解析 该题目应该根据循环体第一次和最后一次执行时的输出结果来决定哪一项是正确的。第一次进入循环时,n 的值是 9,循环体内,先经过 n-运算,n 的值变为 8,所以第一次的输出值是 8,由此可以排除选项 A)和 D)。由循环条件 n6 可以知道,最后一次循环开始时,n 的值应该为 7,所以最后一次执行循环时,输出为 6,由此可以排除选
37、项 C)。18.有以下程序:main() int k=5, n=0; doswitch(k) case 1:case 3:n+=1; k-; break; default:n=0; k-; case 2:case 4:n+=2; k-; break; printf(“%d“, n); while(k0n5); 程序运行后的输出结果是( )。A) 235 B) 0235 C) 02356 D) 2356(分数:1.00)A. B.C.D.解析:解析 因为变量的初始值分别为“k=5, n=0”,所以程序第一次进入循环时,执行 default 语句,这时 k=4,执行“case 4”这个分支,结果是
38、“n=2, k=3”,打印出 2;程序然后进行第二次循环,这时“n=2, k=3”,执行“case 3”这个分支,结果是“n=3, k=2”,打印出 3;程序进行第三次循环,这时“n=3, k=2”,执行“case 2:case 4:”这两个分支,结果是“n=5, k=1”,打印出 5,这时因为 n=5 不满足 n5 的循环条件,因此退出循环,程序运行结束,故输出结果为 235。19.以下选项中不属于字符常量的是( )。A) C B) “C“ C) /xCC D) /072(分数:1.00)A.B. C.D.解析:解析 本题主要考查的是字符常量。字符常量是用单引号括起来的一个字符,而以双引号括
39、起来的任意多个字符是字符串常量,所以本题中 B)不属于字符常量。注意,选项 C)和 D)虽然用单引号括起来的并不止一个字符,但它们都是以“/”开头的,都是代表一个字符的转义字符。20.若有说明语句:char c=/72; ,则变量 c( )。A) 包含 1 个字符 B) 包含 2 个字符C) 包含 3 个字符 D) 说明不合法,c 的值不确定(分数:1.00)A. B.C.D.解析:解析 C 语言的字符型常量中,允许用一种特殊形式的字符常量,就是以一个“/”开头的字符。其中,“/ddd”表示用 ASCII 码(八进制数)表示一个字符,本题中的 char c=/72即表示占一个字符的变量 c 的
40、 ASCII 码值。21.已有定义:char c; ,程序前面已在命令行中包含 ctype.h 文件,不能用于判断 c 中的字符是否为大写字母的表达式是( )。A) isupper(C) B) A=c=ZC) A=cc=Z D) c=(z-32) (a-32) =c(分数:1.00)A.B. C.D.解析:解析 在本题中,选项 B)实际是先计算关系表达式“A=c”的值是 0 还是 1,再比较该值与字符Z之间的大小关系,显然不能实现题目所要求的功能,而选项 A)、C)、D)都可以。22.C 语言规定,在一个源程序中,main 函数的位置( )。A) 必须在最开始B) 必须在系统调用的库函数的后面
41、C) 可以任意D) 必须在最后(分数:1.00)A.B.C. D.解析:解析 不论 main 函数在整个过程中的位置如何,一个 C 程序总是从 mam 函数开始执行的。23.若有定义:int x=0, *p=x; ,则语句 printf(“%d/n, *p); 的输出结果是( )。A) 随机值 B) 0 C) x 的地址 D) p 的地址(分数:1.00)A.B. C.D.解析:解析 本题考查的是指针的运用。语句 int x=0, *p=x; 定义了一个 int 型变量 x 并初始化为0,同时还定义了一个 int 型指针 p 指向变量 x。语句 printf(“%d“, * p); 是按十进制
42、整数格式输出指针p 所指向的内容,即 x 的值 0。故本题应该选择 B)。24.设有定义:int a, *pa=a; ,以下 scanf 语句中能正确为变量 a 读入数据的是( )。A) seanf(“%d“, pa); B) seanf(“%d“, a); C) scanf(“%d“, pa); D) scanf(“%d“, *pa);(分数:1.00)A. B.C.D.解析:解析 本题考核的知识点是 scanf()函数和指针类型变量的简单应用。scanf()函数的功能是进行输入数据,它是按格式参数的要求从终端上把数据传送到地址参数所指定的内存空间中,C 语言允许程序员间接地使用内存地址,这
43、个地址是通过对变量名“求地址”运算得到的,求地址的运算符是,得到的地址是一种符号地址。本题中定义了整型变量 a 和一个指向整型数据的指针变量 pa,并定义 pa 是一个存放 a 的地址的变量。选项 B)中应该将 a 改为a,故选项 B)不正确;选项 C)应该将pa 改为 pa,因为 pa已经表示存放 a 的地址,故选项 C)不正确;选项 D)中*pa=a,而不是表示 a 的地址,所以选项 D)不正确。25.若要求定义具有 10 个 int 型元素的一维数组 a,则以下定义语句中错误的是( )。A) #define N 10int aN; B) #define n 5int a 2*n; C)
44、int a5+5; D) int n=10, an;(分数:1.00)A.B.C.D. 解析:解析 在选项 D)中,n 是一个整型的变量。C 语言规定,在一维数组的定义中,其下标只能是常量表达式,不能包含变量。26.以下叙述中错误的是( )。A) 对于 double 类型数组,不可以直接用数组名对数组进行整体输入或输出B) 数组名代表的是数组所占存储区的首地址,其值不可改变C) 当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D) 可以通过赋初值的方式确定数组元素的个数(分数:1.00)A.B.C. D.解析:解析 本题考查的是数组的基本概念。在 C 语言中
45、,除字符数组外,一个数组不能通过数组名对数组进行整体引用,因此选项 A)是对的。数组名中存放的是一个地址常量,它代表整个数组的首地址,因此选项 B)是对的。C 语言程序在运行过程中,系统不自动检验数组元素的下标是否越界,因此选项 C)是错误的。C 语言规定可以通过赋初值来定义数组的大小,这时数组说明符的一对方括号中可以不指定数组的大小,因此选项 D)也是正确的。所以,4 个选项中选项 C)符合题意。27.现有如下程序段:#include stdio.hmain() int k30=12, 324, 45, 6, 768, 98, 21, 34, 453, 456; int count=0, i
46、=0; while(ki) if(ki%2=0|ki%5=0) count+; i+; printf(“%d, %d/n“, count, i); 则程序段的输出结果为( )。A) 7, 8 B) 8, 8 C) 7, 10 D) 8, 10(分数:1.00)A.B.C.D. 解析:解析 在 C 语言中,定义一维数组的语句一般形式如下:类型名数组名常量表达式; 一维数组的引用形式为:数组名下标表达式count 表示能被 2 整除或被 5 整除的个数,i 则计算有多少个数组元素。28.以下不正确的定义语句是( )。A) double x5=2.0, 4.0, 6.0, 8.0, 10.0; B)
47、 int y5=0, 1, 3, 5, 7, 9; C) char c1=1, 2, 3, 4, 5; D) char c2=/x10, /xa, /x8;(分数:1.00)A.B. C.D.解析:解析 在一维数组中要注意的是作为下标表达式的常量表达式的值必须大于等于 0,选项 B)中定义有 5 个元素,但赋值时有 6 个元素,所以是错误的。29.有以下程序:#include stdio.hmain() int a=2, 4, 6, 8, 10, y=0, x, *p; p=a1; for(x=1; x3; x+) y+=px; printf(“%d/n“, y); 程序运行后的输出结果是( )。A) 10 B) 11 C) 14 D) 15(分数:1.00)A.B.C. D.解析:解析 本题考查的是指针的运用。题目首先申请了一个整型数组 a,并让一个指针变量 p 指向数组的元素 a1。然后使用一个 for 循环,循