1、二级 C 语言笔试 313 及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:70.00)1.有以下程序: int a=2; int f(int n) static int a=3; int t=0; if(n % 2)(static int a=4; t+=a+; elsestatic int a=5; t+=a+; return t+a+; matin() int s=a, i; for(i=0; i3; i+)s+=f(i); printf(“% d/n“, s); 程序运行后的输出结果是_。(分数:2.00)A.26B.28C.29D.242.
2、若有以下程序段: int m=0xabc, n=0xabc; m-=n; printf(“% X/n“, m); 执行后的输出结果是_。(分数:2.00)A.0X0B.0x0C.0D.0XABC4.设有如下关系表: (分数:2.00)A.T=RSB.T=RSC.T=RSD.T=R/S5.以下选项中可作为 C 语言合法常量的是_。(分数:2.00)A.-80.B.-080C.-8e1.0D.-80.0e6.以下选项中非法的表达式是_。(分数:2.00)A.0=x100B.i=j=0C.(cha(65+3)D.x+1=x+17.有以下程序段: main() int a=5, *b, *c; c=
3、b= 程序在执行了 c= b= 语句后,表达式*c 的值是_。(分数:2.00)A.变量 a 的地址B.变量 b 中的值C.变量 a 中的值D.变量 b 的地址8.有以下程序: main() unsigped int a; int b=-1; a=b; printf(“% u“, a); 程序运行后的输出结果是_。(分数:2.00)A.-1B.65535C.32767D.-327689.设变量已正确定义,则以下能正确计算 n!的程序段是_。(分数:2.00)A.f=0; for(i=1; i=n; i+)f*=i;B.f=1; for(i=1; in; i+)f*=i;C.f=1; for(i
4、=n; i1; i+)f*=i;D.f=1; for(i=n; i=2; i-)f*=i;10.以下只有在使用时才为该类型变量分配内存的存储类说明是_。(分数:2.00)A.auto 和 staticB.auto 和 registerC.register 和 staticD.extern 和 register11.以下不能正确计算代数式 sin2( (分数:1.00)A.1/3*sin(1/2)*sin(1/2)B.sin(0.5)*sin(0.5)/3C.pow(sin(0.5), 2)/3D.1/3.0*pow(sin(1.0/2), 2)12.已有定义:char a=“xyz“b=x,
5、y, z);,以下叙述中正确的是_。(分数:1.00)A.数组 a 和 b 的长度相同B.a 数组长度小于 b 数组长度C.a 数组长度大于 b 数组长度D.上述说法都不对13.以下程序段中,能够通过调用函数 fun,使 main 函数中的指针变量 p 指向一个合法的整型单元的是_。(分数:1.00)A.main() int *p; fun(; int fun(int * int s; p=B.main() int *p; fun(&; int fun(int * int s; *p=C.# includestdli h main() int *p; fun(&; int fun(int *
6、*p=(int *)malloc(2);D.# includestdli h main() int *p; fun(; int fun(int * p=(int *)malloc(sizeof(in);14.有如下程序: # define N 2 # define M N+1 # define NUM 2*M+1 # main() int i; for(i=1; i=NUM; i+) printf(“% d/n“, i); 该程序中的 for 循环执行的次数是_。(分数:1.00)A.5B.6C.7D.815.有以下程序: main() int i=1, j=2, k=3; if(i+=1 程
7、序运行后的输出结果是_。(分数:1.00)A.1 2 3B.2 3 4C.2 2 3D.2 3 316.用 C 语言编写的代码_。(分数:1.00)A.可立即执行B.是一个源程序C.经过编译即可执行D.经过编译解释才能执行17.在函数调用过程中,如果函数 funA 调用了函数 funB,函数 funB 又调用了函数 funA,则_。(分数:1.00)A.称为函数的直接递归调用B.称为函数的间接递归调用C.称为函数的循环调用D.C 语言中不允许这样的递归调用18.有以下程序: main() int p7=11, 13, 14, 15, 16, 17, 18), i=0, k=0; while(i
8、7 i+; printf(“% d/n“, k) 执行后的输出结果是_。(分数:1.00)A.58B.56C.45D.2419.有以下程序: main() char p=a, b, c, q=“abc“; printf(“% d % d/n“, sizeof(p), sizeof(q); ; 程序运行后的输出结果是_。(分数:1.00)A.4 4B.3 3C.3 4D.4 320.有以下程序: main() char a=a, b; printf(“% c, “,+a); printf(“% c/n“, b=a+); 程序运行后的输出结果是_。(分数:1.00)A.b, bB.a, bC.b,
9、 cD.a, c21.下列程序执行后的输出结果是_。 # define MA(x) x*(x-1) main() int a=1, b=2; printf(“% d/n“, MA(1+a+b);(分数:2.00)A.6B.8C.10D.1222.有以下程序: main() int i=0, s=0; do if(i % 2) i+; continue; i+; s+=i; while(i7);printf(“% d/n“, s); 执行后的输出结果是_。(分数:2.00)A.16B.12C.28D.2123.以下程序的输出结果是_。 int f() static int i=0; int s=
10、1; s+=i; i+; return s; main() int i, a=0; for(i=0; i5; i+) a+=f(); printf(“% d/n“, a);(分数:2.00)A.20B.24C.25D.1524.若变量已正确说明为 float 类型,要通过语句 scanf(“%f %f %f“, p=s1; printf(“% c, % s/n“, *(p+1),so); 执行后的输出结果是_。(分数:2.00)A.n, twoB.t, oneC.w, oneD.o, two26.有以下函数定义: void fun(int n, double x) 若以下选项中的变量都已经正确
11、定义并赋值,则对函数 fun 的正确调用语句是_。(分数:2.00)A.fun(int y, double ;B.k=fun(10, 12.5);C.fun(x, ;D.void fun(n, ;27.以下叙述中正确的是_。(分数:2.00)A.局部变量说明为 static 存储类,其生存期将得到延长B.全局变量说明为 static 存储类,其作用域将被扩大C.任何存储类的变量在未赋初值时,其值都是不确定的D.形参可以使用的存储类说明符与局部变量完全相同28.有以下程序: # define N 20 fun(int a, int n, int m) int i, j; for(i=m; i=n
12、; i-)ai+1=ai; main() int i, aN=1, 2, 3, 4, 5, 6, 7, 8, 9, 10; fun(a, 2, 9); for(i=0; i5; i+)printf(“% d“, ai); 程序运行后的输出结果是_。(分数:2.00)A.10234B.12344C.12334D.1223429.以下叙述中正确的是_。(分数:2.00)A.预处理命令行必须位于源文件的开头B.在源文件的一行上可以有多条预处理命令C.宏名必须用大写字母表示D.宏替换不占用程序的运行时间30.有以下程序: # includestdio. h # difine F(X, Y) (X)*(
13、Y) main() int a=3, b=4; print(“% d/n“, F(a+, b+); 程序运行后的输出结果是_。(分数:2.00)A.12B.15C.16D.2031.下列关于栈的描述中错误的是_。(分数:2.00)A.栈是先进后出的线性表B.栈只能顺序存储C.栈具有记忆作用D.对栈的插入和删除操作中,不需要改变栈底指针32.有以下程序: main() int k=5, n=0; while(k0); switch(k) default; break; case 1:n+=k; case 2; case 3:n+=k; k-; printf(“% d/n“, n); 程序运行后的
14、输出结果是_。(分数:2.00)A.0B.4C.6D.733.有以下程序: main() int x=3, y=2, z=1; printf(“% d/n“, x/y 程序运行后的输出结果是_。(分数:2.00)A.3B.2C.-1D.034.以下选项中合法的用户标识符是_。(分数:2.00)A.longB._2TestC.3DmaxD.dat35.执行下列程序时输入:123空格456空格789回车,输出结果是_。 mein() char s100; int c, i; scanf(“% c“, scanf(“% d“, scanf(“% s“, s); printf(“% c, % d, %
15、 s/n“, c, i, s); (分数:2.00)A.123, 456, 789B.1, 456, 789C.1, 23, 456, 789D.1, 23, 45636.在一个 C 程序中_。(分数:2.00)A.用户标识符中可以出现下划线和中划线(减号)B.用户标识符中不可以出现中划线,但可以出现下划线C.用户标识符中可以出现下划线,但不可以放在用户标识符的开头D.用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头37.在 C 语言中,形参的默认存储类型是_。(分数:2.00)A.autoB.registerC.staticD.extern38.有以下程序: int f1(i
16、nt x, int y) return xy? x:y; int f2(int x, int y) return xy? 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, %d/n“, e, f, g); 程序运行后的输出结果是_。(分数:2.00)A.4, 3, 7B.3, 4, 7C.5, 2, 7D.2, 5, 739.以下能正确定义一维数组的选项是_。(分数:2.00)A.int a
17、5=0, 1, 2, 3, 4, 5);B.char a=0, 1, 2, 3, 4, 5);C.char a=A, B, C;D.int a5=“0123“;40.结构化程序设计的主要特点是_。(分数:2.00)A.模块化B.每个控制结构具有封装性C.每个控制结构具有独立性D.每个控制结构只有一个入口和一个出口二、B填空题/B(总题数:15,分数:30.00)41.测试的目的是暴露错误,评价程序的可靠性;而U 【1】 /U的目的是发现错误的位置并改正错误。(分数:2.00)填空项 1:_42.以下程序的功能是输出如下形式的方阵: 13 14 15 16 9 10 11 12 5 6 7 8
18、1 2 3 4 请填空。 main() int i, j, x; for(j=4; j0; j-) for(i=1; i=4; i+) x=(j-1)*4+U 【2】 /U;printf(“% 4d“, x); printf(“/n“); (分数:2.00)填空项 1:_43.有以下程序: main() char str=“xyz“, *ps=str; while(* ps)ps+; for(ps-; ps-str=0;ps-)puts(ps); 执行后的输出结果是U 【3】 /U。(分数:2.00)填空项 1:_44.执行以下程序后,输出#号的个数是U 【4】 /U。 # includest
19、dio. h main() int i, j; for(i=1; i5; i+) for(j=2; j=i; j+)putchar(#); (分数:2.00)填空项 1:_45.请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。 U 【5】 /U(double, double); main() double x, y; scanf(“% lf % lf“, printf(“% 1f/n“, max(x, y); double max(double a, double b) return(ab? a:b); (分数:2.00)填空项 1:_46.有以下程序: int sub(int n
20、) return(n/10+n%10); main() int x, y; scanf(“% d“, y=sub(sub(sub(x); printf(“% d/n“, y); 若运行时输入:1234回车,程序的输出结果是U 【6】 /U。(分数:2.00)填空项 1:_47.以下程序运行后的输出结果是U 【7】 /U。 void fun(int x, int y) x=x+y; y=x-y; x=x-y; printf(“% d, % d, “, x, y); main() int x=2, y=3; fun(x, y); printf(“% d, % d/n“, x, y); (分数:2.
21、00)填空项 1:_48.已知字母 A 的 ASCII 码为 65,以下程序运行后的输出结果是U 【8】 /U。 main() char a, b; a=A+5-3; b=a+6-2; printf(“% d % c/n“, a, b); (分数:2.00)填空项 1:_49.以下程序运行后的输出结果是U 【9】 /U。 main() int a, b, c; a=25; b=025; c=0x25; printf(“% d % d % d/n“, a, b, c); (分数:2.00)填空项 1:_50.以下程序的功能是调用函数 fun 计算:m=1-2+3-4+9-10,并输出结果。请填空
22、。 int fun(int n) int m=0, f=1, i; for(i=1; i=n; i+) m+=i*f; f=_; return m; main() printf(“% d/n“,U 【10】 /U); (分数:2.00)填空项 1:_51.以下程序中,for 循环体执行的次数是U 【11】 /U。 # define N 2 # define M N+1 # define K M+1*M/2 main() int i; for(i=1; iK; i+) . . (分数:2.00)填空项 1:_52.有以下程序: # define f(x)x*x main() int i; i=f
23、(4+4)/f(2+2); printf(“% d/n“, i); 执行后的输出结果是U 【12】 /U。(分数:2.00)填空项 1:_53.以下程序中给指针 p 分配 3 个 double 型动态内存单元,请填空。 # includestdllb. h main() double * p; p=(double*)malloc(U 【13】 /U); p0=1.5; p1=2.5; p2=3.5 printf(“% f % f % f/n“,p0,p1, p2); (分数:2.00)填空项 1:_54.以下程序运行后的输出结果是U 【14】 /U。 main() char a=“Langua
24、ge“, b=“Programe“; char * p1, * p2; int k; p1=a; p2=b; for(k=0; k=7; k+) if(*(p1+k)=*(p2+k)printf(“%c“, *(p1+k); (分数:2.00)填空项 1:_55.有一种攻击是针对网络低层协议而不是针对某项特定的应用服务,这种攻击称为U 【15】 /U。下面 rotate 函数的功能:将 n 行 n 列的矩阵 A 转置为 A,请填空。 # define N 4 void rotate(int aN) int i, j, t; fori=0; iN; j+ forj=0;U 【16】 /U; j+
25、 t=aij; aij=aji; aji=t; (分数:2.00)填空项 1:_二级 C 语言笔试 313 答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:70.00)1.有以下程序: int a=2; int f(int n) static int a=3; int t=0; if(n % 2)(static int a=4; t+=a+; elsestatic int a=5; t+=a+; return t+a+; matin() int s=a, i; for(i=0; i3; i+)s+=f(i); printf(“% d/n“, s); 程
26、序运行后的输出结果是_。(分数:2.00)A.26B.28C.29 D.24解析:解析 在某一函数中当全局变量与局部变量同名时,则在该函数中,全局变量被屏蔽,访问的是局部变量。因此,t+a+中的 a 用的是 static int a=3 的这个 a。if 语句的执行是当 n 是偶数时,执行else 的部分,否则执行其后的部分。因此,当 i=0 时,t=5,s=2+8=10;i=1 时,t=4,s=10+8=18;当i=2 时,t=6,s=18+11=29。2.若有以下程序段: int m=0xabc, n=0xabc; m-=n; printf(“% X/n“, m); 执行后的输出结果是_。
27、(分数:2.00)A.0X0B.0x0C.0 D.0XABC解析:解析 “%X”以十六进制无符号形式输出整数,变量 m 和 n 的初始值都是十六进制数,m=m-n=0xabc-oxabc=0x0,所以输出结果为 0。解析:解析 选项 A 中没有指定第二个形参变量 B 的数据类型,错误。4.设有如下关系表: (分数:2.00)A.T=RSB.T=RS C.T=RSD.T=R/S解析:解析 仔细观察 3 个表可以看到,R,S,T 具有相同的关系模式,且 T 包含了 R 和 S 的所有元组,故 T=RS。5.以下选项中可作为 C 语言合法常量的是_。(分数:2.00)A.-80. B.-080C.-
28、8e1.0D.-80.0e解析:解析 对于 B,以 0 开头表示八进制数,八进制数的范围是 07,所以 B 不对;c 后面必须是整数,所以 C、D 也不合法。6.以下选项中非法的表达式是_。(分数:2.00)A.0=x100B.i=j=0C.(cha(65+3)D.x+1=x+1 解析:解析 选项 D 中赋值运算符的左侧是一个表达式,不是一个变量,因此该项错误。7.有以下程序段: main() int a=5, *b, *c; c= b= 程序在执行了 c= b= 语句后,表达式*c 的值是_。(分数:2.00)A.变量 a 的地址B.变量 b 中的值C.变量 a 中的值 D.变量 b 的地址
29、解析:解析 本题中 b 是指向 int 型的指针变量,c 是指向指针的指针变量。执行完语句 c= int b=-1; a=b; printf(“% u“, a); 程序运行后的输出结果是_。(分数:2.00)A.-1B.65535 C.32767D.-32768解析:解析 int 型数据-1 与 unsigned int 型数据 65535 在内存中的存储内容相同。9.设变量已正确定义,则以下能正确计算 n!的程序段是_。(分数:2.00)A.f=0; for(i=1; i=n; i+)f*=i;B.f=1; for(i=1; in; i+)f*=i;C.f=1; for(i=n; i1; i
30、+)f*=i;D.f=1; for(i=n; i=2; i-)f*=i; 解析:解析 A 选项,将 f 赋值为 0,结果得到 0,因为 0 乘任何数都为 0;B 选项,in,计算的是(n-1)!,C 选项将陷入死循环。10.以下只有在使用时才为该类型变量分配内存的存储类说明是_。(分数:2.00)A.auto 和 staticB.auto 和 register C.register 和 staticD.extern 和 register解析:解析 auto 和 register 存储类型的变量在使用时分配存储空间,使用后即释放。11.以下不能正确计算代数式 sin2( (分数:1.00)A.1
31、/3*sin(1/2)*sin(1/2) B.sin(0.5)*sin(0.5)/3C.pow(sin(0.5), 2)/3D.1/3.0*pow(sin(1.0/2), 2)解析:解析 A 中 sin(1/2)是 0,因为 1 和 2 都是整数,“/”在这里是整除。12.已有定义:char a=“xyz“b=x, y, z);,以下叙述中正确的是_。(分数:1.00)A.数组 a 和 b 的长度相同B.a 数组长度小于 b 数组长度C.a 数组长度大于 b 数组长度 D.上述说法都不对解析:解析 a 数组是字符串,系统会自动地给它加一个结束标志符/0,因此 a 的长度就变为 4 了,所以 a
32、 数组比 b 数组长。13.以下程序段中,能够通过调用函数 fun,使 main 函数中的指针变量 p 指向一个合法的整型单元的是_。(分数:1.00)A.main() int *p; fun(; int fun(int * int s; p=B.main() int *p; fun(&; int fun(int * int s; *p=C.# includestdli h main() int *p; fun(&; int fun(int * *p=(int *)malloc(2);D.# includestdli h main() int *p; fun(; int fun(int * p
33、=(int *)malloc(sizeof(in);解析:解析 选项 A 和 B 中 p 指向局部变量 s 的地址,退出函数 fun 后,该局部变量也被释放,不能使p 指向一个整型单元地址;选项 D 中通过 malloc 函数分配一个整型地址,但不能被返回到 main 函数中,因为指针参数指向的地址不能被改变;选项 C 中,p 是指向指针的指针,函数 fun 改变的是其指向的内容,而不是其地址。14.有如下程序: # define N 2 # define M N+1 # define NUM 2*M+1 # main() int i; for(i=1; i=NUM; i+) printf(“
34、% d/n“, i); 该程序中的 for 循环执行的次数是_。(分数:1.00)A.5B.6 C.7D.8解析:解析 本题考查宏定义的使用。本题定义了 3 个宏名分别是 N、M 和 NUM。对 NUM 展开得2*M+1=2*N+1+1=22+1+1=6。因此正确答案是 B。15.有以下程序: main() int i=1, j=2, k=3; if(i+=1 程序运行后的输出结果是_。(分数:1.00)A.1 2 3B.2 3 4C.2 2 3D.2 3 3 解析:解析 对于 if 语句,根据优先级顺序,先判断(+j=-3|k+=3),此时,+j=-3 成立,就不用计算“|”后面的表达式,此
35、时 k=3,由于 i+=1 成立,自加后 i=2,if 语句的条件为真,故输出的结果为:2, 3, 3。16.用 C 语言编写的代码_。(分数:1.00)A.可立即执行B.是一个源程序 C.经过编译即可执行D.经过编译解释才能执行解析:解析 用 C 语言编写的代码是一个源程序,不能立即执行,如果没有错误,则经过编译、连接后即可执行。17.在函数调用过程中,如果函数 funA 调用了函数 funB,函数 funB 又调用了函数 funA,则_。(分数:1.00)A.称为函数的直接递归调用B.称为函数的间接递归调用 C.称为函数的循环调用D.C 语言中不允许这样的递归调用解析:解析 如果在调用函数
36、 A 时,函数 A 调用了本身,称为函数的直接递归调用;如果函数 A 调用了函数 B,函数 B 又调用了函数 A,称为函数的间接递归调用。18.有以下程序: main() int p7=11, 13, 14, 15, 16, 17, 18), i=0, k=0; while(i7 i+; printf(“% d/n“, k) 执行后的输出结果是_。(分数:1.00)A.58B.56C.45D.24 解析:解析 程序中 while 语句的循环条件为 i7 printf(“% d % d/n“, sizeof(p), sizeof(q); ; 程序运行后的输出结果是_。(分数:1.00)A.4 4
37、B.3 3C.3 4 D.4 3解析:解析 因为在 C 语言中对于字符串都会在最后加上结束标志/0,因此,q 的民度为 4。20.有以下程序: main() char a=a, b; printf(“% c, “,+a); printf(“% c/n“, b=a+); 程序运行后的输出结果是_。(分数:1.00)A.b, b B.a, bC.b, cD.a, c解析:解析 本题同样考查+运算的执行次序。第一个 prantf 输出的是b,并且变量 a=b;第二个printf 输出的是赋值语句 b=a+最终的结果,该语句首先将 a 的值赋给 b,然后 a+,因此第二个 printf输出也是b。21
38、.下列程序执行后的输出结果是_。 # define MA(x) x*(x-1) main() int a=1, b=2; printf(“% d/n“, MA(1+a+b);(分数:2.00)A.6B.8 C.10D.12解析:解析 MA(1+a+b)展开为:1+a+h*(1+a+b-1)=1+1+2(1+1+2-1)=2+23=8。22.有以下程序: main() int i=0, s=0; do if(i % 2) i+; continue; i+; s+=i; while(i7);printf(“% d/n“, s); 执行后的输出结果是_。(分数:2.00)A.16 B.12C.28D
39、.21解析:解析 continue 语句的作用是结束本次循环,程序中 while 循环语句的功能是计算 17 之间奇数之和,即 s=1+3+5+7=16。23.以下程序的输出结果是_。 int f() static int i=0; int s=1; s+=i; i+; return s; main() int i, a=0; for(i=0; i5; i+) a+=f(); printf(“% d/n“, a);(分数:2.00)A.20B.24C.25D.15 解析:解析 函数 f 中变量 i 为静态变量,函数 f 调用结束后变量 i 所占据的存储单元不会释放,而在主函数中 f 被调用 5
40、 次,具体过程如下: 第 1 次调用 f:s=s+i=1+0=1,i=i+1=1,主函数中 a=a+f()=0+1=1 第 2 次调用 f:s=s+i=1+1=2,i=i+1=2,主函数中 a=a+f()=1+2=3 第 3 次调用f:s=s+i=1+2=3,i=i+1=3,主函数中 a=a+f()=3+3=6 第 4 次调用 f:s=s+i=1+3=4,i=i+1=4,主函数中a=a+f()=6+4=10 第 5 次调用 f:s=s+i=1+4=5,i=i+4=5,主函数中 a=a+f()=10+5=15 所以 printf 语句的输出结果为 15。24.若变量已正确说明为 float 类型
41、,要通过语句 scanf(“%f %f %f“, p=s1; printf(“% c, % s/n“, *(p+1),so); 执行后的输出结果是_。(分数:2.00)A.n, twoB.t, oneC.w, one D.o, two解析:解析 程序定义了一个指针数组 s 和一个字符型指针变量 p。s 有 3 个元素,其中 s0指向字符串“one,s1指向字符串“two“,s2指向字符串“three“,执行 p=s1后 p 指向字符串“two“,所以*(p+1)=w。26.有以下函数定义: void fun(int n, double x) 若以下选项中的变量都已经正确定义并赋值,则对函数 f
42、un 的正确调用语句是_。(分数:2.00)A.fun(int y, double ;B.k=fun(10, 12.5);C.fun(x, ; D.void fun(n, ;解析:解析 若函数 fun 没有返回值,选项 B 错误;函数调用语句中没有函数返回值,选项 D 错误;函数凋用语句中只写实参名称,选项 A 错误。27.以下叙述中正确的是_。(分数:2.00)A.局部变量说明为 static 存储类,其生存期将得到延长 B.全局变量说明为 static 存储类,其作用域将被扩大C.任何存储类的变量在未赋初值时,其值都是不确定的D.形参可以使用的存储类说明符与局部变量完全相同解析:解析 变量
43、的作用域与存储类型没有任何关系,选项 B 错误;static 存储类型的变量在未赋初值时,其值确定为 0。28.有以下程序: # define N 20 fun(int a, int n, int m) int i, j; for(i=m; i=n; i-)ai+1=ai; main() int i, aN=1, 2, 3, 4, 5, 6, 7, 8, 9, 10; fun(a, 2, 9); for(i=0; i5; i+)printf(“% d“, ai); 程序运行后的输出结果是_。(分数:2.00)A.10234B.12344C.12334 D.12234解析:解析 由于用了宏定义
44、a10a19均为 0。函数 fun 的功能是把从 an到 am中的元素依次赋给后面的一个元素。调用了 fun(a, 2, 9)以后,aN=1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10。29.以下叙述中正确的是_。(分数:2.00)A.预处理命令行必须位于源文件的开头B.在源文件的一行上可以有多条预处理命令C.宏名必须用大写字母表示D.宏替换不占用程序的运行时间 解析:解析 预处理命令一般位于源文件的开头,但不是一定得这么做。源文件一行上只能有一条预处理命令,宏名可以用小写字母来表示。30.有以下程序: # includestdio. h # difine F(X, Y) (
45、X)*(Y) main() int a=3, b=4; print(“% d/n“, F(a+, b+); 程序运行后的输出结果是_。(分数:2.00)A.12 B.15C.16D.20解析:解析 F(a+,b+)的宏展开为:F(a+,b+)=(a+)*(b+)=a*b=34=12,因此 printf 函数的输出结果是 12。31.下列关于栈的描述中错误的是_。(分数:2.00)A.栈是先进后出的线性表B.栈只能顺序存储 C.栈具有记忆作用D.对栈的插入和删除操作中,不需要改变栈底指针解析:解析 栈是一种特殊的线性表,插入和删除操作只能在线性表的一端进行,不需要改变栈底指针。栈是先进后出的线性表,由此可以看出,