1、国家二级(C 语言)机试历年真题试卷汇编 19及答案解析(总分:86.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.某二叉树共有 12个结点,其中叶子结点只有
2、 1个。则该二叉树的深度为(根结点在第 1层)( )。(分数:2.00)A.3B.6C.8D.125.下面不能作为结构化方法软件需求分析工具的是( )。(分数:2.00)A.系统结构图B.数据字典(DD)C.数据流程图(DFD 图)D.判定表6.下面不属于软件测试实施步骤的是( )。(分数:2.00)A.集成测试B.回归测试C.确认测试D.单元测试7.下面描述中不属于数据库系统特点的是( )。(分数:2.00)A.数据共享B.数据完整性C.数据冗余度高D.数据独立性高8.负责数据库中查询操作的数据库语言是( )。(分数:2.00)A.数据定义语言B.数据管理语言C.数据操纵语言D.数据控制语言
3、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.一般情况下,当对关系 R和 S进行自然连接时,要求 R和 S含有一个或者多个共有的( )。(分数:2.00)A.记录B.行C.属性D.元组11.以下关于结构化程序设计的叙述中正确的是( )。(分数:2.00)A.由三种基本结构构成的程序只能解决小规模的问题B.结
4、构化程序使用 goto语句会很便捷C.一个结构化程序必须同时由顺序、分支、循环三种结构组成D.在 C语言中,程序的模块化是利用函数实现的12.以下叙述中正确的是( )。(分数:2.00)A.书写源程序时,必须注意缩进格式,否则程序会有编译错误B.程序的主函数名除 main外,也可以使用 Main或_mainC.程序可以包含多个主函数,但总是从第一个主函数处开始执行D.在 C程序中,模块化主要是通过函数来实现的13.以下叙述中正确的是( )。(分数:2.00)A.只能在函数体内定义变量,其他地方不允许定义变量B.常量的类型不能从字面形式上区分,需要根据类型名来决定C.预定义的标识符是 C语言关键
5、字的一种,不能另作它用D.整型常量和实型常量都是数值型常量14.若有以下程序段: double x=51 6894: printf(“fn“,(int)(x*1000+05)(double)1000);则程序段的输出结果是( )。(分数:2.00)A.5170000B.5175000C.5169000D.516800015.以下定义语句中正确的是( )。(分数: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.若有以下程序: #includestdioh main() int a=一
6、 11,b=10; a=b=4; printf(“d dn“,a,b); 则程序的输出结果是( )。(分数:2.00)A.1 2B.一 1 2C.一 12D.1217.下面选项中关于位运算的叙述正确的是( )。(分数:2.00)A.位运算的对象只能是整型或字符型数据B.位运算符都需要两个操作数C.左移运算的结果总是原操作数据的 2倍D.右移运算时,高位总是补 018.若有以下程序: #includestdioh char fun(char x) return x*x+a; main() char a,b=0; for(a=0;a4;a+=1) b=fun(a);putchar(b); prin
7、tf(“n“); 则程序的输出结果是( )。(分数:2.00)A.abcdB.ABEJC.abejD.ABCD19.有以下程序: #includestdioh main() int i,j; for(i=1;i4;i+) for(j=i;j4;j+) printf(“d*d=d“,i,j,i*j); printf(“n“); 程序运行后的输出结果是( )。(分数:2.00)A.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
8、.1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=920.设有定义语句: double a,b,c; 若要求通过输入分别给 a、b、C 输入 1、2、3,输入形式如下(注:此处口代表一个空格): 口口 10 口口 20 口口 30回车 则能进行正确输入的语句是( )。(分数:2.00)A.scanf(“1f1f1f“,a,b,c);B.scanf(“1f1f1f“,&a,&b,&c);C.scanf(“fff“,&a,&b,&c);D.scanf(“51lf51lf5llf“,&a,&b,&c);21.若有以下程序: #includestdioh main() int a=
9、1,b=2,c=3,d=4; if(a=2)&(b=1)c=2; if(c=3)(d=一 1)a=5; printf(“d,d,d,dn“,a,b,c,d); 则程序的输出结果是( )。(分数:2.00)A.2,2,2,4B.2,1,2,一 1C.5,1,2,一 1D.1,2,3,422.有以下程序: #includestdioh main() double x=20,y; if(x00)y=00; else if(x50)&(!x) y=10(x+20); else if(x100)y=10x; else y=100; printf(“fn“,y); 程序运行后的输出结果是( )。(分数:2
10、.00)A.0000000B.0250000C.0500000D.100000023.有以下程序: #includestdioh main() int a=一 2,b=0; while(a+&+b); printf(“d,dn“,a,b); 程序运行后输出结果是( )(分数:2.00)A.0,2B.0,3C.1,3D.1,224.若有以下程序: #includestdioh main() int a=6,b=0,c=0; for(;a;)b+=a;a 一=+c;) printf(“d,d,dn“,a,b,c); 则程序的输出结果是( )。(分数:2.00)A.1,14,3B.0,14,3C.0
11、,18,3D.0,14,625.以下叙述中正确的是( )。(分数:2.00)A.一条语句只能定义一个数组B.每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元C.数组说明符的一对方括号中只能使用整型常量,而不能使用表达式D.在引用数组元素时,下标表达式可以使用浮点数26.有如下程序: #includestdioh #includestringh main() char a=“1234“,*b=“ABC“; printf(“d d d dn“,strlen(a),sizeof(a),strlen(b),sizeof(b); 程序运行后的输出结果是( )。(分数:2.00)A.
12、4 5 3 4B.4 3 2 1C.4 5 3 3D.4 5 1 327.有如下程序: #includestdioh main() if(0=0)putchar(X); if(0=0) putchar(Y); if(ab)putchar(Z); printf(“n“); 程序运行后的输出结果是( )。(分数:2.00)A.YZB.XYZC.XD.Y28.以下叙述正确的是( )。(分数:2.00)A.语句 int a43=1,2,4,5;是错误的初始化形式B.语句 int a43=1,2,4,5;是错误的初始化形式C.语句 int a3=1,2,4,5;是错误的初始化形式D.在逻辑上,可以把二维
13、数组看成是一个具有行和列的表格或矩阵29.设有某函数的说明为: int *func(int a10,int n); 则下列叙述中,正确的是( )。(分数:2.00)A.形参 a对应的实参只能是数组名B.说明中的 a10写成 a或*a,效果完全一样C.func的函数体中不能对 a进行移动指针(如 a+)的操作D.只有指向 10个整数内存单元的指针,才能作为实参传给 a30.有以下程序: #includestdioh int fun(int x,int y) if(x!=y)return(x+y)2); else return(x); main() int a=4,b=5,c=6; printf(
14、“dn“,fun(2*a,fun(b,c); 程序运行后的输出结果是( )。(分数:2.00)A.3B.6C.8D.1231.要求定义一个具有 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.以下叙述中正确的是( )。(分数:2.00)A.字符串常量 str1的类型是字符串数据类型B.有定义语句:char str1=“str1“;,数组 str1包含 4个元素C.下面的语句用赋初值的方式来定义字符串,其中,0不可缺少 char
15、 str1=s,t,r,1,0;D.字符数组的每个元素可存放一个字符,并且最后一个元素必须是0字符33.以下叙述中错误的是( )。(分数:2.00)A.当在程序的开头包含头文件 stdioh 时,可以给指针变量赋 NULLB.函数可以返回地址值C.改变函数形参的值,不会改变对应实参的值D.可以给指针变量赋一个整数作为地址值34.设有定义语句: float a10,x; 则以下叙述中正确的是( )。(分数:2.00)A.语句 a=&x;是非法的B.表达式 a+1是非法的C.三个表达式 a1、*(a+1)、*&a1表示的意思完全不同D.表达式*&a1是非法的,应该写成*(&(a1)35.有以下程序
16、: #includestdioh int fun(int n) int a; if(n=1)return 1; a=n+fun(n 一1); return a; main() printf(“dn“,fun(5); 程序的输出结果是( )。(分数:2.00)A.9B.14C.10D.1536.以下针对全局变量的叙述错误的是( )。(分数:2.00)A.全局变量的作用域是从定义位置开始至源文件结束B.全局变量是在函数外部任意位置上定义的变量C.用 extern说明符可以限制全局变量的作用域D.全局变量的生存期贯穿整个程序的运行期间37.以下叙述中正确的是( )。(分数:2.00)A.如果 p是指
17、针变量,则p 是不合法的表达式B.如果 p是指针变量,则*p 表示变量 p的地址值C.在对指针进行加、减算术运算时,数字 1表示 1个存储单元的长度D.如果 p是指针变量,则*p+1 和*(p+1)的效果是一样的38.有以下程序: #includestdioh #define N 2 #define M N+1 #define NUM(M+1)*M2 main() printf(“dn“,NUM); 程序运行后的输出结果是( )。(分数:2.00)A.4B.8C.9D.639.有以下程序: #includestdioh main() int a=2,c=5; printf(“a=d b=dn“
18、,a,c); 程序运行后的输出结果是( )。(分数:2.00)A.a=d b=dB.a=2 b=5C.a=d b=dD.a=2 b=540.设有如下语句: typedef struct Date int year; int month; int day; DATE; 则以下叙述中错误的是( )。(分数:2.00)A.DATE是用户说明的新结构体类型名B.struct Date是用户定义的结构体类型C.DATE是用户定义的结构体变量D.struct是结构体类型的关键字二、程序填空题(总题数:1,分数:2.00)41.下列给定程序中,函数 fun的功能是:计算 f(x)=1+x+ (分数:2.00
19、)_三、程序修改题(总题数:1,分数:2.00)42.下列给定程序中,函数 fun的功能是:将主函数中两个变量的值进行交换。例如,若变量 a中的值为8,b 中的值为 3,则程序运行后,a 中的值为 3,b 中的值为 8。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdioh *found* void fun(int x,int y) int t; *found* t=x;x=y;y=t; void main() int a,b; a=8: b=3; fun(&a,&b); printf(“d
20、dn“,a,b); (分数:2.00)_四、程序设计题(总题数:1,分数:2.00)43.请编写函数 fun,其功能是:找出一维整型数组元素中最大的值及其所在的下标,并通过形参传回。数组元素中的值已在主函数中赋予。 主函数中 x是数组名,n 是 x中的数据个数,max 存放最大值,index存放最大值所在元素的下标。 注意:请勿改动主函数 main和其他函数中的任何内容,仅在函数fun的花括号中填入编写的若干语句。 试题程序: #includestdlibh #includestdioh #included timeh void fun(int a,int n,int*max,int*d) v
21、oid main() FILE *wf; int i,x20,max,index,n=10; int y20=4,2,6,8,11,5; srand(unsigned)time(NULL);for(i=0;in;i+) xi=rand()50; printf(“4d“,xi);*输出一个随机数组* printf(“n“); fun(x,n,&max,&index); printf(“Max=5d,Index=4dn“,max,index); * wf=fopen(“outdat“,“w“); fun(y,6,&max,&index); fprintf(wf,“Max=5d,Index=4d“,
22、max,index); fclose(wf); * (分数:2.00)_国家二级(C 语言)机试历年真题试卷汇编 19答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.下列数据结构中,属于非线性结构的是( )。(分数:2.00)A.循环队列B.带链队列C.二叉树 D.带链栈解析:解析:线性结构的特点:有且只有一个根结点;每一个结点最多有一个前驱,也最多有一个后继。不满足线性结构条件的称为非线性结构,二叉树的非叶子结点最多可以用两个后继,属于非线性结构。2.算法的空间复杂度是指( )。(分数:2.00)A.算法在执行过程中所需要的计算机存储空间 B
23、.算法所处理的数据量C.算法程序中的语句或指令条数D.算法在执行过程中所需要的临时工作单元数解析:解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间,因此本题答案为 A。3.下列数据结构中,能够按照“先进后出“原则存取数据的是( )。(分数:2.00)A.循环队列B.栈 C.队列D.二叉树解析:解析:栈是按“先进后出“的原则组织数据的;队列是按“先进先出”的原则组织数据的,因此本题答案为 B。4.某二叉树共有 12个结点,其中叶子结点只有 1个。则该二叉树的深度为(根结点在第 1层)( )。(分数:2.00)A.3B.6C.8D.12 解析:解析:二叉树中,度为 0的结点数等于度为 2
24、的结点数加 1,即 n2=n01,叶子结点即度为0,n0=1,则 n2=0,总结点数为 12=n0+n1+n2=1+n1+0,则度为 1的结点数 n1=11,所以深度为 12。故 D选项正确。5.下面不能作为结构化方法软件需求分析工具的是( )。(分数:2.00)A.系统结构图 B.数据字典(DD)C.数据流程图(DFD 图)D.判定表解析:解析:结构化方法软件需求分析工具主要有数据流图、数据字典、判定树和判定表。6.下面不属于软件测试实施步骤的是( )。(分数:2.00)A.集成测试B.回归测试 C.确认测试D.单元测试解析:解析:软件测试主要包括单元测试、集成测试、确认测试和系统测试。7.
25、下面描述中不属于数据库系统特点的是( )。(分数:2.00)A.数据共享B.数据完整性C.数据冗余度高 D.数据独立性高解析:解析:数据库系统的特点为高共享、低冗余、独立性高、具有完整性等,故 C选项错误。8.负责数据库中查询操作的数据库语言是( )。(分数:2.00)A.数据定义语言B.数据管理语言C.数据操纵语言 D.数据控制语言解析:解析:数据定义语言:负责数据的模式定义与数据的物理存取构建;数据操纵语言:负责数据的操纵,包括查询及增、删、改等操作;数据控制语言:负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等功能。9.设数据元素的集合 D=1,2,3,4,5,则满足下列关系
26、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)解析:解析:关系 R中的每个结点由两个部分构成,分别是数据域和指针域。选项 B中可以看出,元素序列为 54132,符合线性结构的条件。A 选项 2的前面有 1和 3两个数值,带有不确定性;C 选项2的后面有 4和 3两个数值;D 选项 1的后面有 3和 2两个数值。所以 B选项正确。10.一般情况下,当对关系 R和 S进行自然
27、连接时,要求 R和 S含有一个或者多个共有的( )。(分数:2.00)A.记录B.行C.属性 D.元组解析:解析:自然连接是一种特殊的等值连接,它满足以下条件:两关系间有公共域(属性);通过公共域的等值进行连接,故 C选项正确。11.以下关于结构化程序设计的叙述中正确的是( )。(分数:2.00)A.由三种基本结构构成的程序只能解决小规模的问题B.结构化程序使用 goto语句会很便捷C.一个结构化程序必须同时由顺序、分支、循环三种结构组成D.在 C语言中,程序的模块化是利用函数实现的 解析:解析:D 项正确,C 语言允许对函数单独进行编译,从而可以实现模块化。A 项错误,使用三种基本结构组成的
28、程序可以解决复杂的问题;B 项错误,使用 goto语句会使程序混乱,程序中应该尽量避免使用 goto语句;C 项错误,一个结构化程序没有必要同时由顺序、分支、循环三种结构组成。12.以下叙述中正确的是( )。(分数:2.00)A.书写源程序时,必须注意缩进格式,否则程序会有编译错误B.程序的主函数名除 main外,也可以使用 Main或_mainC.程序可以包含多个主函数,但总是从第一个主函数处开始执行D.在 C程序中,模块化主要是通过函数来实现的 解析:解析:C 语言的源程序中对缩进没有要求,所以 A选项错误。C 语言中区分大小写,main 函数不能写成 Main或_main,所以 B选项错
29、误。一个 C程序有且只有一个主函数,所以 C选项错误。13.以下叙述中正确的是( )。(分数:2.00)A.只能在函数体内定义变量,其他地方不允许定义变量B.常量的类型不能从字面形式上区分,需要根据类型名来决定C.预定义的标识符是 C语言关键字的一种,不能另作它用D.整型常量和实型常量都是数值型常量 解析:解析:变量可以定义在函数体外,也可以定义在函数体内,所以 A错误。常量的类型可以从字面形式上区分,比如 1为整型常量,10 为实型常量,a 为字符型常量,所以 B错误。预定义的标识符不是 C语言的关键字,所以 C错误。故 D选项正确。14.若有以下程序段: double x=51 6894:
30、 printf(“fn“,(int)(x*1000+05)(double)1000);则程序段的输出结果是( )。(分数:2.00)A.5170000B.5175000C.5169000 D.5168000解析:解析:本题考查强制类型转换与输出格式。f 的输出格式是以带小数点的数学形式输出浮点数。首先计算 x*1000,结果为 516894,加 05 为 516944,然后进行强制类型转换,转换成整型为5169,然后除以双精度数据 1000,结果为双精度数据 5169,输出时按照1 的格式输出,所以输出结果为 5169000。15.以下定义语句中正确的是( )。(分数:2.00)A.int a
31、=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错误;D 选项,b=11 前没有类型名,所以错误。16.若有以下程序: #includestdioh main() int a=一 11,b=10; a=b=4; printf(“d dn“,a,b); 则程序的输出结果是( )。(分数:2.00)A.1 2B.一 1 2 C.一 12D.12解析:解析:先计算 b=4,即 b=b4,结果为 2,然
32、后计算 a=2,结果为一 1,最后输出 a的值为一1,b 的值为 2,故 B选项正确。17.下面选项中关于位运算的叙述正确的是( )。(分数:2.00)A.位运算的对象只能是整型或字符型数据 B.位运算符都需要两个操作数C.左移运算的结果总是原操作数据的 2倍D.右移运算时,高位总是补 0解析:解析:本题考查位运算。按位取反只需要一个操作数,所以 B选项错误;左移一位是原操作数的 2倍,其他情况不是,比如左移两位就是原操作数的 4倍,所以 C选项错误;右移运算时,高位在某些情况下不是补 0,所以 D选项错误。故 A选项正确。18.若有以下程序: #includestdioh char fun(
33、char x) return x*x+a; main() char a,b=0; for(a=0;a4;a+=1) b=fun(a);putchar(b); printf(“n“); 则程序的输出结果是( )。(分数:2.00)A.abcdB.ABEJC.abej D.ABCD解析:解析:该题首先初始化变量 a和 b,通过 for循环语句使得 a取值为 0、1、2、3,fun 函数的功能是将 a*a+a的值返回给 b,即 b为 a、b、e、j。最后通过字符输出函数 putchar()将 b输出。故 C选项正确。19.有以下程序: #includestdioh main() int i,j; f
34、or(i=1;i4;i+) for(j=i;j4;j+) printf(“d*d=d“,i,j,i*j); printf(“n“); 程序运行后的输出结果是( )。(分数:2.00)A.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解析:解析:考查 for循环及其嵌套。第一个 for循环用来控制输出行数,第二个 for循环用来控制每行输出的表达式个数
35、。 当 i=1,j=1 时,第一行输出 3个表达式为: 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循环中判断条件不成立,循环结束,整个程序执行完毕。因此答案选 B。20.设有定义语句: double a,b,c; 若要求通过输入分别给 a、b、C 输入 1、2、3,输入形式如下(注:此处口代表一个空格): 口口 10 口口 20 口口 30回车 则能进行正确输入的语句是( )。(分数:2.00)A.scanf(“1f1f1f“,a
36、,b,c);B.scanf(“1f1f1f“,&a,&b,&c); C.scanf(“fff“,&a,&b,&c);D.scanf(“51lf51lf5llf“,&a,&b,&c);解析:解析:本题考查 scanf函数的格式化输入。scanf 函数的一般形式为 scanf(格式控制,变量 1地址,变量 2地址,)。其中,格式字符串要与数据类型保持一致,由于变量为 double型,所以格式字符串中应为1f,后面应该为变量地址,所以需要加上符号&,故 B选项正确。21.若有以下程序: #includestdioh main() int a=1,b=2,c=3,d=4; if(a=2)&(b=1)c
37、=2; if(c=3)(d=一 1)a=5; printf(“d,d,d,dn“,a,b,c,d); 则程序的输出结果是( )。(分数:2.00)A.2,2,2,4B.2,1,2,一 1C.5,1,2,一 1 D.1,2,3,4解析:解析:第一个 if语句的判断条件是逻辑与表达式,只有运算对象均非零,结果才为真。执行第一个 if判断条件,均为赋值表达式,第一个运算对象 a=2非零,判断第二个表达式 b=1也非零,所以条件成立,执行 c=2的赋值操作。执行第二个 if判断条件的逻辑或表达式,只要有一个对象非零,结果就是真。本条件中 c=3运算对象为假,所以需要判断第二个运算对象 d=一 1,结果
38、为一 1,非零,条件成立,执行 a=5的操作,所以 a值为 5,b 值为 1,c 值为 2,d 值为一 1。22.有以下程序: #includestdioh main() double x=20,y; if(x00)y=00; else if(x50)&(!x) y=10(x+20); else if(x100)y=10x; else y=100; printf(“fn“,y); 程序运行后的输出结果是( )。(分数:2.00)A.0000000B.0250000C.0500000 D.1000000解析:解析:本题重点考查 if语句,变量 x和 y均为 double类型,由于变量 x赋值为
39、20,因此执行if(x50)&(!x),即条件为 0,继续执行 if(x100),条件为真,即执行 y=10x;。依据printf()函数输出类型,f 是以小数形式输出单双精度实数。故 C选项正确。23.有以下程序: #includestdioh main() int a=一 2,b=0; while(a+&+b); printf(“d,dn“,a,b); 程序运行后输出结果是( )(分数:2.00)A.0,2B.0,3C.1,3D.1,2 解析:解析:本题考查 while语句。while 语句的语义是:计算表达式的值,当值为真(非 0)时,执行循环体语句。a+即 a先参与运算后,a 的值再自
40、增 1。+b 即 b先自增 1,然后再参与其他运算。当表达式的值为 0时,退出循环,最后输出 a和 b的值为 1和 2。故 D选项正确。24.若有以下程序: #includestdioh main() int a=6,b=0,c=0; for(;a;)b+=a;a 一=+c;) printf(“d,d,dn“,a,b,c); 则程序的输出结果是( )。(分数:2.00)A.1,14,3B.0,14,3 C.0,18,3D.0,14,6解析:解析:for 循环的判断条件是只要 a为 0就退出循环体。初始 a的值为 6,满足条件,执行完循环体,b 的值为 6,a 一=+c,即 a=a一(+c),所
41、以 a的值为 5,c 的值为 1。第二次循环后 b的值为 11,a的值为 3,c 的值为 2。第三次也是最后一次循环后,a 的值为 0,b 的值 14,c 的值为 3。故 B选项正确。25.以下叙述中正确的是( )。(分数:2.00)A.一条语句只能定义一个数组B.每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元 C.数组说明符的一对方括号中只能使用整型常量,而不能使用表达式D.在引用数组元素时,下标表达式可以使用浮点数解析:解析:A 选项中,一条语句只能定义一个数组是不准确的,可以通过一条语句定义多个数组;C 选项中,数组说明符的一对方括号中可以是整型常量,也可以是整型
42、常量表达式;D 选项中,在引用数组元素时,下标表达式必须是整型的。故 B选项正确。26.有如下程序: #includestdioh #includestringh main() char a=“1234“,*b=“ABC“; printf(“d d d dn“,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 5 1 3解析:解析:对于字符数组 a,含有 4个元素,所以 strlen为 4,而 sizeof包括最后隐藏的0(结束符),故 sizeof有
43、 5个。对于字符串 b,strlen 为 3,关键是 sizeof,这里的 sizeof不再是指数组的长度,因为 b是一个地址值,整型数据,所以占用了 4个字节。27.有如下程序: #includestdioh main() if(0=0)putchar(X); if(0=0) putchar(Y); if(ab)putchar(Z); printf(“n“); 程序运行后的输出结果是( )。(分数:2.00)A.YZB.XYZC.X D.Y解析:解析:本题考查字符的 ASCII码值。其中字符0的 ASCII码值是 0,字符0的 ASCII码值是48,字符a和字符b的 ASCII码值分别是 9
44、7、98,所以程序当中的三个 if判断语句,只有第一个判断条件成立,然后执行 putchar函数,输出 X。故 C选项正确。28.以下叙述正确的是( )。(分数:2.00)A.语句 int a43=1,2,4,5;是错误的初始化形式B.语句 int a43=1,2,4,5;是错误的初始化形式C.语句 int a3=1,2,4,5;是错误的初始化形式D.在逻辑上,可以把二维数组看成是一个具有行和列的表格或矩阵 解析:解析:二维数组在初始化时,可以省略第 1维,但是不可以省略第 2维,可以为部分数组元素初始化。A 选项、B 选项和 C选项内的初始化都没有错误。故 D选项正确。29.设有某函数的说明
45、为: int *func(int a10,int n); 则下列叙述中,正确的是( )。(分数:2.00)A.形参 a对应的实参只能是数组名B.说明中的 a10写成 a或*a,效果完全一样 C.func的函数体中不能对 a进行移动指针(如 a+)的操作D.只有指向 10个整数内存单元的指针,才能作为实参传给 a解析:解析:考查数组名作为函数参数。数组名作为函数参数时,只传递数组的首地址而不检查形参数组的长度,所以形参表中可以不给出形参数组的长度,形参数组和实参数组长度也可以不同,选项 D错;a10、a、*a 做形参都是接受实参数组首地址,效果一样,B 正确。传递给形参的实参可以是数组名,还可以
46、是指向该数组的指针变量,选项 A错。数组名可以看做一个指针常量,对其进行自加自减运算相当于指针变量的自加自减,选项 C错。答案选 B。30.有以下程序: #includestdioh int fun(int x,int y) if(x!=y)return(x+y)2); else return(x); main() int a=4,b=5,c=6; printf(“dn“,fun(2*a,fun(b,c); 程序运行后的输出结果是( )。(分数:2.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;解析:解析:数组定义中