1、国家二级( C语言)笔试模拟试卷 197及答案与解析 1 对于长度为 n的线性表,在最坏的情况下,下列各排序法所对应的比较次数中三确的是 ( A)冒泡排序为 n/2 ( B)冒泡排序为 n ( C)快速排序为 n ( D)快速排序为 n(n-1)/2 2 下列对队列的叙述正确的是 ( )。 ( A)队列属于非线性表 ( B)队列按 “先进后出 ”原则组织数据 ( C)队列在队尾删除数据 ( D)队列按 “先进先出 ”原则组织数据 3 下列叙述中正确的是 ( )。 ( A)一个算法的空间复杂度大,则 其时间复杂度也必定大 ( B)一个算法的空间复杂度大,则其时间复杂度必定小 ( C)一个算法的时
2、间复杂度大,则其空间复杂度必定小 ( D)上述三种说法都不对 4 下列叙述中正确的是 ( )。 ( A)程序设计就是编制程序 ( B)程序的测试必须由程序员自己去完成 ( C)程序经调试改错后还应进行再测试 ( D)程序经调试改错后不必进行再测试 5 下列选项中不属于软件生命周期开发阶段任务的是 ( )。 ( A)软件测试 ( B)概要设计 ( C)软件维护 ( D)详细设计 6 下列叙述中正确的是 ( )。 ( A)软件交付使用后还需要进行维护 ( B)软件一旦交付使用就不需要再进行维护 ( C)软件交付使用后其生命周期就结束 ( D)软件维护是指修复程序中被破坏的指令 7 下列叙述中,不符
3、合良好程序设计风格要求的是 ( )。 ( A)程序的效率第一,清晰第二 ( B)程序的可读性好 ( C)程序中要有必要的注释 ( D)输入数据前要有提示信息 8 数据库设计的根本目标是要解决 ( )。 ( A)数据共享问题 ( B)数据安全问题 ( C)大量 数据存储问题 ( D)简化数据维护 9 在 E-R图中,用来表示实体之间联系的图形是 ( )。 ( A)矩形 ( B)椭圆形 ( C)菱形 ( D)平行四边形 10 下列叙述中错误的是 ( )。 ( A)在数据库系统中,数据的物理结构必须与逻辑结构一致 ( B)数据库技术的根本目标是要解决数据的共享问题 ( C)数据库设计是指在已有数据库
4、管理系统的基础上建立数据库 ( D)数据库系统需要操作系统的支持 11 算法中,对需要执行的每一步操作,必须给出清楚、严格的规定这属于算法的 ( )。 ( A)正当性 ( B)可行性 ( C)确定性 ( D)有穷性 12 以下选项中不合法的标识符是 ( )。 ( A) print ( B) FOR ( C) a ( D) _00 13 设有定义: int k=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是 ( )。 ( A) k+ ( B) k+=1 ( C) #NAME? ( D) k+1 14 有以下语句: int b; char c10;,则正确的输入语句是 ( )。 ( A
5、) scanf(“%d%s“, b, C); ( B) scanf(“%d%s“, b, C); ( C) scanf(“%d%s“, b, C); ( D) scanf(“%d%s“, b, C); 15 以下叙述中正确的是 ( )。 ( A)调用 printf函数时,必须要有输出项 ( B)使用 putchar函数时,必须在之前包含头文件 stdio.h ( C)在 C语言中,整数可以以十二进制、八进制或十六进制的形式输出 ( D)调用 getchar函数读入字符时,可以从键盘上输入字符所对应的 ASC 码 16 设有定义: int a=2,b=3, c=4;,则以下选项中值为 0的表达式
6、是 ( )。 ( A) (!a=1) (!b=0) ( B) (a B) !c|1 ( C) a b ( D) a|(b+B) (c-A) 17 有以下程序: main() int a=0, b=0, C=0, d=0; if(a=1)b=1; c=2; else d=3; printf(“%d,%d,%d,%dn“,a,b,c,D); 程序输出 ( )。 ( A) 0,1,2,0 ( B) 0,0,0,3 ( C) 1,1,2,0 ( D)编译有错 18 以下关于逻辑运算符两侧运算对象的叙述中正确的是 ( )。 ( A)只能是整数 0或 1 ( B)只能是整数 0或非 0整数 ( C)可以是
7、结构体类型的数据 ( D)可以是任意合法的表达式 19 有以下程序: main() int a=1,b; for(b=1:b =10;b+) if(a=8)break; if(a%2=1)a+=5; continue; a-=3: printf(“%dn“, B); 程序运行后的输出结果是 ( )。 ( A) 3 ( B) 4 ( C) 5 ( D) 6 20 在以下给出的表达式中,与 while(E)中的 (E)不等价的表达式是 ( )。 ( A) (!E=0) ( B) (E 0|E 0) ( C) (E=0) ( D) (E!=0) 21 有以下程序: mian() int i,j; f
8、or(i=1;i 4;i+) for(j=i;j4;j+)printf(“%d*%d=%d“,i,j,i*j); printf(“n“); 程序运行后的输出结果是 ( )。 ( A) 1*1=1 1*2=2 1*3=3 ( B) 1*1=1 1*2=2 1*3=3 2*1=2 2*2=4 2*2=4 2*3=6 3*1=3 3*3=9 ( C) 1*1=1 ( D) 1*1=1 1*2=2 2*2=4 2*1=2 2*2=4 1*3=3 2*3=6 3*3=9 3*1=3 3*2=6 3*3=9 22 有以下程序: #include stdio.h main() char cl=1, c2=2
9、; cl=getchar();c2=getchar();putchar(c1);putchar(c2); 当运行时输入: a回车后,以下叙述正确的是 ( )。 ( A)变量 c1被赋予字符 a, c2被赋予回车符 ( B)程序将等待用户输入第 2个字符 ( C)变量 c1被赋予字符 a, c2中仍是原有字符 2 ( D)变量 c1被赋予字 符 a, c2中将无确定值 23 以下叙述中错误的是 ( )。 ( A) gets函数用于从终端读入字符串 ( B) getchar函数用于从磁盘文件读入字符 ( C) fputs函数用于把字符串输出到文件 ( D) fwrite函数用于以二进制形式输出数据
10、到文件 24 有以下程序 A: int f1(int x, int y) return x y?x:y; int f2(int x,int y) return x y?y:x; ) main() int a=4,b=3,c=5,d=2,e,f,g; e=f2(f1(a,B),f1(c,D);f=f1(f2(a,B),f2(c,D); g=a+b+c+d-e-f; printf(“%d,%d,%dn“,e,f,g); 程序运行后的输出结果是 ( )。 ( A) 4,3,7 ( B) 3,4,7 ( C) 5,2,7 ( D) 2,5,7 25 设有定义: int n1=0,n2,*P= n2,*
11、q= n1;,以下赋值语句中与 n2=n1;语句等价的是 ( )。 ( A) *p=*q; ( B) p=q; ( C) *p= n1; ( D) p=*q; 26 在 16位编译系统上,若有定义 int a=10,20,30,*p= a;,当执行 p后,下列说法错误的是 ( )。 ( A) p向高地址移了一个字节 ( B) p向高地址移了一个存储单元 ( C) p向高地址移了两个字节 ( D) p与 a+1等价 27 有以下程序: void swapl(int c0,int c1) int t; t=c00;c00=c10;c10=t; void swap2(int*c0, int*c1)
12、int t; t=*c0;*c0=*c1;*c1=t; main() int a2=3,5), b2=3,5; swapl(a,a+1);swap2( b0, b1); printf(“%d%d%d%dn“,a0,a1,b0,b1); 程序运行后的输出结果是 ( )。 ( A) 3 5 5 3 ( B) 5 3 3 5 ( C) 3 5 3 5 ( D) 5 3 5 3 28 有以下程序: maln() int i,s=0,t=1,2,3,4,5,6,7,8,9; for(i=0;i9;i+=2)s+=*(t+i); printf(“%dn“,s); 程序执行后的输出结果是 ( )。 ( A)
13、 45 ( B) 20 ( C) 25 ( D) 36 29 有以下程序: main() int a44=1,4,3,2,8,6,5,7,3,7,2,5,4,8,6,1,i,k,t; for(i=0;i 3;i+) for(k=i+i;k 4;k+)if(aii akk)t=aii;aii=akk;akk=t; for(i=0;i4;i+)printf(“%d,“, a0i); 程序运行后的输出结果是 ( )。 ( A) 6,2,1,1, ( B) 6,4,3,2, ( C) 1,1,2,6, ( D) 2,3,4,6, 30 若有定义语句: int a36;,按在内存中的存放顺序, a数组的
14、第 10个元素是( ) ( A) a04 ( B) a13 ( C) a03 ( D) a14 31 以下语句中存在语法错误的是 ( )。 ( A) char ss620; ss1=“right?“; ( B) char ss20=“right?“; ( C) char*ss6; ss1=“right?“; ( D) char*ss=“right?“; 32 有以下程序: main() char a7=“a00a00“;int i,j; i=sizeof(A);j=strlen(A); printf(“%d%dn“,i,j); 程序运行后的输出结果是 ( )。 ( A) 2 2 ( B) 7
15、6 ( C) 7 2 ( D) 6 2 33 有以下程序: #include stdio.h #include string.h #include void f(char*s,char*t) char k; k=*s; *s=*t; *t=k; s+;t-; if(*s)f(s,t): main() char str10=“abcdefg“,*P; P=str+strlen(str)/2+1: f(p,p-2); printf(“%sn“,str); 程序运行后的输出结果是 ( )。 ( A) abcdefg ( B) gfedcba ( C) gbcdefa ( D) abedcfg 34
16、有以下程序: int add(int a,intB)return(a+B); main() int k,(*f)(),a=5,b=10; f=add; 则以下函数调用语句错误的是 ( )。 ( A) k=(*f)(a,B); ( B) k=add(a,B); ( C) k=*f(a,B); ( D) k=f(a,B); 35 在 C语言中,只有在使用时才占用内存单元的变量,其存储类型是 ( )。 ( A) auto和 register ( B) extern和 register ( C) auto和 static ( D) static和 register 36 设有以下语句: int a=1
17、, b=2, c; c=a(b 2); 执行后, C的值为( )。 ( A) 6 ( B) 7 ( C) 8 ( D) 9 37 以下叙述正确的是 ( )。 ( A) C语言中的文件是流式文件,因此只能顺序存取数据 ( B)打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖 ( C)在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第一个数据 ( D)当对文件的读 (写 )操作完成之后,必须将它关闭,否则可能导致数据丢失 38 以下叙述中正确的是 ( )。 ( A)预处理命令行必须位于 C源程序的起始位置 ( B)在 C语言中,预处理命令行都以 “#”开
18、头 ( C)每个 C程序必须在开头包含预处理命令行: #include stdio.h ( D) C语言的预处理不能实现宏定义和条件编译的功能 39 有以下结构体说明,变量定义和赋值语句: struct STD char name10; int age; char *; s5,*ps; ps= s0; 则以下 scanf函数调用语句中错误的结构体变量成员是 ( )。 ( A) scanf(“%s“,s0.name); ( B) scanf(“%d“, s0.age); ( C) scanf(“%c“, (ps- *); ( D) scanf(“%d“,ps- age); 40 算法复杂度主要包
19、括时间复杂度和 ( )复杂度 。 41 数据结构分为逻辑结构和存储结构,循环队列属于 ( )结构。 42 ( )的任务是诊断和改正程序中的错误。 43 在结构化分析使用的数据流图 (DFD)中,利用 ( )对其中的图形元素进行确切解释。 44 问题处理方案的正确而完整的描述称为 ( )。 45 设有定义: float x=123.4567;,则执行以下语句后的输出结果是 ( )。printf(“%fn“,(int)(x*100+0.5)/100.0); 46 以下 程序运行后的输出结果是 ( )。 main() int x,a=1,b=2,c=3,d=4; int x,a=1,b=2,c=3,
20、d=4; x=(a B)?a:b;x=(a C)?x:C;x=(d x)?x:d; printf(“%dn“, x); 47 已知字母 A的 ASC 码为 65。以下程序运行后的输出结果是 ( )。 main() char a, b; a=A+5-3;b=a+6-2; a=A+5-3;b=a+6-2; printf(“%d%cn“,a,B); 48 以下程序运行后的输出结果是 ( )。 void swap(int X, int y) int t; t=x;x=y;y=t;printf(“%d%d“,x,y); main() int a=3, b=4; swap(a,B);printf(“%d%
21、dn“,a,B); 49 以下程序的运行结果是 ( )。 int k=0; void fun(int m) m+=k;k+=m;printf(“m=%dn k=%d“,m,k+); main() int i=4; fun(i+);printf(“i=%d k=%dn“,i,k); 50 以下程序的输出结果是 ( )。 #include stdlib.h main() char*s1,*s2,m; s1=s2=(char*)malloc(sizeof(char); *s1=15; *s2=20; m=*s1+*s2: printf(“%dn“,m); 51 以下程序运行后的输出结果是 ( )。
22、int f(int a,int n) if(n =1)return f(a,n-1)+an-1; else return 0; main() int aa5=1,2,3,4,5),s; s=f(aa,5);printf(“%dn“,s); 52 当 运行以下程序时,输入 abcd,程序的输出结果是: ( )。 insert(char str) int i; i=strlen(str); while(i 0) str2*i=stri;str2*i-1=*;i-; printf(“%sn“,str); main() char str40; scanf(“%s“,str);insert(str);
23、53 程序测试分为静态分析和动态测试。其中 ( )是指不执行程序,而只是对程序文本进行检查,通过阅读和讨论,分析和发现程序中的错误。 54 某二叉树中度为 2的节点有 18个,则该二叉树中有 ( )个叶子节点。 国家二级( C语言)笔试模拟试卷 197答案与解析 1 【正确答案】 D 【试题解析】 冒泡排序法在最坏的情况下需要比较的次数为 n(n-1)/2,快速排序法在最坏的情况下需要比较的次数也为 n(n-1)/2。 2 【正确答案】 D 【试题解析】 队列是 “先进先出 ”的数据结构,栈是 “先进后出 ”的数据结构,它们都是 特殊的线性表。队列在队头删除数据。 3 【正确答案】 D 【试题
24、解析】 算法的复杂度主要包括算法的时间复杂度和算法的空间复杂度。所渭算法的时间复杂度是指执行算法所需要的计算工作量;算法的空间复杂度一般是指执行这个算法所需要的内存空间。算法的时间复杂度和空间复杂度没有直接关系。 4 【正确答案】 C 【试题解析】 软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,软件没计是确定系统的物理模型。软件测试即使用人工或自动手段来运行或测定某个系统的过程,其日的在于检验它是否 满足规定的需求或是弄清预期结果与实际结果之间的差别。软件调试后要进行回归测试,防止引进新的错误。 5 【正确答案】 B 【试题解析】 软件生命周期分为软件定义、软件开发及
25、软件运行维护 3个阶段,其中详细设计、软件编码和软件测试都属于软件开发阶段。 6 【正确答案】 A 【试题解析】 软件生命周期分为软件定义、软件开发及软件运行维护三个阶段,软件交付使用后还需要进行维护。软件运行维护阶段:软件投入运行,并在使用中不断地维护,进行必要的扩充和删改。 7 【正确答案】 A 【试题解析】 程序设计的风格主要强调:清晰第一,效率第二。 8 【正确答案】 A 【试题解析】 数据库技术的根本目标是解决数据的共享问题。 9 【正确答案】 C 【试题解析】 E-R模型的图示法: 用矩形表示实体集; 用椭圆形表示属性; 用菱形表示联系。 10 【正确答案】 A 【试题解析】 数据
26、的物理结构和逻辑结构有高度的独立性,结构不必一致。 11 【正确答案】 C 【试题解析】 算法具有 5个特性:有穷性、确定性、可行性、有零个或多个输入、有一个或多个输出。 12 【正确 答案】 C 【试题解析】 C语言中标识符的命名必须遵守一定的规则:标识符由字母、数字和下划线组成,并且第一个字符必须是字母或下划线。同时,在 C语言的标识符中是区分大小写字母的。 C选项中的标识符以开头,不符合 C语言中标识符的命名规则。 13 【正确答案】 A 【试题解析】 凡是表达式都有一个值,即运算结果。 k+的表达式值为 0, k再进行增 1运算; k+=1是赋值表达式,其作用是取 k中的值加 1后再放
27、到 k变量中,即表达式的值为 1; +k是先进行 k增 1运算,表达式的值为 1; k+1=0+1,其运算的结 果为 1。所以选项 A中表达式的值与其他三个表达式不同。 14 【正确答案】 B 15 【正确答案】 B 16 【正确答案】 A 【试题解析】 本题考查逻辑运算。根据运算符的优先级顺序,选项 A的值为 “(!2=1) (! 3=0)=0 (! 3=0)=0”,选项 B的值为 “(2 3)! 4|1=0 !4|1=0 0|1=0|1=1”。选项 C的值为 “2 3=1”。选项 D的值为 “2|(6)(2)=2|1=1”。所以只有选项 A的值为 0。注意:在进行逻辑与运算时,若 “ ”的
28、左边运算结果已经为 0,则 “ ”右边的表达式将不再进行计算,结果总为 0;在进行逻辑或运算时,若 “|”的左边运算结果已经为 1,则 “|”右边的表达式也将不再进行计算,结果总为 1。 17 【正确答案】 D 【试题解析】 C语言规定最左边变量所得到的新值就是赋值表达式的值,故“if(a=1)”条件表达式为真, b=1; else总是与上面最近的没有被使用的 if配对,导致不合法的 if-else结构, if语句后面的两条语句应用 “)”括起来。 18 【正确答案】 D 【试题解析】 逻辑运算的对象可以 是 C语言中任意合法的表达式。 19 【正确答案】 B 【试题解析】 本题是考查手工模拟
29、执行程序的能力。 a初值是 1,循环开始时 b值为 1,由于 a =8为假,不执行 break,但 a%2=1为真,执行 a+=5, a值变为6,再执行 continue跳过不执行 a-=3语句,而立即开始下一次循环。这时 b值为2,由于 a值为 6, a =8仍为假,不执行 break,但 a%2=1为假,不执行复合语句 “a+=5;continue;”而执行 a-=3,a值变为 3。再开始下一次循环,这时 b值为 3。由于 a值为 3, a =8仍为 假,不执行 break,但 a%2=1为真,执行 a+=5, a值变为 8,再执行 continue跳过不执行 a-=3语句,而立即开始下一
30、次循环。这时 b值为 4。由于 a值为 8, a =8为真,执行 break,停止 for循环。此时输出的 b值应为 4。 20 【正确答案】 C 【试题解析】 选项 C表示 E条件为假时, “(E=0)”为真。其他都与 “(E)”等价。 21 【正确答案】 B 【试题解析】 在一个循环体内又完整地包含了另一个循环体的,称为循环嵌套,外循环的 i值分别为 1、 2、 3,当 i=1时,内循环 j=1时,输出 1*1=1;当内循环j=2时,输出 1*2=2;当内循环 j=3时,输出 1*3=3;当 i=2时,内循环 j=2时,输出 2*2=4;当内循环 j=3时,输出 2*3=6;当 i=1,内
31、循环 j=3时,输出 3*3=9。 22 【正确答案】 A 【试题解析】 函数 getchar()的作用是从终端 (或系统隐含的输入没备 )输入一个字符,且只能接收一个字符 (回车符也算一个字符 )。所以本题中 c1被赋值字符 a, c2被赋予回车符。 23 【正确答案】 B 【试题解析】 getchar函数用于从终端或者键盘输入 字符, getc用于从磁盘文件中读入字符。 24 【正确答案】 A 25 【正确答案】 A 【试题解析】 根据题意, p和 q为整型指针,分别指向整型变量 n2和 n1,选项B是将 q赋给 p,即 p指向 n1,选项 C是将 n1的地址赋给 n2,选项 D是将 n2
32、的值赋给 p,均与 n2=n1不等价。只有选项 A中, *p即 n2, *q即 n1, *p=*q即等价于 n2=n1。 26 【正确答案】 A 【试题解析】 *p= a将数组 a的首地址赋给指针 p,通过对指针变量进行加上或减去一个整数可以移动指针,移动的单位为存储 单元, int型变量在存储器中占两个字节。 27 【正确答案】 D 【试题解析】 函数 swapl的形参是数组名,在调用时应将数组名,即数组的首地址,作为实参传递给形参,形参所指向内容的改变可以带回到实参,因此调用函数 swap 1是将元素 a0和 a1互换。函数 swap2的形参是指针变量,在调用时将b0、 b1的值传递给它,
33、形参内容改变也可以带回到实参, b0和 b1的内容也进行了交换。所以输出为 5 3 5 3。 28 【正确答案】 C 【试题解析】 通过 for循环语句s=*(t+0)+*(t+2)+*(t+4)+*(t+6)+*(t+8)=1+3+5+7+9=25。 29 【正确答案】 B 【试题解析】 该程序实现对二维数据反对角线上的元素从大到小的排序,并输出排序后的数组的第一行。外层循环变量 i表示第 i行第 i列的数字,内层循环变量k表示第 i+1行第 i+1列的数字, if语句对相关数值进行比较和交换,最后数组变为 a44=6,4,3,2,8,2,5,7,3,7,1,5,4,8,6,1,并将第一行输
34、出。 30 【正确答案】 B 【试题解析】 二维数组在内存中是按行优先的模式存放,即先第一行,再第二行 直到最后一行;此外,其下标足从零开始,即第一个是 a00,从而,第10个元素是存放在 a13中。一般说来, axy中第 n个元素所在行下标的计算方法为: n/x,列下标的计算方法为: n%y-1。 31 【正确答案】 A 【试题解析】 数组赋值时需要用 表示出来,故选项 A错误。 32 【正确答案】 C 33 【正确答案】 B 34 【正确答案】 C 35 【正确答案】 A 【试题解析】 在 C语言中,动态存储区域中存放的变量在使用时才分配内存空间,函数调用时返回的地址和自动类局部变量等存放
35、在动态存储区域中。 auto变量和 register变量都属于自动类局部变量,因此选项 A正确。 static说明的变量为静态变量,静态变量在内存的静态存储中占据着永久的存储单元,直至程序运行结束。 extern说明的变量为外部变量,属于全局变量,全局变量在整个程序运行期间都占用内存空间。 36 【正确答案】 D 【试题解析】 b=2表示的二进制数为 00000010,经过移位操作得到 00001000,异或操 作 ”a(00001000)”得到 00001001,即十进制数 9。 37 【正确答案】 D 【试题解析】 C语言中的文件有两种存取方式:顺序存取和直接存取。文件打开之后,就可以进行
36、读写操作。读写操作函数可以指定文件使用方式。在使用完一个文件后应关闭它,以防误操作。 38 【正确答案】 B 39 【正确答案】 D 40 【正确答案】 空间 【试题解析】 算法复杂度主要包括时问复杂度和空间复杂度。 41 【正确答案】 存储结构 【试题解析】 数据集合中各数据元素之间所固有的 逻辑关系,即数据的逻辑结构。在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构。循环队列及其运算:所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。所以循环队列属于存储结构。 42 【正确答案】 程序调试 【试题解析】 程序调试的任务是
37、诊断和改正程序中的错误,主要在开发阶段进行,调试程序应该由编制源程序的程序员来完成。 43 【正确答案】 数据字典 【试题解析】 数据字典的作用是对数据流图中出现的被命名的图形元素的确切解释。 44 【正确答案】 算法 【试题解析】 计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法。 45 【正确答案】 460000 46 【正确答案】 1 【试题解析】 条件运算表达式: “表达式 1?表达式 2:表达式 3”,但表达式 1的值为非 0时,此时表达式 2的值就是整个条件表达式的值,反之为表示式 3的值。解析易知结果为 1。 47 【正确答案】 67 G 【试题解析】 根据题意,
38、a=A+5-3=65+2=67, b=67+4=71, 71即为字母 G的ASC 码值。程序要求按十进制形式输出 a,按字符形式输出 b,所以结果为 67 G。 48 【正确答案】 4 3 3 4 49 【正确答案】 m=4 k=4 i=5 k=5 【试题解析】 在主函数 main()中定义了一个变量 i,并赋初值 4,调用 fun()函数将 i的初值传递给形参 m,进行 fun()函数后的运算,输出结果为 m=4, k=4。将 k值输出后自行增加 1, k=5,此时全局变量 k的值变为 5。主函数中调用 fun()函数后, i再自行增加 1, i=5,所以主函数输出的结果为 “i=5 k=5
39、”。 50 【正确 答案】 40 【试题解析】 malloc()函数的作用是开辟一个长度为 sizeof(char)的内存区, s1、s2为指向字符型数据的指针变量,执行 “s1=s2=(char*)malloc(sizeof(chat); ”语句后, s1、 s2指向同一个存储空间,此时 m=*s1+*s2=20+20=40。 51 【正确答案】 15 【试题解析】 通过递归调用 f函数实现了数组各元素之和,即a4+a2+a1+a0=15。 52 【正确答案】 a*b*c*d* 【试题解析】 字符 处理函数 strlen()测试字符串常量的长度,不包括 0在内。因此,函数 insert()实现了将字符数组中每个非 0的字符后插入字符 *的功能。故输出结果是 a*b*c*d*。 53 【正确答案】 静态测试 54 【正确答案】 19