1、国家二级( C语言)机试模拟试卷 102及答案与解析 一、选择题 1 下列叙述中正确的是 ( )。 ( A)算法的空间复杂度与算法所处理的数据存储空间有关 ( B)算法的空间复杂度是指算法程序控制结构的复杂程度 ( C)算法的空间复杂度是指算法程序中指令的条数 ( D)压缩数据存储空间不会降低算法的空间复杂度 2 下列各组排序法中,最坏情况下比较次数相同的是 ( )。 ( A)希尔排序与堆排序 ( B)简单插入排序与希尔排序 ( C)简单选择排序与堆排序 ( D)冒泡排序与快速排序 3 设栈的存储 空间为 S(1: 50),初始状态为 top=51o见经过一系列正常的入栈与退栈操作后, top
2、=20,则栈中的元素个数为 ( )。 ( A) 31 ( B) 30 ( C) 21 ( D) 20 4 某二叉树共有 400个结点,其中有 100个度为 1的结点,则该二叉树中的叶子结点数为 ( )。 ( A) 149 ( B) 150 ( C) 151 ( D)不存在这样的二叉树 5 下面属于 “类 -对象 ”主要特征的是 ( )。 ( A)对象一致性 ( B)对象无关性 ( C)类的多态性 ( D)类的依赖性 6 下面不属于需求 分析阶段工作的是 ( )。 ( A)需求获取 ( B)可行性研究 ( C)需求分析 ( D)撰写软件需求规格说明书 7 软件生命周期是指 ( )。 ( A)软件
3、的需求分析、设计与实现 ( B)软件的开发与管理 ( C)软件的实现和维护 ( D)软件产品从提出、实现、使用维护到停止使用退役的过程 8 在数据库的三级模式结构中,描述数据库中全体数据的全局逻辑结构和特征的是( )。 ( A)内模式 ( B)用户模式 ( C)外模式 ( D)概念模式 9 大学中每个年级有多个班,每个班有多名学生,则实 体班级和实体学生之间的联系是 ( )。 ( A)一对多 ( B)一对一 ( C)多对一 ( D)多对多 10 有 3个关系 R、 S和 T如下:则由关系 R、 S得到关系 T的操作是 ( )。 ( A)交 ( B)投影 ( C)自然连接 ( D)并 11 以下
4、选项中,合法的 C语言常量是 ( )。 ( A) 1 234 ( B) C+ ( C) 2 0 ( D) 2Kb 12 有以下程序: #include stdio h main() int s, t, A=10; double B=6: s=sizeof(A); t=sizeof(B); printf(“ d, d n“, s, t); 在 VC6平台上编泽运行,程序运行后的输出结果是 ( )。 ( A) 4, 8 ( B) 4, 4 ( C) 2, 4 ( D) 10, 6 13 关于程序模块化,以下叙述错误的是 ( )。 ( A)程序模块化可以提高程序运行的效率 ( B)程序模块化可以提高
5、程序编制的效率 ( C)程序模块化可以提高程序代码复用率 ( D)程序模块化可以提高调试程序的效率 14 以下选项中不能在 C语言程序中用作用户标识符的是 ( )。 ( A) auto ( B) scanf ( C) Float ( D) _3_14 15 设有语句: printf(“ 2d n, 2010);,则以下叙述正确的是 ( )。 ( A)程序运行时输出 2010 ( B)程序运行时输出 20 ( C)程序运行时输出 10 ( D)指定的输出宽度不够,编译出错 16 以下不属于 C语言整型常量的是 ( )。 ( A) 0L ( B) -018 ( C) 0Xa ( D) 200U 1
6、7 有以下程序: #include stdio h main() int x=1, y=0; if(!x)y+; else if(x=0) if(x)y+=2; else y+=3; printf(“ d n“, y); 程序运行后的输出结果是 ( )。 ( A) 1 ( B) 2 ( C) 0 ( D) 3 18 若变量已正确定义,在 if(w)printf(“ d n“, k);中,以下不可替代 W的是( )。 ( A) a b+c ( B) ch=getchar() ( C) a=b+c ( D) a+ 19 有以下程序: #include stdio h main() int a=0,
7、 1)=0: for(; a 7; a+) if(a 2=0)continue; b+=a; continue; printf(“ d n“, h); 程序运行后的输出结果是 ( )。 ( A) 0 ( B) 4 ( C) 1 ( D) 9 20 若有以下程序: #includtj stdio h main() char a=5, b; a+: printf(“ d, d n“, a-5+255, b=a-5); 执行后的输出结果是 ( )。 ( A) 256, 1 ( B) 1, 256 ( C) 255, 1 ( D) 256, 0 21 有以下程序: #iinclude stdio h
8、main() int a=7, b=0; dob+=a; a-=1; while(a-); printf(“ d, d n“, b, a); 执行后的输出结果是 ( )。 ( A) 28, 0 ( B) 28, 1 ( C) 16, 0 ( D) 16, -1 22 有以下程序: #include stdio h main() int x, a=1, b=1; while(1) scanf(“ d“, &x); if(x 0)a*=x; break; if(x 0)b*=x; continue; printf(“ d, d n“, a, b); 程序运行时输入: -1 -2 0 1 2回车,则
9、输出结果是 ( )。 ( A) 1, 2 ( B) 2, 2 ( C) -1, 1 ( D) -2, 1 23 有以下程序: #include stdio h #define N4 void fun(int aN, int b) int i; for(i=0; i N; i+)bi=aii-aiN-1-i; main() int xNN=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,16, yN, i; fun(x, y); for(i=0; i N; i+)printf(“ d, “, yi); printf(“ n“); 程序运行后的输
10、出结果是 ( )。 ( A) -3, -1, 1, 3, ( B) -12, -3, 0, 0, ( C) 0, 1, 2, 3, ( D) -3, -3, -3, -3, 24 有以下程序: #include stdio h main() int x32=0, i; for(i=0; i 3; i+)scanf(“ d“, xi); printf(“ 3d 3d 3d n“, x00, x01, x10); 若运行时输入: 2 4 6回车,则输出结果为 ( )。 ( A) 2 4 6 ( B) 2 0 0 ( C) 2 4 0 ( D) 2 0 4 25 有以下程序: #include st
11、dio h int m1(int x, int y) if(x =y)return 2*x+1; else return y; int m2(int x, int y) if(x =y)return2*y+1; else return x: main() int i, t1=10, t2=0; for(i=1; i =4: i+) t1=m1(i, t1); t2=m2(i, t2); printf(“t1= d t2= d n“, t1, t2); 程序运行后的输出结果是 ( )。 ( A) t1=9 t2=4 ( B) t1=4 t2=9 ( C) t1=9 t2=9 ( D) t1=1
12、t2=4 26 有以下部分程序: #include stdio h void f(int); main() void f(int); f(5); void f(int n) printf(“ d n“, n); 以下叙述中错误的是 ( )。 ( A) f函数中不可以出现 return语句 ( B)在主函数中, f(5);可以正确调用 f函数 ( C)在主函数后的其他函数可以正确调用 f函数 ( D) f函数无返回值,应当定义成 void类型 27 有以下程序: #include stdio h main() int i=3, j=5, *p=&i, *q=&j, *r; r=&q; print
13、f(“ d, d, d, d, d n“, i, j, *p, *q, *r); 执行后的输出结果是 ( )。 ( A) 3, 5, 3, 5, 5 ( B) 5, 3, 5, 3, 5 ( C) 3, 5, 3, 5, 3 ( D) 3, 5, 3, 3, 5 28 以下不能使指针 s所指存储单元的值增 1的选项是 ( )。 ( A) (*s)+; ( B) *s=*s+1; ( C) *s+; ( D) +*s; 29 以下语句中存在语法错误的是 ( )。 ( A) char ss 620; ss1=“right?“; ( B) char ss20=”“right?“; ( C) char
14、*ss6; ss1=“right?“; ( D) char*ss=“right?“; 30 有以下程序: #include stdio h int fun() static int x=1: x*=2: retum x; main() int i, s=1: for(i=1; i =3; i+) s*=fun(); printf(“ d n“, s); 程序运行后的输出结果是 ( )。 ( A) 30 ( B) 10 ( C) 0 ( D) 64 31 有以下程序 (注:字符 a的 ASCII码值为 97): #include stdio h main() char *s=“abc“; do
15、printf(“ d“, *s 10); +s; while(*s); 程序运行后的输出结果是 ( )。 ( A) abc ( B) 789 ( C) 7890 ( D) 979899 32 有以下程序: #include stdio h #include string h main() int i, len; char b=“Welcome you to Beijing!“; len=strlen(b); for(i=0; i len; i+) if(bi= ) strcpy(b, b+i+1); i=0; printf(“ s n“, b); 程序运行后的输出结果是 ( )。 ( A) B
16、eijing! ( B) to Beijing! ( C) Welcome you to Beijing! ( D) you to Beijing! 33 以下关于字符串处理的叙述正确的是 ( )。 ( A)进行字符串复制时,目的串的存储空间必须足够大 ( B)两个字符串进行比较时,短的一个必定比长的一个小 ( C)计算一个字符串的长度时,应包含串尾的结束标志 ( D)两个字符串连接时,对存储空间的大小没有要求 34 有以下程序: #include stdio h double fun(int n) static double f=1; f*=n: return f; main() int i
17、; double s=0: for(i=1; i 6; i+) s+=fun(i); printf(“ 1f n“, S); 程序计算的是 ( )。 ( A) s=1!+2!+3!+4!+5! ( B) s=1+2+3+4+5 ( C) s=1*2*3*4*5 ( D) s=1!*2!*3!*4!*5! 35 下面结构体的定义语句中,错误的是 ( )。 ( A) struct ordint x; int y; int z; struct ord a; ( B) struct ordint x; int y; int z; ; struct ord a; ( C) struct ordint x
18、; int y; int z; a; ( D) structint x; int y; int z; a; 36 有以下程序: #include stdio h main() FILE*fp; int a10=1, 2, 3, i, n; fp=fopen(“d1 dat“, “w“); for(i=0; i 3; i+)fprintf(fp, “ d“, ai); fprintf(fp, “ n“); fclose(rp); fp=fopen(“d1 dat“, “r“); fscanf(fp, “ d“, &n); fclose(fp); printf(“ d n“, n); 程序的运行结
19、果是 ( )。 ( A) 123 ( B) 12300 ( C) 1 ( D) 321 37 有以下程序: #include stdio h #define MUL1(x, y)x*y #define MUL2(x, y)(x)*(y) #define MUL3(x, y)(x*y) main() int m=2, n=3; printf(“ d, d, d n“, MUL1(m, m+n)*2, MUL2(m, m+n)*2, MUk3(m,m+n)*2); 程序运行后 的输出结果是 ( )。 ( A) 10, 20, 14 ( B) 20, 20, 20 ( C) 10, 10, 10 (
20、 D) 14, 14, 14 38 有以下程序: #include stdio h void fun(int a) if(a 1)fun(a-1); printf(“ d“, a); main() int q=5; fun(q); printf(“ n“); 执行后的输出结果是 ( )。 ( A) 1 2 3 4 5 ( B) 5 4 3 2 1 ( C) 0 1 2 3 4 5 ( D) 5 4 3 2 1 0 39 以下关于 C语言文件的叙述中正确的是 ( )。 ( A)文件南数据序列组成,其类型可以为二进制文件或文本文件 ( B)文件由记录序列组成,其类型可以为二进制文件或文本文件 (
21、C)文件由字符序列组成,其类型可以为二进制文件或文本文件 ( D)文件由数据序列组成,其类型只能是二进制文件 40 设有定义和语句 (假设 short int型数据占 2字节 ) short int*pi, *pj; pi=pj=(short, *)malloc(2); 则以下叙述正确的是 ( )。 ( A) pi和 pj指向了同一 个 short int型存储单元 ( B) pi和 pj指向了 2个连续的 short int型存储单元的首地址 ( C) pi和 pj分别指向了一个 short int型存储单元 ( D) pi和 pj分别指向了 2个 short int型存储单元 二、程序填空
22、题 41 下列给定程序中,函数 fun的功能是:将 s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的次序。 例如, s所指的字符串为 “def35adh3kjsdf7”,执行后结果为 “defadhajsdf3537”。 请在程序的下划 线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! #include stdio h void fun(char*s) int i, j=0, k=0; char t180, t280; for(i=0; si!= 0; i+)
23、 if(si =0&si =9) *found* t2j=si; 1; else t1k+=si; t2i=0; t 1k=0; *found* for(i=0; i k; i+)2; *found* for(i=0; i 31; i+)sk+i=t2i; main() char s80=“ba3a54j7sd567sdffs“; printf(“ nThe original string is: s n“, s); fun(s); printf(“ nThe result is: s n“, s); 三、程序修改题 42 给定程序 modil c的主函数中,将 a、 b、 c三个结点链成一个
24、单向链表,并给各结点的数据域赋值,函数 fun()的作用是:累加链表结点数据域中的数据作为函数值返回。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include stdio h typedef struct list int data; struct list*next; LIST; int fun(LIST*b) LIST*p; *found* int t; p=h; *found* while(*p) *found* t=t+p data; p=(*p) next; return t; m
25、ain() LIST a, b, c, *b; bdata=34; b data=51; c data=87; c next= 0; h=&a; bnext=&b; b next=&c; printf(“总 和 = d n“, fun(h); 四、程序设计题 43 规定输入的字符串中只包含字母和 *号。请编写函数 fun,其功能是:将字符串尾部的 *号全部删除,前面和中间的 *号不动。 例如,字符串中的内容为: “*A*BC*DEF*G*”,删除后,字符串中的内容应当是: “*A*BC*DEF*G”。在编写函数时,不得使用 C语言提供的字符串函数。 注意:部分源程序在文件 PROG1 C中。
26、请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include stdio h void fun(char*a) main() char s81; void NONO(); printf(“Enter a string: n“); gets(s); fun(s); printf(“The string after deleted: n“); puts(s); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE*in, *out; int i; char s81; in=fope
27、n(“in dat“, “r“); out=fopen(“out dat“, “w“); for(i=0; i 10; i+) fscanf(in, “ s“, s); fun(s); fprintf(out, “ s n“, s); fclose(in); fclose(out); 国家二级( C语言)机试模拟试卷 102答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 算法的时间复杂度是指执行这个算法所需要的内存空间,包括 3个部分:输入数据所占的存储空间;程序本身所占的存储空问;算法执行 过程中所需要的额外空间。为了降低算法的空间复杂度,主要应减少输入数据所占的存储空间以及额外
28、空间,通常采用压缩存储技术。故 A选项正确。 2 【正确答案】 D 【试题解析】 对长度为 n的线性表,下表为常用排序算法最坏情况下比较次数:上表中未包括希尔排序,因为希尔排序的时间效率与所取的增量序列有关,如果增量序列为: d1=n 2, di+1=di 2,在最坏情况下,希尔排序所需要的比较次数为 O(n1 5)。由上表可知冒泡排序与快速排序比较次数相同,故 D选项正确。 3 【正确答案】 A 【试题解析】 栈是一种特殊的线性表,它所有的捕入与删除都限定在表的同一端进行。人栈运算即在栈顶位置插入一个新元素,退栈运算即取出栈顶元素赋予指定变量。栈为空时,栈顶指针 top=0,经过入栈和退栈运
29、算,指针始终指向栈顶元素。初始状态为 top=51,当 top=20时,元素依次存储在单元 20: 50中,个数为50-19=31,故 A选项正确。 4 【正确答案】 D 【试题解析】 在树结构中,一个结点所拥有的后件个数称为该结点的度。对任何一棵二叉树,度为 0的结点 (即叶子结点 )总是比度为 2的结点多一个。二叉树中有400个结点,设叶子结点个数为 n0,度为 l的结点个数为 100,没度为 2的结点个数为 n2。 400=n0+100+n2且 n0=n2+1,则 n0=150 5, n2=149 5。由于结点个数必须是整数,所以不存在这样的二叉树,故选择 D选项。 5 【正确答案】 C
30、 【试题解析】 类 对象的基本特点如下。由上表可知 “类 对象 ”主要特征包括类的多态性,故 C选项正确。 6 【正确答案】 B 【试题解析】 需求分析阶段对待开发软件提出的需求进行分析并给出详细定义,编写软件规格说明书及初步的用户手册,提交评审,可以分为 4个方面:需求获取、需求分析、编写需求规格说明书和需求评审。可行性研究是软件生命周期的第二阶段主要任务,在需求分析之前,故选择 B选项。 7 【正确答案】 D 【试题解析】 通常把软件产品从提出、实现、使用、维护到停止使用、退役的过程称为软件生命周期,故 D选项正确。 8 【正确答案】 D 【试题解析】 数据库系统在其内部分为三级模式,即
31、概念模式、内模式和外模式。慨念模式是数据库系统中全局数据逻辑结构的描述,全体用户的公共数据视图。外模式也称子模式或者用户模式,是用户的数据视图,也就是用户所能够看见和使用的局部数据的逻辑结构和特征的描述,是与某一应用有关的数据的逻辑表示。内模式又称物理模式,是数据物理结构和存储方式的捕述,是数据在数据库内部的表示方式。描述数据库中全体数据的全局逻辑结构和特征的是概念模式,故 D选项正确。 9 【正确答案】 A 【试题解析】 实体集之问通过联系来建立联接关系分为三类:一对一联系 (1:1)、一对多联系 (1: m)、多对多联系 (m: n)。每个班有多名学生,但每个学生只能在一个班级里,故实体班
32、级和实体学生之间的联系是一对多,故 A选项正确。 10 【正确答案】 C 【试题解析】 交: RS结果是既属于 R又属于 S的记录组成的集合。并: R S是将 S中的记录追加到 R后面。上二述两种操作中,关系 R与 S要求有相同的结构,故 A、 D选项错误。投影是指从关系模式中指定若干个属性组成新的关系。由于 T中含有 R中不存在的属性,明显不可能由 R向 S投影得到 T,故 B选项错误。自然连接:去掉重复属性的等值连接。 R与 S重复属性是 A,等 值元组为 a和 c,进行自然连接得到的两个元组按照属性 ABCD的顺序为 c3f4与 a1n5,正好为题目中关系 T,故 C选项正确。 11 【
33、正确答案】 A 【试题解析】 C语言常量表示:程序运行时,其值不发生改变,包括字面常量、符号常量等。选项 A属于字面常量中的实型常量,故正确;字符常量是用单引号括起来的单个字符,故选项 B错误;字符串常量是用双引号括起来的多个字符,故选项 C、 D错误。因此,答案选 A。 12 【正确答案】 A 【试题解析】 VC6平台上规定 int型整数占 4个字节, double型占 8个 字节,sizeof()是取类型所占字节数的运算符,所以答案选 A。 13 【正确答案】 A 【试题解析】 程序模块化的目的是为了降低程序的复杂度,使程序设计、调试和维护等操作简单化,降低程序的复杂度可以提高程序的编制效
34、率和调试效率,每个模块可以复用,提高了程序代码的复用率,故选项 B、 C、 D正确;程序的运行效率与程序的算法、实现有关,与程序模块化无关,故答案选 A。 14 【正确答案】 A 【试题解析】 C语言的标识符是由字母、数字和下划线组成,第一个字符不能是数字,只能是字母或下划线; A、 B、 C、 D都是合法的标识符; auto是 C语言的关键字,不能用作用户标识符,故选项 A错误; scanf是标准库函数名,可以用作用户标识符,只是在使用标识符的地方不能包含 stdio h头文件,故选项 B正确; C语言的标识符区分大小写, Float与关键字 float不同,可以用作用户标识符,故选项 C正
35、确; _3_14是合法的用户标识符,故选项 D正确;因此答案选A。 15 【正确答案】 A 【试题解析】 printf()函数格式化字符串的一般形式为: 标志 输出最小宽度 精度 长度 类型。对于 “ 2d n“表 示结果以十进制形式输出带符号的整数,数字 2表示输出的最小宽度为 2,若实际位数多于 2,则按实际位数输出,所以程序输出2010,故答案选 A。 16 【正确答案】 B 【试题解析】 C语言中,整数可以有八进制、十进制和十六进制 3种表示形式,十进制的数码取值为 0 9,没有前缀;八进制的数码取值为 0 7,必须以 0开头,作为八进制数的前缀;十六进制的数码取值为: 0 9, A
36、F或 a f,前缀为0X或 0x。另外,对于长整型数,使用后缀 L或 l来表示,无符号数使用后缀 U或u来表示; 0L表示十进制长整型数 0,故选项 A正 确; 0Xa表示十六进制数 a,即十进制数值 10,故选项 C正确; 200U表示十进制无符号整型数 200,故选项 D正确;负数一般使用二进制补码形式保存在内存中,按照八进制显示时,前缀 0在最前面,后面的数值由二进制补码转换成八进制,无负数符号,在 C程序中,只有十进制数可以是负数,而八进制和十六进制数只能是整数。因此答案为 B。 17 【正确答案】 C 【试题解析】 因为 x=1, !x为 0, x=0为 false,所以 if和 e
37、lse if的判断条件都不满足,程序运行时只执行 x, y的初始化语句和 printf()函数, 打印出 y的值为 0,故答案为 C。 18 【正确答案】 A 【试题解析】 if语句中的判断条件是表达式,该表达式通常是逻辑表达式或关系表达式,也可以是算术表达式或赋值表达式,甚至是一个常量或变量,只要是语句合法的表达式即可,选项 B是合法的赋值表达式,正确;选项 C是关系表达式,正确;选项 D都算术表达式,也是合法的表达式,正确;选项 A中的符号不合法,故答案选 A。 19 【正确答案】 D 【试题解析】 由程序可知, for循环中 a的取值为 0 6,其中若 if条件满足,则b+=a不会执行,
38、所以当 a取 值为 1, 3, 5时, b+=a才会被执行,所以循环结束,b=1+3+5,输出结果为 9,故答案选 D。 20 【正确答案】 A 【试题解析】 C语言中,字符变量可以作为 0 255范围的整数数据参与算术运算,首先 a=5,然后执行自增运算, a=6,在执行 a-5+255,由于 255默认表示整型数据,所以需要将 char类型转换为 int,与 255运算,即 256。另外, a-5的值为 1,最后将 256、 1按照十进制整数格式输出,输出结果为 256, 1,故答案选A。 21 【正确答案】 D 【试题解 析】 分析程序可知, do语句 1while( 语句 2),每次循
39、环在语句 1中 a的值减 1,在语句 2中判断 a的值后, a的值又减 1,所以在每次循环体执行完后, b累加的 a的值分别为 7, 5, 3, 1, a的值分别为 6, 4, 2, 0,最后当 a为 0时, while判断条件为 false,此时 a的值再减 1,为 -1,到此循环结束,所以 b的值为 16, a的值为 -1,故答案选 D。 22 【正确答案】 A 【试题解析】 分析程序结构,存 while循环中,输入 x的值后,若 x的值大于0,将 a的值累乘 x,执行 break语句跳出循环;若 x的值小 于 0,将 b的值累乘x,执行 continue,进行下一个循环;当 x的值等于
40、0时,打印 a、 b的值,进入下一个循环:所以当输入 -1、 -2后, b累乘为 2;输入 0后,打印 a、 b的值为 1,2,再输入 1, a累乘跳出循环程序运行结束;输出结果为 1, 2,故答案为 A。 23 【正确答案】 A 【试题解析】 分析程序结构,可知程序在 main函数中初始化一个 44的二维数组,然后调用 fun()函数用二维数组 x为一维数组 y赋值,最后将数组 y打印出来,所以重点是分析 fun()函数中如何使用实参 x给实参 y赋值。在 fun()函 数中,每次使用 aii-aiN-1-i为 b的第 i个元素赋值,由于 for循环中 i的取值分别为0、 1、 2、 3,所
41、以 b的 4个元素赋值分别为: a00-a03, a11-a12,a22-a21, a33-a3儿 0,对应的赋值为: 1-4, 6-7, 11-10, 16-13, b的 4个元素值为: =3、 -1、 1、 3。答案选 A。 (注:仔细观察 aij、 ajN-1-i可以发现,它们分别对应 44矩阵的对角线元素和反对角线元素 ) 24 【正确答案】 D 【试题解析】 分析程序可知, main函数首先初始化一个 32的二维数组 x,其中每个元素的初值为 0,然后通过 for循环,为 x的行首元素重新赋值 (xij为每行行首元素的地址 ),当输入 2、 4、 6后,行首元素 x00、 x10、
42、x20的值为2、 4、 6,所以输出为: 2、 0、 4,故答案选 D。 25 【正确答案】 A 【试题解析】 由程序可知, main函数的 for循环中 i的取值为 1、 2、 3、 4。 t1初值为 10, t2初值为 0,当 i=1时,传入函数 m1参数为: 1、 10,因为 1 10,所以函数 m1的返回值为 21+1=3;传入函数 m2的参数为 1、 0,因为 1 0,所以返回值为 1;即第一轮循环后, t1=3, t2=1,当 i=2时,传入函数 m1的参数为2、 3,因为 2 3,所以函数返回值为 22+1=5;传入函数 m2的参数为 2、 1,因为 2 1,所以函数返回值为 2
43、;即第二轮循环后, t1=5, t2=2;当 i=3时,传入函数 m1的参数为 3、 5,因为 3 5,所以返回值为 23+1=7;传入函数 m2的参数为 3、 2,因为 3 2,所以返回值为 3;即第三轮循环后, t1=7, t2=3;当 i=4时,传入函数 m1的参 数为 4、 7,因为 4 7,所以函数返回值为 24+1=9,传入函数m2的参数为 4、 3,因为 4 3,所以函数返叫值为 4,即第四轮循环后, t1=9,t2=4。故答案选 A(仔细分析可以发现,对于 m1函数,由于第一次 1 10,导致后面每次参数 x都是 i,而参数 y郁是 2i-1,返回值郁是 2i+1;同理,对于
44、m2函数,由于第一次 1 0,导致后面每次参数 x都是 i,而 y都是 i-1,返回值都是 i,所以最终结果为 t1=24+1, t2=4)。 26 【正确答案】 A 【试题解析】 函数说明可以放在调用函数内,如在 main函数内部进行说明,则只能在 main函数内部才能识别此函数。所以在 main函数中。 f(5)可以被正确调用,故选项 B正确;由于在 main()函数之前也说明了 f()函数,所以在 main函数后的其他函数也可以正确调用 f()函数,故选项 C正确; f()函数没有返回值,应该定义成 void类型,故选项 D正确;虽然 f()函数没有返回值,为了在函数体的任意地方退出,可
45、以使用 return语句,只是 return后不用加返回值,故选项 A错误,因此答案为 A。 27 【正确答案】 A 【试题解析】 main()函数中初始化 i的值为 3, j的值为 5,并始化指针 p指向i,指针 q指向 j,另外,还定义了一个二维指针 r,指向 q,所以 *p的值是 i的值3, *q的值是 j的值 5, *r等 *q,是 j的值 5,所以输出的结果是: 3、 5、 3、 5、5,答案选 A。 28 【正确答案】 C 【试题解析】 选项 A首先获取 s指向的存储单元的值,使用完该值后,将该值自增 1,正确;选项 B首先获取 s指向的仔储单元的值,并将该值加 1后重新赋给该存储
46、单元,正确;选项 D首先获取 s指向的存储单元的值,然后将该值自增 1,再使用加 1后的新值,正确;选项 C中, *ss+的 含义是首先获取 s指向的存储单元的值,然后再将指针 s向后移动一位,所以答案为 C。 29 【正确答案】 A 【试题解析】 二维数组第一维的大小在始化时可以不指定,当第一维的人大小初始化没有指定时按如下规则确定:若初值个数能被第二维大小整除,所得的商就是第一维的大小,若不能整除,则所得的商甲 1作为第一维的大小,所以选项 B相当于: char ss120=“right? “:其中 ss00=r、 ss01=i 。故选项 B正确;选项 C中声明一个字符指针数组 ss, s
47、s中每个元素都是 一个字符指针,ss1=“right?”相当于将字符串 “right?”的首地址赋值给字符指针 ss1,故选项 C正确;选项 D,声明一个字符指针数组 ss,并初始化笫一个元素,使它指向字符串 “right”,故选项 D正确;选项 A定义二维字符数组 ss所以 ss1可看作是一个字符数组, ss1=“right?”相当于将一个字符串的首地址赋值给一个字符数组,这是错误的,字符数组如果没有初始化,则只有对数组中的每个元素逐个腻值,因此答案为 A。 30 【正确答案】 D 【试题解析】 分析程序可知, main函 数中初始化 s=1,然后根据 i的值 1、 2、 3执行 3次 for循环,每次将 s当前值与函数 fun()的返回值相乘,并将乘积赋给 s,所以 for循环等价于: s=s*fun()*fun()*fun();可见 s的值取决于 fun()函数的返回值。在 fun()函数中,定义了一个静态局部变量