1、二级 C 语言笔试-436 及答案解析(总分:98.00,做题时间:90 分钟)一、选择题(总题数:40,分数:66.00)1.下列关于栈的描述正确的是 _。A) 在栈中只能插入元素而不能删除元素B) 在栈中只能删除元素而不能插人元素C) 栈是特殊的线性表,只能在一端插入或删除元素D) 栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素(分数:2.00)A.B.C.D.2.下列关于栈的描述中错误的是( )。A) 栈是先进先出的线性表B) 栈只能顺序存储C) 栈具有记忆作用D) 对栈的插入与删除操作中,不需要改变栈底指针(分数:2.00)A.B.C.D.3.在设计程序时,应采纳的原则之一是
2、A) 不限制 goto 语句的使用 B) 减少或取消注解行C) 程序越短越好 D) 程序结构应有助于读者理解(分数:2.00)A.B.C.D.4.下列叙述中正确的是_。A) 顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的B) 顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C) 顺序存储结构能存储有序表,链式存储结构不能存储有序表D) 链式存储结构比顺序存储结构节省存储空间(分数:2.00)A.B.C.D.5.下列排序方法中,最坏情况下比较次数最少的是( )。A冒泡排序 B简单选择排序C直接插入排序 D堆排序(分数:1.00)A.B.C.D.6.有下列二叉树,对此
3、二叉树前序遍历的结果为( )。(分数:2.00)A.B.C.D.7.软件是指_。A) 程序 B) 程序和文档C) 算法加数据结构D) 程序、数据与相关文档的完整集合(分数:2.00)A.B.C.D.8.软件调试的目的是_。(A) 发现错误(B) 改正错误(C) 改善软件的性能(D) 验证软件的正确性(分数:2.00)A.B.C.D.9.关于结构化程序设计原则和方法描述错误的是( )。A) 选用的结构只准许有一个入口和一个出口B) 复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C) 不允许使用 GOTO 语句D) 语言中所没有的控制结构,应该采用前后一致的方法来模拟(分数:1.00)A.B.
4、C.D.10.“商品”与“顾客”两个实体集之间的联系一般是_。A) 一对一 B) 一对多C) 多对一 D) 多对多(分数:2.00)A.B.C.D.11.有两个关系 R,S 如下:(分数:2.00)A.B.C.D.12.下列数据模型中,具有坚实理论基础的是A) 层次模型 B) 网状模型 C) 关系模型 D) 以上 3 个都是(分数:2.00)A.B.C.D.13.设有定义:int k=1,m=2; float f=7;则以下选项中错误的表达式是 _。A) k=k=k B) -k+ C) k% int(f) D) k=f=m(分数:2.00)A.B.C.D.14.请选出可用作 C 语言用户标识符
5、的是A) void,define,WORD B) a3_3,_123,IFC) FOR,-abc,Case D) 2a,Do,Sizeof(分数:1.00)A.B.C.D.15.阅读以下程序#includestdio.hmain()int case; float printF;printf(“请输入 2 个数:“);scanf(“%d %f“, printf(“%d %f/n“, case, printF);该程序编译时产生错误,其出错原因是A) 定义语句出错,case 是关键字,不能用作用户自定义标识符B) 定义语句出错,printF 不能用作用户自定义标识符C) 定义语句无错,scanf
6、不能作为输入函数使用D) 定义语句无错,printf 不能输出 case 的值(分数:1.00)A.B.C.D.16.下列不是合法的 C 语言语句是( )。A) a=5 B) int i;i+;C) ; D) ;(分数:2.00)A.B.C.D.17.语句“printf(“a/bhow/are/y/bou/n“);”的输出结果是( )。A) a/bhow/are/y/bou B) a/bhow/are/y/bouC) howareyou D) ahowarey/bou(分数:2.00)A.B.C.D.18.若变量 a 是 int 类型,并执行了语句:a=A+1.6;,则正确的叙述是A) a 的
7、值是字符 C B) a 的值是浮点型C) 不允许字符型和浮点型相加 D) a 的值是字符A的 ASCII 值加上 1(分数:1.00)A.B.C.D.19.有以下程序段int n,t=1,s=0;scanf(“%d“,n);do s=s+t; t=t-2; while (t!=n);为使此程序段不陷入死循环,从键盘输入的数据应该是_。(A) 任意正奇数(B) 任意负偶数(C) 任意正偶数(D) 任意负奇数(分数:1.00)A.B.C.D.20.设变量 x 为 float 型且已经赋值,则以下语句中能够将 x 中的数值保留到小数点后面两位,并将第三位四舍五入的是_。A) x=x*100+0.5/
8、100.0 B) x=(x*100+0.5)/100.0C) x=(int)(x*100+0.5)/100.0 D) x=(x/100+0.5)*100.0(分数:1.00)A.B.C.D.21.下列程序的输出结果是( )。#includestdio.hmain()int a=0,i;for(i=1;i5;i+)switch(i)case 0:case 3:a+=1;case 1:case2:a+=2;default:a+=3;printf(“%d“,a);A)19 B)18 C)6 D)8(分数:2.00)A.B.C.D.22.下列循环体的执行次数是( )。#includestdio.hma
9、in()int i,j;for(i=0 j=1;ij+1;i+=1,j-)printf(“%d/n“,j);A) 3 B) 2 C) 1 D) 0(分数:2.00)A.B.C.D.23.在 C 语言程序中,以下说法正确的是( )。 A) 函数的定义和函数的调用均不可以嵌套 B) 函数的定义不可嵌套,但函数的调用可以嵌套 C) 函数的定义可以嵌套,但函数的调用不可以嵌套 D) 函数的定义和函数的调用均可以嵌套(分数:2.00)A.B.C.D.24.有以下程序#includestdio.hvoid fun(int*a,int*B)int*c;c=a;a=b;b=c;main()int x=3, y
10、=5,*p=fun(p,q); printf(“%d,%d,“,*p,*q);fun( printf(“ %d,%d/n“,*p,*q);程序运行后的输出结果是_。A) 3,5,5,3 B) 3,5,3,5 C) 5,3,3,5 D) 5,3,5,3(分数:2.00)A.B.C.D.25.有以下程序main()int a=1,b=3,c=5;int *p1=a, *p2=b, *p=c;*p=*p1*(*p2);printf(“%d/n“, c);执行后的输出结果是_。(A) 1(B) 2(C) 3(D) 4(分数:2.00)A.B.C.D.26.有下列程序:main()int i,j,x=0
11、;for(i=0,i2;i+)x+:for(j=0;j=3;j+)if(j%2)continue;x+;x+;printf(“x=%d/n“,x);程序执行后的输出结果是( )。Ax=4 Bx=8 Cx=6 Dx=12(分数:1.00)A.B.C.D.27.若有以下说明和语句:int c4 5 ,( * p) 5;p=e;能够正确引用 c 数组元素的是( )。A) p+1 B) *(p+3) C) *(p+1)+3 D) *(p0+2)(分数:1.00)A.B.C.D.28.变量 m 的值为 8,m 的地址为 1010,若欲使 p 为指向 m 的指针变量,则下列赋值正确的是( )。A) for
12、(i=0; in-1; i+=2) k=i; for(j=i; jn; j+=2) if(ajak) k=j; t=ai; ai=ak; ak=t; main() int aa10=1, 2, 3, 4, 5, 6, 7, i; fun(aa, 7); for(i=0; i7; i+) printf(“%d, “, aai); printf(“/n“); A) 7,2,5,4,3,6,1 B) 1,6,3,4,5,2,7 C) 7,6,5,4,3,2,1 D) 1,7,3,5,6,2,1(分数:2.00)A.B.C.D.31.有下列程序:#includestdio.h#includestdli
13、b.hint fun(int n)int*p;p=(int*)malloc(sizeof(int);*p=n;return*p:main()int a;a=fun(10);printf(“%d/n“,a+fun(10);程序的运行结果是( )。A0 B10 C20 D出错(分数:1.00)A.B.C.D.32.有下列程序:#includestdio.hvoid fun(int a,int b)int t;t=a;a=b;b=t;main()int c10=1,2,3,4,5,6,7,8,9,0,i;for(i=0;i10;i+=2)fun(ci,ci+1);for(i=0;i10;i+)pri
14、ntf(“%d,“,ci);printf(“/n“);程序的运行结果是( )。A1,2,3,4,5,6,7,8,9,0 B2,1,4,3,6,5,8,7,0,9C0,9,8,7,6,5,4,3,2,1 D0,1,2,3,4,5,6,7,8,9(分数:1.00)A.B.C.D.33.设 fp 为指向某二进制文件的指针,且已读到此文件末尾,则函数 feof(fp)的返回值为( )。A) EOF B) 非 0 值C) 0 D) NULL(分数:2.00)A.B.C.D.34.已有定义 int(*q)(),指针 q 可以( )。A) 指向函数的入口地址B) 代表函数的返回值C) 表示函数的类型D) 表
15、示函数返回值的类型(分数:2.00)A.B.C.D.35.有以下语句,则对 a 数组元素的引用不正确的是(0i9)int a10=0,1,2,3,4,5,6,7,8,9,*p=a;A)ap-a B)*(ai) C)pi D)*(*(a+i)(分数:2.00)A.B.C.D.36.下列程序的运行结果为( )。#define MAX(x,y)(x)(y)?(x):(y)main()int a=2,b=3,c=1,d=3,t;printf(“%d/n“,(MAX(a+b,c+d)*100);A) 500 B) 5 C) 4 D) 400(分数:1.00)A.B.C.D.37.以下选项中不能正确把 c
16、l 定义成结构体变量的是( )。A) typedef structint red;int green;int blue;COLOR;COLOR cl;B) struct color clint red;int green;int blue;C) struct colorint red;int green;int blue;cl;D) structint red;int green;int blue;cl;(分数:1.00)A.B.C.D.38.以下程序的输出结果是( )。 int x;int*y;*p; int dt4=1,2,3,4; struct st aa4=2,a=b;b=t;if(a
17、c)t=a; a=c; c=t;printf(“%d %d %d/n“,a,b,c);执行后的输出结果是U /U。(分数:2.00)填空项 1:_以下程序的功能是输入任意整数给 n 后,输出 n 行由大写字母 A 开始构成的三角形字符阵列图形。例如,输入整数 5 时(注意:n 不得大于 10),程序运行结果如下:A B C D EF G H IJ K LM NO请填空完成该程序。main()int i,j,n; char ch=A;scanf(“%d“,n);if(n11)for(i=1;i=n;i+)for(j=1; j=n-i+1;j+)printf(“%2c“,ch);(10) ;(11
18、) ;else printf(“n is too large!/n“)printf(“/n“);(分数:4.00)填空项 1:_填空项 1:_47.下面程序的运行结果是U /U。#include stdio.hfun(int t,int n)int i,m;if(n=1) return t0;elseif(n=2) | m:fun(t,n-1); return m; main( )int a = 11,4,6,3,8,2,3,5,9,2;printf( “% d /n“ ,fun( a, 10);(分数:2.00)填空项 1:_48.以下程序段的输出结果是U /U。int a=1234;pri
19、ntf(“%2d/n“,a);(分数:2.00)填空项 1:_49.下列程序的运行结果是_。main()int s=0,i=1;while(s= 10)s=s+i*i;i+;printf(“%d“,-i);(分数:2.00)填空项 1:_50.有以下程序#include stdio.hint a=5;void fun(int b)int a=10;a+=b;printf(“%d“,a);main()int c=20;fun(c);a+=c;printf(“%d/n“,a);程序运行后的输出结果是_。(分数:2.00)填空项 1:_51.以下程序的输出结果是 1。int fun(int*x,in
20、t n)if(n=0)return x0;else return x0+fun(x+1,n-1);main2int a=1,2,3,4,5,6,7;printf(“%d/n“,fun(a,3);(分数:2.00)填空项 1:_52.若有如下结构体说明:struct STRU int a,b;charc:double d;struct STRU*p1,*p2; 请填空,以完成对 t 数组的定义,t 数组的每个元素为该结构体类型。U /Ut20(分数:2.00)填空项 1:_53.写出下列程序的执行结果。 swap(p1,p2) int*p1,*p2; int p; p=*p1;*p1=*p2;*
21、p2=p; main() int a,b,*p1,*p2; scanf(“%d%d“, struct node *next; ;typedef struct node NODETYPE;main()NODETYPE a, b, c, *h, *p; a.data=10; b.data=20; c.data=30; h=b.next= b.next= c.next=/0;p=h;while(p)printf(“%d“, p-data);_;(分数:2.00)填空项 1:_二级 C 语言笔试-436 答案解析(总分:98.00,做题时间:90 分钟)一、选择题(总题数:40,分数:66.00)1.
22、下列关于栈的描述正确的是 _。A) 在栈中只能插入元素而不能删除元素B) 在栈中只能删除元素而不能插人元素C) 栈是特殊的线性表,只能在一端插入或删除元素D) 栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素(分数:2.00)A.B.C. D.解析:解析 栈是特殊的线性表,它的一端封闭,在另一端进行插入和删除操作。2.下列关于栈的描述中错误的是( )。A) 栈是先进先出的线性表B) 栈只能顺序存储C) 栈具有记忆作用D) 对栈的插入与删除操作中,不需要改变栈底指针(分数:2.00)A.B. C.D.解析:解析 栈是限定只能在表的一端进行插入和删除操作的线性表,入栈和出栈都是在栈顶进行,
23、它们的操作特点是先进后出,因此具有记忆作用。栈可以采用顺序存储,也可以采用链式存储。3.在设计程序时,应采纳的原则之一是A) 不限制 goto 语句的使用 B) 减少或取消注解行C) 程序越短越好 D) 程序结构应有助于读者理解(分数:2.00)A.B.C.D. 解析:解析 滥用 goto 语句将使程序流程无规律,可读性差,因此 A)不选;注解行有利于对程序的理解,不应减少或取消,B)也不选;程序的长短要依照实际情况而论,而不是越短越好,C)也不选。4.下列叙述中正确的是_。A) 顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的B) 顺序存储结构只针对线性结构,链式存储结构
24、只针对非线性结构C) 顺序存储结构能存储有序表,链式存储结构不能存储有序表D) 链式存储结构比顺序存储结构节省存储空间(分数:2.00)A. B.C.D.解析:知识点 顺序存储结构和链式存储结构评析 顺序存储结构就是用一组地址连续的存储单元依次存储该线性表中的各个元素,链式存储结构中各数据结点的存储序号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致,所以选项A 是正确的。两者都可以存储线性的、有序的逻辑结构,所以选项 B、C 不正确。顺序结构使用的是连续物理空间,链式结构可以使用零散的物理空间存储,链式结构更灵活,不存在谁节约空间的说法,所以选项 D 不正确。5.下列排序方法中
25、,最坏情况下比较次数最少的是( )。A冒泡排序 B简单选择排序C直接插入排序 D堆排序(分数:1.00)A.B.C.D. 解析:解析 本题考查排序的比较次数,冒泡排序、简单选择排序和直接插入排序在最坏的情况下比较次数为 n(n-1)/2。而堆排序法在最坏的情况下需要比较的次数为 nlog2n。6.有下列二叉树,对此二叉树前序遍历的结果为( )。(分数:2.00)A.B. C.D.解析:解析 对二叉树的前序遍历是指:先访问根结点,然后访问左子树,最后访问右子树,并且,在访问左、右子树时,先访问根结点,再依次访问其左、右子树。7.软件是指_。A) 程序 B) 程序和文档C) 算法加数据结构D) 程
26、序、数据与相关文档的完整集合(分数:2.00)A.B.C.D. 解析:解析 计算机软件是包括程序、数据及相关文档的完整集合。8.软件调试的目的是_。(A) 发现错误(B) 改正错误(C) 改善软件的性能(D) 验证软件的正确性(分数:2.00)A.B. C.D.解析:9.关于结构化程序设计原则和方法描述错误的是( )。A) 选用的结构只准许有一个入口和一个出口B) 复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C) 不允许使用 GOTO 语句D) 语言中所没有的控制结构,应该采用前后一致的方法来模拟(分数:1.00)A.B.C. D.解析:解析 限制使用 GOTO 语句是结构化程序设计的原
27、则和方法之一,但不是绝对不允许使用 GOTO 语句。其他 3 项为结构化程序设计的原则。10.“商品”与“顾客”两个实体集之间的联系一般是_。A) 一对一 B) 一对多C) 多对一 D) 多对多(分数:2.00)A.B.C. D.解析:解析 一件“商品”只能被一名“顾客”购买,而一名“顾客”可以买多件“商品”,所以“商品”与“顾客”两个实体集之间的联系是多对一关系。11.有两个关系 R,S 如下:(分数:2.00)A.B. C.D.解析:知识点 专门的关系运算的特点评析 专门的关系运算包括:选择、投影和连接。 (1)选择;从关系中找出满足给定条件的元组的操作称为选择,选择是从行的角度进行的运算
28、,即从水平方向抽取记录。 (2)投影:从关系模式中指定若干个属性组成新的关系。投影是从列的角度进行的运算,相当于对关系进行垂直分解。 (3)连接:连接是关系的横向结合。连接运算将两个关系模式拼接成个更宽的关系模式,生成的新关系中包含满足连接条件的元组。连接过程是通过连接条件来控制的,连接条件中将出现两个表中的公共属性名,或者具有相同语义、可比的属性。选择和投影运算的操作对象只是个表,相当于对个二维表进行切割。连接运算需要两个表操作为操作对象。由图可知关系 R 通过运算得到关系 S,关系 S 与关系 R 相比,记录的条数没有发生变化,属性的个数发生了变化。因此所使用的运算应该是投影。选项 C 插
29、入运算会增加记录的条数,所以选项 B 是正确的。12.下列数据模型中,具有坚实理论基础的是A) 层次模型 B) 网状模型 C) 关系模型 D) 以上 3 个都是(分数:2.00)A.B.C. D.解析:命题目的 本题考查了数据模型。解题要点 关系模型较之格式化模型(网状模型和层次模型)有以下几方面的优点,即数据结构比较简单、具有很高的数据独立性、可以直接处理多对多的联系,以及有坚实的理论基础。考点链接 E-R 模型。13.设有定义:int k=1,m=2; float f=7;则以下选项中错误的表达式是 _。A) k=k=k B) -k+ C) k% int(f) D) k=f=m(分数:2.
30、00)A.B.C. D.解析:解析 A、D 选项是关系运算表达式,在 C 语言中,只要关系运算符两边是合法的表达式就可以了。C 选项中,%只能对整型进行运算,其中对 f 进行了强制类型转换,但是转换的表达式错了,应为:(int)(f)。14.请选出可用作 C 语言用户标识符的是A) void,define,WORD B) a3_3,_123,IFC) FOR,-abc,Case D) 2a,Do,Sizeof(分数:1.00)A.B. C.D.解析:解析 C 语言规定用户标识符由字母、数字和下划线组成,且第一个字符必须是字母或下划线,可见选项 C),D)是错误的;此外,C 语言不允许用户将关键
31、字作为标识符,而选项 A)中的 void 正是 C 语言的关键字。15.阅读以下程序#includestdio.hmain()int case; float printF;printf(“请输入 2 个数:“);scanf(“%d %f“, printf(“%d %f/n“, case, printF);该程序编译时产生错误,其出错原因是A) 定义语句出错,case 是关键字,不能用作用户自定义标识符B) 定义语句出错,printF 不能用作用户自定义标识符C) 定义语句无错,scanf 不能作为输入函数使用D) 定义语句无错,printf 不能输出 case 的值(分数:1.00)A. B.
32、C.D.解析:解析 该程序编译时出现语法错误:Declaration syntax error in function main。其错误原因是 case 是关键字,不能用作用户自定义标识符。16.下列不是合法的 C 语言语句是( )。A) a=5 B) int i;i+;C) ; D) ;(分数:2.00)A. B.C.D.解析:解析 选项 A) 是一个表达式,它后面没有分号结尾(C 语言中规定语句必须以分号结束),所以它不是语句;选项 B) 用一个花括号把几条语句括起来了,这是一个复合语句;选项 C) 中只有一个分号,是一个空语句;选项 D) 是个复合语句,也是一个空语句。17.语句“pri
33、ntf(“a/bhow/are/y/bou/n“);”的输出结果是( )。A) a/bhow/are/y/bou B) a/bhow/are/y/bouC) howareyou D) ahowarey/bou(分数:2.00)A.B.C. D.解析:解析 “/b”格式符表示退格,功能是将它后面的字母把它前面的字母覆盖,导致“/b”格式符前面的字母不能输出;“/”格式符表示输出单引号字符;“/”格式符表示输出反斜线字符。18.若变量 a 是 int 类型,并执行了语句:a=A+1.6;,则正确的叙述是A) a 的值是字符 C B) a 的值是浮点型C) 不允许字符型和浮点型相加 D) a 的值是
34、字符A的 ASCII 值加上 1(分数:1.00)A.B.C.D. 解析:解析 字符A要转换成相应的 ASCII 码值,由于运算结果要赋值给 int 型变量,所以对 1.6 进行取整运算,最后 a 的值应是 66。19.有以下程序段int n,t=1,s=0;scanf(“%d“,n);do s=s+t; t=t-2; while (t!=n);为使此程序段不陷入死循环,从键盘输入的数据应该是_。(A) 任意正奇数(B) 任意负偶数(C) 任意正偶数(D) 任意负奇数(分数:1.00)A.B.C.D. 解析:20.设变量 x 为 float 型且已经赋值,则以下语句中能够将 x 中的数值保留到
35、小数点后面两位,并将第三位四舍五入的是_。A) x=x*100+0.5/100.0 B) x=(x*100+0.5)/100.0C) x=(int)(x*100+0.5)/100.0 D) x=(x/100+0.5)*100.0(分数:1.00)A.B. C.D.解析:解析 选项 A 的功能是将 x 的值放大 100 倍,然后与 0.0005 相加;选项 C 的功能是将 x 中的数值保留到小数点后面两位后强制转换为整型;选项 D 的功能是将 x 与 50 相加;正确答案为选项 B。21.下列程序的输出结果是( )。#includestdio.hmain()int a=0,i;for(i=1;i
36、5;i+)switch(i)case 0:case 3:a+=1;case 1:case2:a+=2;default:a+=3;printf(“%d“,a);A)19 B)18 C)6 D)8(分数:2.00)A. B.C.D.解析:解析 本题考查 switch 语句。当 i=1 时,执行 case 1,因为没有遇到 break 语句,所以依次往下运行, a=a+2=2,a=a+3=5 当 i=2 时,执行 case2,因为没有遇到 break 语句,所以依次往下运行,a=a+2=7, a=a+3=10;当 i=3 时,执行 case3,a=a+1=11,因为没有遇到 break 语句,所以依
37、次往下运行,a=a+2=13, a=a+3=16;当 i=4 时,执行 default,a=a+3=19,结束循环。22.下列循环体的执行次数是( )。#includestdio.hmain()int i,j;for(i=0 j=1;ij+1;i+=1,j-)printf(“%d/n“,j);A) 3 B) 2 C) 1 D) 0(分数:2.00)A.B.C. D.解析:解析 本题考查 for 循环。第一次循环前先判断循环条件,此时 i=0,j=1,ij+1 成立,循环第一次;第二次循环前先判断循环条件,此时 i=1,j=0,(j-是先使用 j 的值再减 1),ij+1 不成立,结束循环。23
38、.在 C 语言程序中,以下说法正确的是( )。 A) 函数的定义和函数的调用均不可以嵌套 B) 函数的定义不可嵌套,但函数的调用可以嵌套 C) 函数的定义可以嵌套,但函数的调用不可以嵌套 D) 函数的定义和函数的调用均可以嵌套(分数:2.00)A.B. C.D.解析:解析本题考查函数调用的基本概念。因为函数的结果是一个未知量,而函数定义时不能使用未知量,所以函数定义不可以嵌套,但是函数调用可以嵌套。24.有以下程序#includestdio.hvoid fun(int*a,int*B)int*c;c=a;a=b;b=c;main()int x=3, y=5,*p=fun(p,q); print
39、f(“%d,%d,“,*p,*q);fun( printf(“ %d,%d/n“,*p,*q);程序运行后的输出结果是_。A) 3,5,5,3 B) 3,5,3,5 C) 5,3,3,5 D) 5,3,5,3(分数:2.00)A.B. C.D.解析:评析 本题主要考查的是函数的实参和形参之间的传递关系,C 语言中实参变量和形参变量之间的数据传递是单向的“值传递”方式。指针变量作函数参数也要遵循这一规则。调用函数不可能改变实参指针变量的值。所以 x 和 y 的地址并没有改变,即 p 和 q 也没有改变,因此,选项 B 是正确的。25.有以下程序main()int a=1,b=3,c=5;int
40、*p1=a, *p2=b, *p=c;*p=*p1*(*p2);printf(“%d/n“, c);执行后的输出结果是_。(A) 1(B) 2(C) 3(D) 4(分数:2.00)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);程序执行后的输出结果是( )。Ax=4 Bx=8 Cx=6 Dx=12(分数:1.00)A.B. C.D.解析:解析 在第 1 次外层 for 循环中,首先 x+得到 x=1。进入到内层 for
41、循环,只有循环 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。27.若有以下说明和语句:int c4 5 ,( * p) 5;p=e;能够正确引用 c 数组元素
42、的是( )。A) p+1 B) *(p+3) C) *(p+1)+3 D) *(p0+2)(分数:1.00)A.B.C.D. 解析:解析 (*p)5中 p 是一个行指针,指向一个包含 5 个元素的一维数组,p 的值是该一维数组的首地址。当用行指针访问二维数组时,行指针每增加 1,表示指针指向二维数组的下一行,此题中的 p+i 将指向数组的第 i 行。选项 A)的意思是指向数组 c 的第 1 行,不是引用 c 数组的元素;选项 B)中 p+3 是指向数组元素的第 3 行,。(P+3)是指第 3 行第 0 个元素的地址;选项 C)可由对选项 A)、选项 B)的解释知,它指的是第 1 行第 3 列元
43、素的地址;选项 D)中 p0 +2 是指第 0 行第 2 列元素的地址,再加个*就表示第0 行第 2 列的元素,即 c02。28.变量 m 的值为 8,m 的地址为 1010,若欲使 p 为指向 m 的指针变量,则下列赋值正确的是( )。A) for(i=0; in-1; i+=2) k=i; for(j=i; jn; j+=2) if(ajak) k=j; t=ai; ai=ak; ak=t; main() int aa10=1, 2, 3, 4, 5, 6, 7, i; fun(aa, 7); for(i=0; i7; i+) printf(“%d, “, aai); printf(“/n
44、“); A) 7,2,5,4,3,6,1 B) 1,6,3,4,5,2,7 C) 7,6,5,4,3,2,1 D) 1,7,3,5,6,2,1(分数:2.00)A. B.C.D.解析:解析 本题考查的是选择排序法。函数 fun 中,变量 i 从 0 开始,每次增加 2,变量 j 从 i 开始,每次也是增加 2,所有循环中只对偶数下标的元素进行了处理。函数 fun 是一个典型的选择排序法,只不过只对偶数下标的元素进行降序排列,奇数下标的元素不变。发现这一特点后,可以直接写出最后的结果7,2,5,4,3,6,1。31.有下列程序:#includestdio.h#includestdlib.hint
45、 fun(int n)int*p;p=(int*)malloc(sizeof(int);*p=n;return*p:main()int a;a=fun(10);printf(“%d/n“,a+fun(10);程序的运行结果是( )。A0 B10 C20 D出错(分数:1.00)A.B.C. D.解析:解析 本题考查指针与函数的调用。a+fun(10)相当于 fun(10)+fun(10),故结果为 20。两次调用fun()函数,返回值指向不同的内存单元,不会存在内存冲突的问题,也就不会出错。32.有下列程序:#includestdio.hvoid fun(int a,int b)int t;t
46、=a;a=b;b=t;main()int c10=1,2,3,4,5,6,7,8,9,0,i;for(i=0;i10;i+=2)fun(ci,ci+1);for(i=0;i10;i+)printf(“%d,“,ci);printf(“/n“);程序的运行结果是( )。A1,2,3,4,5,6,7,8,9,0 B2,1,4,3,6,5,8,7,0,9C0,9,8,7,6,5,4,3,2,1 D0,1,2,3,4,5,6,7,8,9(分数:1.00)A. B.C.D.解析:解析 在程序中实参向形参传递数据的方式是“值传递”,如果实参传递给形参是变量的值,就是进行的数值传递,并不能改变实参的值,所以
47、数组 c10的值不变。33.设 fp 为指向某二进制文件的指针,且已读到此文件末尾,则函数 feof(fp)的返回值为( )。A) EOF B) 非 0 值C) 0 D) NULL(分数:2.00)A.B. C.D.解析:解析 ANSI C 提供的 feof 函数的功能是判断 fp 所指的文件的位置是否已达到文件尾,如果达到文件尾,则 feof 函数的值为 1,否则为 0,表示文件尚未结束。34.已有定义 int(*q)(),指针 q 可以( )。A) 指向函数的入口地址B) 代表函数的返回值C) 表示函数的类型D) 表示函数返回值的类型(分数:2.00)A. B.C.D.解析:解析 本题考查的是指向函数的指针。函数指针的定义方式是:类型标识符(*指针变量名)()。其中,“类型标识符”为函数返回值的类型;“指针”指向函数的入口地址。35.有以下语句,则对 a 数组元素的引用不正确的是(0i9)int a10=0,1,2,3,4,5,6,7,8,9,*p=a;A)ap-a B)*(ai) C)pi D)*(*(a+i)(分数:2.0