1、二级 C 语言-277 (1)及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:100.00)1.数据的存储结构是指_。(分数:2.50)A.数据所占的存储空间B.数据的逻辑结构在计算机中的存放形式C.数据在计算机中的顺序存储方式D.存储在计算机外存中的数据2.以下选项中正确的整型常量是_。(分数:2.50)A.12.B.-20C.1,000D.4563.关系数据库管理系统能实现的专门关系运算包括_。(分数:2.50)A.排序、索引、统计B.选择、投影、连接C.关联、更新、排序D.显示、打印、制表4.已知二叉树后序遍历序列是 dabec,中序遍历序列是 de
2、bac,那么它的前序遍历序列是_。(分数:2.50)A.achedB.decabC.deabcD.cedba5.若变量已正确定义并赋值,符合 C 语言语法的表达式是_。(分数:2.50)A.a=a+7;B.a=7+b+c, a+C.int(12.3%4)D.a=a+7=c+b6.设有二元关系 R 和三元关系 S,下列运算合法的是_。(分数:2.50)A.RSB.RSC.R-SD.RS7.两个或两个以上模块之间联系的紧密程度称为_。(分数:2.50)A.耦合性B.内聚性C.复杂性D.数据传输特性8.设 a=1,b=2,c=3,d=4,则表达式:“ab?a:bb?a:cd?a:d”的结果为_。(分
3、数:2.50)A.4B.3C.2D.19.若有定义:“int a=4, b=5; float x=3.4, y=2.1;”,则下列表达式的值为_。 (float)(a+b)/2+(int)x%(int)y;(分数:2.50)A.5.5B.55C.5.500000D.55.0000010.下列程序的输出结果是_。 main() int a, b, d=25; a=d/10%9; b=a printf(“%d, %d/n“, a, b); (分数:2.50)A.6,1B.2,1C.6,0D.2,011.以下叙述中正确的是_。(分数:2.50)A.在 C 程序中无论是整数还是实数,只要在允许的范围内
4、都能准确无误地表示B.C 程序由主函数组成C.C 程序由若干函数组成D.C 程序中只允许包含一个函数12.以下能正确定义二维数组的是_。(分数:2.50)A.int a3;B.int a3=2*3;C.int a3=;D.int a23=1, 2, 3, 4;13.语句 int(*ptr)()的含义是_。(分数:2.50)A.ptr 是一个返回值为 int 的函数B.ptr 是指向 int 型数据的指针变量C.ptr 是指向函数的指针,该函数返回一个 int 型数据D.ptr 是一个函数名,该函数的返回值是指向 int 型数据的指针14.要求通过 while 循环不断读入字符,当读入字母 N
5、时结束循环,若变量已正确定义,下列正确的程序段是_。(分数:2.50)A.while(ch=getchar()!=“N“)printf(“%c“, ch);B.while(ch=getchar()!=“N“)printf(“%c“, ch);C.while(ch=getchar()=“N“)printf(“%c“, ch);D.while(ch=getchar()=“N“)printf(“%c“, ch);15.下列说法不正确的是_。(分数:2.50)A.调用函数时,实参可以是表达式B.调用函数时,实参与形参可以共用内存单元C.调用函数时,将实参的值复制给形参,使实参变量和形参变量在数值上相等
6、D.调用函数时,实参与形参的类型必须一致16.有下列程序: main() int y=10 doy-; while(-y); printf(“%d/n“, -y); 当执行程序时,输 m 的结果是_。(分数:2.50)A.-1B.1C.4D.017.若已包括头文件string.h且已有定义 char s118,s2=“ABCDE“和 int i,现要将字符串“ABCDE“赋给 s1,下列语句错误的是_。(分数:2.50)A.strcpy(s1, s2)B.strcpy(s1, “ABCDE“);C.s1=“ABCDE“;D.for(i=0; i6; i+) s1i=s2i18.在位运算中,操作
7、数每左移两位,其结果相当于_。(分数:2.50)A.操作数乘以 2B.操作数除以 2C.操作数除以 4D.操作数乘以 419.以下程序的输出结果是_。 main() int a=7, b=8, *p, *q, *r; p= q= r=p; p=q; q=r; printf(“%d, %d, %d, %d/n“, *p, *q, a, b); (分数:2.50)A.8,7,8,7B.7,8,7,8C.8,7,7,8D.7,8,8,720.有以下程序: #includestdio.h main() int x=10, y=3; printf(“%d/n“, y=x/y); 执行后的输出结果是_。(
8、分数:2.50)A.0B.1C.3D.不确定的值21.下列程序的运行结果为_。 #includestdio.h main() struct date int year, month, day; today; printf(“%d/n“, sizeof(struct date); (分数:2.50)A.8B.6C.10D.1222.有以下程序: #includestdio.h struct stu int num; char name10; int age; void fun(struct stu *p) printf(“%s/n“, (*p).name); main() struct stu
9、students3=9801, “Zhang“, 20 9802, “Wang“, 19, 9803, “Zhao“, 18 fun(students+2); 输出的结果是_。(分数:2.50)A.ZhangB.ZhaoC.WangD.1823.有以下程序: viod fun(int a, int b, int c) a=456; b=567; c=678; main() int x=10, y=20, z=30; fun(x, y, z); printf(“%d, %d, %d/n“, x, y, z); 输出的结果是_。(分数:2.50)A.30,20,10B.10,20,30C.456,
10、567,678D.678,567,45624.有以下结构说明和变量定义,指针 p、q、r 分别指向链表中的 3 个连续结点。 struct node int data; struct node*next; *p, *q, *r; 现要将 q 所指结点从链表中删除,同时要保持链表的连续,以下不能按要求完成操作的语句是_。(分数:2.50)A.p-next=q-next;B.p-next=p-next-next;C.p-next=r;D.p=q-next;25.有定义:“int a=2, b=3, c=4;”,则下列选项中值为 0 的表达式是_。(分数:2.50)A.(!a=1)B.t=fun(“
11、D“, 16.5);C.fun(“65“, 2.8);D.fun(32, 32);27.有下列程序: main() char p=“a“, “b“, “c“, q=“abc“; printf(“%d%d/n“, sizeof(p), sizeof(q); 程序运行后的输 m 结果是_。(分数:2.50)A.4 4B.3 3C.3 4D.4 328.判断 char 型变量 c 是否为大写字母的最简单且正确的表达式是_。(分数:2.50)A.“A“=c=“Z“B.(c=“A“)|(c=“Z“)C.(“A“=c)AND(“Z“=c)D.(c=“A“) p= for(x=1; x3; x+) y+=p
12、x; printf(“%d/n, y“); 程序运行后的输出结果是_。(分数:2.50)A.10B.11C.14D.1530.有下列程序: void sort(int a, int n) int i, j, t; for(i=0; in-1; i+) for(j=i+1; jn; j+) if(aiaj)t=ai; ai=aj; aj=t; main() int aa10=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, i; sort(aa+2, 5); for(i=0; i10; i+) printf(“%d, “, aai); printf(“/n“); 程序运行后的输出结果
13、是_。(分数:2.50)A.1,2,3,4,5,6,7,8,9,10,B.1,2,7,6,3,4,5,8,9,10,C.1,2,7,6,5,4,3,8,9,10,D.1,2,9,8,7,6,5,4,3,10,31.有以下程序段: int x=3; do printf(“%3d“, x-=2); while(!(-x); 程序段的输出结果是_。(分数:2.50)A.1B.3 0C.1-2D.死循环32.下列程序的输出结果是_。 int f1(int x, int y)return xy? x:y; int f2(int x, int y)return xy? y:x; main() int a=
14、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.50)A.4,3,7B.3,4,7C.5,2,7D.2,5,733.下列程序的输出结果是_。 #includestdio.h main() int a=3, b=2, c=1; if(ab) if(b0)c=0; else c+; printf(“%d/n“, c); (分数:2.50)A.2B.0C.1D.不确定的值34.下述程序的输
15、出结果是_。 #includestdio.h main() char ch25=“1234“, “5678“, *p2; int i, j, s=0; for(i=0; i2; i+) pi=chi; for(i=0; i2; i+) s=pij-“0“; printf(“%d“, s); (分数:2.50)A.6357B.6135C.37D.69135735.下述程序的输出结果是_。 #includestdio.h main() int a23=1, 2, 3, 4, 5, 6, (*p)3, i; p=a; for(i=0; i3; i+) if(i2) p1i=p1i-1; else p
16、1i=1; printf(“%d/n“, a01+a11+a12); (分数:2.50)A.8B.7C.12D.936.若有以下说明,则_不是对 strcpy 库函数正确的调用。 strcpy 库函数用于复制一个字符串:char*str1=“abcd“, str210, *str3=“hijklmn“, *str42, *str5=“aaaa“;(分数:2.50)A.strcpy(str2, str1)B.strcpy(str3, str1)C.strcpy(str1, str2)D.strcpy(str5, str1)37.执行下述程序后,输出的结果是_。 #includestdio.h #
17、define S(X) X*X void main() int a=9, k=3, m=2; a/=S(k+m)/S(k+m); printf(“%d“, a); (分数:2.50)A.1B.4C.9D.038.已知有如下结构体: struct sk int a; float b; data, *p; 若有 p=C.p-data.aD.data.a39.下述程序的输出结果是_。 #includestdio.h void main() int b6=2, 4, 6, 8, 10, 12; int *p=b, *q= printf(“%d, “, *(p+); printf(“%d, “, *q)
18、; (分数:2.50)A.4,4B.2,2C.4,5D.2,440.有以下程序: #includestdio.h main() char X=“A“; x=(x=“A“ printf(“%c/n“, x); 程序的输出结果是_。(分数:2.50)AABaCZDz二级 C 语言-277 (1)答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:100.00)1.数据的存储结构是指_。(分数:2.50)A.数据所占的存储空间B.数据的逻辑结构在计算机中的存放形式 C.数据在计算机中的顺序存储方式D.存储在计算机外存中的数据解析:解析 数据的存储结构,又称为数据的物理
19、结构,是数据的逻辑结构在计算机中的存放形式。2.以下选项中正确的整型常量是_。(分数:2.50)A.12.B.-20 C.1,000D.456解析:解析 选项 A,为 float 类型;选项 C,中间有逗号不是一个常量;选项 D,中间有空格,是三个连续的整形常量。3.关系数据库管理系统能实现的专门关系运算包括_。(分数:2.50)A.排序、索引、统计B.选择、投影、连接 C.关联、更新、排序D.显示、打印、制表解析:解析 关系数据库管理系统的专门关系运算包括选择运算、投影运算和连接运算。4.已知二叉树后序遍历序列是 dabec,中序遍历序列是 debac,那么它的前序遍历序列是_。(分数:2.
20、50)A.achedB.decabC.deabcD.cedba 解析:解析 二叉树的遍历有 3 种:前序、中序和后序。前序遍历访问根结点,然后按左右顺序遍历子结点;中序首先遍历左子树,然后访问根结点,最后遍历右子树;后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点。本题根据后序和中序遍历的结果可以得出二叉树的结构,然后再对其进行前序遍历,正确答案选项为 D。5.若变量已正确定义并赋值,符合 C 语言语法的表达式是_。(分数:2.50)A.a=a+7;B.a=7+b+c, a+ C.int(12.3%4)D.a=a+7=c+b解析:解析 选项 A,不是表达式,是语句;选项 B,是逗号表达式
21、;选项 C,12.3 是小数不能做%运算;选项 D,a+7 不能放在表达式左边。6.设有二元关系 R 和三元关系 S,下列运算合法的是_。(分数:2.50)A.RSB.RSC.R-SD.RS 解析:解析 本题给出的两个关系 R 与 S 的表结构是不同的(R 是二元关系,S 是三元关系),它们不能进行“、-”运算,却可以进行笛卡儿积()运算。7.两个或两个以上模块之间联系的紧密程度称为_。(分数:2.50)A.耦合性 B.内聚性C.复杂性D.数据传输特性解析:解析 耦合性用来表示模块间互相连接的紧密程度的度量,它取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。8.设 a=1,b=2
22、,c=3,d=4,则表达式:“ab?a:bb?a:cd?a:d”的结果为_。(分数:2.50)A.4B.3C.2D.1 解析:解析 在三目运算符中,优先级相同,按从右到左的结合性计算,ab?a:(cd?a:d)cd 成立,所以取值 a,以此可得,选择 D 选项。9.若有定义:“int a=4, b=5; float x=3.4, y=2.1;”,则下列表达式的值为_。 (float)(a+b)/2+(int)x%(int)y;(分数:2.50)A.5.5B.55C.5.500000 D.55.00000解析:解析 在计算(float)(a+b)/2 时,由于通过强制类型转换将(a+b)转换成了
23、 float 型,所以应先将 2 转换成 float 型,再进行计算,得 4.500000。 在计算(int)x%(int)y 时,先将 x 和 y 通过强制类型转换成 int 型,再进行求余运算,结果为 1。又因为4.500000 是 float 型,所以将 1 和它相加时,先将 1 换成 float 型,再计算,得到 5.500000。 类型转换的一般规则是低级类型从高级类型进行相应的转换。数据类型的级别由低到高的排序表示为:charintunsignedlogfloatdouble。10.下列程序的输出结果是_。 main() int a, b, d=25; a=d/10%9; b=a
24、printf(“%d, %d/n“, a, b); (分数:2.50)A.6,1B.2,1 C.6,0D.2,0解析:解析 当逻辑运算符“B.int a3=2*3; C.int a3=;D.int a23=1, 2, 3, 4;解析:解析 选项 A 中对于二维数组,必须通过赋值的个数来确定其长度,没有赋值则无法确定。选项C 中赋的是空值,也不能确定其行下标。选项 D 中定义的两行三列,而赋值的却是三行两列。13.语句 int(*ptr)()的含义是_。(分数:2.50)A.ptr 是一个返回值为 int 的函数B.ptr 是指向 int 型数据的指针变量C.ptr 是指向函数的指针,该函数返回
25、一个 int 型数据 D.ptr 是一个函数名,该函数的返回值是指向 int 型数据的指针解析:解析 本题考查的是指向函数的指针。函数指针定义的基本格式为:类型标识符(*指针变量名)()。“类型标识符”为函数返回值的类型。14.要求通过 while 循环不断读入字符,当读入字母 N 时结束循环,若变量已正确定义,下列正确的程序段是_。(分数:2.50)A.while(ch=getchar()!=“N“)printf(“%c“, ch); B.while(ch=getchar()!=“N“)printf(“%c“, ch);C.while(ch=getchar()=“N“)printf(“%c“
26、, ch);D.while(ch=getchar()=“N“)printf(“%c“, ch);解析:解析 while 循环的执行过程如下:计算 while 后面圆括号中表达式的值。当值为非 0 时,执行步骤。当值为 0 时,执行步骤。执行循环体一次。转去执行步骤。退出循环。在选项 A 中,表达式(ch=get-char()!=“N“表示输入的字符不等于 N,如果这个条件表达式成立,则执行循环体,打印输出输入的字符。如果这个条件表达式不成立,即输入的字符等于 N,则退出循环。所以选项 A 为正确答案。15.下列说法不正确的是_。(分数:2.50)A.调用函数时,实参可以是表达式B.调用函数时,
27、实参与形参可以共用内存单元 C.调用函数时,将实参的值复制给形参,使实参变量和形参变量在数值上相等D.调用函数时,实参与形参的类型必须一致解析:解析 本题考查函数调用的基本概念。调用函数时,实参的形式可以是具体的数值,也可以是表达式。实参将数值或表达式的值传递给形参,因而两者的类型必须保持一致。形参在运算过程中会发生改变,但不一定会影响到实参值,所以可知两者不共用内存单元。16.有下列程序: main() int y=10 doy-; while(-y); printf(“%d/n“, -y); 当执行程序时,输 m 的结果是_。(分数:2.50)A.-1B.1C.4D.0 解析:解析 本题考
28、查 do-while 循环。当-y 是 0(即 y 是 0)时结束循环,输出-y,先将 y 的值减 1 再输出 y 的值。17.若已包括头文件string.h且已有定义 char s118,s2=“ABCDE“和 int i,现要将字符串“ABCDE“赋给 s1,下列语句错误的是_。(分数:2.50)A.strcpy(s1, s2)B.strcpy(s1, “ABCDE“);C.s1=“ABCDE“; D.for(i=0; i6; i+) s1i=s2i解析:解析 数组名 s1 是代表 s1 数组首地址的地址常量,因为“=”左边不能出现常量,所以s1=“ABCDE“的方法是错误的。18.在位运
29、算中,操作数每左移两位,其结果相当于_。(分数:2.50)A.操作数乘以 2B.操作数除以 2C.操作数除以 4D.操作数乘以 4 解析:解析 左移 n 位相当于乘以 2 的 n 次幂,右移 n 位相当于除以 2 的 n 坎幂。19.以下程序的输出结果是_。 main() int a=7, b=8, *p, *q, *r; p= q= r=p; p=q; q=r; printf(“%d, %d, %d, %d/n“, *p, *q, a, b); (分数:2.50)A.8,7,8,7B.7,8,7,8C.8,7,7,8 D.7,8,8,7解析:解析 在“r=p;p=q;q=r;”三个语句是表示
30、 p 与 q 交换,经过交换后 p 指向 b 的地址,q 指向a 的地址,因此最后输出为 8,7,7,8,故选择 C 选项。20.有以下程序: #includestdio.h main() int x=10, y=3; printf(“%d/n“, y=x/y); 执行后的输出结果是_。(分数:2.50)A.0B.1C.3 D.不确定的值解析:解析 xy 都是整形,C 表达式的值的类型和参与运算的值的类型保持一致,而浮点数据转换为整形数据使用的方法是直接抛弃小数部分,所以 3.3 的小数部分被舍弃了,于是结果就是 3。21.下列程序的运行结果为_。 #includestdio.h main()
31、 struct date int year, month, day; today; printf(“%d/n“, sizeof(struct date); (分数:2.50)A.8B.6 C.10D.12解析:解析 struct date 中包含 year、month、day 这 3 个整型变量,一个整型变量占 2 个字节;sizeof 是求所占字节数的运算符。22.有以下程序: #includestdio.h struct stu int num; char name10; int age; void fun(struct stu *p) printf(“%s/n“, (*p).name);
32、 main() struct stu students3=9801, “Zhang“, 20 9802, “Wang“, 19, 9803, “Zhao“, 18 fun(students+2); 输出的结果是_。(分数:2.50)A.ZhangB.Zhao C.WangD.18解析:解析 从实参传递过去的是结构体系数组的第 3 个元素,所以输出的 name 为 Zhao。23.有以下程序: viod fun(int a, int b, int c) a=456; b=567; c=678; main() int x=10, y=20, z=30; fun(x, y, z); printf(“
33、%d, %d, %d/n“, x, y, z); 输出的结果是_。(分数:2.50)A.30,20,10B.10,20,30 C.456,567,678D.678,567,456解析:解析 本题考查实参与形参调用,从实参传递到形参时,只是数值的传递,调用函数中值的改变不会影响主函数中的值,因此原样输出。24.有以下结构说明和变量定义,指针 p、q、r 分别指向链表中的 3 个连续结点。 struct node int data; struct node*next; *p, *q, *r; 现要将 q 所指结点从链表中删除,同时要保持链表的连续,以下不能按要求完成操作的语句是_。(分数:2.50
34、)A.p-next=q-next;B.p-next=p-next-next;C.p-next=r;D.p=q-next; 解析:解析 本题考查链表结点的删除,q-next 中存放的是 r 所指结点的首地址,将 r 所指结点的首地址存于 p-next 中,则实现删除 q 所指点的功能,并保持链表连续,p 所指点与 r 所指结点相连。25.有定义:“int a=2, b=3, c=4;”,则下列选项中值为 0 的表达式是_。(分数:2.50)A.(!a=1)B.t=fun(“D“, 16.5);C.fun(“65“, 2.8); D.fun(32, 32);解析:解析 由题目的已知条件函数 fun
35、 的定义形式 void fun(char ch,float x)可知第一个形参为字符型,所以 A 不符合,第二个形参为精度型,所以 D 不符合,函数 fun 定义为 void 型(无返回值型),故其没有返回值,所以选项 B 错误。选项 C 的第一个实参的类型为字符型,第二个实参的类型为单精度型,与函数 fun 的形式参数的类型相符合,所以选项 C 为正确答案。27.有下列程序: main() char p=“a“, “b“, “c“, q=“abc“; printf(“%d%d/n“, sizeof(p), sizeof(q); 程序运行后的输 m 结果是_。(分数:2.50)A.4 4B.3
36、 3C.3 4 D.4 3解析:解析 语句 char p=“a“,“b“,“c“;定义了一个一维字符数组 p,并用 3 个字符“a“,“b“,“c“进行了初始化;而语句 q=“abc“表示定义了一个一维字符数组,并用一个字符串常量“abc“进行了初始化。在 C 语言中,系统在每个字符串常量的最后自动加入一个字符“/0“作为字符串的结束符。所以函数 sizeof(q)=4,而 sizeof(p)=3,因而选项 C 为正确答案。28.判断 char 型变量 c 是否为大写字母的最简单且正确的表达式是_。(分数:2.50)A.“A“=c=“Z“B.(c=“A“)|(c=“Z“)C.(“A“=c)AN
37、D(“Z“=c)D.(c=“A“) p= for(x=1; x3; x+) y+=px; printf(“%d/n, y“); 程序运行后的输出结果是_。(分数:2.50)A.10B.11C.14 D.15解析:解析 由题目的语句 p= for(i=0; in-1; i+) for(j=i+1; jn; j+) if(aiaj)t=ai; ai=aj; aj=t; main() int aa10=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, i; sort(aa+2, 5); for(i=0; i10; i+) printf(“%d, “, aai); printf(“/n“)
38、; 程序运行后的输出结果是_。(分数:2.50)A.1,2,3,4,5,6,7,8,9,10,B.1,2,7,6,3,4,5,8,9,10,C.1,2,7,6,5,4,3,8,9,10, D.1,2,9,8,7,6,5,4,3,10,解析:解析 本题考查排序的使用由 sort()函数的两层 for 循环语句可知,其功能是把数组 a中的元素按照从大到小的顺序进行排列。在 main()函数中首先定义了一维整型数组 aa10,然后调用sort(aa+2,5)实现从数组 aa 中下标为 2 的元素“3”开始,其后连续的 5 个元素从大到小进行排列,其余元素不变。31.有以下程序段: int x=3;
39、do printf(“%3d“, x-=2); while(!(-x); 程序段的输出结果是_。(分数:2.50)A.1B.3 0C.1-2 D.死循环解析:解析 int x=3;打印出 1,此时 while(!(-x)为真,之后 x=0,继续循环。打印出-2,此时while(!(-x)为假,之后 x=-3 退出循环。所以答案为 1 和-2。32.下列程序的输出结果是_。 int f1(int 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;
40、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.50)A.4,3,7 B.3,4,7C.5,2,7D.2,5,7解析:解析 根据函数的定义可知,如果 xy 成立,则函数 f1 返回 x 的值,函数 f2 返回 y 的值。所以f1(a,b)=4,f1(c,d)=5,f2(a,b)=3,f2(c,d)=2,故 e=f2(4,5)=4,f=f1(3,2)=3,g=4+3+5+2-4-3=7。33.下列程序的输出结果是_。 #includest
41、dio.h main() int a=3, b=2, c=1; if(ab) if(b0)c=0; else c+; printf(“%d/n“, c); (分数:2.50)A.2B.0C.1 D.不确定的值解析:解析 第一个 if 语句,先判断条件,发现 ab 不成立,不再执行下列的语句,直接执行最后的printf 输出语句,然后结束程序,整个过程 c 的值没有发生变化。34.下述程序的输出结果是_。 #includestdio.h main() char ch25=“1234“, “5678“, *p2; int i, j, s=0; for(i=0; i2; i+) pi=chi; fo
42、r(i=0; i2; i+) s=pij-“0“; printf(“%d“, s); (分数:2.50)A.6357B.6135C.37 D.691357解析:解析 本题先将指针 p 指向二维数组 ch25,相当于 p0=“1234“,p1=“5678“;通过双重for 循环,将 p 中的字符隔一个输出一个,通过“s=pij-“0“;”语句将所要输出的字符转换成相应的十进制数。35.下述程序的输出结果是_。 #includestdio.h main() int a23=1, 2, 3, 4, 5, 6, (*p)3, i; p=a; for(i=0; i3; i+) if(i2) p1i=p1
43、i-1; else p1i=1; printf(“%d/n“, a01+a11+a12); (分数:2.50)A.8B.7 C.12D.9解析:解析 根据判断本题共进行 3 次 for 循环,第 1 次执行 for 循环,p10=p10-1=3;第 2 次执行 for 循环,p11=p11-1=4;第 3 次执行 for 循环,p12=1,最后输出的是 a01+a11+a12=2+4+1=7。36.若有以下说明,则_不是对 strcpy 库函数正确的调用。 strcpy 库函数用于复制一个字符串:char*str1=“abcd“, str210, *str3=“hijklmn“, *str42
44、, *str5=“aaaa“;(分数:2.50)A.strcpy(str2, str1)B.strcpy(str3, str1)C.strcpy(str1, str2) D.strcpy(str5, str1)解析:解析 strcpy(s1,s2)函数的功能是将字符串 s2 复制到字符串 s1 中。要保证 s1 存储区能容纳下s2 字符串。37.执行下述程序后,输出的结果是_。 #includestdio.h #define S(X) X*X void main() int a=9, k=3, m=2; a/=S(k+m)/S(k+m); printf(“%d“, a); (分数:2.50)A
45、.1B.4C.9D.0 解析:解析 本题主要是考查带参数的宏定义,过程如下:int a=a/S(k+m)/S(k+m)=a/(k+m*k+m/k+m)=9/(3+2*3+2/3+2*3+2)=0。38.已知有如下结构体: struct sk int a; float b; data, *p; 若有 p= C.p-data.aD.data.a解析:解析 本题主要考查结构指针:p= int *p=b, *q= printf(“%d, “, *(p+); printf(“%d, “, *q); (分数:2.50)A.4,4B.2,2C.4,5D.2,4 解析:解析 首先定义了一个指向一维数组 b 的
46、指针 p,一个指向指针 p 的指针变量 q;输出*(p+)是先输出*p,即 b0的值,再将指针 p 指向数组的下一个元素 b1;输出*q 是输出指针 p 所指单元的内容。40.有以下程序: #includestdio.h main() char X=“A“; x=(x=“A“ printf(“%c/n“, x); 程序的输出结果是_。(分数:2.50)AABa CZDz解析:解析 因为在 ASCII 码中,它的大写比小写刚好小 32,比如“A“的 ASCII 是 65,那么“a“的 ASCII就是 97。x=(x=“A“&x=“Z“)?(x+32):x;这句用了?:表达式,A?B:C 就是问号前 A 部分为真时,表达式