1、二级 C语言笔试-478 及答案解析(总分:97.00,做题时间:90 分钟)一、选择题(总题数:40,分数:65.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) 学号,课程号,成绩(分数:2.00)A.B.C.D.4.数据流程图(DFD 图)是( )。A软件概要设计的工具 B软件详细设计的工具C结构化方法的需求分析工具 D而向对象方法的需求分析工具(分数:1.00)A.B.C.D.5.数据流程图(DFD 图)是A) 软件概要设计的工具 B) 软件详细设计的工具C) 结构化方法的需求分析工具 D) 面向对象方法的需求分析工具(分数:2.00)A.B.C.D.6.下列对于软件测试的描述中正确的是_。A) 软件测试的目的是证明程序是否正确
3、 B) 软件测试的目的是使程序运行结果正确C) 软件测试的目的是尽可能地多发现程序中的错误 D) 软件测试的目的是使程序符合结构化原则(分数:1.00)A.B.C.D.7.数据结构中,与所使用的计算机无关的是数据的A) 存储结构 B) 物理结构 C) 逻辑结构 D) 物理和存储结构(分数:2.00)A.B.C.D.8.下列不属于软件工程的 3个要素的是A) 工具 B) 过程 C) 方法 D) 环境(分数:2.00)A.B.C.D.9.耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是( )。A提高耦合性降低内聚性有利于提高模块的独立性B降低耦合性提高内聚性有利于提高模块的独立性C耦
4、合性是指一个模块内部各个元素间彼此结合接的紧密程度D内聚性是指模块间互相连接的紧密程度(分数:1.00)A.B.C.D.10.程序流程图(PFD)中的箭头代表的是( )。A) 数据流 B) 控制流 C) 调用关系 D) 组成关系(分数:1.00)A.B.C.D.11.在 E-R图中,用( )来表示实体之间联系。A) 矩形 B) 菱形 C) 椭圆形 D) 正方形(分数:2.00)A.B.C.D.12.数据的完整性是指数据的正确性、有效性和 _。A) 可维护性 B) 独立性 C) 安全性 D) 相容性(分数:2.00)A.B.C.D.13.按条件 f对关系 R进行选择,其关系代数表达式为( )。A
5、) R|X|R B) (分数:1.00)A.B.C.D.14.下列叙述中正确的是_。A) 为了建立一个关系,首先要构造数据的逻辑关系B) 表示关系的二维表中各元组的每一个分量还可以分成若干数据项C) 一个关系的属性名表称为关系模式D) 一个关系可以包括多个二维表(分数:2.00)A.B.C.D.15.结构化程序设计的 3种基本结构是( )。A) 过程、子程序和分程序 B) 顺序、选择和重复C) 递归、堆栈和队列 D) 调用、返回和转移(分数:2.00)A.B.C.D.16.以下选项中不能用做 C程序合法常量的是_。A) 1, 234 B) /123 C) 123 D) “/x7G/(分数:1.
6、00)A.B.C.D.17.若要用下面的程序片段使指针变量 P指向一个存储整型变量的动态存储单元int *p;p=_malloc(sizeof(int);则应填入_。A) int B) int* C) (*int) D) (int*)(分数:1.00)A.B.C.D.18.以下选项中非法的表达式是( )。A) 0=x100 B) i=j= =0 C) (char)(65+3) D) x+1=x+1(分数:1.00)A.B.C.D.19.有以下程序:main()int p8=11,12,13,14,15,16,17,18,i=0,j=0;while(i+7)if(pi%2)j+=pi;print
7、f(“%d/n“,j);程序运行后的输出结果是 _。A) 42 B) 45 C) 56 D) 60(分数:1.00)A.B.C.D.20.下列程序的输出结果是( )main()int a,b,d=25;a=d/10%9;b=aprintf(“%d,%d/n“,a,b);A) 6,1 B) 2,1 C) 6,0 D) 2,0(分数:2.00)A.B.C.D.21.两次运行下列的程序,如果从键盘上分别输入 3和 1,则输出结果是( )。main()int x;scanf(“%d“,B) while(ch = getehar() ! =N)printf(“%c“,ch);C) while (ch =
8、 getehar() = = N)printf( “%c“, ch);D) while (ch = getchar( ) = N)printf(“%c“, ch );(分数:1.00)A.B.C.D.25.要求通过 while循环不断读入字符,当读入字母 N时结束循环。若变量已正确定义,下列正确的程序段是( )A) while(ch=getchar()!=N)printf(“%c“,ch);B) while(ch=getchar()!=N) printf(“%c“,ch);C) while(ch=getchar()=N) printf(“%c“,ch);D) while(ch=getchar(
9、) =N)printf(%c,ch);(分数:2.00)A.B.C.D.26.以下函数 findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能。#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(maxximax=xi)”中,判断条件设置错误D赋值语句“m
10、ax=MIN;”放错了位置(分数:1.00)A.B.C.D.27.请读程序:#includestdio.h#includestring.hmain()char*s1=“AbCdEf“,*s2=“aB“;s1+;s2+;printf(“%d/n“,strcmp(s1,s2);上面程序的输出结果是_。A) 正数 B) 负数 C) 零 D) 不确定的值(分数:2.00)A.B.C.D.28.有以下程序:#includestring.hvoid f(char*s,char*t)char k;k=*s; *s=*t; *t=k;s+; t-;if(*s) f(s,t);main( )char str10
11、=“abcdefg“,*p;p=str+strlen(str)/2+1;f(p,p-2);printf(%s/n“,str);程序运行后的输出结果是 _。 A) abcdef B) gfedcba C) gbcdefa D) abedcfg(分数:2.00)A.B.C.D.29.对两个数组 a和 b进行下列初始化:char m=“1234567“;char n=1,2,3,4,5,6,7;则下列叙述正确的是( )。A) 数组 m与数组 n完全相同B) 数组 m与数组 n长度相同C) 数组 m比数组 n长 1D) 数组 m与数组 n中都存放字符串(分数:2.00)A.B.C.D.30.下列选项中
12、,能够满足“若字符串 s1等于字符串 s2,则执行 ST”要求的是 A) if(strcmp(s1, s2)=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.若已定义:int a=0,1,2,3,4,5,6,7,8,9,*p=a,i;其中 0i9,则对 a数组元素不正确的引用是( )。A) ap-a B) *(strcpy(str,strcat(p1,p2);printf(%s,str);A) xyzabcABC B) abcABC C) xyzabc D) xy
13、zABC(分数:2.00)A.B.C.D.35.下列程序的输出结果是( )。#includestdio.hmain()stmct stint y,x,z;unionlong i;int j;char k;un;printf(“%d,%d/n“,sizeof(stmct st),sizeof(un);A) 6,2 B) 6,4 C) 8,4 D) 8,6(分数:1.00)A.B.C.D.36.在 C语言中,下列关于文件操作的叙述正确的是( )。A) 对文件操作必须先关闭文件 B) 对文件操作必须先打开文件C) 对文件操作顺序没有统一规定 D) 以上全错(分数:2.00)A.B.C.D.37.设有
14、定义:int n1=0,n2,*p=,以下赋值语句中与 n2=n1;语句等价的是 _。A) *p=*q; B) p=q; C) *p=(分数:2.00)A.B.C.D.38.设 int x=7,则x 的值是( )。A) -8 B) -7 C) -1 D) 1(分数:1.00)A.B.C.D.39.以下程序中函数 scmp的功能是返回形参指针 s1和 s2所指字符串中较小字符串的首地址。#include stdio.h#include string.hchar *scmp(char*s1,char*s2)if(strcmp(s1,s2)0) return(s1);else return(s2);
15、main()int i; char string20,str320;for(i=0;i3;i+) gets(stri);strcpy(string,scmp(str0,str1); /*库函数 strcpy对字符串进行复制*/strcpy(string,scmp(string,str2);printf(“%s/n“,string);若运行时依次输入:abcd、abba 和 abc三个字符串,则输出结果为( )。A) abcd B) abba C) abc D) baca(分数:2.00)A.B.C.D.40.有以下程序:#include stdio.hchar fun(char x,char
16、y)if(xy) return x;return y;main()int a=9,b=8,c=7;printf(“%c/n“,fun(fun(a,b),fun(b,c);程序的执行结果是( )。A) 函数调用出错 B) 8 C) 9 D) 7(分数:2.00)A.B.C.D.二、填空题(总题数:15,分数:32.00)41.若按功能划分,软件测试的方法通常分为白盒测试方法和U /U测试方法。(分数:2.00)填空项 1:_42.在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种:前序遍历、U /U遍历和后序遍历。(分数:2.00)填空项 1:_43.有以下程序:void f(i
17、nt a,int i,int j)int t;if(ij)t=ai;ai=aj;aj=t;f(a,i+1,j-1);main()int i,aa5=1,2,3,4,5;f(aa,0,4);for(i=0;i5;i+) printf(“%d,“,aai);printf(“/n“);执行后的输出结果是U /U。(分数:2.00)填空项 1:_44.一个关系表的行称为 1。(分数:2.00)填空项 1:_45.设 x为 int型变量,请写出一个关系表达式 1,用以判断 x同时为 3和 7的倍数时,关系表达式的值为真。(分数:2.00)填空项 1:_46.以下程序运行时若从键盘输入:10 20 30回
18、车。输出结果是_。#includestdio.hmain()int i=0,j=0,k=0;scanf(“%d%*d%d“,i,j,k);printf(“%d%d%d/n“,i,j,k);(分数:2.00)填空项 1:_47.若有定义:int k;,则以下程序段的输出结果是_。for(k=2;k6;k+,k+) printf(“#%d“,k);(分数:2.00)填空项 1:_48.下列程序的输出结果是_。main()int a=1,b=2,c=3,t=0;if(aB) t=a;a=b;b=t;if(aC) t=a;a=c;c=t;printf(“%d,%d,%d/n“,a,b,c);(分数:2
19、.00)填空项 1:_49.已知字符A的 ASCII码为 65,以下程序运行后的输出结果是U /U。#include stdio.hmain( )char a,b;a=A+5-3; b=a+6-2;printf( “% d% c/n“, a, b);(分数:2.00)填空项 1:_50.以下程序的定义语句中,x1的初值是_,程序运行后输出的内容是_。 #includestdio.h main() int x=1,2,3,4,5,6,7,8,9,10,1l,12,13,14,15,16,*p4,i; for(i=0;i4;i+) pi=printf(“Enter a number:“); sca
20、nf(“%d“,n);printf(“Output: “);dos=n%10; printf(“%d“,s); _;while(n!=0);printf(“/n“);(分数:2.00)填空项 1:_52.以下程序的输出结果是_。#includestdio.hvoid swap(int *a,int *b)int *t:t=a;a=b;b=t;main( )int i=3,j=5,*p=(分数:2.00)填空项 1:_54.在宏定义#define P13.14159 中,用宏名 PI代替一个_。(分数:4.00)填空项 1:_55.以下程序是求矩阵 a、b 的和,结果存入矩阵 c中,请填空。 #
21、includestdio.h main() int a44=1,2,6,7,0,4,2,-8,1,4,5,2,2,4,6,8; int b44=-4,0,7,9,2,-7,7,4),6,9,0,1),8,8,6,5); int i,j,c44; for(i=0;i4;i+) for(j=0;j4;j+) cij=_; for(i=0;i4;i+) for(j=0;j4;j+) printf(“%d“,cij); (分数:2.00)填空项 1:_二级 C语言笔试-478 答案解析(总分:97.00,做题时间:90 分钟)一、选择题(总题数:40,分数:65.00)1.支持子程序调用的数据结构是A
22、) 栈 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) 学号,课程号,成绩(分数:2.00)A.B.C. D.解析:解析 关键字是指属性或属性的组合,其值能够惟一地标识一个元组,而在选课成绩表中学号和课程号的组台可以对元组进行惟一的标识。所以学号与课程号组合作为选课成绩表的主4.数据流程图(DFD 图)是( )。A软件概要设计的工
24、具 B软件详细设计的工具C结构化方法的需求分析工具 D而向对象方法的需求分析工具(分数:1.00)A.B.C. D.解析:解析 数据流程图是一种结构化分析描述模型,用来对系统的功能需求进行建模。5.数据流程图(DFD 图)是A) 软件概要设计的工具 B) 软件详细设计的工具C) 结构化方法的需求分析工具 D) 面向对象方法的需求分析工具(分数:2.00)A.B.C. D.解析:解析 数据流图是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的过程。软件结构图是软件概要设计的工具,而详细设计是对概要设计的每个模块进行细化,UML 是面向对象的需求分析的工具。6.下列对于软件测
25、试的描述中正确的是_。A) 软件测试的目的是证明程序是否正确 B) 软件测试的目的是使程序运行结果正确C) 软件测试的目的是尽可能地多发现程序中的错误 D) 软件测试的目的是使程序符合结构化原则(分数:1.00)A.B.C. D.解析:解析 软件测试是为了发现错误而执行程序的过程,一个好的测试用例是指很可能找到迄今为止尚未发现的错误的用例,一个成功的测试是发现了至今尚未发现的错误的测试。软件测试是以查找错误为中心,而不是演示软件的正确功能。所以软件测试的目的是尽可能多地发现程序中的错误。7.数据结构中,与所使用的计算机无关的是数据的A) 存储结构 B) 物理结构 C) 逻辑结构 D) 物理和存
26、储结构(分数:2.00)A.B.C. D.解析:解析 数据结构概念一般包括数据的逻辑结构、存储结构及数据上的运算集合等。数据的逻辑结构只抽象地反映数据元素之间的逻辑关系,而不管它在计算机中的存储形式。8.下列不属于软件工程的 3个要素的是A) 工具 B) 过程 C) 方法 D) 环境(分数:2.00)A.B.C.D. 解析:命题目的 本题考查了软件工程的基本概念。解题要点 软件工程包括 3个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理和文档生成;过程支持软件开发的各个环节的控制和管理。考点链接 软件生命周期。9.耦合性和内聚性是对模块独立性度量的两个标准
27、。下列叙述中正确的是( )。A提高耦合性降低内聚性有利于提高模块的独立性B降低耦合性提高内聚性有利于提高模块的独立性C耦合性是指一个模块内部各个元素间彼此结合接的紧密程度D内聚性是指模块间互相连接的紧密程度(分数:1.00)A.B. C.D.解析:解析 耦合是指模块间相互连接的紧密程度,内聚性是指在一个模块内部各个元素间彼此之间结合的紧密程序。高内聚、低耦合有利于模块的独立性。10.程序流程图(PFD)中的箭头代表的是( )。A) 数据流 B) 控制流 C) 调用关系 D) 组成关系(分数:1.00)A.B. C.D.解析:解析 程序流程图(PFD)是一种传统的、应用广泛的软件过程设计表示工具
28、,通常也称为程序框图,其箭头代表的是控制流。11.在 E-R图中,用( )来表示实体之间联系。A) 矩形 B) 菱形 C) 椭圆形 D) 正方形(分数:2.00)A.B. C.D.解析:解析 在 E-R图中用矩形表示实体集,在矩形内写上该实体集的名字,用椭圆形表示属性,在椭圆形内写上该属性的名称,用菱形表示联系,菱形内写上联系名。12.数据的完整性是指数据的正确性、有效性和 _。A) 可维护性 B) 独立性 C) 安全性 D) 相容性(分数:2.00)A.B.C.D. 解析:评析 数据模型的完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态及其状态
29、的变化,以保证数据的正确性、有效性和相容性。13.按条件 f对关系 R进行选择,其关系代数表达式为( )。A) R|X|R B) (分数:1.00)A.B.C. D.解析:解析 选择运算是一个一元运算,关系 R通过选择运算(并由该运算给出所选择的逻辑条件)后仍为一个关系。这个关系是由 R中那些满足逻辑条件的元组组成的。如果关系的逻辑条件为 f,则 R满足 f的选择运算可以写成:f(R)。14.下列叙述中正确的是_。A) 为了建立一个关系,首先要构造数据的逻辑关系B) 表示关系的二维表中各元组的每一个分量还可以分成若干数据项C) 一个关系的属性名表称为关系模式D) 一个关系可以包括多个二维表(分
30、数:2.00)A. B.C.D.解析:解析 关系中的每一个属性都是不可分解的,所以表示关系的二维表中各元组的每一个分量不能分成若干数据项。关系模式是命名的属性集合。一个关系就是一张二维表。为了建立一个关系,首先需要构造数据的逻辑关系。15.结构化程序设计的 3种基本结构是( )。A) 过程、子程序和分程序 B) 顺序、选择和重复C) 递归、堆栈和队列 D) 调用、返回和转移(分数:2.00)A.B. C.D.解析:解析 程序的 3种基本控制结构包括顺序、选择和重复(循环),这 3种结构就足以表达出各种其他形式的结构。16.以下选项中不能用做 C程序合法常量的是_。A) 1, 234 B) /1
31、23 C) 123 D) “/x7G/(分数:1.00)A. B.C.D.解析:解析 常量分为数值常量和字符串常量,选项 A中书写不合法。17.若要用下面的程序片段使指针变量 P指向一个存储整型变量的动态存储单元int *p;p=_malloc(sizeof(int);则应填入_。A) int B) int* C) (*int) D) (int*)(分数:1.00)A.B.C.D. 解析:评析 不论 p是指向什么类型的指针变量,都可以通过强制类型转换的方法使之类型一致,强制类型转换的格式为(数据类型*)。18.以下选项中非法的表达式是( )。A) 0=x100 B) i=j= =0 C) (c
32、har)(65+3) D) x+1=x+1(分数:1.00)A.B.C.D. 解析:解析 选项 A)在 C语言中是一个合法的关系表达式,但它并不代表数学式 o=x 100。计算0=x100 时,从左到右结合,先计算 0=x,其结果只能是 0或 1,然后再比较 0 100 或 1100。根据运算符的优先级,选项 B)先判断 j=0是否成立,其结果只能是 0或 1,然后再将 0或 1赋给 i。选项 C)中,(char)(65+3)为类型强制转换,将整数型数据转换为字符型。选项 D)是将一个数据赋给一个表达式,等号左边不合要求,所以错误。19.有以下程序:main()int p8=11,12,13,
33、14,15,16,17,18,i=0,j=0;while(i+7)if(pi%2)j+=pi;printf(“%d/n“,j);程序运行后的输出结果是 _。A) 42 B) 45 C) 56 D) 60(分数:1.00)A.B. C.D.解析:解析 此程序实现了将 p1)p7中的奇数求和的功能,因此,最后的输出结果是j=13+15+17=45。20.下列程序的输出结果是( )main()int a,b,d=25;a=d/10%9;b=aprintf(“%d,%d/n“,a,b);A) 6,1 B) 2,1 C) 6,0 D) 2,0(分数:2.00)A.B. C.D.解析:解析 算术运行符“/
34、”、“%”的优先级处于同一级,并且两者的结合性都是从左到右。所以算术表达式运算过程为:a=25/10%9=2%9=2;当逻辑运算符“B) while(ch = getehar() ! =N)printf(“%c“,ch);C) while (ch = getehar() = = N)printf( “%c“, ch);D) while (ch = getchar( ) = N)printf(“%c“, ch );(分数:1.00)A. B.C.D.解析:解析 此题中选项 B)与选项 C)首先在书写上就有错误;题目要求当读人的字母为非字母N时才执行 printf语句,依据选项 D)的要求,只有当
35、读人的字母为N时才执行 printf句,故也错误。25.要求通过 while循环不断读入字符,当读入字母 N时结束循环。若变量已正确定义,下列正确的程序段是( )A) while(ch=getchar()!=N)printf(“%c“,ch);B) while(ch=getchar()!=N) printf(“%c“,ch);C) while(ch=getchar()=N) printf(“%c“,ch);D) while(ch=getchar() =N)printf(%c,ch);(分数:2.00)A. B.C.D.解析:解析 while 循环的执行过程如下:计算 while后面圆括号中表达
36、式的值。当值为非 0时,执行步骤:当值为 0时,执行步骤。执行循环体一次。转去执行步骤。退出循环。在选项 A) 中,表达式 (ch=getchar()!=N表示输入的字符不等于 N,如果这个条件表达式成立,则执行循环体,打印输出输入的字符。如果这个条件表达式不成立,即输入的字符等于 N,则退出循环。所以选项 A) 为正确答案。26.以下函数 findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能。#define MIN-2147483647int findmax(int x,int n)int i,max;for(i=0;in;i+)max=MIN;if(ma
37、xxi)max=xi;return max;造成错误的原因是( )。A定义语句“int i,max;”中,max 未赋初值B赋值语句“max=MIN”;中,不应给 max赋 MIN值C语句“if(maxximax=xi)”中,判断条件设置错误D赋值语句“max=MIN;”放错了位置(分数:1.00)A.B.C.D. 解析:解析 “max=MIN;”语句应放在 for循环之前,否则每次循环时都重新赋值,值没有变化。27.请读程序:#includestdio.h#includestring.hmain()char*s1=“AbCdEf“,*s2=“aB“;s1+;s2+;printf(“%d/n“
38、,strcmp(s1,s2);上面程序的输出结果是_。A) 正数 B) 负数 C) 零 D) 不确定的值(分数:2.00)A. B.C.D.解析:评析 函数 strcmp的功能是比较字符串 s1和 s2,如果 sls2,N0 则返回个正数;如果sls2,则返回负数,否则返回零。由于本题中小写字母 b的 ASCII码值大于大写字母 B,故 sls2;所以函数的值为正数。28.有以下程序:#includestring.hvoid f(char*s,char*t)char k;k=*s; *s=*t; *t=k;s+; t-;if(*s) f(s,t);main( )char str10=“abcd
39、efg“,*p;p=str+strlen(str)/2+1;f(p,p-2);printf(%s/n“,str);程序运行后的输出结果是 _。 A) abcdef B) gfedcba C) gbcdefa D) abedcfg(分数:2.00)A.B. C.D.解析:解析 p=str+strlen(str)/2+1=str+4,f(p,p-2)的功能是将 p4与 p2互换,p5与 p1互换,p6与 p0互换,最后的结果为 gfedcba。29.对两个数组 a和 b进行下列初始化:char m=“1234567“;char n=1,2,3,4,5,6,7;则下列叙述正确的是( )。A) 数组
40、m与数组 n完全相同B) 数组 m与数组 n长度相同C) 数组 m比数组 n长 1D) 数组 m与数组 n中都存放字符串(分数:2.00)A.B.C. D.解析:解析 本题考查字符数组和字符串赋值给数组的一些区别。语句“char m=“1234567“;”定义了一个字符型数组并进行了初始化,C 语言规定,在字符串的末尾自动加上串结束标记/0,因此数组 m的长度是 8:而数组 n是按照字符方式对数组进行初始化,系统不会自动加上串结束标记/0,因此数组 n的长度是 7。30.下列选项中,能够满足“若字符串 s1等于字符串 s2,则执行 ST”要求的是 A) if(strcmp(s1, s2)=0)
41、 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.解析:解析 本题考查的是函数 strcmp的使用。strcmp(s1,s2)的值等于 0,说明两个字符串相等;strcmp(s1,s2)的值大于 0,说明字符串 s1大于字符串 s2;strcmp(s1,s2)的值小于 0,说明字符串 s1小于字符串 s2。31.若已定义:int a=0,1,2,3,4,5,6,7,8,9,*p=a,i;其中 0i9,则对 a数组元素不正确的引用是( )。A) ap-a B) *(strcp
42、y(str,strcat(p1,p2);printf(%s,str);A) xyzabcABC B) abcABC C) xyzabc D) xyzABC(分数:2.00)A.B. C.D.解析:评析 strcpy(strl,s1):作用是将字符串 s1拷贝到字符数组 strl中去。strcat(字符数组 1,字符数组 2):把字符串 2接到字符串 1的后面,结果放在字符数组 1中,函数调用后返回字符数组 1的地址。本题定义了三个字符数组 pl,p2,str,strcat(pl,p2)函数的作用是将字符串数组 p2接到字符串 p1的后面,结果放在字符数组 p1中,再通过 strcpy()函数将
43、该字符串拷贝到 str数组中,原 str数组中的字符串 xyz被覆盖,因此打印输出字符串 str即可得到 abcABC。35.下列程序的输出结果是( )。#includestdio.hmain()stmct stint y,x,z;unionlong i;int j;char k;un;printf(“%d,%d/n“,sizeof(stmct st),sizeof(un);A) 6,2 B) 6,4 C) 8,4 D) 8,6(分数:1.00)A.B. C.D.解析:解析 本题主要考查结构体和联合内存使用的区别:结构中不同的成员分别使用不同的内存空间,一个结构所占内存空间的大小是结构中每个成
44、员所占内存空间大小的总和,结构中每个成员相互独立;联合所占用的内存空间为最长的成员所占用的空间。36.在 C语言中,下列关于文件操作的叙述正确的是( )。A) 对文件操作必须先关闭文件 B) 对文件操作必须先打开文件C) 对文件操作顺序没有统一规定 D) 以上全错(分数:2.00)A.B. C.D.解析:解析 本题考查对文件的操作。文件打开后才可以对文件进行操作,使用结束后要关闭文件。对文件的操作都是顺序读写,即从文件的第一个数据开始,依次进行读写。37.设有定义:int n1=0,n2,*p=,以下赋值语句中与 n2=n1;语句等价的是 _。A) *p=*q; B) p=q; C) *p=(
45、分数:2.00)A. B.C.D.解析:解析 由定义*p=else return(s2);main()int i; char string20,str320;for(i=0;i3;i+) gets(stri);strcpy(string,scmp(str0,str1); /*库函数 strcpy对字符串进行复制*/strcpy(string,scmp(string,str2);printf(“%s/n“,string);若运行时依次输入:abcd、abba 和 abc三个字符串,则输出结果为( )。A) abcd B) abba C) abc D) baca(分数:2.00)A.B. C.D.
46、解析:解析 本题考查返回指针值的函数。一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据,即地址。函数 strcmp(字符串 1,字符串 2)的作用是比较字符串 1和字符中 2。如果字符串 1=字符串 2,函数值为 0;如果字符串 1,字符串 2,函数值为一正整数;如果字符串 1字符串2,函数值为一负整数。本题程序中 scmp函数的作用是比较 s1和 s2的大小,对 strcmp函数的返回值进行判断,如果字符串 1字符串 2,则返回字符串 1的值,反之返回字符串 2的值。所以 main函数中 scmp(str0,str1)的返回值是 abba,通过 strcpy函数把返回值 abba复制到 string中。当执行 scmp(string,str2)时,scrap函数的返回值为 abba,再次复制到 string中,最后 string的值为 abba。40.有以下程序:#include stdio.hchar fun(char x,char y)if(xy) return x;return y;main()int a=9,b=8,c=7;printf(“%c/n“,fun(fun(a,b),fun(b,c);程序的执行结果是( )。A) 函数调用出错 B) 8 C) 9 D) 7(分数:2.00)A.