1、国家二级( C语言)机试模拟试卷 32及答案与解析 一、选择题 1 下列关于算法复杂度叙述正确的是 ( A)最坏情况下的时间复杂度一定高于平均情况的时间复杂度 ( B)时间复杂度与所用的计算工具无关 ( C)对同一个问题,采用不同的算法,则它们的时间复杂度是相同的 ( D)时间复杂度与采用的算法描述语言有关 2 设有栈 S和队列 Q,初始状态均为空。首先依次将 A,B,C,D,E,F入栈,然后从栈中退出三个元素依次入队,再将 X,Y,Z入栈后,将栈中所有元素退出并依次入队,最后将队列中所有元素退出,则退队元素 的顺序为 ( A) DEFXYZABC ( B) DEFXYZABC ( C) FE
2、DXYZCBA ( D) DEFZYXABC 3 下列叙述中正确的是 ( A)有两个指针域的链表称为二叉链表 ( B)循环链表是循环队列的链式存储结构 ( C)带链的栈有栈顶指针和栈底指针,因此又称为双重链表 ( D)结点中具有多个指针域的链表称为多重链表 4 某二叉树共有 845个结点,其中叶子结点有 45个,则度为 1的结点数为 ( A) 400 ( B) 754 ( C) 756 ( D)不确定 5 软件需求分析阶段的主要任务是 ( A)确定软件开发方法 ( B)确定软件开发工具 ( C)确定软件开发计划 ( D)确定软件系统的功能 6 下面对软件测试描述错误的是 ( A)严格执行测试计
3、划,排除测试的随意性 ( B)随机地选取测试数据 ( C)随机地选取测试数据 ( D)软件测试是保证软件质量的重要手段 7 结构化程序的三种基本控制结构是 ( A)顺序、选择和重复(循环) ( B)过程、子程序和分程序 ( C)顺序、选择和调用 ( D)调用、返回和转移 8 数据库中对 概念模式内容进行说明的语言是 ( A)数据定义语言 ( B)数据操纵语言 ( C)数据控制语言 ( D)数据宿主型语言 9 某个工厂有若干个仓库,每个仓库存放有不同的零件,相同零件可能放在不同的仓库中。则实体仓库和零件间的联系是 ( A)多对多 ( B)一对多 ( C)多对一 ( D)一对一 10 有三个关系
4、R、 S和 T如下:则由关系 R和 S得到关系 T的操作是 ( A)交 ( B)差 ( C)并 ( D)选择 11 以下叙述正确的是 ( A)计算机只接收由 0和 1代码组成的二进制指 令或数据 ( B)计算机只接收由 0和 1代码组成的十进制指令或数据 ( C)计算机可直接接收并运行 C源程序 ( D)计算机可直接接收并运行任意高级语言编写的源程序 12 若有 C语言表达式 2+3*4+7/3,以下选项中叙述正确的执行顺序是 ( A)先执行 3*4得 12,再执行 7/3得 2.5,最后执行 2+12+2.5得 16.5 ( B)先执行 3*4得 12,再执行 2+12得 14,再执行 7/
5、3得 2,最后执行 14+2得 16 ( C)先执行 7/3得 2,再执行 3*4得 12,再执行 12+2得 14,最后执行 2+14得 16 ( D)先执行 2+3得 5,再执行 5*4得 20,再执行 20+7得 27,最后执行 27/3得 9 13 若有定义: char c; int d; 程序运行时输入: c=1,d=2回车,能把字符 1输入给变量 c、整数 2输入给变量 d的输入语句是 ( A) scanf(“c=%d d=%d“, ( B) scanf(“c=%c d=%d“, ( C) scanf(“c=%d,d=%d“, ( D) scanf(“c=%c,d=%d“, 14
6、以下选项中,与 n=i+ 完全等价的表达式是 ( A) n=i,i=i+1 ( B) n+=i+1 ( C) i=i+1,n=i ( D) n=+i 15 设有定义: int n = 1234; double x = 3.1415; 则语句 printf(“%3d,%1.3fn“, n, x); 的输出结果是 ( A) 1234,3.142 ( B) 123,3.142 ( C) 1234,3.141 ( D) 123,3.141 16 有以下程序 #include stdio.h main( ) int a,b; for (a=0; a 3; a+) scanf(“%d“, switch(b
7、) default: printf(“%d,“, +b); case 1: printf(“%d,“, +b); case 2: printf(“%d,“, +b); 执行时输入: 1 2 3回车,则输出结果是 ( A) 2,2,3,4,4,4, ( B) 2,3,4, ( C) 2,3,3,4,5,6, ( D) 2,3,4,3,4,4, 17 设变量 m为 float类型,变量 n为 int类型,则以下能实现将 m中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是 ( A) m=(m*100+0.5)/100.0 ( B) n=m*100+0.5, m=n/100.0 ( C) n
8、=m/100+0.5, m=n*100.0 ( D) m=m*100+0.5/100.0 18 有以下程序 #include stdio.h main( ) int a = 1, b = 1; for( ; a-; ) b-; printf(“%d,%dn“, a, b); 程序运行后的输出结果是 ( A) -1,0 ( B) 0,0 ( C) -1,-1 ( D) 1,1 19 若有定义: char s30 = 0; 运行时输入: This is a string.回车 则以下不能正确读入整个字符串: This is a string. 到字符数组 s 中的语句组是 ( A) i = 0;w
9、hile (c=getchar()!=n) si+ = c; ( B) gets(s); ( C) for (i=0; (c=getchar() != n; i+) si = c; ( D) scanf(“%s“, s); 20 有如下程序 #include stdio.h main( ) int a = 0, b = 1; if (a+ else printf(“FALSE“); printf(“_OUT:a=%d,b=%dn“, a, b); 程序运行后的输出结果是 ( A) FALSE_OUT:a=1,b=1 ( B) FALSE_OUT:a=0,b=2 ( C) TRUE_OUT:a=
10、1,b=2 ( D) TRUE_OUT:a=0,b=1 21 有如下程序 #include stdio.h main( ) int i, data; scanf(“%d“, for (i=0; i 5; i+) if (i data) continue; printf(“%d-“, i); 程序运行时,从键盘输入: 3回车后,程序输出结果为 ( A) 3-4- ( B) 1-2-3- ( C) 0-1-2- ( D) 0-1-2-3- 22 有以下程序 #include stdio.h main( ) int a = 0, b = 1; if (+a = b+) printf(“1“); el
11、se printf(“0“); printf(“a=%d,b=%dn“, a, b); 程序运行后的输出结果是 ( A) 1a=0,b=1 ( B) 0a=1,b=2 ( C) 1a=1,b=2 ( D) 0a=0,b=2 23 有如下程序段 for (i=0; i 10; i+) if (i = 5) break; 则循环结束后 i的值为 ( A) 1 ( B) 0 ( C) 5 ( D) 10 24 设有定义: int a=0,b=1;,以下表达式中,会产生 “短路 “现象,致使变量 b的值不变 的是 ( A) a+ i 10;i+) if(i 5) break; 则循环结束后 i的值为
12、( A) 10 ( B) 5 ( C) 9 ( D) 6 26 有以下程序段 int x ,i ; for(i=1;i =100;i+) scanf(“%d“, if(x 0) continue; printf(“%4dn“,x); 下面针对上述程序段的描述正确的是 ( A)最多可以输出 100个非负整数 ( B)当 x 0时结束整个循环 ( C)当 x =0时没有任何输出 ( D) printf函数调用语句总是被跳过 27 关于地址和指针,以下说法正确的是 ( A)通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量 ( B)可以取一个常数的地址赋值给同类型的指针变量 ( C)
13、可以取一个表达式的地址赋值给同类型的指针变量 ( D)可以取一个指针变量的地址赋 值给基类型相同的指针变量 28 有以下程序 #include stdio.h #define N 4 void fun(int aN) int i; for(i=0; i N; i+) a0i += aN-1N-1-i; main( ) int xNN= 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12, 13,14,15,16, i; fun(x); for (i=0;i N; i+) printf(“%d,“, xii); printf(“n“); 程序运行后的输出结果是 ( A) 4,7
14、,10,13, ( B) 1,6,11,16, ( C) 17,6,11,16, ( D) 5,13,21,29, 29 关于 C语言函数说明的位置,以下叙述正确的是 ( A)在函数说明之后对该函数进行调用,编译时不会出现错误信息 ( B)函数说明可以出现在源程序的任意位 置,在程序的所有位置对该函数的调用,编译时都不会出现错误信息 ( C)函数说明只能出现在源程序的开头位置,否则编译时会出现错误信息 ( D)函数说明只是为了美观和编译时检查参数类型是否一致,可以写也可以不写 30 以下叙述正确的是 ( A)不能在数组说明符的一对方括号中使用表达式 ( B) char c1, *c2, *c3
15、, c42; 是 C语言的合法语句 ( C)数组下标的最小值可以是负值 ( D)若有数组定义 int array5; 则语句 printf(“%d“,array1.23);是合法的 31 有以下程序 #include stdio.h main( ) int a = 2, *ptr; ptr = *ptr = 8; a = (*ptr) +; printf(“%d,%dn“, a, *ptr); 程序运行后的输出结果是 ( A) 9,9 ( B) 8,9 ( C) 2,4 ( D) 0,4 32 有以下程序 #include stdio.h main( ) int i, *ptr; int ar
16、ray4 = 0,1; for (ptr=array, i=0; i 3; i+, ptr+) if (*ptr = 0) putchar(#); else putchar(M + *ptr); printf(“n“); 程序运行后的输出结果是 ( A) MO# ( B) #F# ( C) MMM ( D) #N# 33 有以下程序段: int m23,(*p)3; p=m; 则以下对 m数组元素的引用正确的是 ( A) (p+1)0 ( B) *(*(p+2)+1) ( C) *(p1+1) ( D) p1+2 34 有以下程序 #include stdio.h char *a = “you
17、“; char *b = “Welcome you to Beijing!“; main( ) char *p; p = b; while (*p != *a) p+; printf(“%sn“, p); 程序运行后的输出结果是 ( A) you to Beijing! ( B) to Beijing! ( C) Welcome you to Beijing! ( D) Beijing! 35 有以下程序 #include stdio.h void f(int x, int n) if (n 1) printf(“%d,“, xn-1); f(x, n-1); printf(“%d,“, xn
18、-1); else printf(“%d,“, x0); main( ) int z3 = 1, 2, 3; f(z,3); printf(“n“); 程序运行后的输出结果是 ( A) 3,1,3, ( B) 3,2,1,2,3, ( C) 1,2,3,1,2,3, ( D) 1,2,3,2,1, 36 有以下程序 #include stdio.h int a = 2; int f(int k) static int n; int m; m = n = 0; n+; a+; m+; k+; return n+m+a+k; main( ) int k; for (k=0; k 2; k+) pr
19、intf(“%d,“, f(k); printf(“n“); 程序运行后的输出结果是 ( A) 6,8, ( B) 6,9, ( C) 6,6, ( D) 6,7, 37 有以下程序 #include stdio.h int sum(int* array, int len) if (len = 1) return array1; else return array1 + sum(array+1, len-1); main( ) int array5 = 0,9,1,2, res; res = sum(array, 3); printf(“%dn“, res); 程序运行后的输出结果是 ( A)
20、 27 ( B) 11 ( C) 8 ( D) 12 38 有以下程序 #include stdio.h main() char s10 = “verygood“, *ps = s; ps = “too“; s4 = 0; puts(ps); 程序的运行结果是 ( A) too ( B) verygood ( C) very ( D) good 39 以下叙述中错误的是 ( A)函数中的形参属于局部变量 ( B)在函数内部定义的变量只能在本函数范围内使用 ( C)在函数外部定义的变量在所有函数中都有效 ( D)在不同的函数中可以使用相同名字的变量 40 有以下程序 #include stdio
21、.h main( ) FILE *fp; int i, a6 = 1,2,3,4,5,6, k; fp = fopen(“data.dat“, “w+“); fprintf(fp, “%dn“, a0); for (i=1; i 6; i+) rewind(fp); fprintf(fp, “%dn“, ai); rewind(fp); fscanf(fp, “%d“, fclose(fp); printf(“%dn“, k); 程序运行后的输出结果是 ( A) 6 ( B) 21 ( C) 123456 ( D) 654321 二、程序填空题 41 下列给定程序中,函数 fun的功能是:把形
22、参 s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移池字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动 (注:字符串的长度大干等于 2)。 例如,形参 8所指字符串为 “abedefgh”,执行结果为 “ahebedgf”。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h void fun(char*s) int i, n, k; char c, n=0; for(i=0, si!= 0, i+ n+; if(n 2=0) /*fou
23、nd*/ k=n一 【 1】 ; else k=n2; /*found*/ c=【 2】 ; for(i=k一 2, i =1; i=i一 2) Si+2=si; /*found*/ s1=【 3】 ; ) main() char s80=“abcdefgh”; printf(“ nThe original string is: sn”, s; fun(s); printf(“ nThe result is: S n”, s); 三、程序修改题 42 下列给定程序中函数 fun的功能是:用递归算法计算斐波拉契数列中第 n项的值。从第 1项起,斐波拉契数列为: 1, 1, 2, 3, 5, 8,
24、 13, 21, 例如,若给 n输入 7,则该项的斐波拉契数值为 13。 清改正程序中的错误,使它能得出正确结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h long fun(int g) /*found*/ switch(g), case 0: return 0; /*found*/ case 1;case 2: return 1; return(fun(g一 1)+fun(g一 2); voidmain() long fib; int n; printf(“Input n: ”); scanf(“ d”, n),
25、printf(“n= d n”, n), fib=fun(n), printf(“fib= d n、 n”, fib), 四、程序设计题 43 编写函数 fun,其功能是:将 s所指字符串中 ASCII码值为奇数的字符删除,剩余字符形成的新串放在 t所指数组中。 例如,若 s所指字符串中的内容为 “ABCDEFG12345”,其中字符 A的 ASCII码值为奇数,字符 1的 ASCII码值也为奇数,都应当删除,其他依此类推。最后 t所指的数组中的内容应是 “BDF24”。 注意:部 分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fu的花括号中填入你编写的若干语句
26、。 试题程序: #include conio h #include stdio h #include string h void fun(char*S, char t) main() char s100, t100, Msg=“Please enter string S: ”; printf(Msg); Scanf(“ S”, S); fun(S, t); printf(“nThe resuit is: S n”, t); 国家二级( C语言)机试模拟试卷 32答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 算法的时间复杂度是指执行算法所需要的计算工作量,它与使用的计算机、程序设计
27、语言以及算法实现过程中的许多细节无关, B选项正确, D选项错误。最坏情况下的时间复杂度可以与平均情况的时间复杂度相同, A选项错误。不同的算法时间复杂度一般不相同, C选项错误。 2 【正确答案】 B 【试题解析】 栈是一种特殊的线性表,它所有的插入与删除都限定在表的同一端进行。队列是指允许在一端进行插入,而在另一端进行删除的线性表。将A,B,C,D,E,F入栈后,栈中元素为 ABCDEF,退出三个元素入队,队列元素为FED,将 X,Y,Z入栈后栈中元素为 ABCXYZ,全部入队后,队列元素为FEDZYXCBA,故 B选项正确。 3 【正确答案】 D 【试题解析】 双向链表与二叉链表均是有两
28、个指针域的链表, A选项错误。在单链表的第一个结点前增加一个表头结点,队头指针指向表头结点,最后一个结点的指针域的值由 NULL改为 指向表头结点,这样的链表称为循环链表。循环队列是队列的一种顺序存储结构。循环链表与循环队列是两种存储结构, B选项错误。双向链表结点有两个指针域,指向前一个结点的指针和指向后一个结点的指针,而带链的栈是单链表形式, C选项错误。故正确答案为 D选项。 4 【正确答案】 C 【试题解析】 在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。对任何一棵二叉树,度为 0的结点(即叶子结点)总是比度为 2的结点多一个。二叉树共有 845个结
29、点,度为 0的结点有 45个,度为1的结点数为 n1, 度为 2的结点数为 n2,则 845=45+n1+n2,且 45= n2+1,则n1=756, C选项正确。 5 【正确答案】 D 【试题解析】 需求分析阶段的工作可以分为个方面:需求获取、需求分析、编写需求规格说明书和需求评审,包括确定软件系统的功能, D选项正确。 A、 B、C选项均为开发阶段工作。 6 【正确答案】 B 【试题解析】 在测试之前制定测试计划,并严格执行,测试用例的选择不可随意,应选择有代表性的,尽可能发现迄今为止尚未发现的错误, A选项叙述正确, B选项叙述错误。测试根本目的是尽可 能多地发现并排除软件中隐藏的错误,
30、 C选项叙述正确。软件测试是保证软件质量、可靠性的关键步骤, D选项叙述正确。故正确答案为 B选项。 7 【正确答案】 A 【试题解析】 结构化程序的三种基本控制结构:顺序、选择和重复,故 A选项正确。 8 【正确答案】 A 【试题解析】 数据库管理系统为完成主要功能提供了相应的数据语言,它们是:数据定义语言,该语言负责数据的模式定义与数据的物理存取构建;数据操纵语言,该语言负责数据的操纵,包括查询与增、删、改等操作;数据控制语言,该语言负责数据完整性、安全性的 定义与检查以及并发控制、故障恢复等功能。故A选项正确。 9 【正确答案】 A 【试题解析】 一般来说,实体集之间必须通过联系来建立联
31、接关系,分为三类:一对一联系( 1:1)、一对多联系( 1:m)、多对多联系( m:n)。每个仓库存放有不同的零件,相同零件可能放在不同的仓库中,故实体仓库和零件间的联系是多对多, A选项正确。 10 【正确答案】 A 【试题解析】 用于查询的 3个操作无法用传统的集合运算表示,引入的运算为投影运算、选择运算、笛卡尔积。常用的扩充运算有交、除、连接及自然连接等。选择, 从关系中找出满足给定条件的元组的操作称为选择,题目中无给定条件,故 D选项错误。差: R-S结果是属于 R但不属于 S的记录组成的集合, T中元组“c 3 2“同时属于 R和 S, B选项错误。并: R S是将 S中的记录追加到
32、 R后面,T中元组少于 R,故 C选项错误。交: RS结果是既属于 R又属于 S的记录组成的集合,与题目中结果相符,故 A选项正确。 11 【正确答案】 A 【试题解析】 计算机认识自己的母语 -机器语言 ,即 0和 1代码组成的二进制指令或数据,故 A选项正确, B选项错误。 C语言是一种高级语言 ,计算机不能直接运行 C源程序和高级语言编写的源程序, C和 D选项错误。 12 【正确答案】 B 【试题解析】 首先,在 C语言中,乘除法优先级要高于加减法,其次,除法运算符 “/“两边参加运算对象都是整数,运算结果要取整,故排除 A, D选项; C语言中,因为运算符 “*“和 “/“都满足从左
33、到右的运算规则,故应先计算 3*4=12因此C排除,答案为 B选项。 13 【正确答案】 D 【试题解析】 scanf()函数中, %d对应的参数是整数型地址, %c对应参数为char型地址, A,C 选项错误;因为程序运行时输入 c=1,d=2回车, 所以 scanf()函数存在非格式字符 c=, d=,所以 B选项错误,故答案为 D选项。 14 【正确答案】 A 【试题解析】 运算符 “+“放在变量后面时,表示变量先参与其他操作,再完成加 1,故表达式 n=i+运算顺序是先将 i赋值给 n,再将 i+1赋值给 i,因此答案为A选项。 15 【正确答案】 A 【试题解析】 函数 printf
34、()中, %md指输出带符号的十进制整数,给定最小宽度为 m位,不足 m位左端补空格,超过 m位按实际位数输出, %.nf表示以小数形式输出实数,小数占 n位,对应题 目,答案为 A选项。 16 【正确答案】 C 【试题解析】 程序在执行 switch语句时,根据 switch后面表达式的值找到匹配的入口标号,执行对应的 case语句,之后不再进行判断,继续执行此 case后面的语句,并且各个 case和 default的出现次序不影响执行结果,即题目中的 default放在开始位置,与放在最后是一样的结果;运算符 “+“放在变量前面时,表示将变量 +1,再参与其他操作。本题,第一次循环输入
35、b=1,执行 case 1,输出 2,再执行 case 2,输出 3,第二次循环输入 b=2,执行 case 2输出 3,第三次循环,输入b=3,没有 case与其对应,故执行 default输出 b=4,接着执行 case 1:,输出 5,再执行 case 2,输出 b=6,至此退出 for语句。因此,最后输出为 2,3,3,4,5,6,答案为 C选项。 17 【正确答案】 B 【试题解析】 n是整型数,将浮点数赋值给整型变量需要丢弃小数位,所以若要保留 m的小数点后两位,需要将 m乘以 100,若要将 m小数点后第三位四舍五入,再需要加上 0.5,然后赋给整型变量,所以 n=m*100+0
36、.5,接下来需要将 m还原成有两位小数的 浮点数,除号两边操作数有一个是浮点数时,结果为浮点数,将 n/100.0赋值给 m,得到 m的值含两位小数,故答案为 B选项。 18 【正确答案】 A 【试题解析】 题干中语句 for( ; a-; ),条件 a-!=0先判断 a!=0成立,则进入循环,然后 a减 1,起始 a=1不等于 0,满足条件进入 for循环,然后 a自减 1为0, b自减 1为 0,继续循环;再跳回 for语句时, a!=0不成立,不会进入循环,但是 a也要自减 1为 -1,循环结束;因此最后输出 a=-1,b=0.因此答案为 A选项。 19 【正确答案】 D 【试题解析】
37、在使用格式符 “%s“进行字符串的输入时,空格和回车( Enter)会被读入,并且函数 scanf以它们作为分隔符停止一个字符串的输入 ,因此答案为 D选项。 20 【正确答案】 A 【试题解析】 逻辑与运算符遵循 “短路求值 “策略,即只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解右操作数,表达式 (a+ 表示判断 i值,如果大于 5后,执行 break语句,结束循环程序,这里 i=6,循环结束。因此答案为 D选项。 26 【正确答案】 A 【试题解析】 continue语句只结束本次循环,而不是终止整个循环的执行,因此B选项错误;当 x =0时,程序执行 printf(“%4
38、dn“,x)语句,因此排除 C,D选项,答案为 A选项。 27 【正确答案】 A 【试题解析】 常数的地址存储在内存的 常量区,常量区存储的都是常量,值都是不可修改的,所以直接取常量的地址赋给指针变量没有任何意义, C语言也不允许这样做,编译会出错, B选项错误;表达式的值存储在临时变量中,内存中存在专门用来存储临时变量的区域,对这块地址进行操作也是没有意义的, C语言不允许这样做,编译会出错, C选项错误;可以取一个指针变量的地址,但是指针变量的地址属于指针,只能赋值给指针类型的指针变量, D选项错误。故答案为 A选项。 28 【正确答案】 C 【试题解析】 N=4, for(i=0,i N
39、,i+) printf(xij);此语句输出 x00, x11,x22, x33,其中只有 x00的值在 fun函数中发生改变,在 fun函数中,当i=0时, x00= x00+x33=17,程序运行后的输出结果是: 17.6.11.16。因此答案为 C选项。 29 【正确答案】 A 【试题解析】 对被调用函数的说明有两种方式:外部说明和内部说明。在调用函数内对被调函数所作的声明称为内部说明,也称为局部说明;在函数外进行的函数说明称为外部说明,如果说明在程序最前端,外部声明又 称为全局说明,因此B,C选项错误;函数 “说明 “是指利用它在程序的编译阶段对调用函数的合法性进行全面检查,因此 D选
40、项错误,答案为 A选项。 30 【正确答案】 B 【试题解析】 在 B选项中, c1是字符型变量, c2是字符型指针变量, c3是指向字符型指针的指针变量, c42是一个一维字符数组,这些都是 C语言的合法语句,因此答案为 B选项。 31 【正确答案】 A 【试题解析】 题干中定义一个指针变量 ptr,再把 a的地址值赋给 ptr,此时 a和*ptr代表同一内存单元中的值, *ptr=8表示把 a和 *ptr的值修改为 8, a = (*ptr) +表示把指针 ptr对应地址单元里的值赋给 a,再将 ptr对应地址单元里的值加1,因此 *( ptr)值为 9,同时 a也为 9,因此答案为 A选
41、项。 32 【正确答案】 D 【试题解析】 for语句中把 array数组首地址值赋给 ptr, ptr+表示每次执行完循环体后, ptr指向下一数组元素,当指针指向值为 0时,输出 #,否则 M再加上指针对应数组值进行输出,当 *ptr=1时, M+1=N,结果输出为 #N#,答案为 D选项。 33 【正确答案】 C 【试 题解析】 数组元素 aij可表示为 *(ai+j),因此,在定义数组 m和指针变量 p后, *( p1+1)表示指向数组 m11,因此答案为 C选项。 34 【正确答案】 A 【试题解析】 程序首先定义两个字符串, a,b指针分别指向这两个字符串首地址,再定义了一个指针
42、p,把 b指针指向的地址赋给了 p指针后,判断 p指针指向地址的内容是否和 a指针指向地址的内容相等,如果不是,则移动指针 p+1,当 p指向 *b字符串中的 y时,和 *a首地址元素相等,退出 while语句,输出剩下字符串内容,程序运行后 的输出结果是 “You To BeiJing!“答案为 A选项。 35 【正确答案】 B 【试题解析】 本题考查了函数的递归调用,在 main函数中调用 f(z,3)后,系统进入 f()函数,随后进入 if语句,输出 x2,再进入 f()函数,输出 x1,再进入 f函数,输出 x0,随后结束返回输出上一个 f()函数,输出 xn-1,程序运行后的结果是:
43、 3,2,1,2,3。答案为 B选项。 36 【正确答案】 A 【试题解析】 static定义一个静态分布变量,变量只会初始化一次,在 for循环体内调 用 f()函数输出, f()函数首先是将当前 n,m,a,k加 1后进行累加返回主函数输出,第二次累加时,重新给 m,n定义初始值为 0,因此,两次输出分别为 6,8,答案为 A选项。 37 【正确答案】 D 【试题解析】 main函数中先定义一个数组 array,调用 sum( array, 3)函数,形参 array指向数组首地址,形参 len的值为 3,在 sum函数中, array1指向数组中元素 9, sum函数调用三次,完成功能是
44、将数组 array1+ array2+ array3累加后返还给输出,累加后的 值为 12。因此,答案为 D选项。 38 【正确答案】 A 【试题解析】 程序中定义指针 ps后,将数组 s首地址赋给 ps初始化后,再使指针 ps指向字符串 “too“的首地址,修改 s4(即字符 g)不会改变 ps的值,所以输出ps的结果是 “too“,答案为选项 A。 39 【正确答案】 C 【试题解析】 全局变量有效范围是从定义的位置开始到所在源文件的结束,在这区域内的函数才可以调用,如果在定义函数之后,定义的变量,该变量不能被之前的函数访问所以 C选项说法错误,答案为 C选项。 40 【正确答案】 A 【
45、试题解析】 本题首先定义文件指针变量 fp和一个数组 a,再打开一个文件“data.dat“,随后先给文件写入数据 a0,由于 rewind函数是将文件指针从当前位置重新指向文件开始位置,所以 for循环依次将数组 a中的数据写入文件开始位置,退出循环后,文件中的数据顺序为: 654321,重新使指针指向文件开始位置,将此时 fp指向的数据(即文件中第一个数据 6)写入变量 k中,关闭文件,输出 k值,答案为 A选项。 二、程序填空题 41 【正确答案】 (1)1 (2)sk或 *(s+k) (3)c 【试题解析】 填空 1:函数 fun中变量 n统计字符的长度,假如长度为偶数,则k=n一 1
46、;假如长度为奇数,则 k=n一 2,使得下标为奇数的最后一个元素有效 (不是 0)。 填空 2:了解变量 k的作用后,则将最右边的奇数位置的数赋值给变量 c。 填空 3:将最后一个下标为奇数的元素移到第一个奇数位置。 三、程序修改题 42 【正确答案】 (1)去掉分号 (2)case 1: case 2: return 1; 【试题解析】 C语言中, switch语句之后不能有分号,并且 case语句常量后应用的是冒号。 四、程序设计题 43 【正确答案】 void fun(char*s, char t) int i, j=0, n, n=strlen(s); *遍历整个数组 * for(i=0, i n; i+) *如果元素的 ASCII码值为偶数 */ if(si 2=0) *将元素保存到 t中 * tj=si; j+; tj=0; 【试题解析】 要删除 ASCII码值为奇数的字符,也就是要保留 ASCII码值为偶数的字符,由于最终是要求出剩余字符形成的新串,所以本题的算法是对原字符串从头到尾扫描,找出 ASCII码值为偶数的字符并依次存入数组。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1