1、国家二级( C语言)机试模拟试卷 35 及答案与解析 一、选择题 1 下列叙述中正确的是 ( A)算法复杂度是指算法控制结构的复杂程度 ( B)算法复杂度是指设计算法的难度 ( C)算法的时间复杂度是指设计算法的工作量 ( D)算法的复杂度包括时间复杂度与空间复杂度 2 设循环队列的存储空间为 Q(1:50),初始状态为 front=rear=50。现经过一系列入队与退队操作后, front=rear=1,此后又正常地插入了两个元素。最后该队列中的元素个数为 ( A) 2 ( B) 1 ( C) 3 ( D) 52 3 一棵完全二叉树共有 360个结点,则在该二叉树中度为 1的结点个数为 (
2、A) 0 ( B) 1 ( C) 180 ( D) 181 4 设某二叉树的后序序列与中序序列均为 ABCDEFGH,则该二叉树的前序序列为 ( A) HGFEDCBA ( B) ABCDEFGH ( C) EFGHABCD ( D) DCBAHGFE 5 在排序过程中,每一次数据元素的移动会产生新的逆序的排序方法是 ( A)快速排序 ( B)简单插入排序 ( C)冒泡排序 ( D)以上说法均不正确 6 下面对软件工程描述正确的是 ( A)软件工程是用工程、科学和数学的原则与方法研制、维护计算机软件的有关技术及管理方法 ( B)软件工程的三要素是方法、工具和进程 ( C)软件工程是用于软件的定
3、义、开发和维护的方法 ( D)软件工程是为了解决软件生产率问题 7 耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是 ( A)内聚性是指模块间互相连接的紧密程度 ( B)提高耦合性降低内聚性有利于提高模块的独立性 ( C)耦合性是指一个模块内部各个元素间彼此结合的紧密程度 ( D)降低耦合性提高内聚性有利于提高模块的独立性 8 下列关于数据库系统的叙述中正确的是 ( A)数据库系统中数据的一致性是指数据类型一致 ( B)数据库系统避免了一切冗余 ( C)数据库系统减少了数据冗余 ( D)数据库系统比文件系统能管理更多的数据 9 一名演员可以出演多部电影,则实体演员和电影之间的联系
4、是 ( A)多对多 ( B)一对一 ( C)多对一 ( D)一对多 10 以下数组定义中错误的是 ( )。 ( A) int x23 1,2,3,4,5,6; ( B) int x3 0; ( C) int x3 1,2,3, 4,5,6; ( D) int x23 1,2, 3,4, 5,6; 11 有以下程序 #include stdio.h main() int a=2,b=3,c=4; a*=16 +(b+) - (+c); printf(“%d n“,a ); 程序运行后的输出结果是 ( A) 15 ( B) 30 ( C) 28 ( D) 14 12 以下叙述正确的是 ( A)通过
5、分解成简单子任务,可以完成任何复杂任务 ( B) 每个结构化程序都要包含全部三种基本结构 ( C) C语言程序的所有自定义函数只能写在同一个源文件中 ( D) C语言程序允许使用多个 main函数,只要它们的函数体各不相同即可 13 以下选项中,合法的 C语言实数是 ( A) E4.8 ( B) 4.3e0.2 ( C) 4.00E-01 ( D) 0.29E 14 设 a,b,c已定义为整型变量,以下选项中不正确的赋值表达式是 ( A) a = 3 = (b = 2) = 1; ( B) a = (b = 0) * c + 1; ( C) a = (b = 0) * c + 1; ( D)
6、a = 10 % (b = c = 2.0); 15 若变量已正确定义并赋初值,以下合法的赋值语句是 ( A) k=(m=n); ( B) k=-m-n ( C) k=int(m+n); ( D) k=m*n=1; 16 以下关于逻辑运算符两侧运算对象的叙述中正确的是 ( A)只能是整数 0或 1 ( B)只能是整数 0或非 0整数 ( C)可以是结构体类型的数据 ( D)可以是任意合法的表达式 17 以下选项中错误的是 ( A) printf(“%sn“, s); ( B) printf(“%d %cn“, s,s); ( C) printf(“%cn“, s- 32); ( D) prin
7、tf(“%cn“, 65); 18 若有定义: char ch;当执行以下循环时从键盘输入 abcde回车,将输出 *的个数是 while(ch=getchar()=e) printf(“*“); ( A) 4 ( B) 0 ( C) 5 ( D) 1 19 有以下程序 #include stdio.h main() int x=10,y=11,z=12; if( y z ) x=y; y=z; z=x; printf(“x=%d y=%d z=%dn“, x, y, z ); 程序运行后的输出结果是 ( A) x=11 y=12 z=11 ( B) x=10 y=10 z=10 ( C) x
8、=11 y=11 z=10 ( D) x=10 y=10 z=12 20 对于 if(表达式 )语句,以下叙述正确的是 ( A)表达式不能是变量 ( B)表达式的值只能是整数值 ( C)表达式可以是常量 ( D)表达式中 不可以出现字符型变量的比较 21 有以下程序 #include stdio.h main( ) char ch = 1; while (ch 9) printf(“%d“, ch - 0); ch+; 程序运行后的输出结果是 ( A) 12345678 ( B) 1234567 ( C) 0 ( D) 1 22 以下与表达式 (!x=0) 的逻辑值不等价的选项是 ( A) x
9、=1 ( B) x ( C) x!=0 ( D) x 0 | x 0 23 以下叙述正确的是 ( A)表达式 9-0的值是数值 9 ( B)表达式 A+32的值是字母 A的 ASCII码 ( C)表达式 a-32的值是字母 a的 ASCII码 ( D)表达式 9+0的值是字符 9的 ASCII码 24 有以下程序 #include stdio.h 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,
10、fun( b, c ) ) ); 程序运行后的输出结果是 ( A) 3 ( B) 6 ( C) 8 ( D) 12 25 有以下程序 #include stdio.h int f( int x,int y) return(y-x)*x); main() int a=3,b=4,c=5,d; d=f(f(a,b),f(a,c); printf(“%dn“,d); 程序运行后的输出结果是 ( A) 8 ( B) 10 ( C) 9 ( D) 7 26 有以下程序 #include stdio.h void fun( int a , int n, int flag ) int i=0,j, t; f
11、or ( i=0; i n-1; i+ ) for ( j=i+1; j n; j+ ) if ( flag ) if ( ai aj ) t = ai; ai = aj; aj = t; else if ( ai aj ) t = ai; ai = aj; aj = t; main( ) int c10= 7,9,10,8,3,5,1,6,2,4 ,i; fun( c, 4, 1 ); fun( c+4, 6, 0 ); for ( i=0;i 10; i+ ) printf( “%d,“, ci ); printf(“n“); 程序运行后的输出结果是 ( A) 7,8,9,10,6,5,4
12、,3,2,1, ( B) 10,9,8,7,6,5,4,3,2,1, ( C) 10,9,8,7,1,2,3,4,5,6, ( D) 1,2,3,4,5,6,7,8,9,10, 27 有以下程序 #include stdio.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 ) return 2*y+1; else return x; main() int i, t1=10, t2=0; for( i=1; i =4; i+ ) t1=m1( i,t1
13、 ); 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 t2=4 28 有以下程序 #include stdio.h void f1(char *a, char b ) char c; c=*a; *a=b; b=c; void f2(char a, char b ) char c; c=a; a=b; b=c; void f3(char *a, char *b ) char c; c=*a; *a=*b; *b
14、=c; main() char t1, t2; t1 = A; t2 = B; f3( putchar(t1); putchar(t2); t1 = A; t2 = B; f2( t1, t2 ); putchar(t1); putchar(t2); t1 = A; t2 = B; f1( putchar(t1); putchar(t2); printf(“n“); 程序运行后的输出结果是 ( A) ABBABB ( B) BAABBB ( C) BABABA ( D) BABAAB 29 以下叙述正确的是 ( A) char c1, *c2, *c310; 是合法的变量定义语句 ( B)数组
15、说明符的一对方括号中不能使用表达式 ( C)数组元素下标可以是非整数 ( D)若有定义 char array4; 则语句 printf(“%c“, array“3“);是合法的 30 有以下程序 #include stdio.h main( ) int a33=1,3,5, 7,9,11, 13,15,17; int (*p)3=a, i,j,n=0; for(i=0;i 3;i+) for(j=0;j 2;j+) n+=*(*(p+i)+j); printf(“%dn“,n); 程序运行后的输出结果是 ( A) 54 ( B) 60 ( C) 36 ( D) 48 31 设有定义: char
16、 p=1, 2, 3,*q=p; 以下不能计算出一个 char型数据所占字节数的表达式是 ( A) sizeof(*q) ( B) sizeof(char) ( C) sizeof(p) ( D) sizeof(p0) 32 有以下程序 #include stdio.h fun(int x, int y) static int m=0, i=2; i+=m+1; m=i+x+y; return m; main() int j=1, m=1, k; k=fun(j,m); printf(“%d,“,k); k=fun(j,m); printf(“%dn“,k); 执行后的输出结果是 ( A) 5
17、, 11 ( B) 5, 5 ( C) 11, 11 ( D) 11, 5 33 有以下程序 #include stdio.h int f( int x, int n ) if ( n 1) return xn-1+ f(x, n-1)*10; else return x0; main( ) int z3 = 1,2,3, y; y = f(z,3); printf( “%dn“, y ); 程序运行后的输出结果是 ( A) 321 ( B) 123 ( C) 1 ( D) 3 34 有以下程序 #include stdio.h #include string.h main() char ss
18、10=“12345“; strcat( ss, “6789“ ); gets( ss ); printf(“%sn“, ss ); 执行时输入: ABC回车,则输出结果是 ( A) 123456ABC ( B) ABC9 ( C) ABC ( D) ABC456789 35 有以下程序 #include stdio.h #include string.h main() printf(“%dn“, strlen(“0tn0C0111“); 程序运行后的输 出结果是 ( A) 3 ( B) 13 ( C) 1 ( D) 0 36 有以下程序 #include stdio.h int show( c
19、har *str ) while (*str) putchar(*str+1); str+; return *str+1; main( ) printf(“%dn“, show(“ABCD“); 程序运行后的输出结果是 ( A) ABCD0 ( B) BCDE0 ( C) BCDE1 ( D) ABCD1 37 有以下程序 #include stdio.h void my_put() char ch; ch = getchar(); if (ch != C) my_put(); putchar(ch); main( ) my_put(); 执行时输入: ABC回车,则输出结果是 ( A) AB
20、C ( B) CBA ( C) AB ( D) ABCC 38 有以下程序 #include stdio.h void fun(int n) static int x3=1,2,3; int k; for( k=0; k 3; k+ ) xk += xk-n; for( k=0; k 3; k+ ) printf(“%d,“,xk); main() fun(0); fun(1); 程序运行后的输出结果是 ( A) 1,2,3,0,1,2, ( B) 2,4,6,1,3,5, ( C) 2,4,6,3,7,11, ( D) 2,4,6,4,8,12, 39 有以下定义 struct person
21、 char name10; int age; ; struct person class10= “Johu“,17, “Paul“,19, “Mary“,18, “Adam“,16, ; 能输出字母 M的语句是 ( A) printf(“%c n“, class2.name0 ); ( B) printf(“%c n“, class3.name0 ); ( C) printf(“%c n“, class3.name1 ); ( D) printf(“%c n“, class2.name1 ); 40 若要通过位运算使整型变量 a中的各位数字全部清零,以下选项正确的是 ( A) a=a0; (
22、B) a=a|0; ( C) a=a ( D) a=!a; 二 、程序填空题 41 下列给定程序中,函数 fun的功能是:计算如下公式前 n项的和,并作为函数值返回。 例如,当形参 n的值为 10时,函数返同值为 9 612558。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include Stdio h double fun(int n)( int i;double s, t; /*found*/ s=【 1】;/*found*/ for(i=1; i =【 2】; i+) t=
23、2 0 i,/*found*/ s=s+(2 0*i1)*(2 0*i+1)【 3】; return s; void main() int n=一 1; while(n 0) printf(”Please input(n 0): ”); scanf(”ct”, n); ) printf(” nThe result is: f n”, fun(n); 三、程序修改题 42 下列给定程序中函数 fun的功能是:逐个比较 p、 q所指两个字符串对应位置上的字符,并把 ASCII值大或相等的字符依次存放到 c所指的数组中,形成一个新的字符串。 例如,若主函数中 a字符串为 “aBCDeFgH”, b字
24、符串为 “ABed”,则 c中的字符串应为 “aBcdeFgH”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include string h void fun(char*P, char*q, char*c) /*found*/ int k=1: /*found*/ while(*P!=*q) ( if(*P *q)Ck=*q; else ck=*p; if(*P)P+; if(*q)q+; k+: main() char a10=“aBCDeFgtt”, b10= “AB
25、ed”, c80= 0), fun(a, b, c); printf(“The string a: ”); puts(a), printf(“The string b: ”); puts(b), printf(“The result: ”), puts(c), 四、程序设计题 43 规定输入的字符串中只包含字母和 *号。请编写函数 fun,其功能是:只删除字符前导和尾部的 *号,串中字母间的 *号都不删除。形参 n给出了字符串的长度,形参 h给出了字符串中前导 *号的个数,形参 c给出了字符串中尾 部 *号的个数。在编写函数时,不得使用 C语言提供的字符串函数。 例如,字符串中的内容为 “*A
26、*BC*DEF*G*”,删除后,字符串中的内容应当是 “A*BC*DEF*G”。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #includo stdio h #include conio h void fun(char*a, int n, int h, int e) void main() char s81, *t, *f; int m=0, tn=0, fn=0; printf(“Enter a string: n”), gets(s); t=f=s; while(*t) t+, m+; *m为字
27、符串的长度 * t一一; *指针 t指向字符串尾部 * while(*t=*) t一一 ;tn+; *指针 t指向最后一个字母, tn统计尾部 *的个数 * while(*f=*) f+; fn+;) *指针 f指向第一个字母, tn统计前导 * 的个数 * fun(s, m, fn, tn); printf(“The string after deleted: n”); puts(S); 国家二级( C语言)机试模拟试卷 35 答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 算法的复杂度是指运行该算法所需要的计算机资源的多少,所需的资源越多,该算法的复杂度越高;反之,所需资源越少
28、,复杂度越低。算法复杂度包括算法的时间复杂度 和算法的空间复杂度,算法的时间复杂度是指执行算法所需要的计算工作量,算法空间复杂度指执行这个算法所需要的内存空间。故选择 D选项 2 【正确答案】 A 【试题解析】 循环队列是队列的一种顺序存储结构,用队尾指针 rear指向队列中的队尾元素,用排头指针指向排头元素的前一个位置。循环队列长度为 50,由初始状态为 front=rear=50 可知此时循环队列为空。入队运算时,首先队尾指针进1(即 rear+1),然后在 rear指针指向的位置插入新元素。特别的,当队尾指针rear=50+1时,置 rear=1。退队 运算时,排头指针进 1(即 fro
29、nt+1),然后删除front指针指向的位置上的元素,当排头指针 front=50+1时,置 front=1。 若经过运算, front=rear=1 可知队列空或者队列满。此后又正常地插入了两个元素说明插入前队列为空,则插入后队列元素个数为 2。故选 A选项 3 【正确答案】 B 【试题解析】 在二叉树中,一个结点所拥有的后件个数称为该结点的度。完全二叉树指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。由定义可以知道,完全二叉树中度为 1的结点个数 为 1或者 0。若结点总数为偶数,则有 1个度为 1的结点;若结点总数为奇数,没有度为 1的结点。由于题目中的完
30、全二叉树共有 360个结点,则度为 1的结点个数为 1。故选择B 选项 4 【正确答案】 A 【试题解析】 二叉树遍历可以分为 3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。 二叉树的后序序列与中序序列相同,说明此树结点没有右子树,且最后一个节点H为根节点,而前序遍历中根节点应在最先被访问 ,即节点 H 在最先出现,由此推断前序遍历为 HGFEDCBA,故 A选项正确 5 【正确答案】 A 【试题解析】 冒泡排序只交换相邻元素,但不是每次移动都产生新的逆序。简单插入排序的元素
31、移动不会产生新的逆序。快速排序每一次交换移动都会产生新的逆序,因为当不会有新的逆序产生时,本轮比较结束。故选择 A选项 6 【正确答案】 A 【试题解析】 软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。 C选项叙述不全面。 软件工程包含个要素:方法、工具和过程。 B 选项错误。 软件工程的目标是:在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品,追求这些目标有助于提高软件产品的质量和开发效率,减少维护的困难。 D选项错误。 软件工程是用工程、科学和数学的原则与方
32、法研制、维护计算机软件的有关技术及管理方法。 故本题选 A选项 7 【正确答案】 D 【试题解析】 模块的独立程度可以由两个定性标准度量,一个是耦合性,用来衡量不同模块彼此间互相依赖(连接)的紧密程度。另一个是内聚性,用来衡 量一个模块内部各个元素彼此结合的紧密程度。 一般来说,要求模块之间的耦合尽可能弱,即模块尽可能独立,且要求模块的内聚程度尽可能高。故选 D选项。 8 【正确答案】 C 【试题解析】 数据管理技术的发展经历了个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。 数据库系统共享性大,冗余度小,但只是减少了冗余,并不是避免一切冗余。 数据的一致性是指在系统中同一数据在不同位置的
33、出现应保持相同的值,而不是数据类型的一致。 数据库系统比文件系统有更强的管理控制能力,而不是管理更多的数据。 故本题选 C选项。 9 【正确答案】 A 【试题解析】 实体集之间通过联系来建立联接关系分为三类:一对一联系( 1:1)、一对多联系( 1:m)、多对多联系( m:n)。 由于一名演员可以出演多部电影,而一部电影必定有多个演员参演,则实体演员和电影之间的联系属于多对多。故选 A选项 10 【正确答案】 D 【试题解析】 D)选项中 x23定义的是一个两行三列的二维数组,而在给数组元素赋值时却赋成了三行,所以错误。 11 【正确答案】 C 【试题解析】 1、后置自增运算: k+表示先运算
34、,后自加。 2、 前置自增运算:+k 表示先自加,后运算。 +单目运算符的优先级高于赋值运算符。 a*=16 +(b+) - (+c);可转化为: a=a*(16+b-(c+1);b=b+1;代入值计算可得值 a=28。答案为 C选项 12 【正确答案】 A 【试题解析】 算法的三种基本结构:循环、顺序、条件。有的简单的程序只包含其中的若干个,因此 B选项错误, C语言程序的自定义函数可以放在多个 .c文件中,只要包含其引用的头文件即可链接到,因此选项 C错误。 C语言程序有且只有一个 main 函数,因此 D选项错误。故答案为 A选 项。 13 【正确答案】 C 【试题解析】 C语言 “标准
35、化指数形式 “:其数值部分是一个小数,小数点前的数字是零,小数点后的第一位数字不是零。一个实数可以有多种指数表示形式,但只有一种属于标准化指数形式。在 C语言中 e后面的指数必须是整数。因此只有C选项正确。 14 【正确答案】 A 【试题解析】 根据 ()和 =运算符的优先级,运算过程为 b=2, b=1,之后 3=1为非法赋值运算。, ,C语言规定常量只能做为右值,不能做左值,因此选项 A的表达式错误。 15 【正确答案】 A 【试题解析 】 m,n 的变量类型未知,但题目中已定义和赋值。选项 B 的 -m-n 对于整型与浮点数类型可以这样操作,但若变量为字符类型,则错误。选项 C,编译类型
36、错误,强制转化使用错误。选项 D, m*n 是常量,只能用作表达式的右值,不能作为左值。故答案为 A选项。 16 【正确答案】 D 【试题解析】 与运算符 (此时 x=11;y=11;z=12 再执行 y=z;z=x;此时 y=12;z=11; 最后 x=11;y=12;z=11;故答案为 A选项。 20 【正确答案】 C 【试题解析】 C语言没有规定 if(表达式 )中的 “表达式 “的形式,可以是任意合法表达式。故答案为 C选项。 21 【正确答案】 A 【试题解析】 将字符转为数字,并输出打印的格式为 %d,while循环从 1-8,因此打印的结果是 12345678。故答案为 A选项。
37、 22 【正确答案】 A 【试题解析】 !与 =运算, !的优先级高于 =,即等价于 (!x)=0。如果 x0,则表达式为真,否则表达式为假,因此可以验证选项,只有选项 A不符合。故答案为 A选项。 23 【正确答案】 D 【试题解析】 表达式 9- 0的值是数值 9-48=-39,故选项 A错误, 表达式 A +32的值是字母 a的 ASCII 码 , 故选项 B 错误, 表达式 a -32的值是字母 A的 ASCII 码 , 故选项 C错误。故答案为 D选项 24 【正确答案】 B 【试题解析】 fun 函数的功能是获取二个数的平均数 ,注意平均数是整型数,小数会被截断。 fun(2*4,
38、fun(5,6)fun(8,5)6,因此答案为 C选项 25 【正确答案】 C 【试题解析】 f(a,b)=f(3,4)=(4-3)*3=3;f(a,c)=f(3,5)=(5-3)*3=6;f(3,6)=(6-3)*3=9; 因此, d=f(f(a,b),f(a,c)=9,答案为 C选项。 26 【正确答案】 C 【试题解析】 fun()函数作用冒泡法排序, flag控制升序( 0)或者降序( 1)。 n为参与排序的个数。 a为数组的起始地址。因此, fun(a,4,1),数 组的前四个降序排序, fun(a+4,6,0)从数组的第四项,后六个升序排序。故结果为10,9,8,7,1,2,3,4
39、,5,6。答案为 C选项。 27 【正确答案】 A 【试题解析】 函数 m1(x,y),若 x y,返回 2*x+1,否则返回 y, 函数 m2(x,y),若 x =y,返回 2*y+1,否则返回 x,for循环对 t1=m1(i,t1),执行 4次,可知答案为 9,t2=m2(i,t2), 执行 4次,可知答案为 4,因此答案为 A选项。 28 【正确答案】 B 【试题解析】 f1(*a,b),*a 地 址传递, b 值传递,将 b 值传给 *a,则 f1(&t1,t2)调用后输出 t1、 t2 为 BB。 f2(a,b)值传递,传入的只是 a,b的拷贝,不实现交换,则f2(t1,t2)调用
40、后输出 t1、 t2 为 AB。 f3(*a,*b)为地址传递,可以实现 a,b 值的交换,则 f3(&t1,&t2)调用后输出 t1、 t2 为 BA。因此结果为 BAABBB。故答案为 B选项 29 【正确答案】 A 【试题解析】 C语言规定定义数组时,数组的长度必须是整型常量,数组说明符的一对方括号中表达式只要是常量即合法,因此选项 B 错误。 C语言规定,数组元素下标必须是非负整数 ,因此选项 C错误。选项 D char array4数组的长度为4, array“3“,其中 “3“常量字符串,与 C语言规定数组的下标必须是非负整数不符,故答案为 A选项 30 【正确答案】 D 【试题解
41、析】 for循环的作用是求数组各行前二列的数字之和。 *(*(p+i)+j)?pij 1+3+7+9+13+15=48,因此答案为 D选项 31 【正确答案】 C 【试题解析】 变量 p, q 均是指针,因此 sizeof(p)=4,而 *p,*q,p0的类型都是char,因此长度为 1,故 A、 D选项均正确。选项 B,直接计算 char的字节数也正确,故答案为 C选项 32 【正确答案】 A 【试题解析】 static静态变量只在声明时初始化一次。因此 m,n 只是在第一个调用 fun 函数时初始化,第二次保持原来的只不变,不在进行初始化。因此第一次,可计算 i=3,m=3+1+1=5,故
42、打印为 5,第二次 i=4+5,m=9+1+1=11,故打印 11。故答案为 A选项。 33 【正确答案】 B 【试题解析】 f函数的作用是将 int型数组构造成一个整型数。 f函数采用递归的方式来实现,位数是递增的。有题设可知结果为 123,因此输出结果为 B 选项 34 【正确答案】 C 【试题解析】 gets(ss)读入一串字符串,直到遇到回车,读入的数据从数组的起始位置覆盖。数组 s里的内容是 ABC0567890,因此打印出 ABC。故答案为 C选项 35 【正确答案】 A 【试题解析】 C语言转义字符是一个字符。字符串 0tn0C011,共有 0, t, n三个字符。 strlen
43、()遇到 0计数结束,因此计数为 3,故答案为 A选项 36 【正确答案】 C 【试题 解析】 putchar()每次输出一个字符,根据 *str+1,因此 ABCD每个字符都加 1, 最后 0 =0,因此最后输出 1,故答案 BCDE1。故答案为 C选项。 37 【正确答案】 B 【试题解析】 my_put()递归,直到输入了 C,开始返回。递归使用的是栈的思想,因此最后输入进去的最先返回,并打印。因此结果是 CBA。答案为 B选项 38 【正确答案】 C 【试题解析】 第一次调用 fun()函数,此时 n=0,数组 x是静态的,因此,只在第一次时初始化,有 xk+=xk-n,计算 可知,
44、x=2,4,6,第二次调用 fun(), 此时n=1,x=2,4,6,经计算的 x=3,7,11,故打印结果为 2, 4, 6, 3, 7, 11。答案为 C选项。 39 【正确答案】 A 【试题解析】 C语言规定数组的下标从 0开始,结构体变量 class初始化了前 4项,第三项的 name=“Marry“, class2.name0=M,故答案为 A选项 40 【正确答案】 C 【试题解析】 异或运算 ,位相同为 0,不同为 1,或运算 |只用对应位有 1,结果为 1,否则为 0,与 运算 &,对应位都为 1,才为 1,否则为 0, =!不等于。只有与 0按位与,才能保证任意数的所有位清零
45、,可得答案为 C选项。 二、程序填空题 41 【正确答案】 (1)0 (2)n (3)(t*t) 【试题解析】 填空 1:程序开始定义了变量 s,但没有对其进行初始化,根据公式及后面的程序可知变量 s用来存放公式的前 n 项和,因此该变量应初始化为 0。 填空 2:通过 for循环语句将表达式各项进行累加,结果存于变量 s中,循环变量 i的取值范围为 1一 n。 填空 3:根据题目要求确定表达式通项。前 面已定义 t=2 0*i,因此此空应填(t*t)。 三、程序修改题 42 【正确答案】 (1)int k=0; (2)while(*p|*q) 【试题解析】 (1)变量 k 存放数组 c的下标
46、,因此应初始化为 0。 (2)while循环语句的循环条件是判断两个字符串是否到达结尾。 四、程序设计题 43 【正确答案】 V0id fun(char*a, int n, int h, int e) int i, j=0; for(i=h, i ne; i+) *第一个字母和最后 一个字母之间的字符全不删除 * aj+=ai, aj= 0, *在字符串最后加上结束标识 * 【试题解析】 由于程序已经给出前导 *号和尾部 *号的个数,所以只要用循环语句将中间的字符保留起来。注意循环变量 i的初值 h 和终止值 n e,由丁 h和 e分别表示 a中的前导 *号和尾部 *号的个数, n是字符串的长度,所以从 ah到 an e一 1之间的所有字符都要保留。循环结束后在新串的尾部加上字符串结束标记符 0。