1、二级 C 语言-281 (1)及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:100.00)1.数据库系统的核心是_。(分数:2.50)A.数据模型B.数据库管理系统C.数据库D.数据库管理员2.以下选项中正确的实型常量是_。(分数:2.50)A.0B.3.1415C.0.329102D.8713.为了提高软件的独立性,模块之间最好是_。(分数:2.50)A.控制耦合B.公共耦合C.内容耦合D.数据耦合4.下列叙述中正确的是_。(分数:2.50)A.算法的执行效率与数据存储结构无关B.算法的空间复杂度是指算法程序中指令(或语句)的条数C.算法的有穷性是指算
2、法必须能在执行有限个步骤之后终止D.以上 3 种描述都不对5.有下列二叉树: (分数:2.50)A.ABCDFEGB.ACBDFGEC.ABDCGEFD.FCADBEG6.下列标识符不是关键字的是_。(分数:2.50)A.breakB.charC.SwithchD.return7.下列运算符中优先级最低的算符是_。(分数:2.50)A.|B.!=C.=D.+8.C 语言结构体类型变量在程序执行期间,_。(分数:2.50)A.所有成员一直驻留在内存中B.没有成员驻留在内存中C.部分成员驻留在内存中D.只有一个成员驻留在内存中9.下列 4 个关于 C 语言的结论中错误的是_。(分数:2.50)A.
3、可以用 do-while 语句实现的循环一定可以用 while 语句实现B.可以用 for 语句实现的循环一定可以用 while 语句实现C.可以用 while 语句实现的循环一定可以用 for 语句实现D.do-while 语句与 while 语句的区别仅是关键字“while”出现的位置不同10.有下列函数定义: int fun(double a, double b) return a*b; 若下列选项中所用变量都已经正确定义并赋值,错误的函数调用是_。(分数:2.50)A.if(fun(x,y)B.z=fun(fun(x, y), fun(x, y);C.z=fun(fun(x, y)x,
4、 y);D.fun(x, y);11.下列叙述中正确的是_。(分数:2.50)A.break 语句只能用于 switch 语句体中B.continue 语句的作用是使程序的执行流程跳出包含它的所有循环C.break 语句只能用在循环体内和 switch 语句体内D.在循环体内使用 break 语句和 continue 语句的作用相同12.已知大写字母 A 的 ASCII 码是 65,小写字母 a 的 ACSII 码是 97。下列能将变量 c 中的大写字母转换为对应小写字母的语句是_。(分数:2.50)A.c=(c-“A“)%26+“A“B.c=c+32C.c=c-“A“+“A“D.c=(“A“
5、+C)%26-“a“13.下列叙述中正确的是_。(分数:2.50)A.在赋值表达式中,赋值号的左边既可以是变量,也可以是任意表达式B.实型变量中允许存放整型数C.若 a 和 b 类型相同,在执行赋值 a=b 后,b 中的值将放入 a 中,但 b 中的值不变D.在 C 程序中,求取余运算符“%”两边的类型相同时才能进行运算14.若有说明“char s130=“abc“, s2=“defghi“; “,则在使用函数 stcat(s1,s2)后,结果是_。(分数:2.50)A.s1 的内容更新为 abcdefghiB.s1 的内容更新为 defghi/0C.s1 的内容更新为 defghiabc/0
6、D.s1 的内容更新为 abcdefghi/015.在 16 位编译系统上,若有定义“int a=10, 20, 30, *p=”,当执行“p+;”后,下列说法错误的是_。(分数:2.50)A.p 向高地址移了一个字节B.p 向高地址移了一个存储单元C.p 向高地址移了两个字节D.p 与 a+1 等价16.下列程序的执行结果是_。 #includestdio.h main() int a, b, c; a=b=2, c=1; c=(a+)-1; printf(“%d, %d“, a, c); c+=-a+(+b); printf(“%d, %d“, a, c); (分数:2.50)A.3,14
7、,1B.3,14,2C.2,04,1D.2,14,117.若有定义“double a;”,则正确的输入语句是_。(分数:2.50)A.scanf(“%1f“, a);B.scanf(“%f“, C.scanf(“%1f“, 18.若有以下程序: #includestdio.h void fun(float*a, float*b) float w; *a=*a+*a; w=*a; *a=*b; *b=w; main() float x=20, y=3.0, *px= fun(px, py); printf(“%2.0f, %2.0f/n“, x, y); 程序的输出结果是_。(分数:2.50)A
8、.4,3B.2,3C.3,4D.3,219.有以下程序: main() int a=0, b=10, c=0, d=0; if(a=1) b=1; c=2; else d=3; printf(“%d, %d.%d, %d/n“, a, b, c, d); 程序输 f_。(分数:2.50)A.0,1,2,0B.0,0,0,3C.1,1,2,0D.编译有错20.若有以下程序: #includestdio.h void sub(int x, int y, int*z) *z=y-x; main() int a, b, c; sub(10, 5, sub(7, a, sub(a, b, printf(
9、“%d, %d, %d/n“, a, b, c); 程序的输出结果是_。(分数:2.50)A.5,2,3B.-5,-12,-7C.-5,-12,-17D.5,-2,-721.以下程序的输出结果是_。 void prt(int*m, int n) int i; for(i=0; in; i+)mi+; main() int a=1, 2, 3, 4, 5, i; prt(a, 5); for(i=0; i5; i+) printf(“%d, “, ai); (分数:2.50)A.1,2,3,4,5B.2,3,4,5,6C.3,4,5,6,7D.2,3,4,5,122.有以下程序: void fu
10、n1(char *p) char *q; q=p; while(*q!=“/0“) (*q)+; q+; main() (char a=“Program“), *p; p= fun1(p); printf(“%s/n“, a); 程序执行后的输出结果是_。(分数:2.50)A.ProhsbnB.PrphsbnC.ProgsbnD.Program23.若有以下的说明和语句,则在执行 for 语句后,*(*(pt+1)+2)表示的数组元素是_。 int t33, *pt3, k; for(k=0; k3; k+)ptk=(分数:2.50)A.t20B.t22C.t12D.t2124.有以下程序:
11、main() union char ch2; int d; s; s.d=0x4321; printf(“%x, %x/n“, s.ch0, s.ch1); 在 16 位编译系统上,程序执行后的输出结果是_。(分数:2.50)A.21,43B.43,21C.43,00D.21,0025.以下四个程序中不能对两个整型值进行交换的是_。(分数:2.50)A.#includestdio.hvoid swap(int *p, int *q) int*t, a;t= *t=*p; *p=*q; *q=*t;main() int a=10, b=20;swap( printf(“%d%d/n“, a, b
12、);B.#includestdio.hvoid swap(int *p, int *q) int t;t=*p; *p=*q; *q=t;main() int a=10, b=20;swap( printf(“%d%d/n“, a, b);C.#includestdio.hvoid swap(int*p, int*q) int t;t=*p; *p=*q; *q=t;main() int*a, *b;*a=10, *b=20;swap(a, b); printf(“%d%d/n“, *a, *b);D.#includestdio.hvoid swap(int*p, int*q) int t;t
13、=*p; *p=*q; *q=t;main()int a=10, b=20, *x=swap(x,y); printf(“%d%d/n“, a, b);26.有以下程序: main() int num44=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, , 13, 14, 15, 16, i, j; for(i=0; i74; i+) for(j=0; ji; j+)printf(“%4c“, “); for(j=_; j4; j+)printf(“%4d“, numij); printf(“n“); 若要按以下形式输出数组有上半三角 1 2 3 4 6 7 8
14、11 12 16 则在程序下划线处应填入的是_。(分数:2.50)A.i-1BiC.i+1D.4-i27.设有以下定义和语句: char str20=”Program”, *p; p=str; 则以下叙述中正确的是_。(分数:2.50)A.*p 与 str0的值相等B.str 与 p 的类型完全相同C.str 数组长度和 p 所指向的字符串长度相等D.数组 str 中存放的内容和指针变量 p 中存放的内容相同28.有下列程序: #includestdio.h main() int x=0; int y=0; while(x77 x+; printf(“%d, %d“, y, x); 程序的输出
15、结果是_。(分数:2.50)A.0,7B.7,7C.0,6D.1,629.有以下程序: #includestdio.h main() int a=2, 4, 6, 8, 10, y=1, x, *p; p= for(x=0; x3; x+)y+=*(p+x); printf(“%d/n“, Y); 程序的输 fH 结果是_。(分数:2.50)A.17B.18C.19D.2030.#define 能做简单的替代,用宏来替代计算多项式 5*x*x+5*x+5 的值的函数 f,正确的宏定义语句为_。(分数:2.50)A.#define f(x) 5*x*x+5*x+5B.#define f5*x*x
16、+5*x+5C.#define f(a) (5*a*a+5*a+5)D.#define(5*x*x+5*x+5) f(x)31.函数调用 strcat(strcpy(str1, str2), str3)的功能是_。(分数:2.50)A.将字符串 str1 复制到字符串 str2 中后再连接到字符串 str3 之后B.将字符串 str1 连接到字符串 str2 之后再复制到字符串 str3 之后C.将字符串 str2 复制到字符串 str1 之后再将字符串 str3 连接到字符串 str1 之后D.将字符串 str2 连接到字符串 str1 之后再将字符串 str1 复制到字符串 str3 中3
17、2.有以下程序: main() int a=0, b=0; a=10; /*给 a 赋值 b=20; 给 b 赋值 */ printf(“a+b=%d/n“, a+b); /输出计算机结果 程序运行后的输出结果是_。(分数:2.50)A.a+b=10B.a+b=30C.30D.出错33.若希望下列的程序运行后输出 25,程序空白处的正确选项是_。 main() int i, j=50, a=7, 4, 10, 5, 8; for_ j+=ai; printf(“%d“, j-40); (分数:2.50)A.i=1;i4;+iB.i=1;i3;+iC.i=4;i2;i-D.i=2;i4;+i34
18、.下列程序的输出结果是_。 #includestdio.h main() int a=0, i; for(i=1; i5; i+) switch(i) case 0: case 3: a+=1; case 1: case 2: a=2; default: a+=3; printf(“%d“, a); (分数:2.50)A.19B.18C.6D.835.有以下程序: #includestdio.h main() int a=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, *p=a+5; *q=NULL; *q=*(p+5); printf(“%d%d/n“, *q,
19、 *q); 程序运行后的输出结果是_。(分数:2.50)A.运行后报错B.6 6C.6 11D.5 1036.下列程序的输出结果是_。 main() int a=6, b=3, c; if(ab) c=a*b; printf(“%d%d, %d/n“, b, a, c); else c=b/a; printf(“%d, %d, %d/n“, b, a, c); (分数:2.50)A.3,6,18B.3,6,2C.6,3,18D.6,3,237.若有定义和语句: int*pp, *p, a=20, b=10; pp= p= p= printf(“%d, %d/n“, *p, *pp); 则输出结
20、果是_。(分数:2.50)A.20,10B.20,20C.10,20D.10,1038.下列程序的运行结果是_。 #includestdio.h void fun(int*s, int*p) static int t=3; *p=st; t-; void main() int a=2, 3, 4, 5, k; int x; for(k=0, k4, k+) fun(a, printf(“%d,“, x); (分数:2.50)A.5,4,3,2B.2,3,4,5C.2,2,2,2D.5,5,5,539.下面程序段的输出结果是_。 int i=32770; printf(“%d/n“, i);(分
21、数:2.50)A.32769B.32767C.-32766D.输出不确定数40.标准库函数 fgets(s, n, file)的功能是_。(分数:2.50)A.从文件 file 中读取长度为 n 的字符串存入字符数组 s 中B.从文件 file 中读取长度不超过 n-1 个字符的字符串放到字符数组 s 中C.从文件 file 中读到 n 个字符串存入字符数组 s 中D.从文件 file 中读取长度为 n-1 个字符的字符串存入字符数组 s 中二级 C 语言-281 (1)答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:100.00)1.数据库系统的核心是_。
22、(分数:2.50)A.数据模型B.数据库管理系统 C.数据库D.数据库管理员解析:解析 本题考查对数据库系统的理解。数据库系统由数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、硬件平台(硬件)、软件平台 5 个部分构成。其中数据库管理系统是数据库系统的核心,它负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等工作。2.以下选项中正确的实型常量是_。(分数:2.50)A.0B.3.1415 C.0.329102D.871解析:解析 实型常量又称实数或浮点数。在 C 语言中可以用两种形式表示一个实型常量。一是小数形式。二是指数形式。因此正确答案为 B。3.为了提高软件
23、的独立性,模块之间最好是_。(分数:2.50)A.控制耦合B.公共耦合C.内容耦合D.数据耦合 解析:解析 在模块耦合性类型中,模块之间独立性最差的类型是内容耦合,在实际编程中一定要避免出现,为了提高模块的独立性,模块之间最好是数据耦合。模块耦合越弱,则说明模块的独立性越强。4.下列叙述中正确的是_。(分数:2.50)A.算法的执行效率与数据存储结构无关B.算法的空间复杂度是指算法程序中指令(或语句)的条数C.算法的有穷性是指算法必须能在执行有限个步骤之后终止 D.以上 3 种描述都不对解析:解析 在程序设计中,算法执行效率与数据的存储结构密切相关。算法的空间复杂度是指算法执行过程中所需存储空
24、间。5.有下列二叉树: (分数:2.50)A.ABCDFEG B.ACBDFGEC.ABDCGEFD.FCADBEG解析:解析 有 3 种遍历方法:前序、中序和后序。中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。结果为 ACBDFEG。6.下列标识符不是关键字的是_。(分数:2.50)A.breakB.charC.Swithch D.return解析:解析 在 C 语言中,字母区分大小,所以 break、char、return、switch 都是 C 语言中的关键字,而 Swithch 不是。7.下列运算符中优先级最低的算符是_。(分数:2.50)A.| B.!=C.=D.+解析:解
25、析 C 语言中规定运算符的优先顺序:一元算术运算符二元算术运算符关系运算符逻辑运算符赋值运算符,A 项中为逻辑运算符,B 项和 C 项都为关系运算符,D 项为一元运算符。因此最低的是 A 项。8.C 语言结构体类型变量在程序执行期间,_。(分数:2.50)A.所有成员一直驻留在内存中 B.没有成员驻留在内存中C.部分成员驻留在内存中D.只有一个成员驻留在内存中解析:解析 C 语言的结构体类型变量在程序执行期间所有成员一直驻留在内存中。9.下列 4 个关于 C 语言的结论中错误的是_。(分数:2.50)A.可以用 do-while 语句实现的循环一定可以用 while 语句实现B.可以用 for
26、 语句实现的循环一定可以用 while 语句实现C.可以用 while 语句实现的循环一定可以用 for 语句实现D.do-while 语句与 while 语句的区别仅是关键字“while”出现的位置不同 解析:解析 本题考查对各个循环语句的理解。do-while 语句、for 语句、while 语句所实现的循环可以相互替代;do-while 语句至少执行一次,而 while 是符合条件执行,不符合不执行。10.有下列函数定义: int fun(double a, double b) return a*b; 若下列选项中所用变量都已经正确定义并赋值,错误的函数调用是_。(分数:2.50)A.i
27、f(fun(x,y)B.z=fun(fun(x, y), fun(x, y);C.z=fun(fun(x, y)x, y); D.fun(x, y);解析:解析 本题考查函数在函数调用时参数的传递形式,形参与实参参数个数类型要一致。11.下列叙述中正确的是_。(分数:2.50)A.break 语句只能用于 switch 语句体中B.continue 语句的作用是使程序的执行流程跳出包含它的所有循环C.break 语句只能用在循环体内和 switch 语句体内 D.在循环体内使用 break 语句和 continue 语句的作用相同解析:解析 break 只能在循环体内和 switch 语句内。
28、如果 break 出现在循环体的 switch 语句体内时,表示跳出该 switch 语句体,但并不能中止循环体的执行。12.已知大写字母 A 的 ASCII 码是 65,小写字母 a 的 ACSII 码是 97。下列能将变量 c 中的大写字母转换为对应小写字母的语句是_。(分数:2.50)A.c=(c-“A“)%26+“A“B.c=c+32 C.c=c-“A“+“A“D.c=(“A“+C)%26-“a“解析:解析 根据 ASCII 码选项可知大写字符 A 与小写字符 a 的 ASCII 码相差 32,而选项 D 中应该是加上“a“,选项 A 和 C 左侧的表达式都是大写字符 C 与大写字符
29、A 的差与“a“的 ASCII 代码的和就是小写字符c 的 ASCII 代码。13.下列叙述中正确的是_。(分数:2.50)A.在赋值表达式中,赋值号的左边既可以是变量,也可以是任意表达式B.实型变量中允许存放整型数C.若 a 和 b 类型相同,在执行赋值 a=b 后,b 中的值将放入 a 中,但 b 中的值不变D.在 C 程序中,求取余运算符“%”两边的类型相同时才能进行运算 解析:解析 选项 A,在赋值表达式中,赋值号的左边只能是变量或者是代表某个存储单元的表达式,不能是任意表达式,右边也不得出现表达式;选项 B 中,整型变量中只能存放整型数,但实型变量中能存放实型数,也能存放整型数;选项
30、 C,表达式 a=b 的意思是把变量 b 的值赋给变量 a,从而覆盖 a 中原来值;选项 D,要求取余运算符“%“两边的类型相同。14.若有说明“char s130=“abc“, s2=“defghi“; “,则在使用函数 stcat(s1,s2)后,结果是_。(分数:2.50)A.s1 的内容更新为 abcdefghiB.s1 的内容更新为 defghi/0C.s1 的内容更新为 defghiabc/0D.s1 的内容更新为 abcdefghi/0 解析:解析 strcat(s1,s2)函数的功能是把 s2 字符串连接到 s1 字符串的末尾,要保证 s1 有足够的空间容纳下连接后的字符串。1
31、5.在 16 位编译系统上,若有定义“int a=10, 20, 30, *p=”,当执行“p+;”后,下列说法错误的是_。(分数:2.50)A.p 向高地址移了一个字节 B.p 向高地址移了一个存储单元C.p 向高地址移了两个字节D.p 与 a+1 等价解析:解析 因为 p 是整型的指针变量,因此其移动一个位置即两个字节,故选择 A 选项。16.下列程序的执行结果是_。 #includestdio.h main() int a, b, c; a=b=2, c=1; c=(a+)-1; printf(“%d, %d“, a, c); c+=-a+(+b); printf(“%d, %d“, a
32、, c); (分数:2.50)A.3,14,1 B.3,14,2C.2,04,1D.2,14,1解析:解析 本题主要考查自加减运算符(+,-)的使用。如果作为前缀变量“+a,-a”,在使用a 之前,先使 a 的值加 1 或者减 1,再使用表达式的值参与运算;后缀变量“a+,a-”,先使用表达式的值参与运算,在使用 a 之后,再使 i 的值加 1 或者减 1。在本题中计算表达式 c=(a+)-1 时先使用 a的值进行计算,结果为 c=2-1=1,然后将 a 的值加 1,即执行完此句后 a 的值是 3;表达式 c+=-a+(+b)也可写成 c=c+(-a+)+(+b),c=1+(-3)+3=1,此
33、时 a=4,b=3。17.若有定义“double a;”,则正确的输入语句是_。(分数:2.50)A.scanf(“%1f“, a);B.scanf(“%f“, C.scanf(“%1f“, 解析:解析 本题考查 scanf 函数的调用形式:scanf(格式字符串,输入项地址表)。题中定义变量 a 为双精度型变量,双精度变量的格式符为“le”;变量的地址用取地址符“ *a=*a+*a; w=*a; *a=*b; *b=w; main() float x=20, y=3.0, *px= fun(px, py); printf(“%2.0f, %2.0f/n“, x, y); 程序的输出结果是_。
34、(分数:2.50)A.4,3B.2,3C.3,4 D.3,2解析:解析 #includestdio.h void fun(float*a,float*b)/a 即指向 px 的指针,b 即指向 py 的指针,则*a 指向 x,*b 指向 y float w; *a=*a+*a;/将 x 地址存放的数据自加,x 变为 4 w=*a; *a=*b; *b=w; /将 x 和 y 地址里面的数据互换,则 x 变为 3,y 变为 4 main() float x=2.0, y=3.0, *px= /px 和 py 分别是指向 x 和 y 地址的指针 fun(px, py); printf(“%2.0f
35、, %2.0f/n“, x, y); /%2.0f 表示结果前面有 2 个空格,小数点后有 0 位,即保留到个位 19.有以下程序: main() int a=0, b=10, c=0, d=0; if(a=1) b=1; c=2; else d=3; printf(“%d, %d.%d, %d/n“, a, b, c, d); 程序输 f_。(分数:2.50)A.0,1,2,0B.0,0,0,3C.1,1,2,0D.编译有错 解析:解析 语法错误。else 与 if 之间不应再用其他语句,如果满足 if 条件,则继续执行 if 后面的语句;不满足就执行 else 语句。20.若有以下程序:
36、#includestdio.h void sub(int x, int y, int*z) *z=y-x; main() int a, b, c; sub(10, 5, sub(7, a, sub(a, b, printf(“%d, %d, %d/n“, a, b, c); 程序的输出结果是_。(分数:2.50)A.5,2,3B.-5,-12,-7 C.-5,-12,-17D.5,-2,-7解析:解析 sub 里的三个变量,x,y 是传的值,也就是传的一个值的副本。而 z 则是传的地址,sub函数体里对 z 的操作会影响到传递进来的那个变量。b 是指的变量本身, for(i=0; in; i+
37、)mi+; main() int a=1, 2, 3, 4, 5, i; prt(a, 5); for(i=0; i5; i+) printf(“%d, “, ai); (分数:2.50)A.1,2,3,4,5B.2,3,4,5,6 C.3,4,5,6,7D.2,3,4,5,1解析:解析 函数调用时,prt 函数的作用是为使 m 数组中的数自增 1,因此数组下标从 0 开始,每个元素都自加 1。22.有以下程序: void fun1(char *p) char *q; q=p; while(*q!=“/0“) (*q)+; q+; main() (char a=“Program“), *p;
38、p= fun1(p); printf(“%s/n“, a); 程序执行后的输出结果是_。(分数:2.50)A.Prohsbn B.PrphsbnC.ProgsbnD.Program解析:解析 本题中使用了函数的调用,由 fun1 函数中的 while 循环可知,循环的作用是为了把 q 所指向的内容增加 1,而从主函数传到函数时是从下标为 3 开始传,因此当调用函数执行完后,传过去的字符串为“hsbn“,前面不变。23.若有以下的说明和语句,则在执行 for 语句后,*(*(pt+1)+2)表示的数组元素是_。 int t33, *pt3, k; for(k=0; k3; k+)ptk=(分数:
39、2.50)A.t20B.t22C.t12 D.t21解析:解析 从 for 循环可知,pt 是指向行的首地址的指针变量,因此由指针的表示方法可知:*(*(pt+1)+2)=pt12=t12。24.有以下程序: main() union char ch2; int d; s; s.d=0x4321; printf(“%x, %x/n“, s.ch0, s.ch1); 在 16 位编译系统上,程序执行后的输出结果是_。(分数:2.50)A.21,43 B.43,21C.43,00D.21,00解析:解析 s 是一个公用体,d 的值分别与 ch 中的两个元素的值相同,d 的高位放在 ch1中、低位放
40、在 ch0中,因此输出的结果为 21,43。25.以下四个程序中不能对两个整型值进行交换的是_。(分数:2.50)A.#includestdio.hvoid swap(int *p, int *q) int*t, a;t= *t=*p; *p=*q; *q=*t;main() int a=10, b=20;swap( printf(“%d%d/n“, a, b);B.#includestdio.hvoid swap(int *p, int *q) int t;t=*p; *p=*q; *q=t;main() int a=10, b=20;swap( printf(“%d%d/n“, a, b)
41、;C.#includestdio.hvoid swap(int*p, int*q) int t;t=*p; *p=*q; *q=t;main() int*a, *b;*a=10, *b=20;swap(a, b); printf(“%d%d/n“, *a, *b); D.#includestdio.hvoid swap(int*p, int*q) int t;t=*p; *p=*q; *q=t;main()int a=10, b=20, *x=swap(x,y); printf(“%d%d/n“, a, b);解析:解析 main() int*a=0, *b=0; *a=10, *b=20;
42、/有错误,a 与 b 没有指向任何对象,但却给对象赋值。 swap(a, b); printf(“%d%d/n“, *a, *b); swap(int*p, int*q) int t; t=*p; *p=*q; *q=t; 26.有以下程序: main() int num44=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, , 13, 14, 15, 16, i, j; for(i=0; i74; i+) for(j=0; ji; j+)printf(“%4c“, “); for(j=_; j4; j+)printf(“%4d“, numij); printf(“
43、n“); 若要按以下形式输出数组有上半三角 1 2 3 4 6 7 8 11 12 16 则在程序下划线处应填入的是_。(分数:2.50)A.i-1Bi C.i+1D.4-i解析:解析 本题中要求输出右上半角的数,对角线上的数的下标相同,所以 j=i。27.设有以下定义和语句: char str20=”Program”, *p; p=str; 则以下叙述中正确的是_。(分数:2.50)A.*p 与 str0的值相等 B.str 与 p 的类型完全相同C.str 数组长度和 p 所指向的字符串长度相等D.数组 str 中存放的内容和指针变量 p 中存放的内容相同解析:解析 本题中的 str 为一
44、个字符型数组,p 为字符型指针变量,其指向 str 的首地址,*p 的值为str0中的字符,其类型、长度不同,但字符第一个相同,故答案选择 A。28.有下列程序: #includestdio.h main() int x=0; int y=0; while(x77 x+; printf(“%d, %d“, y, x); 程序的输出结果是_。(分数:2.50)A.0,7 B.7,7C.0,6D.1,6解析:解析 本题考查 while 循环。在 while 循环中,y 自加每次循环都加 1,在循环体内 y-每次减1,所以总的 y 值不变,当 x 自加到 7 时,不满足循环条件,循环结束。29.有以
45、下程序: #includestdio.h main() int a=2, 4, 6, 8, 10, y=1, x, *p; p= for(x=0; x3; x+)y+=*(p+x); printf(“%d/n“, Y); 程序的输 fH 结果是_。(分数:2.50)A.17B.18C.19 D.20解析:解析 p= a=10; /*给 a 赋值 b=20; 给 b 赋值 */ printf(“a+b=%d/n“, a+b); /输出计算机结果 程序运行后的输出结果是_。(分数:2.50)A.a+b=10 B.a+b=30C.30D.出错解析:解析 本题中/*/为多行注释,所以可知 b=20 为
46、注释语句,在程序运行时不起作用,b 仍为0,所以本题中选项 A 正确。33.若希望下列的程序运行后输出 25,程序空白处的正确选项是_。 main() int i, j=50, a=7, 4, 10, 5, 8; for_ j+=ai; printf(“%d“, j-40); (分数:2.50)A.i=1;i4;+iB.i=1;i3;+iC.i=4;i2;i-D.i=2;i4;+i 解析:解析 要想使程序输出是 25,则在 printf 中,j-40=25,j=65,而 j 初值是 50,“j+=ai;”也可写成 i=j+ai;,j=50+ai=65,当 ai=15,条件满足,数组下标由 0 开始,当 i=2 时,指向元素10,i=3 时,10+5=15,退出循环体,所以选项 D 正确。34.下列程序的输出结果是_。 #includestdio.h main() int a=0, i; for(i=1; i5; i+) switch(i) case 0: case 3: a+=1; case 1: case 2: a=2; de