1、二级 C 语言-275 (1)及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:100.00)1.算法的空间复杂度是指_。(分数:2.50)A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.算法执行过程中所需要的存储空间2.关于结构化程序设计原则和方法的描述错误的是_。(分数:2.50)A.选用的结构只准许有一个入口和一个出口B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C.不允许使用 GOTO 语句D.语言中若没有控制结构,应该采用前后一致的方法来模拟3.C 语言中运算对象必须是整型的运算符是_。(分数:2.50)A.%B./
2、C.!D.*4.下列叙述中正确的是_。(分数:2.50)A.一个逻辑数据结构只能有一种存储结构B.逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率5.对如下二叉树进行后序遍历的结果为_。 (分数:2.50)A.ABCDEFB.DBEAFCC.ABDECFD.DEBFCA6.面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本原理是_。(分数:2.50)A.模拟现实世界中不同事物之间的联系B.强调模拟现实世界中的算法而不强调概念C.使用现实世界的概
3、念抽象地思考问题从而自然地解决问题D.不强调模拟现实世界中的算法而强凋概念7.相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和_。(分数:2.50)A.可重用性差B.安全性差C.非持久性D.冗余性8.以下叙述中正确的是_。(分数:2.50)A.do-while 语句构成的循环不能用其他语句构成的循环来代替B.do-while 语句构成的循环只能用 break 语句退出C.用 do-while 语句构成循环时,只有在 while 后的表达式为非零时结束循环D.用 do-while 语句构成循环时,只有在 while 后的表达式为零时结束循环9.下面描述中,不属于软件危机表现的是_
4、。(分数:2.50)A.软件过程不规范B.软件开发生产率低C.软件质量难以控制D.软件成本不断提高10.下列描述错误的是_。(分数:2.50)A.继承分为多重继承和单继承B.对象之间的通信靠传递消息来实现C.在外面看不到对象的内部特征是基于对象的“模块独立性好”这个特征D.类是具有共同属性、共同方法的对象的集合11.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS 之间的关系是_。(分数:2.50)A.DB 包含 DBS 和 DBMSB.DBMS 包含 DB 和 DBSC.DBS 包含 DB 和 DBMSD.没有任何关系12.下列合法的声明语句是_。(分数:2.50)A.int _a
5、bc=50;B.double int=3+5e2.5;C.long do=1L;D.float 3_asd=3e-3;13.设 a、b 和 c 都是 int 型变量,且 a=3,b=4,c=5,则以下的表达式中值为 0 的表达式是_。(分数:2.50)A.a k=10; printf(“%x, %o, “, ch, ch, k); printf(“k=%d/n“, k);(分数:2.50)A.因变量类型与格式描述符的类型不匹配,输出无定值B.输出项与格式描述符个数不符,输出为 0 或不定值C.62,142,k=%dD.62,142,k=%1015.若有定义:“int a23;”,则对 a 数组
6、的第 i 行第 j 列元素的正确引用为_。(分数:2.50)A.*(*(a+i)+j)B.(a+i)jC.*(a+i+j)D.*(a+i)+j16.假定 x 和 y 为 double 型,则表达式 x=2,y=x+3/2 的值是_。(分数:2.50)A.3.500000B.3C.2.000000D.3.00000017.下列能正确进行字符串赋值的是_。(分数:2.50)A.char s5=“ABCDE“;B.char s5=“A“, “B, “C“, “D“, “E“;C.char*s;s=“ABCDE“;D.char*s; printf(“%s“, s);18.下列程序的输出结果是_。 ma
7、in() int i=1, j=2, k=3; if(i+=1 (分数:2.50)A.1 2 3B.2 3 4C.2 2 3D.2 3 319.#includestdio.h main() int a, b, s; scanf(“%d%d“, s=a; if(ab)s=b; s=s; printf(“%d/n“, s); 若执行以上程序从键盘上输入 3 和 4 时,则输出结果是_。(分数:2.50)A.14B.16C.18D.2020.有以下程序: main() int x, i; for(i=1; i=50; i+) x=i; if(x%2=0) if(x%3=0) if(x%7=0) pr
8、intf(“%d, i)“; 输出结果是_。(分数:2.50)A.28B.27C.42D.4121.有以下程序: #includestdio.h main() int i, X33=1, 2, 3, 4, 5, 6, 7, 8, 9; for(i=0; i3; i+)printf(“%d, “, xi2-i); 程序的输出结果是_。(分数:2.50)A.1,5,9,B.1,4,7,C.3,5,7,D.3,6,9,22.有下列程序: main() int k=5; while(-k) printf(“%d“, k=1); printf(“/n“); 执行后的输出结果是_。(分数:2.50)A.1
9、B.2C.4D.死循环23.有下列程序: fun(int x, int y)return(x+y); main() int a=1, b=2, c=3, sum; sum=fun(a+, b+, a+b), c+); printf(“%d/n“, sum); 执行后的输出结果是_。(分数:2.50)A.6B.7C.8D.924.有如下程序: main() int x=1, a=0, b=0; switch(x) case 0: b+; case 1: a+; case 2: a+; b+; printf(“a=%d, b=%d/n“, a, b); 该程序的输出结果是_。(分数:2.50)A.
10、a=2,b=1B.a=1,b=1C.a=1,b=0D.a=2,b=225.函数 fseek(pf, OL, SEEK_END)中的 SEEK_END 代表的起始点是_。(分数:2.50)A.文件开始B.文件末尾C.文件当前位置D.以上都不对26.有下列程序: main() int i, j, x=0; for(i=0, i2; i+) x+; for(j=0; j=3; j+) if(j%2)continue; x+; x+; printf(“x=%d/n“, x); 程序执行后的输出结果是_。(分数:2.50)A.x=4B.x=8C.x=6D.x=1227.有以下程序段: int i, j,
11、 m=0; for(i=1; i=15; i+=4) for(j=3; j=19; j+=4)m+; printf(“%d/n“, m); 程序段的输出结果是_。(分数:2.50)A.12B.15C.20D.2528.有下列程序: main() int i, s=0, t=1, 2, 3, 4, 5, 6, 7, 8, 9; for(i=0; i9; i+=2)s+=*(t+i); printf(“%d/n“, s); 程序执行后的输出结果是_。(分数:2.50)A.45B.20C.25D.3629.有下列程序: int fun(int n) if(n=1)return 1; else ret
12、urn(n+fun(n-1); main() int x; scanf(“%d“, x=fun(x); printf(“%d/n“, x); 执行程序时,给变量 x 输入 10,程序的输出结果是_。(分数:2.50)A.55B.54C.65D.4530.有下列程序: int fun(int x, int n) static int sum=0, i; for(i=0; in; i+) sum+=xi; return sum; main() int a=1, 2, 3, 4, 5, b=6, 7, 8, 9, s=0; s=fun(a, 5)+fun(b, 4); printf(“%d/n“,
13、s); 程序执行后的输出结果是_。(分数:2.50)A.45B.50C.60D.5531.有下列程序: main() char *p=“3697“, “2584“; int i, j; long num=0; for(i=0; i2; i+) j=0; while(pij!=“/0“) if(pij-“/0“)%2)num=10*num+p jj-“0“; j+=2; printf(“%d/n“, num); 程序执行后的输出结果是_。(分数:2.50)A.35B.37C.39D.397532.以下程序的输出结果是_。 main() char st20=“hello/0/t/“; printf
14、(“%d%d/n“, strlen(st), sizeof(st); (分数:2.50)A.9 9B.5 20C.13 20D.20 2033.若有以下的定义:“int t32;”,能正确表示 t 数组元素地址的表达式的是_。(分数:2.50)A. p-next=r; r-next=q;B.q-next=r; q-next=r-next; r-next=q;C.q-next=r-next; r-next=q; p-next=r;D.q-next=q; p-next=r; q-next=r-next;35.有以下程序段: int x; for(x=3; x6; x+) printf(x%2)?(
15、“*%d“):(“#%d/n“), x); 程序段的输出结果是_。(分数:2.50)A.*3#4*5B.#3*4#5C.#3*4#5D.*3#4*536.若有定义“int b8, *p=b;”,则 p+6 表示_。(分数:2.50)A.数组元素 b6的值B.数组元素 b6的地址C.数组元素 b7的地址D.数组元素 b0的值加上 637.设变量已正确定义,则以下能正确计算 f=n!的程序是_。(分数:2.50)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+)f*=i;D.f=1;for(i=
16、n; i=2; i-)f*=i;38.下述程序执行的输出结果是_。 #includestdio.h main() char a24; strcpy(a, “are“); strcpy(a1, “you“); a03=“ printf(“%s/n“, a); (分数:2.50)A.are 语句 printf(“%f/n“, (int)(x*1000+0.5)/(double)1000);的输出结果是_。(分数:2.50)A.输出格式说明与输出顶不匹配,输出无定值B.5.170000C.5.168000D.5.169000二级 C 语言-275 (1)答案解析(总分:100.00,做题时间:90
17、分钟)一、选择题(总题数:40,分数:100.00)1.算法的空间复杂度是指_。(分数:2.50)A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.算法执行过程中所需要的存储空间 解析:解析 算法的空间复杂度是指执行这个算法所需的存储空间。算法所占用的存储空间包括算法程序所占用的空间、输入的初始数据所占用的存储空间、算法执行过程中所需要的额外空间。2.关于结构化程序设计原则和方法的描述错误的是_。(分数:2.50)A.选用的结构只准许有一个入口和一个出口B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C.不允许使用 GOTO 语句 D.语言中若没有控制结构,应该采用
18、前后一致的方法来模拟解析:解析 结构化程序设计的原则和方法之一是限制使用 GOTO 语句,但不是绝对不允许使用。其他三项为结构化程序设计的原则。3.C 语言中运算对象必须是整型的运算符是_。(分数:2.50)A.% B./C.!D.*解析:解析 %既然求余数,运算对象必须是整数。4.下列叙述中正确的是_。(分数:2.50)A.一个逻辑数据结构只能有一种存储结构B.逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率 解析:解析 数据的存储结构是指数据的逻辑结
19、构在计算机存储空间中的存放形式。一种数据结构可以根据需要采用不同的存储结构,存储结构有顺序和链式两种。不同的存储结构,其处理的效率不同。5.对如下二叉树进行后序遍历的结果为_。 (分数:2.50)A.ABCDEFB.DBEAFCC.ABDECFD.DEBFCA 解析:解析 所谓的后序遍历是指,首先遍历左子树,然后遍历右子树,最后访问根结点。并且在遍历左、右树时,仍然先遍历左子树,然后遍历右子树,最后访问根结点。因此,后序遍历二叉树的过程也是一个递归过程。6.面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本原理是_。(分数:2.50)A.模拟现实世界中不同事物之间的联系B.强调模拟现
20、实世界中的算法而不强调概念C.使用现实世界的概念抽象地思考问题从而自然地解决问题 D.不强调模拟现实世界中的算法而强凋概念解析:解析 面向对象的设计方法的基本原理是使用现实世界的概念抽象地思考问题从而自然地解决问题。它虽强调模拟现实世界中的概念但不强调算法,但是它鼓励开发者在软件开发的过程中从应用领域的概念角度去思考。7.相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和_。(分数:2.50)A.可重用性差B.安全性差C.非持久性D.冗余性 解析:解析 文件系统所管理的数据文件基本上是分散、相互独立的。相对于数据库系统,以此为基础的数据处理存在 3 个缺点:数据冗余大、数据的不一
21、致性、程序与数据的依赖性强。8.以下叙述中正确的是_。(分数:2.50)A.do-while 语句构成的循环不能用其他语句构成的循环来代替B.do-while 语句构成的循环只能用 break 语句退出C.用 do-while 语句构成循环时,只有在 while 后的表达式为非零时结束循环D.用 do-while 语句构成循环时,只有在 while 后的表达式为零时结束循环 解析:解析 选项 A,可以用 for 循环代替;选项 B,不满足条件时即条件的逻辑值为假(0)时退出,break 也可以;选项 C,while(条件),条件为真时进行循环,为假(0)时退出。9.下面描述中,不属于软件危机表
22、现的是_。(分数:2.50)A.软件过程不规范 B.软件开发生产率低C.软件质量难以控制D.软件成本不断提高解析:解析 软件危机的表现包括:对软件开发的进度和费用估计不准确;用户对已完成的软件系统不满意的现象时常发生;软件产品的质量往往靠不住;软件常常是不可维护的;软件通常没有适当的文档;软件成本在计算机系统总成本中所占的比例逐年上升;软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的趋势。10.下列描述错误的是_。(分数:2.50)A.继承分为多重继承和单继承B.对象之间的通信靠传递消息来实现C.在外面看不到对象的内部特征是基于对象的“模块独立性好”这个特征 D.类是具有共同属性、共
23、同方法的对象的集合解析:解析 对象的封装性是指从外面看只能看到对象的外部特性,而对象的内部,其处理能力的实行和内部状态对外本来就是不可见的、隐蔽的。11.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS 之间的关系是_。(分数:2.50)A.DB 包含 DBS 和 DBMSB.DBMS 包含 DB 和 DBSC.DBS 包含 DB 和 DBMS D.没有任何关系解析:解析 数据库系统由如下 5 个部分组成:数据库(DB)、数据库管理系统(DBMS)、数据库管理员(人员)、系统平台之一硬件平台(硬件)、系统平台之二软件平台(软件)。其中 DB(DataBase)即数据库,是统一管理的相
24、关数据的集合;DBMS 即数据库管理系统,是位于用户与操作系统之间的一层数据管理软件,为用户或应用完程序提供访问 DB 的方法。由以上可知,选项 C 为正确答案。12.下列合法的声明语句是_。(分数:2.50)A.int _abc=50; B.double int=3+5e2.5;C.long do=1L;D.float 3_asd=3e-3;解析:解析 标识符是由字母、数字或下划线组成,并且它的第一个字符必须是字母或者下划线。B 选项 int 不是表达变量类型的标识符,它不能再用作变量名和函数名。C 选项 do 是 C 语言的一个关键字。D选项标识符不符合只能以字母或下划线开始的要求。13.
25、设 a、b 和 c 都是 int 型变量,且 a=3,b=4,c=5,则以下的表达式中值为 0 的表达式是_。(分数:2.50)A.a k=10; printf(“%x, %o, “, ch, ch, k); printf(“k=%d/n“, k);(分数:2.50)A.因变量类型与格式描述符的类型不匹配,输出无定值B.输出项与格式描述符个数不符,输出为 0 或不定值C.62,142,k=%d D.62,142,k=%10解析:解析 本题考查 printf 函数的格式。第 1 个 printf 函数,格式说明的个数是 2,而输出项的个数是 3,所以对于多余的输出项 k 不予输出;第 2 个 p
26、rintf 函数,有 2 个%说明,第 1 个%后面的字符要原样输出。“%x”和“%o”分别表示以十六进制和八进制无符合型输出整型数据(不带前导 0x 或 0)15.若有定义:“int a23;”,则对 a 数组的第 i 行第 j 列元素的正确引用为_。(分数:2.50)A.*(*(a+i)+j) B.(a+i)jC.*(a+i+j)D.*(a+i)+j解析:解析 通过地址来引用数组元素的方法有下列 5 种:aij;*(ai+j);*(*(a+i)+j);*(aij);(B.char s5=“A“, “B, “C“, “D“, “E“;C.char*s;s=“ABCDE“; D.char*s;
27、 printf(“%s“, s);解析:解析 选项 A、B 的空间不够;选项 D 中字符串存储要有结束符“/0“,且要占用一个空间,printf用来输出字符,不能输入字符串。18.下列程序的输出结果是_。 main() int i=1, j=2, k=3; if(i+=1 (分数:2.50)A.1 2 3B.2 3 4C.2 2 3D.2 3 3 解析:解析 本题考查自增运算符“+”、逻辑与运算符“ scanf(“%d%d“, s=a; if(ab)s=b; s=s; printf(“%d/n“, s); 若执行以上程序从键盘上输入 3 和 4 时,则输出结果是_。(分数:2.50)A.14B
28、.16 C.18D.20解析:解析 scanf(“%d, %d“, /a=3, b=4 s=a; /s=3 if(s=b)/此处先将 b(b=4 赋给 s,则 s=4 s=b 返回值为 4 s*=s; /s=s*s=16 因此输出结果为 16。正确答案为 B。20.有以下程序: main() int x, i; for(i=1; i=50; i+) x=i; if(x%2=0) if(x%3=0) if(x%7=0) printf(“%d, i)“; 输出结果是_。(分数:2.50)A.28B.27C.42 D.41解析:解析 只有当 3 个 if 条件同时成立,即能够同时被 2、3、7 整除
29、时,才输出 i 的值,而从 0 到50 能够同时被 2、3、7 整除的数只有 42,故选择 C 选项。21.有以下程序: #includestdio.h main() int i, X33=1, 2, 3, 4, 5, 6, 7, 8, 9; for(i=0; i3; i+)printf(“%d, “, xi2-i); 程序的输出结果是_。(分数:2.50)A.1,5,9,B.1,4,7,C.3,5,7, D.3,6,9,解析:解析 即输出 x02x11x20分别为 3 5 7。22.有下列程序: main() int k=5; while(-k) printf(“%d“, k=1); pri
30、ntf(“/n“); 执行后的输出结果是_。(分数:2.50)A.1 B.2C.4D.死循环解析:解析 在程序语句中,k 的初始值为 5,进行第 1 次 while 循环后,k 自减 1 为 4,非 0,执行循环体里的 printf 语句,输出 k,此时 k 的值变为 1。程序执行第 2 次循环时,k 自减 1 变为 0,为假,退出 while 循环语句。所以程序的最后结果为 1。23.有下列程序: fun(int x, int y)return(x+y); main() int a=1, b=2, c=3, sum; sum=fun(a+, b+, a+b), c+); printf(“%d
31、/n“, sum); 执行后的输出结果是_。(分数:2.50)A.6B.7C.8 D.9解析:解析 函数 fun(int x,int y)的功能是返回 x+y 的值。在主函数中,变量 a、b、c 的初始值分别为 1、2、3。因此,逗号表达式“a+,b+,a+b”的值等于 5,表达式 c+的值为 3,调用于函数的表达式为“fun(5, 3);”,其返回值等于 8。24.有如下程序: main() int x=1, a=0, b=0; switch(x) case 0: b+; case 1: a+; case 2: a+; b+; printf(“a=%d, b=%d/n“, a, b); 该程
32、序的输出结果是_。(分数:2.50)A.a=2,b=1 B.a=1,b=1C.a=1,b=0D.a=2,b=2解析:解析 当 x 为 1 时,执行 case 1,a 自加等于 1,因为 case 1 后没有 break,接着执行 case 2,此时 a 的值为 2,b 自加为 1,故选择 A 选项。25.函数 fseek(pf, OL, SEEK_END)中的 SEEK_END 代表的起始点是_。(分数:2.50)A.文件开始B.文件末尾 C.文件当前位置D.以上都不对解析:解析 SEEK_SET 代表文件的开始,SEEK_END 代表文件末尾,SEEK_CUR 代表文件当前位置。26.有下列
33、程序: main() int i, j, x=0; for(i=0, i2; i+) x+; for(j=0; j=3; j+) if(j%2)continue; x+; x+; printf(“x=%d/n“, x); 程序执行后的输出结果是_。(分数:2.50)A.x=4B.x=8 C.x=6D.x=12解析:解析 在第 1 次外层 for 循环中,首先 x+得到 x=1。进入到内层 for 循环,只有循环 j 的值为奇数时,变量 x 的值才自加 1,所以在内层 for 循环执行过程中,变量 x 的值自加两次,当退出内层 for 循环时,x=3,然后执行 x+,得到 x=4。在进入执行第
34、2 次外层 for 循环中,首先 x+得到 x=5。进入到内层 for。循环,只有循环变量 j 的值为奇数时,变量 x 的值才自加 1,所以在内层 for 循环执行过程中,变量 x 的值自加 1 两次,当退出内层 for 循环时,x=7,然后执行 x+,得到 x=8,所以打印输出变量 x 的值为 8。27.有以下程序段: int i, j, m=0; for(i=1; i=15; i+=4) for(j=3; j=19; j+=4)m+; printf(“%d/n“, m); 程序段的输出结果是_。(分数:2.50)A.12B.15C.20 D.25解析:解析 i=1=15-j=3=19-m+
35、.m=1 j+4=7=19m+ m=2 j=+4=11=1 9 m=3 j=15 m=4 19 m=5i+4=5=15 j 又从 3 开始加 5 次 m=10i+4=9=15 j 又从 3 开始加 5 次 m=15i=13=15 j 又从 3 开始加 5 次 m=20i+4=1915 结束 m=2028.有下列程序: main() int i, s=0, t=1, 2, 3, 4, 5, 6, 7, 8, 9; for(i=0; i9; i+=2)s+=*(t+i); printf(“%d/n“, s); 程序执行后的输出结果是_。(分数:2.50)A.45B.20C.25 D.36解析:解析
36、 在 for 循环语句中自变量 i 从 0 开始,每次自加 2,执行 s+=*(t+i)语句,因为 C 语言规定数组名做表达式相当于数组的首地址,也就是第一个元素的地址。因此,*(t+i)代表数组的第 i+1 个元素,所以程序运行的结果是 1+3+5+7+9=25,即变量 s 的值等于 25。29.有下列程序: int fun(int n) if(n=1)return 1; else return(n+fun(n-1); main() int x; scanf(“%d“, x=fun(x); printf(“%d/n“, x); 执行程序时,给变量 x 输入 10,程序的输出结果是_。(分数:
37、2.50)A.55 B.54C.65D.45解析:解析 本题在函数 int fun(int n)的定义中又出现了对函数 fun 的调用,所以函数 fun 是递归函数。因而在主函数中调用 x=fun(x)时,当输入 10 赋给变量 x 时,递归调用的过程为 fun(10)=10+fun(9)=10+9+fun(8)=10+9+8+fun(7) =10+9+8+7+fun(6)=10+9+8+7+6+fun(5) =10+9+8+7+6+5+fun(4) =10+9+8+7+6+5+4+fun(3) =10+9+8+7+6+5+4+3+fun(2) =10+9+8+7+6+5+4+3+2+fun(
38、1) =10+9+8+7+6+5+4+3+2+1+fun(0) =10+9+8+7+6+5+4+3+2+1=5530.有下列程序: int fun(int x, int n) static int sum=0, i; for(i=0; in; i+) sum+=xi; return sum; main() int a=1, 2, 3, 4, 5, b=6, 7, 8, 9, s=0; s=fun(a, 5)+fun(b, 4); printf(“%d/n“, s); 程序执行后的输出结果是_。(分数:2.50)A.45B.50C.60 D.55解析:解析 在函数 int fun(int x,
39、int n)的定义中,变量 sum 为一个静态局部变量。由于在整个程序运行期间,静态局部变量在内存中的静态存储中占据着永久的存储单元。函数 int fun(int x,int n)的功能是求出数组 x各个元素的和,所以在主函数中,调用函数 fun(a,5)后,变量sum=1+2+3+4+5=15,当再次调用 fun(b,4)后,变量 sum=15+6+7+8+9=45,所以 s=15+45=60。31.有下列程序: main() char *p=“3697“, “2584“; int i, j; long num=0; for(i=0; i2; i+) j=0; while(pij!=“/0“
40、) if(pij-“/0“)%2)num=10*num+p jj-“0“; j+=2; printf(“%d/n“, num); 程序执行后的输出结果是_。(分数:2.50)A.35B.37C.39D.3975 解析:解析 执行第一次 for 循环时,用表达式 pij!=“/0“来判断字符串数组指针 p 是否到达字符串的结尾,如果没有到达,继续执行 while 中的语句。if 语句表示(pij-“/0“)除 2 的余数不为 0 时,即字符串所有奇数执行后面的语句。所以退出第 1 次 for 的循环体时,输出为 397,执行第 2 次循环体。对字符串“2584”进行处理,输出结果为 5,因而最后
41、输出结果为 3975。32.以下程序的输出结果是_。 main() char st20=“hello/0/t/“; printf(“%d%d/n“, strlen(st), sizeof(st); (分数:2.50)A.9 9B.5 20 C.13 20D.20 20解析:解析 从题目中可知,“/0“、“/t“、“/“分别为一个字符,而 sizeof 是求字节个数的函数,其中包括“/0“占的字节,strlen 函数是求数组长度的函数,其以“/0“结束,因此 strlen 的值为 5,sizeof 的值为 20。33.若有以下的定义:“int t32;”,能正确表示 t 数组元素地址的表达式的是
42、_。(分数:2.50)A. p-next=r; r-next=q;B.q-next=r; q-next=r-next; r-next=q;C.q-next=r-next; r-next=q; p-next=r;D.q-next=q; p-next=r; q-next=r-next; 解析:解析 由题目中线性链表的定义可知,要将 q 和 r 所指的结点交换前后位置,只要使 q 指向 r 的后一个结点,p 指向 r 结点,r 指向 q 结点即可。而在选项 D 中,r-next=q,这时 r 指向的节点为q;p-next=r,这时 p 指向的节点为 r;q-next=r-next,因为 r 结点已经
43、指向 q,所以执行这个语句后 q 又指向 q,所以选项 D 不正确。35.有以下程序段: int x; for(x=3; x6; x+) printf(x%2)?(“*%d“):(“#%d/n“), x); 程序段的输出结果是_。(分数:2.50)A.*3#4*5B.#3*4#5C.#3*4#5D.*3#4*5 解析:解析 void main() int x; for(x=3; x6; x+) prinrf(x%2)?(“*%d“):(“#%d/n“), x); /x=3 3%2=1 *3 /x=4 4%2=0 #4/n /x=5 5%2=1 *5 /x=6 退出循环 结果: *3#4 *5
44、因此正确答案为 D 选项。36.若有定义“int b8, *p=b;”,则 p+6 表示_。(分数:2.50)A.数组元素 b6的值B.数组元素 b6的地址 C.数组元素 b7的地址D.数组元素 b0的值加上 6解析:解析 指针中存放的是变量的地址,指针也可以进行增减运算,这时指针移动的最小单位是一个存储单元,而不是一个字节。所以题中“p+6”指的是将指针向后移动了 6 个存储单元,即指向 b6,存放的是 b6的地址。37.设变量已正确定义,则以下能正确计算 f=n!的程序是_。(分数:2.50)A.f=0;for(i=1; i=n; i+)f*=i;B.f=1;for(i=1; in; i+
45、)f*=i;C.f=1;for(i=n; i1; i+)f*=i;D.f=1;for(i=n; i=2; i-)f*=i; 解析:解析 由 n!的数字定义可知 n!=n*(n-1)*(n-2)*1。在选项 A 中,由于 f 的初值为 0,在 for循环语句中,f 依次乘以 1,2,3,n,最后计算得到 f=n!=0,所以选项 A 不正确。在选项 B 中,f 的初值为 1,在 for 循环语句中,f 依次乘以 1,2,3,(n-1),最后计算得到 f=(n-1)!,所以选项 B 不正确。在选项 C 中,f 的初值为 1,在 for 循环语句中,f 依次乘以 n,n+1,n+2,所以选项 C 不正
46、确。在选项 D 中,f 的初值为 1,在 for 循环语句中,f 依次乘以 n,n-1,n-2,2,最后计算得到 f=n!,所以选项 D 正确。38.下述程序执行的输出结果是_。 #includestdio.h main() char a24; strcpy(a, “are“); strcpy(a1, “you“); a03=“ printf(“%s/n“, a); (分数:2.50)A.are 语句 printf(“%f/n“, (int)(x*1000+0.5)/(double)1000);的输出结果是_。(分数:2.50)A.输出格式说明与输出顶不匹配,输出无定值B.5.170000C.5.168000D.5.169000 解析:解析 (x*1000+0.5)-x 移动 3 位小数,加 0.5,也就是小数第 4 位加 5,若这位大于等于 5,则进 1 到个位。5.16894*1000-5168.94+0.5-5169.44 接下来:(int)(x*1000+0
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1