1、二级 C 语言笔试-419 及答案解析(总分:96.50,做题时间:90 分钟)一、选择题(总题数:40,分数:63.00)1.下列关于线性链表的描述中,正确的是( )。、只含有一个指针域来存放下一个元素地址、指针域中的指针用于指向该结点的前一个或后一个结点(即前件或后件)、结点由两部分组成:数据域和指针域。A) 仅、 B) 仅、 C) 仅、 D) 全部(分数:2.00)A.B.C.D.2.在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是_。A) 概要设计 B) 详细设计 C) 可行性分析 D) 需求分析(分数:2.00)A.B.C.D.3.相对于数据库系统,文件系统
2、的主要缺陷有数据关联性差、数据不一致性和( )。A可重用性差 B安全性差C非持久性 D冗余性(分数:1.00)A.B.C.D.4.下列叙述中正确的是( )。A) 在面向对象的程序设计中,各个对象之间具有密切的关系B) 在面向对象的程序设计中,各个对象都是公用的C) 在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小D) 上述 3 种说法都不对(分数:2.00)A.B.C.D.5.下列所述中,是软件调试技术的是( )。A) 错误推断 B) 集成测试 C) 回溯法 D) 边界值分析(分数:2.00)A.B.C.D.6.下列对于软件测试的描述中正确的是( )。A) 软件测试的目的是证明程序是
3、否正确B) 软件测试的目的是使程序运行结果正确C) 软件测试的目的是尽可能多地发现程序中的错误D) 软件测试的目的是使程序符合结构化原则(分数:2.00)A.B.C.D.7.在数据管理技术发展的三个阶段中,数据共享最好的是_。A) 人工管理阶段 B) 文件系统阶段C) 数据库系统阶段 D) 三个阶段相同(分数:2.00)A.B.C.D.8.下列说法不正确的是( )。A) C 程序是以函数为基本单位的,整个程序由函数组成B) C 语言程序的一条语句可以写在不同的行上C) C 程序的注释行对程序的运行功能不起任何作用,所以注释应该尽可能少写D) C 程序的每个语句都以分号结束(分数:2.00)A.
4、B.C.D.9.C 语言的基本单位是( )。A) 函数 B) 过程 C) 子程序 D) 子函数(分数:2.00)A.B.C.D.10.下列关于单目运算符、的叙述中正确的是 _。A) 它们的运算对象可以是任何变量和常量B) 它们的运算对象可以是 char 型变量和 int 型变量,但不能是 float 型变量C) 它们的运算对象可以是 int 型变量,但不能是 double 型变量和 float 型变量D) 它们的运算对象可以是 char 型变量、int 型变量和 float 型变量(分数:2.00)A.B.C.D.11.以下选项中可作为 C 语言合法常量的是A) -80 B) -080 C)
5、-8e1.0 D) -80.0e(分数:1.00)A.B.C.D.12.表达式 3.6-5/2+1.2+5%2 的值是_。(A) 4.3(B) 4.8(C) 3.3(D) 3.8(分数:1.00)A.B.C.D.13.下列叙述中正确的是( )。A) 在赋值表达式中,赋值号的左边既可以是变量,也可以是任意表达式B) 实型变量中允许存放整型数C) 若 a 和 b 类型相同,在执行了赋值 ab 后,b 中的值将放入 a 中,但 b 中的值不变D) 在 c 程序中,求余运算符“%”两边的类型相同时才能进行运算(分数:1.00)A.B.C.D.14.两次运行下列的程序,如果从键盘上分别输入 3 和 1,
6、则输出结果是( )。main()int x;scanf(“%d“,if(x+2)printf(“%d“,x);else printf(“%d/n“,x-);A) 4 和 2 B) 4 和 1 C) 4 和 0 D) 3 和 1(分数:1.00)A.B.C.D.15.有以下程序main()int k=5,n=0;doswitch(k)case1: case3: n+=1;k-; break;default: n=0;k-;case2:case4: n+=2;k-;break;printf(“%d“,n);while(k0n5);程序运行后的输出结果是_。(A) 235(B) 0235(C) 02
7、356(D) 2356(分数:1.00)A.B.C.D.16.有如下程序:#include stdiohmain()float x=2.0,y;if(x0.0) y=0.0;else if(x10.0) y=1.0/x;else y=1.0;printf(“%f/n“,y);该程序的输出结果是( )。A) 0.000000 B) 0.250000 C) 0.500000 D) 1.000000(分数:1.00)A.B.C.D.17.以下不构成无限循环的语句或者语句组是( )。An=0;do+n;while(n=0);Bn=0;while(1)n+;Cn=10:while(n);n-;Dfor(
8、n=0,i=1;i+)n+=i;(分数:1.00)A.B.C.D.18.若有定义:“int a23;”则对 a 数组的第 i 行第 j 列元素的正确引用为( )。A*(*(a+i)+j) B(a+i)jC*(a+i+j) D*(a+i)+j(分数:1.00)A.B.C.D.19.下面程序的输出是( )。main()int t=1;fun(fun(t);fun(int h)static int a3=1,2,3;int k;for(k=0;k3;k+)ak+=ak-h;for(k=0;k3;k+)printf(“%d“,ak);printf(“/n“);return(ah);A1,2,3,1,5
9、,9,B1,3,5,1,3,5,C1,3,5,0,4,8,D1,3,5,-1,3,7,(分数:1.00)A.B.C.D.20.以下叙述中错误的是_。A) 改变函数形参的值,不会改变对应实参的值B) 函数可以返回地址值C) 可以给指针变量赋一个整数作为地址值D) 当在函数的开头包括头文件 stdio.h 时,可以给指针变量赋 NULL(分数:2.00)A.B.C.D.21.下列选项中,能正确定义数组的语句是A) intnum02008; B) intnum;C) int N=2008; D) #defineN 2008int numN; int numN;A.B.C.D.22.以下函数 find
10、max 拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能。#define MIN -2147483647int findmax(int x,int n)int i,max;for(i=0;in;i+)max=MIN;if(maxxi)max=xi;return max;造成错误的原因是A) 定义语句 int i,max;中 max 未赋初值B) 赋值语句 max=MIN;中,不应给 max 赋 MIN 值C) 语句 if(maxxi)max=xi;中判断条件设置错误D) 赋值语句 max=MIN;放错了位置(分数:2.00)A.B.C.D.23.已有定义:char a
11、=“xyz“,b=x,y,z;,以下叙述中正确的是_。A) 数组 a 和 b 的长度相同 B) a 数组长度小于 b 数组长度C) a 数组长度大于 b 数组长度 D) 上述说法都不对(分数:1.00)A.B.C.D.24.下列定义数组的语句,正确的是( )。 A) int N=10;int xN;B) #define N 10 int xN; C) int x010; D) int x;(分数:2.00)A.B.C.D.25.下列叙述中,错误的是( )。A) 在同一 C 程序文件中,不同函数中可以使用名字相同的变量B) 在 main()函数体内定义的变量是全局变量C) 形参是局部变量,函数调
12、用完成即失去意义D) 若同一文件中全局和局部变量同名,则全局变量在局部变量作用范围内不起作用(分数:1.00)A.B.C.D.26.变量 m 的值为 8,m 的地址为 1010,若欲使 p 为指向 m 的指针变量,则下列赋值正确的是 ( )。A) p=(int*)malloc(sizeof(int);*p=n; return *p;int a;a=fun(10); printf(“%d/n“,a+fun(10);程序的运行结果是_。A) 0 B) 10 C) 20 D) 出错(分数:2.00)A.B.C.D.30.下列选项中,能够满足“若字符串 s1 等于字符串 s2,则执行 ST”要求的是(
13、 )。 A) if(strcmp(s2,s1)=0)ST; B) if(s1=s2)ST; C) if(strcpy(s1,s2)=1)ST; D) if(s1-s2=0)ST;(分数:2.00)A.B.C.D.31.若二维数组 a 有 m 列,则在 aij前的元素个数为( )。A) i*m+j-1 B) i*m+j C) j*m+1 D) i*m+i+1(分数:2.00)A.B.C.D.32.对于下列字符串,说明表达式 strlen(s)值的是( )。char s10=a,/n,a,b,/t,c;A) 10 B) 1C) 6 D) 7(分数:1.00)A.B.C.D.33.若有定义 int(
14、*pt)3;,则下列说法不正确的是( )。A) int(*pt)3是一个数组指针B) 指针 pt 指向一个有 3 个整型变量的数组C) 定义了一个名为*pt、具有三个元素的整型数组D) 定义了一个名为 pt 的指针变量,它可以指向每行有三个整数元素的二维数组(分数:2.00)A.B.C.D.34.函数调用 strcat(strcpy(str1,str2),str3)的功能是( )。A) 将字符串 str1 复制到字符串 str2 中后再连接到字符串 str3 之后B) 将字符串 str1 连接到字符串 str2 之后再复制到字符串 str3 之后C) 将字符串 str2 复制到字符串 str1
15、 后再将字符串 str3 连接到字符串 str1 之后D) 将字符串 str2 连接到字符串 str1 之后再将字符串 str1 复制到字符串 str3 中(分数:2.00)A.B.C.D.35.以下叙述中正确的是_。(A) 预处理命令行必须位于源文件的开头(B) 在源文件的一行上可以有多条预处理命令(C) 宏名必须用大写字母表示(D) 宏替换不占用程序的运行时间(分数:2.00)A.B.C.D.36.若已定义:int a9,*p=a;并在以后的语句中未改变 p 的值,下列选项中不能表示 a1地址的表达式是( )。A) p+1 B) a+1 C) a+ D) +p(分数:1.00)A.B.C.
16、D.37.下列程序的运行结果为( )。#define MAX(x,y)(x)(y)?(x):(y)main()int a=2,b=3,c=1,d=3,t;printf(“%d/n“,(MAX(a+b,c+d)*100);A) 500 B) 5 C) 4 D) 400(分数:2.00)A.B.C.D.38.下列程序中 c 的二进制值是( )。char a=2,b=4,c;c=ab2:A) 00000011 B) 00010100 C) 00011100 D) 00011000(分数:2.00)A.B.C.D.39.读取二进制文件的函数调用形式为:fread(buffer, size, count
17、, pf);,其中 buffer 代表的是_。A) 一个文件指针,指向待读取的文件B) 一个整型变量,代表待读取的数据的字节数C) 一个内存块的首地址,代表读入数据存放的地址D) 一个内存块的字节数(分数:2.00)A.B.C.D.40.有以下程序:#include stdio.hint f1 (int x,int y) return x y? x :y; int f2 (im x,int y) return x y? y: x; main( )int a=4,b=3,c=5,d=2,e,f,g;e=f2(f1(a,b),f1(c,d); f=f1(f2(a,b),f2(e,d); g=a+b
18、+e+d-e-f;printf( “% d,% d,% d /n“ ,e,f,g);程序运行后的输出结果是( )。A) 4,3,7 B) 3,4,7 C) 5,2,7 D) 2,5,7(分数:1.00)A.B.C.D.二、填空题(总题数:15,分数:33.50)41.在算法的 4 个特性中,算法必须能在执行有限个步骤之后终止指的是算法的 1 特性。(分数:2.00)填空项 1:_42.线性表的存储结构主要分为顺序存储结构和链式存储结构,队列是一种特殊的线性表,循环队列是队列的 1 存储结构。(分数:2.00)填空项 1:_43.数据库系统的主要特点为数据集成性、数据的高和低冗余性、数据独立性和
19、数据统一管理和控制。(分数:2.00)填空项 1:_44.一个关系表的行称为 1。(分数:2.00)填空项 1:_45.下列表达式用于判断 y 是否为闰年。闰年的判断条件是:年号能被 4 整除但不能被 100 整除或年号能被 400 整除,请填空 1。(分数:4.00)填空项 1:_46.若有定义:int a=10,b=9,c=8;接着顺序执行下列语句后,变量 b 中的值是_。c=(a-=(b-5);c=(a%11)+(b=3);(分数:4.00)填空项 1:_47.与表达式 a+=b 等价的另一书写形式是 1。(分数:1.50)填空项 1:_48.以下主程序运行后的输出结果是U /U。mai
20、n()int i, m=0, n=0, k=0;for(i=9; i=ii; i+)switch(i/10)case 0:m+; n+; break;case 10:n+; break;default:k+; n+;printf(“% d % d % d/n“, m, n, k);(分数:2.00)填空项 1:_49.在循环中,continue 语句与 break 语句的区别是: 1 语句只是结束本次循环,然后进行循环的条件判定。(分数:2.00)填空项 1:_50.以下程序的定义语句中,x1的初值是U /U,程序运行后输出的内容是U /U。#include stdio.hmain()int
21、x=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,161,*p4,i;for(i=0;i4;i+)piint*p1=*(p=printf(“%d/n“,c);(分数:2.00)填空项 1:_55.以下程序段的输出结果是_。int i=9;printf(“%0/n“,i);(分数:2.00)填空项 1:_二级 C 语言笔试-419 答案解析(总分:96.50,做题时间:90 分钟)一、选择题(总题数:40,分数:63.00)1.下列关于线性链表的描述中,正确的是( )。、只含有一个指针域来存放下一个元素地址、指针域中的指针用于指向该结点的前一个或后一个结点(即前件或后件
22、)、结点由两部分组成:数据域和指针域。A) 仅、 B) 仅、 C) 仅、 D) 全部(分数:2.00)A.B.C.D. 解析:解析 在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。2.在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是_。A) 概要设计 B) 详细设计 C) 可行性分析 D) 需求分析(分数:2.00)A.B.C.D. 解析:评析 需求分析是
23、对待开发软件提出的需求进行分析并给出详细定义,即准确地确定软件系统的功能。编写软件规格说明书及初步的用户手册,提交评审。3.相对于数据库系统,文件系统的主要缺陷有数据关联性差、数据不一致性和( )。A可重用性差 B安全性差C非持久性 D冗余性(分数:1.00)A.B.C.D. 解析:解析 文件系统所管理的数据文件基本上是分散、相互独立的。相对于数据库系统,以此为基础的数据处理存在 3 个缺点:数据冗余大、数据的不一致性、程序与数据的依赖性强。4.下列叙述中正确的是( )。A) 在面向对象的程序设计中,各个对象之间具有密切的关系B) 在面向对象的程序设计中,各个对象都是公用的C) 在面向对象的程
24、序设计中,各个对象之间相对独立,相互依赖性小D) 上述 3 种说法都不对(分数:2.00)A.B.C. D.解析:解析 面向对象的程序设计是用对象模拟问题领域中的实体,各对象之间相对独立,相互依赖性小,通过消息来实现对象之间的相互联系。5.下列所述中,是软件调试技术的是( )。A) 错误推断 B) 集成测试 C) 回溯法 D) 边界值分析(分数:2.00)A.B.C. D.解析:解析 软件调试技术包括强行排错法、回溯法和原因排除法。边界值分析、错误推断都是黑盒测试的方法。6.下列对于软件测试的描述中正确的是( )。A) 软件测试的目的是证明程序是否正确B) 软件测试的目的是使程序运行结果正确C
25、) 软件测试的目的是尽可能多地发现程序中的错误D) 软件测试的目的是使程序符合结构化原则(分数:2.00)A.B.C. D.解析:解析 软件测试是为了尽可能多地发现程序中的错误,尤其是发现至今尚未发现的错误。7.在数据管理技术发展的三个阶段中,数据共享最好的是_。A) 人工管理阶段 B) 文件系统阶段C) 数据库系统阶段 D) 三个阶段相同(分数:2.00)A.B.C. D.解析:知识点 数据库管理技术的发展特点评析 数据库管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。人工管理阶段的特点:数据不保存、数据不独立、数据不能共享、数据无结构,没有专门的数据管理软件。文件
26、系统阶段的特点:数据可以长期保存,有专门的数据管理软件文件系统。但是数据独立性低,共享性差、冗余度大,数据记录内有结构,整体无结构。数据库系统阶段的特点:数据结构化,数据独立性高,数据共享性高,冗余度小,易于扩充,数据库管理系统提供统一的数控制功能,包括数据安全性、完整性、并发控制和数据恢复功能。8.下列说法不正确的是( )。A) C 程序是以函数为基本单位的,整个程序由函数组成B) C 语言程序的一条语句可以写在不同的行上C) C 程序的注释行对程序的运行功能不起任何作用,所以注释应该尽可能少写D) C 程序的每个语句都以分号结束(分数:2.00)A.B.C. D.解析:解析 本题涉及 C
27、语言基本的 3 个知识点:C 语言的源程序是由函数构成的,函数是其基本单位,每一个函数完成相对独立的功能,其中只能包括一个主函数;C 语言规定每个语句以分号结束,其书写格式是自由的,一条语句可以写在不同的行上,或者一行也可以写多条语句;注释行虽然对程序的运行不起作用,但是它可以方便程序员阅读,提高程序的可读性和可移植性,所以书写注释行还是很有必要的。9.C 语言的基本单位是( )。A) 函数 B) 过程 C) 子程序 D) 子函数(分数:2.00)A. B.C.D.解析:解析 C 语言是函数式的语言,它的基本组成单位是函数,在 C 语言中任何程序都是由一个或者多个函数组成的。10.下列关于单目
28、运算符、的叙述中正确的是 _。A) 它们的运算对象可以是任何变量和常量B) 它们的运算对象可以是 char 型变量和 int 型变量,但不能是 float 型变量C) 它们的运算对象可以是 int 型变量,但不能是 double 型变量和 float 型变量D) 它们的运算对象可以是 char 型变量、int 型变量和 float 型变量(分数:2.00)A.B.C.D. 解析:解析 本题考查+与-运算符的问题。自增运算符+与自减运算符-的运算对象只能是变量,不能是表达式或常量,变量的数据类型可以是 int、char、float 和 double 型,其结果是将变量的值加 1 或减 1。11.
29、以下选项中可作为 C 语言合法常量的是A) -80 B) -080 C) -8e1.0 D) -80.0e(分数:1.00)A. B.C.D.解析:解析 选项 B)中,以 0 开头表示是一个八进制数,而八进制数的取值范围是 07,所以-080 是不合法的;选项 C)和 D)中,e 后面的指数必须是整数,所以也不合法。12.表达式 3.6-5/2+1.2+5%2 的值是_。(A) 4.3(B) 4.8(C) 3.3(D) 3.8(分数:1.00)A.B.C.D. 解析:13.下列叙述中正确的是( )。A) 在赋值表达式中,赋值号的左边既可以是变量,也可以是任意表达式B) 实型变量中允许存放整型数
30、C) 若 a 和 b 类型相同,在执行了赋值 ab 后,b 中的值将放入 a 中,但 b 中的值不变D) 在 c 程序中,求余运算符“%”两边的类型相同时才能进行运算(分数:1.00)A.B. C.D.解析:解析 选项 A),在赋值表达式中,赋值号的左边只能是变量或者是代表某个存储单元的表达式,不能是任意表达式;在判断选项 B)时首先应该建立这样的概念,整型变量中只能存放整型数,实型变量中能存放实型数,也能存放整型数:选项 C),执行表达式 ab 后,将把变量 b 存储单元中的值赋给变量a,从而覆盖 a 中原有的值,但 b 中原有的值并不改变;选项 D),在 C 程序中,求余运算符“%”两边的
31、类型均为整型数据。14.两次运行下列的程序,如果从键盘上分别输入 3 和 1,则输出结果是( )。main()int x;scanf(“%d“,if(x+2)printf(“%d“,x);else printf(“%d/n“,x-);A) 4 和 2 B) 4 和 1 C) 4 和 0 D) 3 和 1(分数:1.00)A. B.C.D.解析:解析 本题考查 if else 语句。首先 scanf 函数通过键盘读入 x 的值。当 x=3 时,第一个 if 语句,先判断条件,取 x 的值 3 和 2 比较,然后将 x 的值加 1,发现条件成立,执行下列的 printf 语句,输出x 的值 4。当
32、 x=1 时,第一个 if 语句,先判断条件,取 x 的值 1 和 2 比较,然后将 x 的值加 1(x 的值变为2),发现条件不成立,执行下列的 else 语句,先输出 x 的值 2,再将 x 的值减 1。15.有以下程序main()int k=5,n=0;doswitch(k)case1: case3: n+=1;k-; break;default: n=0;k-;case2:case4: n+=2;k-;break;printf(“%d“,n);while(k0n5);程序运行后的输出结果是_。(A) 235(B) 0235(C) 02356(D) 2356(分数:1.00)A. B.C
33、.D.解析:16.有如下程序:#include stdiohmain()float x=2.0,y;if(x0.0) y=0.0;else if(x10.0) y=1.0/x;else y=1.0;printf(“%f/n“,y);该程序的输出结果是( )。A) 0.000000 B) 0.250000 C) 0.500000 D) 1.000000(分数:1.00)A.B.C.D. 解析:解析 本题中,x=2.0,因此执行 else y=1.0,并且以“%f”输出。17.以下不构成无限循环的语句或者语句组是( )。An=0;do+n;while(n=0);Bn=0;while(1)n+;Cn
34、=10:while(n);n-;Dfor(n=0,i=1;i+)n+=i;(分数:1.00)A. B.C.D.解析:解析 B 选项中 while(1)永远为真,所以进入死循环,选项 C 中等价于 while(n=10)也将进入无限循环,选项 D 中 for 循环没有循环限定条件,也将进入无限循环。18.若有定义:“int a23;”则对 a 数组的第 i 行第 j 列元素的正确引用为( )。A*(*(a+i)+j) B(a+i)jC*(a+i+j) D*(a+i)+j(分数:1.00)A. B.C.D.解析:解析 通过地址来引用数组元素的方法有下列 5 种:(1)aij;(2)*(ai+j);
35、(3)*(*(a+j)+j);(4)*(aij);(5)(,以下叙述中正确的是_。A) 数组 a 和 b 的长度相同 B) a 数组长度小于 b 数组长度C) a 数组长度大于 b 数组长度 D) 上述说法都不对(分数:1.00)A.B.C. D.解析:解析 本题考查字符型一维数组的初始化。字符型一维数组在定义并初始化时,可以使用初始化列表或者字符串常量。因为字符串常量会自动在结尾添加/0字符作为字符串结束标志,所以用字符串常量的初始化列表项个数是字符串的长度加 1。题中的 chat a=“xyz“可以改写为 char a=x,y,z,/0)所以 a 数组的长度大于 b 数组的长度,选项 C
36、正确。24.下列定义数组的语句,正确的是( )。 A) int N=10;int xN;B) #define N 10 int xN; C) int x010; D) int x;(分数:2.00)A.B. C.D.解析:解析 数组说明的一般形式为:类型说明符数组名常量表达式;其中类型说明符可以是任一种基本数据类型或构造数据类型,数组名是定义的数组标识符。常量表达式表示数据元素的个数,也就是数组的长度,必须是整型常量。25.下列叙述中,错误的是( )。A) 在同一 C 程序文件中,不同函数中可以使用名字相同的变量B) 在 main()函数体内定义的变量是全局变量C) 形参是局部变量,函数调用完
37、成即失去意义D) 若同一文件中全局和局部变量同名,则全局变量在局部变量作用范围内不起作用(分数:1.00)A.B. C.D.解析:解析本题考查函数调用时变量的作用域。形参是局部变量,函数调用完就失去意义了,所以在同一个 C 程序文件中,不同的函数体中可以使用名字相同的局部变量。知识拓展在函数之外定义的变量称为外部变量,外部变量是全周变量。全局变量可以为本文件中其他函数所共用。它的有效范围为:从定义变量的位置开始到本源文件结束。26.变量 m 的值为 8,m 的地址为 1010,若欲使 p 为指向 m 的指针变量,则下列赋值正确的是 ( )。A) p=(int*)malloc(sizeof(in
38、t);*p=n; return *p;int a;a=fun(10); printf(“%d/n“,a+fun(10);程序的运行结果是_。A) 0 B) 10 C) 20 D) 出错(分数:2.00)A.B.C. D.解析:评析 malloc(sizeof(int)的作用是开辟一个长度为 sizeof(int)存储空间,并通过强制类型转换(int*)将此存储空间的地址赋给了个整型的指针变量 p。然后执行语句“*p=n”,使得*p 的值为10,并通过返回此值,在主函数中输出 a+10 的值,即输出 20。30.下列选项中,能够满足“若字符串 s1 等于字符串 s2,则执行 ST”要求的是( )
39、。 A) if(strcmp(s2,s1)=0)ST; B) if(s1=s2)ST; C) if(strcpy(s1,s2)=1)ST; D) if(s1-s2=0)ST;(分数:2.00)A. B.C.D.解析:解析 在 C 语言中要对两个字符串的大小进行比较,就需要调用字符串比较函数 strcmp,如果这个函数的返回值等于 0,说明两个字符串相等。31.若二维数组 a 有 m 列,则在 aij前的元素个数为( )。A) i*m+j-1 B) i*m+j C) j*m+1 D) i*m+i+1(分数:2.00)A.B. C.D.解析:解析 二维数组的元素可以看成是按矩阵形式存放的,总是先存
40、放第一行的元素,再存放第二行的元素。数组第一维的下标是 i,说明它前面还有 i 行,有 i*m 个元素,数组第二维的下标是 j,说明它前面还有 j 列,有 j 个元素,所以共有 i*m+j 个元素。32.对于下列字符串,说明表达式 strlen(s)值的是( )。char s10=a,/n,a,b,/t,c;A) 10 B) 1C) 6 D) 7(分数:1.00)A.B.C. D.解析:解析strlen(s)返回 s 字符串中字符的个数,若 s 是个数组,则返回数组元素的个数。33.若有定义 int(*pt)3;,则下列说法不正确的是( )。A) int(*pt)3是一个数组指针B) 指针 p
41、t 指向一个有 3 个整型变量的数组C) 定义了一个名为*pt、具有三个元素的整型数组D) 定义了一个名为 pt 的指针变量,它可以指向每行有三个整数元素的二维数组(分数:2.00)A.B.C.D. 解析:解析 首先,pt 跟*结合,所以是一个指针,所指向的对象是含有 3 个元素的数组。所定义的指针没加 const,所以是个指针变量,还可以指向类似对象的其他元素,也就是说还可以指向其他含有 3 个元素的数组。34.函数调用 strcat(strcpy(str1,str2),str3)的功能是( )。A) 将字符串 str1 复制到字符串 str2 中后再连接到字符串 str3 之后B) 将字符
42、串 str1 连接到字符串 str2 之后再复制到字符串 str3 之后C) 将字符串 str2 复制到字符串 str1 后再将字符串 str3 连接到字符串 str1 之后D) 将字符串 str2 连接到字符串 str1 之后再将字符串 str1 复制到字符串 str3 中(分数:2.00)A.B.C. D.解析:解析 strcat(s1,s2)是把 s2 字符串连接到 s1 字符串末尾,strcpy(s1,s2)是把 s2 字符串复制给s1 字符串,要保证 s1 能容纳下连接或复制后的字符串。35.以下叙述中正确的是_。(A) 预处理命令行必须位于源文件的开头(B) 在源文件的一行上可以有
43、多条预处理命令(C) 宏名必须用大写字母表示(D) 宏替换不占用程序的运行时间(分数:2.00)A.B.C.D. 解析:36.若已定义:int a9,*p=a;并在以后的语句中未改变 p 的值,下列选项中不能表示 a1地址的表达式是( )。A) p+1 B) a+1 C) a+ D) +p(分数:1.00)A.B.C. D.解析:解析 本题考查数组地址的表示。选项 C)中,数组名所表示的数组地址不能被重新赋值。37.下列程序的运行结果为( )。#define MAX(x,y)(x)(y)?(x):(y)main()int a=2,b=3,c=1,d=3,t;printf(“%d/n“,(MAX
44、(a+b,c+d)*100);A) 500 B) 5 C) 4 D) 400(分数:2.00)A. B.C.D.解析:解析 本题考查带参数的宏的定义及相关运算;(x)(y)?(x):(y)是 xy 时输出 x,否则输出y,调用(MAX(a+b,c+d)*100 时,(a+1)=5)(c+d=4),所以输出 a+b=5,所以 x=5*100。38.下列程序中 c 的二进制值是( )。char a=2,b=4,c;c=ab2:A) 00000011 B) 00010100 C) 00011100 D) 00011000(分数:2.00)A. B.C.D.解析:解析 本题主要考查按位异或和右移运算。
45、b=4 的二进制为 00000100,b2 后为00000001,a=2 的二进制为 00000010,两者异或为 00000011。39.读取二进制文件的函数调用形式为:fread(buffer, size, count, pf);,其中 buffer 代表的是_。A) 一个文件指针,指向待读取的文件B) 一个整型变量,代表待读取的数据的字节数C) 一个内存块的首地址,代表读入数据存放的地址D) 一个内存块的字节数(分数:2.00)A.B.C. D.解析:解析 本题考查的重点是对 fread 函数的理解。fread 函数中,buffer 是接收读入数据的内存区域的指针,因此选项 C 是正确的
46、。40.有以下程序:#include stdio.hint f1 (int x,int y) return x y? x :y; int f2 (im x,int y) return x y? y: x; main( )int a=4,b=3,c=5,d=2,e,f,g;e=f2(f1(a,b),f1(c,d); f=f1(f2(a,b),f2(e,d); g=a+b+e+d-e-f;printf( “% d,% d,% d /n“ ,e,f,g);程序运行后的输出结果是( )。A) 4,3,7 B) 3,4,7 C) 5,2,7 D) 2,5,7(分数:1.00)A. B.C.D.解析:解析
47、 函数 f1 的功能是返回两个数中的较大数,熳的功能是返回两个数中较小的数。具体执行过程如下:执行 f1(a,b),即 f1(4,3),返回值引执行 f1(c,d),即 f1(5,2),返回值 5;执行 e= f2(f1(a,b),f1(c,d),即 f2(4,5),返回值 4。执行 f2(a,b),即 f2(4,3),返回值 3;执行 f2(c,d),即 f2(5,2),返回值 2;执行 f= f1(f2(a,b),f2(c,d),即 f1(3,2),返回值 3。执行 g=a+b+c+d+e+f,即 g=7。所以,程序输出结果为 4,3,7。二、填空题(总题数:15,分数:33.50)41.在算法的 4 个特性中,算法必须能在执行有限个步骤之后终止指的是算法的 1 特性。(分数:2.00)填空项 1:_ (正确答案:有穷性)解析:解析 算法的 4 个基本特性:可靠性、确定性、有穷性和拥有足够的情报。其中,算法的有穷性指的是算法必须在有限的