1、国家二级 C语言机试(编译预处理和指针)模拟试卷 3及答案与解析 一、选择题 1 以下叙述中正确的是 ( A)在 C语言中,预处理命令行都以 #开头 ( B)预处理命令行必须位于 C源程序的起始位置 ( C) #inc1ude必须放在 C程序的开头 ( D) C语言的预处理不能实现宏定义和条件编译的功能 2 以下关于宏的叙述中正确的是 ( A)宏定义必须位于源程序中所有语句之前 ( B)宏名必须用大写字 *表示 ( C)宏调用比函数调用耗费时间 ( D)宏替换没有数据类型限制 3 设有宏定义: #defineIsDIV(k, n)(k n=1)?1: 0)且变量 m已正确定义并赋值,则宏调用:
2、 IsDIV(m, 5) IsDIV(m, 7)为真时所要表达的是 ( A)判断 m是否能被 5和 7整除 ( B)判断 m被 5或者 7整除是否余 l ( C)判断 m被 5和 7整除是否都余 1 ( D)判断 m是否能被 5或者 7整除 4 以下程序 #include stdio h #definefix)x*x*x main( ) inta=3, S, t; s=f(a+1); t=f(a+1); printf( d, dn, S, t); 程序运行后的输出结果是 ( A) 10, 10 ( B) 10, 64 ( C) 64, 10 ( D) 64, 64 5 以下叙述中错误的是 (
3、A)预处理命令行的最后不能以分号表示结束 ( B) C程序对预处理命令行的处理是在程序执行的过程中进行的 ( C) #defineMAx是合法的宏定义命令行 ( D)在程序中凡是以 #开始的语句行都是预处理命令行 6 若有以下程序 #defineS(x)x*x #defineT(x)S(x)*S(x) main( ) intk=5, j=2; printf( d, dn, S(k+j), T(k+j); 则程序的输出结果是 ( A) 17, 37 ( B) 49, 2401 ( C) 17, 289 ( D) 49289 7 有以下程序 #include stdio h #defineSUB(
4、x, Y)(x+1)*Y main( ) inta=3, b=4; printf( dn; SUB(a+, b+); ) 程序运行后的输出结果是 ( A) 20 ( B) 12 ( C) 16 ( D) 25 8 有以下程序 #include stdio h #defineSQR(x)x*x main( ) inta=10, k=2, m=1; a/=SQR(k+m)/SQR(k+m); printf( dn, a); )程序的输出结果是 ( A) 0 ( B) 1 ( C) 9 ( D) 10412文件包含 9 有以下程序 #include stdio h #include stdlib h
5、 main( ) int*a, *b, *c; a=b=c=(int*)malloc(sizeof(int); *a=l; *b=2, *c=3; a=b: printf( d, d, dn, *a, *b, *c); 程序运行后的输出结果是 ( A) 2,2, 3 ( B) 3, 3, 3 ( C) 1, 2, 3 ( D) 1, 1, 3 10 有以下程序段 int*p; p=_malloc(sizeof(int);若要求使 P指向一个 int型的动态存储单元,在横线处应填入的是 ( A) (int*) ( B) int ( C) int* ( D) (*int) 11 设有定义语句 in
6、t(*f)(int);则以下叙述正确的是 ( A) f是基类型为 int的指针变量 ( B) f是指向 int类型一维数组的指针变量 ( C) f是指向函数的指针变量,该函数具有一个 int类型的形参 ( D) f是函数名,该函数的返回值是基类型为 int类型的地址 12 以下叙述中正确的是 ( A)函数的类型不能是指针类型 ( B)函数的形参类型不能是指针类型 ( C)基类型不同的指针变量可以相互混用 ( D)设有指针变量为 double*p,则 p+1将指针 P移动 8个字节 13 以下叙述中错误的是 ( A)函数可以返回地址值 ( B)改变函数形参的值,不会改变对应实参的值 ( C)当在
7、程序的开头包含头文件 stdio h时,可以给指针变量赋 NULL ( D)可以给指针变量赋一个整数作为地址值 14 有以下程序 main( ) intm=1, n=2, *p= m, *q= n, *r; r-p, p=q, q=r; printf( d, d, d, dn, m, n, *p, *q); ) 程序运行后的输出结果是 ( A) 1,2, 1, 2 ( B) 1,2, 2, 1 ( C) 2, 1, 2, 1 ( D) 2, 1, 1, 2 15 设有定义 doublea10,: *cs=a;以下能够代表数组 元素 a3的是 ( A) (*s)3 ( B) *s3 ( C) *
8、s+3 ( D) *(s+3) 16 若有定义语句: inta23, *p3;则以下语句中正确的是 ( A) p0= a12; ( B) p0=a; ( C) p=a; ( D) p1= a; 17 有以下程序 main( ) inta5=2, 4, 6, 8, 10), *P, *k; P=a: k= p; printf( d, *(p+); printf( dn, *k); 程 序运行后的输出结果是 ( A) 44 ( B) 24 ( C) 22 ( D) 46 18 有以下程序 (注:字符 a的 ASC 码值为 97) main( ) char*S=abc); do printf( d,
9、 *s 10); +s; while(*S); 程序运行后的输出结果是 ( A) abc ( B) 7890 ( C) 979899 ( D) 789 19 若有定义语句: doublea, *p= a;以下叙述中错误的是 ( A)定义语句中的 *号是一个说明符 ( B)定义语句中的 P只能 存放 double类型变量的地址 ( C)定义语句中 *p= a把变量 a的地址作为初值赋给指针变量 P ( D)定义语句中的, *号是一个间址运算符 20 有以下程序 intfun1(doublea)returna*=a; intfun2(doublex, doubley) doublea=0, b=0
10、; a=fun1(x); b=fun1(y); return(int)(a+b); main( ) doublew; w=fun2(1 1, 2 0); ) 程序执行后输出结果是 ( A) 5 00 ( B) 5 ( C) 5 2l ( D) 0 04 7函数之间的地址值的传递 21 有以下程序 yoidfun(intn, int*S) intf; if(n=1)*s=n+l; elsefun(n-1, f); *S=f; main( ) intx=0: fun(4, x); printf( dn, x); 程序运行后的输出结果是 ( A) 1 ( B) 3 ( C) 4 ( D) 2 22
11、有以下程序 #include stdio h #defineN4 yoidfun(intaN, intb) inti; for(i=0; i N; i+)bi=aii; main( ) intxN=1, 2, 3), 4), 5,6, 7, 8), 9, 10, yN, i; fun(x, y); for(i=0; i N; i+)printf( d, , yi); printf(n); 程序的运行结果是 ( A) 1,2, 3, 4, ( B) 1,4, 5, 9, ( C) 1,0, 7, 0, ( D) 3,4, 8, 10 23 有以下程序 #include stdio h yoidf
12、un(char*c, intd) *c=*c+l; d=d+1; printfl c, c, , *c, d); main( ) charb=a, a=A; fun( b, a); printf( c, cn, b, a); 程序运行后的输出结果是 ( A) b, B, b, A ( B) b, B, B, A ( C) a, B, B, a ( D) a, B, a, B 24 有以下程序: #include stdio h yoidfun(char*c) while(*c) if(*c =aa *c =z)*c=*c=*(*a-A); C+; yoidmain( ) chars81; ge
13、ts(s); fun(s); puts(s); 当执行程序时从键盘上输入 HelloBeijing回车,则程序的输出结果是 ( A) HELLOBEIJING ( B) HelloBeijing ( C) helloBeijing ( D) hELLOBeijing 25 有以下程序 #include stdio h yoidfun(int*a, int*1) int*c; c=a; a=b; b=c; main( ) intx=3, y=5, *p= x, *q= y; fun(p, q); printfl d, d, , *p, *q); fun( x, y); printfl” d, d
14、n”, *p, *q); 程序运行后的输出结果是 ( A) 3, 5, 5, 3 ( B) 3, 5, 3, 5 ( C) 5, 3, 3, 5 ( D) 5, 3, 5, 3 26 有以下程序 #include stdio h intfun(charS) intn=0; while(*s =9 *s =0)n=10*n+*S-0; s+; ) return(n); main( ) chars10=6, 1, *, 4,*,9,*,0, *); printf( dn, fun(s); 程序的运行结果是 ( A) 61490 ( B) 61 ( C) 9 ( D) 5 27 若有以下程序 #in
15、clude stdio h intk=7: yoidflint料 s) int*t= k: *S=t: printf( d, d, d, , k, *t, *s); main( ) inti=3, *p= i, *r= p; f(r); printf( d, d, dn”, i, *P, *r); ) 则程序的输出结果是 ( A) 3,7, 7, 7, 7, 7 ( B) 7, 7, 7, 3, 3, 3 ( C) 3,3, 3, 7, 7, 7 ( D) 7,7, 7, 3, 7, 7 28 若有以下程序 jinclude stdio h yoidsp(int*a) intb=2; *a=*
16、a*2: printf( d, , *a); a= b: *a=*a*2: printf( d, , *a); ) main( ) intk=3: sp( k); printf( dn, k); 则程序的输出结果是 ( A) 6, 4, 6 ( B) 6,4, 3 ( C) 6, 12, 12 ( D) 9, 4, 9 29 若有以下程序 #include stdio h int*flint*S, int*t) intk; if(*S *t) k=*s; *s=*t; *t=k; retums; main( ) inti=3, j: 5, *p= i, *q= j, *r; r=f(p, q)
17、; pfintf( d, d, d, d, dn, i, j, *P, *q, *r); 则程序的输出结果是 ( A) 3,5, 5, 3, 5 ( B) 3, 5, 3, 5, 5 ( C) 5,3, 5, 3, 5 ( D) 5, 3, 3, 5, 5 30 有以下程序 yoidfun(intx, inty, int*c, int*d) *c x+y; *d=x y; ) main( ) inta=4, b=3, c=0, d=0; fun(a, b, c, d); printf( d dkn, C, d); ) 程序的输出结果是 ( A) 43 ( B) 34 ( C) 71 ( D)
18、0 31 有以下程序 charfun(char*c) if(*c =Z *c =A) *c A a; return*c; main( ) chars81, *p=s; gets(S); while(*P) *P=fun(P); putchar(*P); p+; ) printf(n); ) 若运行时从键盘上输入 OPENTHEDOOR,程序的输出结果是 ( A) oPENtHEdOOR ( B) openthedoor ( C) OPENTHEDOOR ( D) OpenTheDoor 32 有以下函数 intfun(char*x, char*Y) intn=0; while(*x=*Y) *
19、x!=0) x+; y+; n+; retumn; ) 函数的功能是 ( A)查找 x和 y所指字符串中是否有 0 ( B)统计 x和 Y所指字符串中最前面连续相同的字符个数 ( C)将 y所指字符串赋给 x所指存储空间 ( D)统计 x和 y所指字符串中相同的字符个数 33 有 以下程序 (说明:字 *A的 ASC 码值是 65) yoidfun(char*S) while(*S) if(*s 2) printf( c, *s); s+; main( ) chara BYTE; fun(a); printf(n”); 程序运行后的输出结果是 ( A) BT ( B) YE ( C) YT (
20、 D) BY 34 有以下程序 yoidfunl(char*p) char*q; q*p; while(*q!=0) (*q)+; q+; main( ) chara=“Program”), *p; p= a3; funl(p); printf(“ sn”, a); 程序执行后的输出结果是 ( A) Prphsbn ( B) Prohsbn ( C) Progsbn ( D) Program 35 下列函数的功能是 voidfun(char*a,char*b)while(*b *a)!=0)a+; b+; ( A)使指针 b指向 a所指字符串 ( B)将 a所指字符串和 b所指字符串进行比较
21、( C)将 a所指字符串赋给 b所指空间 ( D)检查 a和 b所指字符串中是否有 0 36 有以下程序 #include stdio h voidfun(char*t,char*s) while(*t!=0)t+; while(*t+=*s+)!=0); main( ) charss10=acc, aa10=“bbxxyy; fun(ss, aa); printf( s, sn, SS, aa); 程序的运行结果是 ( A) acc, bbxxyy ( B) accxxyy, bbxxyy ( C) accbbxxyy, bbxxyy ( D) accxyy, bbxxyy 37 有以下程序
22、: #include stdio h intb=2: intfun(int*k) b=*k+b; retum(b); main( ) inta10=1,2, 3, 4, 5, 6, 7, 8, i; for(i=2; i 4; i+)b=fun( ai)+b; printf( d t, b); ) printf(n); 程序运行后的输出结果是 ( A) 810 ( B) 1028 ( C) 1012 ( D) 1016 国家二级 C语言机试(编译预处理和指针)模拟试卷 3答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 在 C语言中,凡是以 “#”号开头的行,都称为 ”编译预处理 ”
23、命令行。预处理命令可以放在程序中的任何位置,其有效范围是从定义开始到文件结束。预处理命令有宏定义、文件包含和条件编译三类。 #inc1ude stdio h命令行表示程序中要引用 c标准函数库中的标准输入输出函数。 【知识模块】 编译预处理和指针 2 【正确答案】 D 【试题解析】 本题考查宏替换的规则。宏替换分 为简单的字符替换和带参数的宏替换两类。使用宏时应注意以下几点: 宏定义仅仅是符号替换,不是赋值语句,因此不做语法检查; 为了区别程序中其他的标识符,宏名的定义通常用大写字 *,但不是必须用大写; 双引号中出现的宏名不替换; 使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。 【知
24、识模块】 编译预处理和指针 3 【正确答案】 C 【试题解析】 本题考查宏定义和三目运算符。三目运算符的格式为: test?语句1:语句 2其中, test可以是任何 Boolean表达式。语句 1,当 test是 tme时执行 该语句,可以是复合语句:语句 2,当 test是 false时执行该语句,可以是复合语句。 isDIV(k, n)要表达的是当 k除 n的余数是 l时表达式的值为 1,否则为 0,所以题中要表达的是 m被 5和 7整除是否都余 1。 【知识模块】 编译预处理和指针 4 【正确答案】 B 【试题解析】 根据题目中宏 f(x)的定义, f(a+1)=a+1*a+1*a+1
25、=a+a+a+1=10,而f(a+1)=(a+1)*(a+1)*(a+1)=4*4*4=64。 【知识模块】 编译预处理和指针 5 【正确答案】 B 【试题解析】 预处理命令行是以 “#”开始的语句,预处理命令行的最后不能以分号表示结束,预处理命令行。其中宏定义的字符替换的定义格式为: #define标识符字符串,预处理命令行是在系统对源程序进行编译之前进行处理的,不是在程序执行的过程中。 【知识模块】 编译预处理和指针 6 【正确答案】 A 【试题解析】 本题考查了宏替换,宏替换就是简单的字符替换,不会进行语法错误检查也不会进行运算。 s(k+j)宏展开以后为 k+j*k+j,值为 17,
26、T(k+j)宏展开以后为 k+j*k+j*k+j*k+i,值为 37。 【知识模块】 编译预处理和指针 7 【正确答案】 C 【试题解析】 宏展开的结果 (a+1)十 +,后缀自加表达式参加运算,先用 a和b的初值得到表达式的值,进行计算,然后 a和 b在自加。因此计算结果为 16。 【知识模块】 编译预处理和指针 8 【正确答案】 B 【试题解析】 SQR(k+m)宏展开以后为 k+m*k+m,值为 5,表达式a/=sQR(k+m)/SQR(k+m)为 a=a/(5+5),表达式值为 1。 【知识模块】 编译预处理和指针 9 【正确答案】 B 【试题解析】 a=b=c=(int*)mallo
27、c(sjzeof(int);含义为中请了一个整型的存储空间,让指针 a, b, c分别指向它, *a=1; *b=2; *c=3;语句的含义为所申请的整型存储空间的内容, *c=3最后执行导致存储空间的内容为 3。 【知识模块】 编译预处理和指针 10 【正确答案】 A 【试题解析】 ANSIC标准规定 malloc函数返回值的类型为 void*。使用形式为: malloc(size),其中 size的类型为 unsignedint=malloc函数用来分配 size个字节的存储区,返同一个指向存储区首地址的基类型为 void的地址。若没有足够的内存单元供分配,函数返回空 (NULL)。可以通
28、过强制类型转换将返回值转换为需要类型的地址。 【知识模块】 编译预处理和指针 11 【正确答案】 C 【试题解析】 定义语句 int(*f)(int)中 f是指向函数的指针变量,该函数中也只有一个 int型的形参。 【知识模块】 编译预处理和指针 12 【正确答案】 D 【试题解析】 在对指针进行加、减算 *运算时,数字 1表示 1个 1竽储单元 的长度,而 double类型数据在内存中占 8个字节,因此移动一次移动 8个字节。其他三个都不正确。 【知识模块】 编译预处理和指针 13 【正确答案】 D 【试题解析】 指针变量的值只能是存储单元地址,而不能是一个整数,选项 D的描述是错误,为待选
29、答案。函数可以返回内存空间的地址,同时函数形参和实参分别占用不同的内存单元,改变形参的值不会改变对应实参的值,在头文件stdio h中, NuLL被定义为 void型的指针。 【知识模块】 编译预处理和指针 14 【正确答案】 B 【试题解析 】 在主函数定义了 3个整数指针变量 p, q, r,并且使 p指向 m, q指向 n,再执行 r=p=q; q=r;这三条语句,使 q指向 m, p指向 n,再输出变量m, n, *p, *q时,它们值分别为 1, 2, 2, 1。 【知识模块】 编译预处理和指针 15 【正确答案】 D 【试题解析】 语句 *s=a,使用指针变量 s指向一维数组 a的
30、首地址,所以 *(s+3)表示的是引用数组 a3。 【知识模块】 编译预处理和指针 16 【正确答案】 A 【试题解析】 定义语句 inta23, *p3;定义了整 型二维数组 a23和指针数组 p3。在 C语言中,二维数组名也是一个存放地址常量的指针,其值为二维数组中第一仃的地址。所以选项 A中,把整型数组 a0的指针赋给 p0。 【知识模块】 编译预处理和指针 17 【正确答案】 B 【试题解析】 主函数中指针变量 p指向数组 a中下标为 0的元素, k指向 p,那么 *(p+)的值为 2, p指向数组中下标为 1的元素, k指向 p,所以 *k的值为 4。 【知识模块】 编译预处理和指针
31、 18 【正确答案】 D 【试题解析】 因为小写字符 a, b,c的 ASC 的值分别为 97, 98, 99,而在dowhile循环语句中,每次对字符的 ASC 的值取余数并输出,第一次循环输出7,第二次循环输出 8,第一次循环输出 9。 【知识模块】 编译预处理和指针 19 【正确答案】 D 【试题解析】 在指针定义语句 doublea, *p= a中,指针变量 p前面的 *号,只是一个说明符,说明变量 p是指针类型的变量。 【知识模块】 编译预处理和指针 20 【正确答案】 A 【试题解析】 子函数 funl(doublea)的功能是返回 a的平方值的整数部分 。子函数fun2(doub
32、lex, doubley)的功能是返回 x的平方值的整数部分与 y的平方值的整数部分的和。又因为题中变量 w的定义为 double型,函数 fun(2)的定义为 int型,按照各类数值型数据问的混合运算,整型数据被转换为实型数据。所以双精度型变量 w的值为 5 00。 【知识模块】 编译预处理和指针 21 【正确答案】 D 【试题解析】 函数 fun为递归调用函数,如果 n的值为 1,那么后面形参指向的空间存放 n+1,否则继续计算 fun(n 1)的值。调用分析过程如下: fun(4, x)-fun(3 , x)-fun(2 , x)-fun(1 , x)在回归的过程中,对于 x内的数据并没
33、有改动。 【知识模块】 编译预处理和指针 22 【正确答案】 C 【试题解析】 函数 fun(intaN, intb)的功能是把矩阵 aNN主对角线上的元素赋给一维数组 b。在主函数 f由 xN的初始化可知,其对角线上的元素是1, 0, 7,0。所以当执行完函数 tim(x, y)后,一维数组元素 y中的元素值为 1,0, 7,0。 【知识模块】 编译预处理和指针 23 【正确答案】 A 【试题解析】 本题中 fun函数的参数传递方式,形参 c是传地址,形参 d是传值,所以在主函数中,执行 fun时,把变量 b的地址传给了 c,把 a的值传递给了d,经过运算,输出的值为 b, B。在主函数的输
34、出语句中,输出变量 b的值为 b,变量 a的值为 A。 【知识模块】 编译预处理和指针 24 【正确答案】 A 【试题解析】 子函数 *fun的功能是把小写字 *转换成人写字 *,所以程序的输出结果为选项 A。 【知识模块】 编译预处理和指针 25 【正确答案】 B 【试题解析】 本题考查函数的调用与指针。 p和 q分别为指向 x和 y的指针,函数 fun( )的两个形参均为指针型,土要功能为交换两个指针的指向,当调用结束以后,该操作不能返回主函数。而主函数中, fun(P,q)、 fun( x, y)的实参均为x与 y的地址,因此,两者结果相同,并且两者指针指针的值不能变化。 【知识模块】
35、编译预处理和指针 26 【正确答案】 B 【试题解析】 存 fun函数中, while循环的功能是逐个取字符数组 s的字符判断其是否是数字。若是则将这些数字组成一个数保存到变量 n中,并返同变量 n的值。所以在主函数中调用 fun(s)时,将把字符数组 s中的数字组成一个数输出。因为当指针 s指向数组的第 3位时,即字符 *,循环条件不成立,循环结束,返同 n的值。所以输出 n的值为 61。 【知识模块】 编译预处理和指针 27 【正确答案】 D 【试题解析】 本题考查了二级指针,二级指针可以保存一级指针的地址。主函数中 p指向 i, r指向 p,函数调用后 s指向 p,在 f函数中 t指向全
36、局变量 k=7, s指向 t,同时 s保存了实参 p的地址,此时 p也指向 t,输出三个 7,流程转到土函数, i的值为 3, p以及 r的值为 7。 【知识模块】 编译预处理和指针 28 【正确答案】 A 【试题解析】 本题考查了指针作为函数的参数,可以接收实参变量的地址,改变实参的值。主函数调用 sp( k),执行 sp函数 a指向向 k,执行语句 *a=*a*2后 a指向空间的值 k的值为 6,改变 a的指向以后,此时 a指向 b,则执行 *a=*a*2以后, a指向空间 b的值为 4。调用结束返回土函数,输出 k的值为 6。 【知识模块】 编译预处理和指针 29 【正确答案】 C 【试
37、题解析】 函数 f为返回值为指针的函数,丰要功能是返回 s和 t指向 空间值人的数据的地址,同时如何 s指向空间数据大于 t指向空间的数据,那么交换。主函数 p和 q指向 i和 j,值为 3和 5, j的值大于 i的值,因此调用蛹数 f以后,返回 i的地址, r指向 j,同时 i和 j的值交换, i=5, j=3, p和 q的指向不变, p指向i, q指向 j。 【知识模块】 编译预处理和指针 30 【正确答案】 C 【试题解析】 函数 fun有四个形参,功能是利用参数的地址传递来讨算前两个参数的和与差。主函数中调用 fun函数 c计算 4+3, d计算 4 3值为 1。 【知识模块】 编译预
38、处理和指针 31 【正确答案】 B 【试题解析】 函数 fun的主要功能是判断字符是否为大写字符,如果是则转换为小写字符,主函数读入大写字符串,转换成小写。 【知识模块】 编译预处理和指针 32 【正确答案】 B 【试题解析】 在 while循环中的判断表达式为 (*x=*y) *x!=0,所以只要字符串 x与 y的当前字符不相等时,循环就结束。 【知识模块】 编译预处理和指针 33 【正确答案】 B 【试题解析】 程序只输出字 *AsC 值为奇数的字 *,根据字 *B, Y, T, E的ASC 值 的奇偶性相应输出。 【知识模块】 编译预处理和指针 34 【正确答案】 B 【试题解析】 在函
39、数 voidfun1(char*p)中,语句 (*q)+的功能是 q所指的字符加1,变成其后面的字符; q+就是指钊。 q指向下一个字符的位置。所以在主函数中,语句 p= a3的作用是使指针 p指向字符数组 a中的第四个字符的位置,即p指向字符 g;然后调用函数 fun1(p)后,字符 g变成 Ih,字符 r变成 s,字符 a变成 b,字符 m变成 n,因而字符数组 a中的内容就成 “Prohsbn”。 【知识模块】 编译预处理和指针 35 【正确答案】 C 【试题解析】 在 while语句的条件中是把字符 *a的值赋给字符 *b,然后再判断字符 *的值是否等于字符串的结束字符 (0),当不等
40、于结束字符 (0)时,把字符指针变量 a, b分别加 1,指它们的下一个字符,直到字符串 a的结束。这样程序执行的结果就是把字符串 a赋给了 b所指的存储空间。 【知识模块】 编译预处理和指针 36 【正确答案】 C 【试题解析】 fun函数中,第 1个 while循环语句使指针 t指向字符 串的末尾,第 2个 while循环语句实现了字符串 t和 s的连接。主函数中语句 fun(ss,aa)的功能是将字符串 aa连接到字符串 ss的末尾。 【知识模块】 编译预处理和指针 37 【正确答案】 B 【试题解析】 i=2时, fun( a2)返回值是 b_b+a1_2+3=5,b-b+b: 5+5=10; i=3时, fun( a3)返回值是 b_b+a3=10+4=14, b=b+b=14+14=28。 【知识模块】 编译预处理和指针