1、二级 C 语言笔试-179 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.有下列程序: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+pjj-0;j+=2;printf(“%d/n“, num);程序执行后的输出结果是( )。(分数:2.00)A.35B.37C.39D.39752.设 x、y 和 z 是 int 型变量,且 x=4,y=6,z=8,则下列表达式中值为 0
2、 的是( )。(分数:2.00)A.xyB.x=yC.x|y+zy-zD.!(xy)!z|1)3.以下程序的输出结果是( )。main()int a33=1, 2, 3, 4, 5, 6, i, j, s=0;for(i=1; i3; i+)for(j=0; j=i; j+)s+=aij;printf(“%d/n“, s)(分数:2.00)A.18B.19C.20D.214.若有以下的定义:“int t32;”,能正确表示 t 数组元素地址的表达式是( )。(分数:2.00)A.t32B.t3C.t1D.t225.有下列程序:main()int k=5;while(-k) printf(“%d
3、“, k=1);printf(“/n“);执行后的输出结果是( )。(分数:2.00)A.1B.2C.4D.死循环6.有以下程序: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.00)A.28B.27C.42D.417.在“文件包含”预处理语句的使用形式中,当#include 后面的文件名用(双引号)括起时,寻找被包含文件的方式是( )。(分数:2.00)A.直接按系统设定的标准方式搜索目录B.先在源程序所在的目录搜索,如没找到,再按系统设定的标准方式搜
4、索C.仅仅搜索源程序所在目录D.仅仅搜索当前目录8.下列程序的输出结果是( )。main()int i=1, j=2, k=3;if(i+=1(+j=3=|k+=3)printf(“%d%d%d/n“, i, j, k);(分数:2.00)A.1 2 3B.2 3 4C.2 2 3D.2 3 39.算法的空间复杂度是指( )。(分数:2.00)A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.算法执行过程中所需要的存储空间10.面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本原理是( )。(分数:2.00)A.模拟现实世界中不同事物之间的联系B.强调模拟现实世
5、界中的算法而不强调概念C.使用现实世界的概念抽象地思考问题从而自然地解决问题D.不强调模拟现实世界中的算法而强调概念11.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS 之间的关系是( )。(分数:1.00)A.DB 包含 DBS 和 DBMSB.DBMS 包含 DB 和 DBSC.DBS 包含 DB 和 DBMSD.没有任何关系12.下列合法的声明语句是( )。(分数:1.00)A.int _abc=50;B.double int=3+5e2.5;C.1ong do=1L;D.float 3_asd=3e-3;13.对如下二叉树进行后序遍历的结果为( )。(分数:1.00)A.A
6、BCDEFB.DBEAFCC.ABDECFD.DEBFCA14.下列程序的输出结果是( )。#includestdio.hmain()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“, i);(分数:1.00)A.19B.1C.6D.815.以下程序的输出结果是( )。main()char st20=“hello/0/t/“;printf(“%d%d/n“, strlen(st), sizeof(st);(分数:1.00)A.9 9B.5 2
7、0C.13 20D.20 2016.两个或两个以上模块之间关联的紧密程度称为( )。(分数:1.00)A.耦合度B.内聚度C.复杂度D.数据传输特性17.有下列程序:int fun(int n)if(n=1)return 1;elsereturn(n+fun(n-1);main()int x; scanf(“%d“, x); x=fun(x); printf(“%d/n“, x);执行程序时,给变量 x 输入 10,程序的输出结果是( )。(分数:1.00)A.55B.54C.65D.4518.若有定义:“int a23;”则对 a 数组的第 i 行第 j 列元素的正确引用为( )。(分数:1
8、.00)A.*(*(a+i)+j)B.(a+i)jC.*(a+i+j)D.*(a+i)+j19.下列能正确进行字符串赋值的是( )。(分数:1.00)A.char s5=“ABCDE“;B.char s5=A, B, c, D, E;C.char*s; s=“ABCDE“;D.char*s; printf(“%s“, s);20.设变量已正确定义,则以下能正确计算 f=n!的程序是( )。(分数:1.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+)f*=i;D.f=1;for(i=n
9、; i=2; i-)f*=i;21.下述程序的输出结果是( )。#includestdio.hmain()int i;for(i=1; i=10; i+)if(i*i=20)(i*i=100)break;printf(“%d/n“, i*i);(分数:2.00)A.49B.36C.25D.6422.设 x=011050,则 x=x01252 的值是( )。(分数:2.00)A.0000001000101000B.1111110100011001C.0000001011100010D.110000000010100023.有下列程序:main()int i, j, x=0;for(i=0, i2
10、; i+)x+;for(j=0; j=3; j+)if(j%2)continue;x+;x+;printf(“x=%d/n“, x);程序执行后的输出结果是( )。(分数:2.00)A.x=4B.x=8C.x=6D.x=1224.若有定义“int b8, *p=b;”,则 p+6 表示( )。(分数:2.00)A.数组元素 b6的值B.数组元素 b6的地址C.数组元素 b7的地址D.数组元素 b0的值加上 625.有下列程序: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“
11、, s);程序执行后的输出结果是( )。(分数:2.00)A.45B.20C.25D.3626.函数 fseek(pf,OL,SEEK_END)中的 SEEK_END 代表的起始点是( )。(分数:2.00)A.文件开始B.文件末尾C.文件当前位置D.以上都不对27.有下列程序: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.00)A.6B.7C.8D.928.若 ch 为 char 型变量,k
12、为 int 型变量(已知字符 a 的 ASCII 码是 97),则执行下列语句后输出的结果为( )。oh=b;k=10;printf(“%x, %o,“, ch, ch, k);printf(“k=%d/n“, k);(分数:2.00)A.因变量类型与格式描述符的类型不匹配,输出无定值B.输出项与格式描述符个数不符,输出为 0 值或不定值C.62, 142, k=%dD.62, 142, k=%1029.假定 x 和 y 为 double 型,则表达式 x=2, y=x+3/2 的值是( )。(分数:2.00)A.3.500000B.3C.2.000000D.3.00000030.有如下程序:
13、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.00)A.a=2, b=1B.a=1, b=1C.a=1, b=0D.a=2, b=231.有下列程序:int fun1(double a)return a*=a; int fun2(double x, double y)double a=0, b=0;a=fun 1(x); b=funl(y);return(int)(a+b);main()double w; w=
14、fun2(1.1,2.0),程序执行后变量 w 中的值是( )。(分数:2.00)A.5.21B.5C.5.0D.0.032.下述程序执行的输出结果是( )。#includestdio.hmain()char a24;strcpy(a, “are“); strcpy(a1, “you“);a03=;printf(“%s/n“, a);(分数:2.00)A.areyouB.youC.areD.33.相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和( )。(分数:2.00)A.可重用性差B.安全性差C.非持久性D.冗余性34.有下列程序:int fun(int x, int n)s
15、tatic 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.00)A.45B.50C.60D.5535.下列描述错误的是( )。(分数:2.00)A.继承分为多重继承和单继承B.对象之间的通信靠传递消息来实现C.在外面看不到对象的内部特征是基于对象的“模块独立性好”这个特征D.类是具有共同属性、共同方法的对象的集合36.简单的交换排序方
16、法是( )。(分数:2.00)A.快速排序B.选择排序C.堆排序D.冒泡排序37.现有以下结构体说明和变量定义,如图所示,指针 P、q、r 分别指定一个链表中连续的 3 个结点。(分数:2.00)A.q-next=r-next; pr-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;38.软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指( )。(分数:2.00)A.模块间的关系
17、B.系统结构部件转换成软件的过程描述C.软件层次结构D.软件开发过程39.下列叙述中正确的是( )。(分数:2.00)A.一个逻辑数据结构只能有一种存储结构B.逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率40.关于结构化程序没计原则和方法的描述错误的是( )。(分数:2.00)A.选用的结构只准许有一个入口和一个出口B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C.不允许使用 GOTO 语句D.语言中若没有控制结构,应该采用前后一致的方法来模
18、拟二、填空题(总题数:15,分数:30.00)41.数据的独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,这称为 1。(分数:2.00)填空项 1:_42.排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排序、 1 和选择排序。(分数:2.00)填空项 1:_43.在程序设计阶段应该采取 1 和逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,继而用某种程序设计语言写成程序。(分数:2.00)填空项 1:_44.某二又树中度为 2 的结点有 18 个,则该二又树中有 1 个叶子结点。(分数:2.00)
19、填空项 1:_45.算法的基本特征是可行性、确定性、 1 和拥有足够的情报。(分数:2.00)填空项 1:_46.顺序存储方法是把逻辑上相邻的结点存储在物理位置 1 的存储单元中。(分数:2.00)填空项 1:_47.在关系模型中,把数据看成是二维表,每一个二维表称为=个_。(分数:2.00)填空项 1:_48.下列程序的输出结果是_。#includestdio.hmain()int x=1, y=1, a=1, b=1;switch(x)case 1:switch(y)case 0: a+; break;case 1: b+; break;case 2: a+: b+; break;prin
20、tf(“a=%d, b=%d/n“, a, b);(分数:2.00)填空项 1:_49.C 语言用于结构化程序设计的 3 种基本结构是 1、选择结构和循环结构。(分数:2.00)填空项 1:_50.以下程序运行后的输出结果是_。int fun(int a)int b=0; static int c=3;b+; c+;return(a+b+c); main()int i, a=5;for(i=0; i3; i+)printf(“%d%d“, i, fun(a); printf(“n“);(分数:2.00)填空项 1:_51.下述程序的输出结果是_。long fun5(int n)long s;i
21、f(n=1)|(n=2)s=2;elses=n+fun5(n=1);return(s);main()long x;x=fun5(4);printf(“%1d/n“, x);(分数:2.00)填空项 1:_52.下述程序的输出结果是_。main()int a=2, b=4, c=6;int *p1=a, *p2=b, *p;*(p=c)=*p1*(*p2);printf(“%d/n“, c);(分数:2.00)填空项 1:_53.下列循环的循环次数是_。int k=2;while(k=0)printf(“%d“, k);k-;printf(“/n“);(分数:2.00)填空项 1:_54.若有定
22、义“float b15, *p=b; ”,且数组 b 的首地址为 200H,则 p+13 所指向的数组元素的地址为 1。(分数:2.00)填空项 1:_55.下列程序的功能是将字符串 s 中所有的字符 C 删除。请填空。#includestdio.hmain()char s80;int i, j;gets(s);for(i=j=0; si!=“/0“; i+)if (i!=C_;sj=/0;puts(s);(分数:2.00)填空项 1:_二级 C 语言笔试-179 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.有下列程序:main()cha
23、r *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+pjj-0;j+=2;printf(“%d/n“, num);程序执行后的输出结果是( )。(分数:2.00)A.35B.37C.39D.3975 解析:解析 执行第一次 for 循环时,用表达式 pij!=/0来判断字符串数组指针 p 是否到达字符串的结尾,如果没有到达,继续执行 while 中的语句。if 语句表示(pij=/0)除 2 的余数不为 0 时,即字符串所有奇数,执行后面的语句。所
24、以退出第 1 次 for 的循环体时,输出为 397,执行第 2 次循环体。对字符串“2584”进行处理,输出结果为 5,因而最后输出结果为 3975。2.设 x、y 和 z 是 int 型变量,且 x=4,y=6,z=8,则下列表达式中值为 0 的是( )。(分数:2.00)A.xyB.x=yC.x|y+zy-zD.!(xy)!z|1) 解析:解析 本题考查逻辑运算符的使用。当“”的两个运算对象都是逻辑 1 时,表达式返回值才是 1;“|”的两个运算对象至少有一个是逻辑 1 时表达式返回值也是 1,xy 为 1,!z 为 0,10 为1,0|为 1,因此,! 1 为 0。3.以下程序的输出结
25、果是( )。main()int a33=1, 2, 3, 4, 5, 6, i, j, s=0;for(i=1; i3; i+)for(j=0; j=i; j+)s+=aij;printf(“%d/n“, s)(分数:2.00)A.18 B.19C.20D.21解析:解析 循环的作用是求行下标从 1 到 2 列下标从 0 到 i 的元素之和,即 s=a10+a11+a20+a21+a22=3+4+5+6+0=18。4.若有以下的定义:“int t32;”,能正确表示 t 数组元素地址的表达式是( )。(分数:2.00)A.t32B.t3C.t1 D.t22解析:解析 数组的下标是从 0 开始的
26、,A 中越界,行下标和列下标都不能越界,B 中,虽然是个地址,但是也同样越界了,选项 C 中表示的是第一个的首地址,选项 D 表示的为其元素的值,并不是地址。5.有下列程序:main()int k=5;while(-k) printf(“%d“, k=1);printf(“/n“);执行后的输出结果是( )。(分数:2.00)A.1 B.2C.4D.死循环解析:解析 在程序语句中,k 的初始值为 5,进行第 1 次 while 循环后,k 自减 1 为 4,非 0,执行循环体里的 printf 语句,输出 k,此时 k 的值变为 1。程序执行第 2 次循环时,k 自减 1 变为 0,为假,退出
27、 while 循环语句。所以程序的最后结果为 1。6.有以下程序: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.00)A.28B.27C.42 D.41解析:解析 只有当 3 个 if 条件同时成立,即能够同时被 2、3、7 整除时,才输出 i 的值,而从 0 到50 能够同时被 2、3、7 整除的数只有 42,故选择 C 选项。7.在“文件包含”预处理语句的使用形式中,当#include 后面的文件名用(双引号)括起时,寻找被包含文件的方式是( )。
28、(分数:2.00)A.直接按系统设定的标准方式搜索目录B.先在源程序所在的目录搜索,如没找到,再按系统设定的标准方式搜索 C.仅仅搜索源程序所在目录D.仅仅搜索当前目录解析:解析 #include“文件名“,预处理程序首先在引用被包含文件的源文件所在的目录下搜索指定的文件,如没找到,再按系统指定的标准目录搜索。8.下列程序的输出结果是( )。main()int i=1, j=2, k=3;if(i+=1(+j=3=|k+=3)printf(“%d%d%d/n“, i, j, k);(分数:2.00)A.1 2 3B.2 3 4C.2 2 3D.2 3 3 解析:解析 本题考查自增运算符“+”、
29、逻辑与运算符“”和逻辑或运算符“|”。自增运算符“+”出现在变量之前,表示先使用变量的值加 1,再使用变量的值进行运算:出现在变量之后,表示先使用变量的值进行运算,再使变量的值加 1。当逻辑与运算符“”两边的运算对象都为真时,逻辑表达武的值才为真;当逻辑或运算符“|”只要一个值为 1,值就为 1。根据运算符的优先级,题中应先计算内层括号中的值。+j 是先自加后运算,因此运算时 j 的值等于 3,所以表达式+j=3 成立,即表达式的值为 1;1 与任何数都为进行或(|)运算,结果都为 1,医此 k=3 的表达式 i+是先运算后自加,因此运算时 i 为 1,所以 i+=1 成立,自加 1 后 i=
30、2。if 语句的条件为真即“1”,所以输出 i、j、k 的值分别是 2,3,3。9.算法的空间复杂度是指( )。(分数:2.00)A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.算法执行过程中所需要的存储空间 解析:解析 算法的空间复杂度,是指执行这个算法所需的存储空间。算法所占用的存储空间包括算法程序所占用的空间、输入的初始数据所占用的存储空间、算法执行过程中所需要的额外空间。10.面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本原理是( )。(分数:2.00)A.模拟现实世界中不同事物之间的联系B.强调模拟现实世界中的算法而不强调概念C.使用现实世界的概
31、念抽象地思考问题从而自然地解决问题 D.不强调模拟现实世界中的算法而强调概念解析:解析 面对象的设计方法的基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。它虽强调模拟现实世界中的概念而不强调算法但是它鼓励开发者在软件开发的过程中从应用领域的概念角度去思考。11.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS 之间的关系是( )。(分数:1.00)A.DB 包含 DBS 和 DBMSB.DBMS 包含 DB 和 DBSC.DBS 包含 DB 和 DBMS D.没有任何关系解析:解析 数据库系统由如下 5 个部分组成,数据库(DB)、数据库管理系统(DBMS)、数据库管
32、理员(人员)、系统平台之一硬件平台(硬件)、系统平台之二软件平台(软件)。其中 DB(DataBase)即数据库,是统一管理的相关数据的集合:DBMS 即数据库管理系统,是位于用户与操作系统之间的一层数据管理软件,为用户或应用完程序提供访问 DB 的方法。由以上可知,选 C 为正确答案。12.下列合法的声明语句是( )。(分数:1.00)A.int _abc=50; B.double int=3+5e2.5;C.1ong do=1L;D.float 3_asd=3e-3;解析:解析 标识符是由字母、数字或下划线组成,并且它的第一个字符必须是字母或者下划线。B 选项 int 不是表达变量类型的标
33、识符,它不能再用做变量名和函数名。C 选项 do 是 C 语言的一个关键字。D选项标识符只能以字母或下划线开始。13.对如下二叉树进行后序遍历的结果为( )。(分数:1.00)A.ABCDEFB.DBEAFCC.ABDECFD.DEBFCA 解析:解析 所谓的后序遍历是指,首先遍历左子树,然后遍历右子树,最后访问根结点,并且在遍历左、右树时,仍然先遍历左子树,然后遍历右子树,最后访问根点。因此,后序遍历二叉树的过程也是一个递归过程。14.下列程序的输出结果是( )。#includestdio.hmain()int a=0, i;for(i=1; i5; i+)switch(i)case 0:c
34、ase 3: a+=1;case 1:case 2: a+=2;default: a+=3;printf(“%d“, i);(分数:1.00)A.19 B.1C.6D.8解析:解析 本题考查 switch 语句。当 i=1 时,执行 case 1,因为没有遇到 break 语句,所以依次往下运行,“a=a+2=2,a=a+3=5”;当 i=2 时,执行 case 2,因为没有遇到 break 语句,所以依次往下执行,“a=a+2=7,a=a+3=10”;当 i=3 时,执行 case 3,a=a+1=11,因为没有遇到 break 语句。所以依次往下运行,a=a+2=13,a=a+3=16,当
35、 i=4 时,执行 default,a=a+3=19,结束循环。15.以下程序的输出结果是( )。main()char st20=“hello/0/t/“;printf(“%d%d/n“, strlen(st), sizeof(st);(分数:1.00)A.9 9B.5 20 C.13 20D.20 20解析:解析 从题目中可知,/o、/t、/分别为一个字符,而 sizeof 是求字节个数的函数,其中包括/0占的字节,strlen 函数是求数组长度的函数;其以/0结束,因此 strlen 的值为 5,sizeof 的值为 20。16.两个或两个以上模块之间关联的紧密程度称为( )。(分数:1.
36、00)A.耦合度 B.内聚度C.复杂度D.数据传输特性解析:解析 模块的独立性是指每个模块保证完成系统要求的独立功能,并且与其他模块的联系少且接口简单。衡量软件的模块独立性有内聚性和耦合性两个定性度量标准。耦合性是模块间互相连接紧密程度的度量。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。17.有下列程序:int fun(int n)if(n=1)return 1;elsereturn(n+fun(n-1);main()int x; scanf(“%d“, x); x=fun(x); printf(“%d/n“, x);执行
37、程序时,给变量 x 输入 10,程序的输出结果是( )。(分数:1.00)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(6)=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
38、(2)=10+9+8+7+6+5+4+3+2+fun(1)=10+9+8+7+6+5+4+3+2=5518.若有定义:“int a23;”则对 a 数组的第 i 行第 j 列元素的正确引用为( )。(分数:1.00)A.*(*(a+i)+j) B.(a+i)jC.*(a+i+j)D.*(a+i)+j解析:解析 通过地址来引用数组元素的方法有下列 5 种:(1)aij;(2)*(ai+j);(3)*(*(a+j)+j);(4)*(aij);(5)(a00+3*i+j)。故 A 正确。19.下列能正确进行字符串赋值的是( )。(分数:1.00)A.char s5=“ABCDE“;B.char s5
39、=A, B, c, D, E;C.char*s; s=“ABCDE“; D.char*s; printf(“%s“, s);解析:解析 选项 A、B 的空间不够;字符串存储要有结束符/0且要占用一个空间,printf 用来输出字符,不能输入字符串。20.设变量已正确定义,则以下能正确计算 f=n!的程序是( )。(分数:1.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+)f*=i;D.f=1;for(i=n; i=2; i-)f*=i; 解析:解析 由 n!的数字定义可知 n!=n*
40、(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 不正确。在选项 D 中,f 的初值为 1,在 for 循环语句中,f 依次乘以 n,n-1,n 2,2。最后计算得到f=n!,所以选项 D 正确。21.下述程序的输出结果是(
41、)。#includestdio.hmain()int i;for(i=1; i=10; i+)if(i*i=20)(i*i=100)break;printf(“%d/n“, i*i);(分数:2.00)A.49B.36C.25 D.64解析:解析 当 if 执行到第一个满足(i*i=20)(i*i=100)这个条件的 i 出现时,通过 break 语句跳出循环,执行下面的 printf 语句。22.设 x=011050,则 x=x01252 的值是( )。(分数:2.00)A.0000001000101000 B.1111110100011001C.0000001011100010D.1100
42、000000101000解析:解析 本题主要考查按位与运算,x=011050 的二进制形式为 00010010000101000,01252 的二进制形式为 0000001010101010,两者相与得 0000001000101000。23.有下列程序: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.00)A.x=4B.x=8 C.x=6D.x=12解析:解析 在第 1 次外层 for 循环中,首先 x+
43、得到 x=1。进入到内层 for 循环,只有循环 j 的值为奇数时,变置 x 的值才自加 1,所以在内层 for 循环执行过程中,变量 x 的值自加两次,当退出内层 for 循环时,x=3,然后执行 x+,得到 x=4。在进入执行第 2 次外层 for 循环中,首先 x+得到 x=5。进入到内层 for 循环,只有循环变量 j 的值为奇数时,变量 x 的值才自加 1,所以在内层 for 循环执行过程中,变量 x 的值自加 1 两次,当退出内层 for 循环时,x=7,然后执行 x+,得到 x=8,所以打印输出变量 x 的值为 8。24.若有定义“int b8, *p=b;”,则 p+6 表示(
44、 )。(分数:2.00)A.数组元素 b6的值B.数组元素 b6的地址 C.数组元素 b7的地址D.数组元素 b0的值加上 6解析:解析 指针中存放的是变量的地址,指针也可以进行增减运算,这时指针移动的最小单位是一个存储单元,而不是一个字节。所以题中将 p+6 指的是将指针向后移动了 6 个存储单元,即指向 b6,存放的是 b6的地址。25.有下列程序: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.00)A.45B.20
45、C.25 D.36解析:解析 在 for 循环语句中自变量 i 从 0 开始,每次自加 2,执行 s+=*(t+i)语句,因为 C 语言规定数组名做表达式相当于数组的首地址,也就是第一个元素的地址。因此*(t+i)代表数组的第 i+1 个元素。所以程序运行的结果是 1+3+5+7+9=25,即变量 s 的值等于 25。26.函数 fseek(pf,OL,SEEK_END)中的 SEEK_END 代表的起始点是( )。(分数:2.00)A.文件开始B.文件末尾 C.文件当前位置D.以上都不对解析:解析 SEEK_SET 代表文件的开始,SEEK_END 代表文件末尾,SEEK_CUR 代表文件当
46、前位置。27.有下列程序: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.00)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。28.若 ch 为 ch
47、ar 型变量,k 为 int 型变量(已知字符 a 的 ASCII 码是 97),则执行下列语句后输出的结果为( )。oh=b;k=10;printf(“%x, %o,“, ch, ch, k);printf(“k=%d/n“, k);(分数:2.00)A.因变量类型与格式描述符的类型不匹配,输出无定值B.输出项与格式描述符个数不符,输出为 0 值或不定值C.62, 142, k=%d D.62, 142, k=%10解析:解析 第 1 个 printf 函数,格式说明的个数是 2,而输出项的个数是 3,所以对于多余的输出项k 不予输出;第 2 个 printf 函数,有两个%说明,第 1 个%后面的字符要原样输出。本题考