1、二级 C语言笔试-477 及答案解析(总分:98.00,做题时间:90 分钟)一、选择题(总题数:40,分数:66.00)1.按照“先进后出”原则组织数据的数据结构是( )。A) 队列 B) 栈C) 双向链表 D) 二叉树(分数:1.00)A.B.C.D.2.在深度为 5的满二叉树中,叶子结点的个数为( )。A) 32 B) 31 C) 16 D) 15(分数:1.00)A.B.C.D.3.下列叙述中正确的是( )。 A) 线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的 B) 线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 C) 线性表的链式存储结构所需要的存储空唰一般
2、要少于顺序存储结构 D) 上述三种说法都不对(分数:2.00)A.B.C.D.4.下列数据结构中,属于非线性的是( )。A) 线性表 B) 队列 C) 树 D) 栈(分数:2.00)A.B.C.D.5.下列工具中为需求分析常用工具的是( )。A) PAD B) PFD C) N-S D) DFD(分数:1.00)A.B.C.D.6.结构化程序设计主要强调的是( )。A) 程序的规模 B) 程序的效率C) 程序设计语言的先进性 D) 程序的易读性(分数:1.00)A.B.C.D.7.下列关于线性链表的描述中正确的是( )。A) 存储空间不一定连续,且各元素的存储顺序是任意的B) 存储空间不一定连
3、续,且前件元素一定存储在后件元素的前面C) 存储空间必须连续,且各前件元素一定存储在后件元素的前面D) 存储空间必须连续,且各元素的存储顺序是任意的(分数:2.00)A.B.C.D.8.关于结构化程序设计原则和方法的描述错误的是( )。A)选用的结构只准许有一个入口和一个出口B)复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C)不允许使用 GOTO语句D)语言中所没有的控制结构,应该采用前后一致的方法来模拟(分数:2.00)A.B.C.D.9.某二叉树中有 n个度为 2的结点,则该二叉树中的叶子结点数为A) n+1 B) n-1C) 2n D) n/2(分数:2.00)A.B.C.D.10
4、.软件开发的结构化生命周期方法将软件生命周期划分成( )。A) 定义、开发、运行维护 B) 设计阶段、编程阶段、测试阶段C) 总体设计、详细设计、编程调试 D) 需求分析、功能定义、系统设计(分数:1.00)A.B.C.D.11.数据库设计中反映用户对数据要求的模式是( )。 A) 内模式 B) 概念模式 C) 外模式 D) 设计模式(分数:2.00)A.B.C.D.12.下列选项中正确的语句组是( )。A) char s8; s=“Beijing“; B) char *s; s=“Beijing“;C) char s8; s=“Beijing“; D) char *s; s=“Beijing
5、“;(分数:1.00)A.B.C.D.13.以下不能定义为用户标识符是_。(A) Main(B) _0(C) _int(D) sizeof(分数:1.00)A.B.C.D.14.下列程序的输出结果是( )。#includestdio.hmain()int a=4;printf(“%d/n“,(a+=a-=a*a);A) -8 B) 14 C) 0 D) -24(分数:2.00)A.B.C.D.15.下列程序的输出结果是( )。mainint x=8,y=8;printf(“%d%d/n“,x-,-y);A) 8 8 B) 7 7 C) 7 8 D) 8 7(分数:2.00)A.B.C.D.16
6、.下列不是合法的 C语言语句是( )。A) a5 B) int i;i+; C) ; D) ;(分数:1.00)A.B.C.D.17.若有表达(W)?(-x):(+y),则其中与 W等价的表达式是_。A) w=1 B) w=0 C) w!=1 D) w!=0(分数:1.00)A.B.C.D.18.下列能正确定义且赋初值的语句是( )。A) int n1=n2=10; B) char c=32;C) float f=f+1.1; D) double x=12.3E2.5;(分数:2.00)A.B.C.D.19.当变量 c的值不为 2、4、6 时,值也为“真”的表达式是( )。A(c=2)|(c=
7、4)|(c=6) B(c=2for(i=0; in/2; i+)t=ai; ai=an-1-1; an-1-i=t;main()int b10=1, 2, 3, 4, 5, 6, 7, 8, 9, 10;int i, s=0;reverse(b, 8);for(i=6; i10; i+)s+=bi;printf(“% d/n“, s);程序运行后的输出结果是_。A) 22 B) 10 C) 34 D) 30(分数:1.00)A.B.C.D.21.以下程序运行后的输出结果是#includestdio.hmain()int i, j, m=1;for(i=1; i3; i+)for(j=3; j0
8、;j-)if(i*j3) break;m*=i*j;printf(“m=%d/n“,m);A) m=6 B) m=2 C) m=4 D) m=5(分数:1.00)A.B.C.D.22.定义如下变量和数组: int i,x33=1,2,3,4,5,6,7,8,9; 则下面语句的输出结果是( )。 for(i=0;i3;i+)printf(“%d“,xi2-i); A) 159 B) 147 C) 357 D) 369(分数:2.00)A.B.C.D.23.设有程序段:int k=12;while(k=1)k=k-1;则下列描述中正确的是( )。A) while循环执行 10次 B) 循环是无限循
9、环C) 循环体语句一次也不执行 D) 循环体语句执行一次(分数:2.00)A.B.C.D.24.下列语句组中,正确的是A) char *s; s=“Olympic“; B) char s7; s=“Olympic“;C) char *s; s=“Olympic“; D) char s7; s=“Olympic“;(分数:2.00)A.B.C.D.25.表达式8-2的值是( )。A) 整数 6 B) 字符 6 C) 表达式不合法 D) 字符 8(分数:2.00)A.B.C.D.26.若各选项中所用变量已正确定义,fun()函数中通过 return语句返回一个函数值,下列选项中错误的程序是( )。
10、A) main()x =fun(2,10);float fun(int a,int b) B) float fun(int a,int b) main()x =fun(i,j);C) float fun(int,int);main()x =fun(2,10);float fun(int a,int b) D) main()float fun(int I,int j);x =fun(i,j);float fun(int a,int B) (分数:2.00)A.B.C.D.27.以下数组定义中错误的是A) int x 3=0; B) int x23=1,2,3,4,5,6;C) int x 3=1
11、,2,3,4,5,6; D) int x23=1,2,3,4,5,6;(分数:2.00)A.B.C.D.28.若语句“t=fun(fun(x,y,a),(a+b,a+c),x+y+z);”对 fun函数的调用正确,则 fun函数的形参个数为( )。A) 3 B) 4 C) 5 D) 6(分数:2.00)A.B.C.D.29.有如下程序段:int *p,a=10,b=1;p= a= *p+b;执行该程序段后,a 的值为( )。A) 12 B) 11 C) 10 D) 编译出错(分数:1.00)A.B.C.D.30.有以下程序:#include stdio.h#define N 20fun(int
12、 a ,int n,int m)int i,j;for(i=m;i :n;i-) ai+1 =ai;main( )int i,aN. = 11,2.3,4,5,6,7,8,9,10;fun( a,2,9)for(i =0;i5;i + ) printf(“% d“ ,ai );程序运行后的输出结果是( )。A) 10234 B) 12344 C) 12334 D) 12234(分数:1.00)A.B.C.D.31.有以下程序#include stdio.h#include string.hmain()char a10=”abcd“;printf(“%d,%d/n“,strlen(a),size
13、of(a);程序运行后的输出结果是A) 7,4 B) 4,10C) 8,8 D) 10,10(分数:2.00)A.B.C.D.32.以下程序的输出结果是_。structHARint x,y;structHAR*p;main()h0.x=1;h0.y=2;h1.x=3;h1.y=4;h0.p=printf(“%d%d/n“,(h0.p-y);A) 12 B) 23 C) 14 D) 32(分数:2.00)A.B.C.D.33.若有说明:int*p1,*p2,n=8,m;下列均是正确赋值语句的选项是( )。A) p1=p2=*p2=p1; D) p1=p2=p1;(分数:2.00)A.B.C.D.
14、34.有以下程序:void ss(char *s,char t)while(*s)if(*s=t)*s=t-a+A;s+;main()char str1100=“abcddfefdbd“,c=d;ss(str1,c);printf(“%s/n“,str1);程序运行后的输出结果是( )。A) ABCDDEFEDBD B) abcDDfefDbDC) abcAAfefAbA D) Abcddfefdbd(分数:2.00)A.B.C.D.35.有以下程序:#includestring.hmain(int argc,char *argv)int i=1,n=0;while(iargc)n=n+str
15、len(argvi);i+)printf(“%d/n“,n);该程序生成的可执行文件名为:proc.exe,若在运行时输入命令行:proc 123 45 67则该程序的输出结果是_。A) 3 B) 5C) 7 D) 11(分数:2.00)A.B.C.D.36.以下语句或语句组中,能正确进行字符串赋值的是_。A) char*sp;*sp=“right!“;B) char s10;s=“right!“;C) char s10;*s=“right!“;D) char*sp=“right!“;(分数:2.00)A.B.C.D.37.若有下列说明,则( )不是对 strcpy库函数的正确的调用。strc
16、py 库函数用于复制一个字符串:char*str1=“abcd“,str210,*str3=“hijklmn“,*str42,*str5=“aaaa“A) strcpy(str2,str1) B) strcpy(str3,str1)C) strcpy(str4,str1) D) strcpy(str5,str1)(分数:2.00)A.B.C.D.38.有以下程序#include main()FILE *fp; int a10=1,2,3,i,n;fp=fopen(“dl.dat“,“w“);for(i=0;i3;i+) fprintf(fp,“%d“,ai);fprintf(fp,“/n“);
17、fclose(fp);fp=fopen(“dl.dat“,“r“);fscanf(fp,“%d“,n);fclose(fp);printf(“%d/n“,n);程序的运行结果是_。(A) 12300(B) 123(C) 1(D) 321(分数:2.00)A.B.C.D.39.下列描述中不正确的是( )。A) 字符型数组中可以存放字符串B) 可以对字符型数组进行整体输入、输出C) 可以对整型数组进行整体输入、输出D) 不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值(分数:2.00)A.B.C.D.40.若有以下结构体,则正确的定义或引用的是( )。struct Testint x;
18、int y;vl;A) Test.x=10; B) Test v2;v2.x=10;C) struet v2;v2.x=10; D) struct Test v2=10;(分数:2.00)A.B.C.D.二、填空题(总题数:15,分数:32.00)41.软件定义时期主要包括 1 和需求分析两个阶段。(分数:2.00)填空项 1:_42.在树形结构中,没有前件的结点是_。(分数:2.00)填空项 1:_43.在面向对象方法中, 1 描述的是具有相似属性与操作的一组对象。(分数:2.00)填空项 1:_44.测试用例包括输入值集和 1 值集。(分数:2.00)填空项 1:_45.按“先进后出”原则
19、组织数据的数据结构是 1。(分数:2.00)填空项 1:_46.下列程序的输出结果是_。main()int i;for(i=1;i+1;i+)if(i4)printf(“%d/n“,i);break;printf(“%d/n“,i+);(分数:2.00)填空项 1:_47.下列程序段是从键盘输入的字符中统计小写字母的个数,用换行符结束循环。请填空。int n=0,c;c=getchar();while(c!=/n)if(_)n+;(分数:2.00)填空项 1:_48.在计算机中,字符的比较是对它们的 1 进行比较。(分数:2.00)填空项 1:_49.以下程序的功能是:求出数组 x中各相邻两个
20、元素的和依次存放到 a数组中,然后输出。请填空。main( )int x10,a9,i;for(i=0;i10;i+) scanf(“%d“,xi);for( 11 ;i10;i+)ai-1=xi+ 12 ;for(i=0;i9;i+) printf(“%d“,ai);printf(“);(分数:4.00)填空项 1:_50.若有定义 double a5;,则 a数组元素下标的上限为 1。(分数:2.00)填空项 1:_51.若有下列定义:int a=1,2,3,4,5,6,7,8,9,10,*p=a;,则值为 3的表达式为: 1。(分数:2.00)填空项 1:_52.以下程序运行后的输出结果
21、是_。struct NODEint hum;struct NODE *next;main()structNODE s3=1,/0,2,/0,3,/0, *p, *q, *r;int sum=0;s0next=s+1;s1.next=s+2;s2.next=s;p=S;q=p-next;r=q-next;sum+=q=next-num;sum+=r-next-next-num;printf(“%d/n“,sum);(分数:2.00)填空项 1:_53.下列程序的运行结果是_。main()int i,a10;a0=a1=1;for(i=2;i5;i+)ai=ai-2+ai-1;for(i=0;i5
22、;i+)if(i%2=0) printf(“/n“);printf(“%d“,ai);(分数:2.00)填空项 1:_54.以下程序运行后的输出结果是_。struct NODEint k;struct NODE*link;main()struct NODE m5,*p=m,*q=m+4;int i=0;while(p!=q)p-k=+i;p+;q-k=i+;q-;q-k=i;for(i=0;i5;i+)printf(“%dv,mi.k);printf(“/n“);(分数:2.00)填空项 1:_55.下列程序的输出结果是_。#includestdio.hint fun(int x)int p;
23、if(x=0x=1) return 3;elsep=x-fun(x-2) ;return p;void main()printf(“/n%d“,fun(11);(分数:2.00)填空项 1:_二级 C语言笔试-477 答案解析(总分:98.00,做题时间:90 分钟)一、选择题(总题数:40,分数:66.00)1.按照“先进后出”原则组织数据的数据结构是( )。A) 队列 B) 栈C) 双向链表 D) 二叉树(分数:1.00)A.B. C.D.解析:解析栈是一种特殊的线性表,其插入和删除运算都只在线性表的一端进行,而另端是封闭的。进行插入、删除的端称为栈顶,封闭的一端称为栈底。栈顶元素是最后被
24、插入的元素,也是最后被删除的,是按先进后出的原则组织数据的。2.在深度为 5的满二叉树中,叶子结点的个数为( )。A) 32 B) 31 C) 16 D) 15(分数:1.00)A.B.C. D.解析:解析 所谓满二叉树是指这样的一种二叉树:除最后一层外,每一层上的所有结点都有两个子结点。这就是说,在满二叉树中,每层上的结点数都达到最大值,即在满二叉树的第 k层上有 2k-1个结点,且深度为 m的满二叉树有 2m-1个结点。由此可知,本题中叶子结点的个数为 25-1=16。3.下列叙述中正确的是( )。 A) 线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的 B) 线性表的链式存储结
25、构所需要的存储空间一般要多于顺序存储结构 C) 线性表的链式存储结构所需要的存储空唰一般要少于顺序存储结构 D) 上述三种说法都不对(分数:2.00)A.B. C.D.解析:解析 线性表的存储分为顺序存储和链式存储。在顺序存储中,所有元素所占的存储空间是连续的,各数据元素在存储空间中是按逻辑顺序依次存放的。所以每个元素只存储其值就可以了,而在链式存储的方式中,将存储空间的每一个存储结点分为两部分,一部分用于存储数据元素的值,称为数据域;另一部分用于存储下一个元素的存储序号,称为指针域。所以线性表的链式存储方式比顺序存储方式的存储空间要大一些。4.下列数据结构中,属于非线性的是( )。A) 线性
26、表 B) 队列 C) 树 D) 栈(分数:2.00)A.B.C. D.解析:解析 线性结构,是指数据元素只有一个直接前件元素和直接后件元素。线性表是线性结构。栈和队列是指对插入和删除操作有特殊要求的线性表,树是非线性结构。5.下列工具中为需求分析常用工具的是( )。A) PAD B) PFD C) N-S D) DFD(分数:1.00)A.B.C.D. 解析:解析 需求分析常用的工具有数据流图(DFD) 、数据字典(DD) 、判定树和判定表。PAD(问题分析图)、PFD(程序流程图)、 N-S(盒式图)都是详细设计的常用工具,不是需求分析的工具。6.结构化程序设计主要强调的是( )。A) 程序
27、的规模 B) 程序的效率C) 程序设计语言的先进性 D) 程序的易读性(分数:1.00)A.B.C.D. 解析:解析程序不光是编写完就结束了,为了测试和维护程序,往往还有其他人阅读和跟踪程序,因此程序设计的风格应该强调简单和清晰,即程序的易读性,“清晰第一,效率第二”。7.下列关于线性链表的描述中正确的是( )。A) 存储空间不一定连续,且各元素的存储顺序是任意的B) 存储空间不一定连续,且前件元素一定存储在后件元素的前面C) 存储空间必须连续,且各前件元素一定存储在后件元素的前面D) 存储空间必须连续,且各元素的存储顺序是任意的(分数:2.00)A. B.C.D.解析:解析 线性表的链式存储
28、结构中的结点空间是动态生成的,它们在内存中的地址可能是连续的,也可能是不连续的。8.关于结构化程序设计原则和方法的描述错误的是( )。A)选用的结构只准许有一个入口和一个出口B)复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C)不允许使用 GOTO语句D)语言中所没有的控制结构,应该采用前后一致的方法来模拟(分数:2.00)A.B.C. D.解析:解析 限制使用 GOTO语句是结构化程序设计的原则和方法之一,但不是绝对不允许使用 GOTO语句。其他三项为结构化程序设计的原则。9.某二叉树中有 n个度为 2的结点,则该二叉树中的叶子结点数为A) n+1 B) n-1C) 2n D) n/2(
29、分数:2.00)A. B.C.D.解析:解析 对于任何一棵二叉树 T,如果其终端结点(叶子结点)数为 n1,度为 2的结点数为 n2,则n1=n2+1。所以该二叉树的叶子结点数等于 n+1。10.软件开发的结构化生命周期方法将软件生命周期划分成( )。A) 定义、开发、运行维护 B) 设计阶段、编程阶段、测试阶段C) 总体设计、详细设计、编程调试 D) 需求分析、功能定义、系统设计(分数:1.00)A. B.C.D.解析:解析 通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期,它可以分为软件定义、软件开发及软件运行维护三个阶段。11.数据库设计中反映用户对数据要求的模
30、式是( )。 A) 内模式 B) 概念模式 C) 外模式 D) 设计模式(分数:2.00)A.B.C. D.解析:解析 概念模式,是由数据库设计者综合所有用户的数据,按照统一的观点构造的全局逻辑结构,是对数据库中全部数据的逻辑结构和特征的总体描述,是所有用户的公共数据视图(全局视图)。它是由数据库管理系统提供的数据模式描述语言(Data Description Language,DDL)来描述、定义的,体现、反映了数据库系统的整体观。 外模式对应于用户级,它是某个或某几个用户所看到的数据库的数据视图,是与某一应用有关的数据的逻辑表示。外模式是从模式导出的一个子集,也称为子模式或用户模式,它是用
31、户的数据视图,也就是用户所见到的数据模式,它反映了用户对数据的要求。包含模式中允许特定用户使用的那部分数据,用户可以通过外模式描述语言来描述、定义对应于用户的数据记录(外模式),也可以利用数据操纵语言(Data Manipulation Language,DML)对这些数据记录进行描述。 内模式,对应于物理级,它是数据库中全体数据的内部表示或底层描述,是数据库最低一级的逻辑描述,它描述了数据在存储介质上的存储方式和物理结构,对应着实际存储在外存储介质上的数据库。内模式由内模式描述语言来描述、定义,它是数据库的存储观。12.下列选项中正确的语句组是( )。A) char s8; s=“Beiji
32、ng“; B) char *s; s=“Beijing“;C) char s8; s=“Beijing“; D) char *s; s=“Beijing“;(分数:1.00)A.B.C.D. 解析:解析 本题考查字符串的定义和赋初值。选项 A)、C)错误,字符数组的赋值可以逐个字符赋给数组中各元素,也可以定义字符数组时整个字符串赋初值。选项 B)、D)是给字符指针赋值,正确的格式是char *s;s=“Beijing“;选项 B)不对。13.以下不能定义为用户标识符是_。(A) Main(B) _0(C) _int(D) sizeof(分数:1.00)A.B.C.D. 解析:14.下列程序的输
33、出结果是( )。#includestdio.hmain()int a=4;printf(“%d/n“,(a+=a-=a*a);A) -8 B) 14 C) 0 D) -24(分数:2.00)A.B.C.D. 解析:解析 表达式 a+=a-=a*a看起来复杂,其实将它分成两个表达式来计算就简单了:第一个表达式 (a-=a*a)=(a=a-a*a=-12);第二个表达式(a+=a-=a*a)=(a=a+a=-24)。15.下列程序的输出结果是( )。mainint x=8,y=8;printf(“%d%d/n“,x-,-y);A) 8 8 B) 7 7 C) 7 8 D) 8 7(分数:2.00)
34、A.B.C.D. 解析:解析 本题考查自减(-)运算符的使用。“x-”是先引用 x的值然后将 x的值减 1,所以输出的x值为 8;“-y”是先将 y的值减 1然后再引用 y的值,所以输出的 y值为 7。16.下列不是合法的 C语言语句是( )。A) a5 B) int i;i+; C) ; D) ;(分数:1.00)A. B.C.D.解析:解析 选项 A)是一个表达式,它后面没有分号结尾(C 语言中规定语句必须以分号结束),所以它不是语句;选项 B)用一个花括号把几条语句括起来了,这是一个复合语句;选项 C)中只有一个分号,是一个空语句;选项 D)是个复合语句,也是一个空语句。17.若有表达(
35、W)?(-x):(+y),则其中与 W等价的表达式是_。A) w=1 B) w=0 C) w!=1 D) w!=0(分数:1.00)A.B.C.D. 解析:评析 条件表达式的一般形式为:表达式 1?表达式 2:表达式 3,其执行顺序:先求解表达式 1,若非 0(真)则求解表达式 2,此时表达式 2的值就作为整个条件表达式的值,若表达式 1的值为 0(假),则求解表达式 3,此时表达式 3的值就作为整个条件表达式的值。本题中相当于先判断 w的值是否为非0,所以与 w等价的表达式是 w!=0。18.下列能正确定义且赋初值的语句是( )。A) int n1=n2=10; B) char c=32;C
36、) float f=f+1.1; D) double x=12.3E2.5;(分数:2.00)A.B. C.D.解析:解析 C 语言规定,可以在定义变量的同时给变量赋初值,称为变量初始化。在选项 A)中在给 n1和 n2进行赋初值,但变量 02没有定义;在选项 C)中定义变量 f时,不能在赋值表达式的右边出现变量f自身,所以选项 C)错误:在选项 D)用指数表达式的常量中,字母 E后面的数应该为整数,而不应该为小数形式。因此,选项 B)正确。19.当变量 c的值不为 2、4、6 时,值也为“真”的表达式是( )。A(c=2)|(c=4)|(c=6) B(c=2for(i=0; in/2; i+
37、)t=ai; ai=an-1-1; an-1-i=t;main()int b10=1, 2, 3, 4, 5, 6, 7, 8, 9, 10;int i, s=0;reverse(b, 8);for(i=6; i10; i+)s+=bi;printf(“% d/n“, s);程序运行后的输出结果是_。A) 22 B) 10 C) 34 D) 30(分数:1.00)A. B.C.D.解析:解析 主函数调用 reverse时。实参为 b和 8,即 reverse函数的功能是将数组 b中的前 8个元素逆置,其余元素不变。因此函数调用结束后数组 b的内容为:8、7,6、5、4、3、2、1、9、10。m
38、ain函数中 for循环语句的功能是求 b6元素到 b9元素的和,即 s=b6+b7+b8+b9=2+1+9+10=22,因此 printf语句的输出结果是 22。21.以下程序运行后的输出结果是#includestdio.hmain()int i, j, m=1;for(i=1; i3; i+)for(j=3; j0;j-)if(i*j3) break;m*=i*j;printf(“m=%d/n“,m);A) m=6 B) m=2 C) m=4 D) m=5(分数:1.00)A. B.C.D.解析:解析 程序中,当循环变量 i=2,j=3 时,ij3 成立,结束 j循环。只有当 i为 1,j
39、 分别为1,2,3 时,才参与了 m*=i*j计算。因此,m=111213=6。22.定义如下变量和数组: int i,x33=1,2,3,4,5,6,7,8,9; 则下面语句的输出结果是( )。 for(i=0;i3;i+)printf(“%d“,xi2-i); A) 159 B) 147 C) 357 D) 369(分数:2.00)A.B.C. D.解析:解析 本题主要考查二维数组的使用。题中利用 for循环来输出 x数组中的指定元素:当 j=0时,输出 x02=3;当 i=1时,输出 x115;当 i=2时。输出 x20=7。23.设有程序段:int k=12;while(k=1)k=k
40、-1;则下列描述中正确的是( )。A) while循环执行 10次 B) 循环是无限循环C) 循环体语句一次也不执行 D) 循环体语句执行一次(分数:2.00)A.B.C. D.解析:解析 本题考查 while循环。while 循环的控制表达式 k=1是个赋值表达式而不是逻辑表达式,所以循环体一次也不执行。24.下列语句组中,正确的是A) char *s; s=“Olympic“; B) char s7; s=“Olympic“;C) char *s; s=“Olympic“; D) char s7; s=“Olympic“;(分数:2.00)A. B.C.D.解析:解析 数组名代表数组的首地
41、址,是一个地址常量,不能对其赋值,所以选项 B、D 错误。只有在初始化时才可以用花括号,所以选项 C错误。25.表达式8-2的值是( )。A) 整数 6 B) 字符 6 C) 表达式不合法 D) 字符 8(分数:2.00)A. B.C.D.解析:解析 在 C语言中,虽然字符都是变为其对应的 ASCII 码值来参与算术运算的,但字符间的相对位置关系还是不变的,字符 8和字符 2的 ASCII码值相差仍是 6。26.若各选项中所用变量已正确定义,fun()函数中通过 return语句返回一个函数值,下列选项中错误的程序是( )。A) main()x =fun(2,10);float fun(int
42、 a,int b) B) float fun(int a,int b) main()x =fun(i,j);C) float fun(int,int);main()x =fun(2,10);float fun(int a,int b) D) main()float fun(int I,int j);x =fun(i,j);float fun(int a,int B) (分数:2.00)A. B.C.D.解析:解析 C 语言规定,函数必须先定义,后调用(函数的返回值类型为 int或 char时除外)。在选项A)中,调用的子函数在调用后面定义,所以不正确。在选项 B)、C)中,被调用函数在主调函数
43、之前定义,再在主函数中调用,所以是正确的:在选项 D)中,在主调函数中先对于函数 float fun(int i,int j)进行了定义,然后进行调用。27.以下数组定义中错误的是A) int x 3=0; B) int x23=1,2,3,4,5,6;C) int x 3=1,2,3,4,5,6; D) int x23=1,2,3,4,5,6;(分数:2.00)A.B. C.D.解析:解析 二维数组的初始化有以下几种形式:分行进行初始化;不分行进行初始化;部分数组元素进行初始化;省略第一维的定义,不省略第二维的定义。选项 B) 等号右边分了 3行,大于等号左边数组的行数 2。28.若语句“t
44、=fun(fun(x,y,a),(a+b,a+c),x+y+z);”对 fun函数的调用正确,则 fun函数的形参个数为( )。A) 3 B) 4 C) 5 D) 6(分数:2.00)A. B.C.D.解析:解析 本题考查函数调用时的参数个数。在函数调用时,实参必须和形参的个数、类型一一对应。但函数的计算结果只有一个值,因而 fun函数的参数个数为 3。29.有如下程序段:int *p,a=10,b=1;p= a= *p+b;执行该程序段后,a 的值为( )。A) 12 B) 11 C) 10 D) 编译出错(分数:1.00)A.B. C.D.解析:解析 p=a=*p+b表达式的含义是指针变量
45、 p所指内存的值 10与 b的和赋给 a。30.有以下程序:#include stdio.h#define N 20fun(int a ,int n,int m)int i,j;for(i=m;i :n;i-) ai+1 =ai;main( )int i,aN. = 11,2.3,4,5,6,7,8,9,10;fun( a,2,9)for(i =0;i5;i + ) printf(“% d“ ,ai );程序运行后的输出结果是( )。A) 10234 B) 12344 C) 12334 D) 12234(分数:1.00)A.B.C. D.解析:解析 本题函数 fun的作用是将指定的数组元素(下
46、标从 nm)向后移一位。调用函数 fun(a,2,9)将 a2到 a9的各元素依次向后移一位,最后 a数组中各元素的值分别为 1,2,3, 3,4,5,6,7,8,9,10,程序输出数组的前 5个元素:12334。31.有以下程序#include stdio.h#include string.hmain()char a10=”abcd“;printf(“%d,%d/n“,strlen(a),sizeof(a);程序运行后的输出结果是A) 7,4 B) 4,10C) 8,8 D) 10,10(分数:2.00)A.B. C.D.解析:解析 strlen()用来返回字符串的长度,而 si- zeof
47、()返回的是一个对象或者类型所占的内存字节数,即数组所占的内存。32.以下程序的输出结果是_。structHARint x,y;structHAR*p;main()h0.x=1;h0.y=2;h1.x=3;h1.y=4;h0.p=printf(“%d%d/n“,(h0.p-y);A) 12 B) 23 C) 14 D) 32(分数:2.00)A.B.C.D. 解析:评析 本题中是个含有两个结点的循环链表。C 语言中结构体的定义为:srtyct 结构体类型名成员项表;33.若有说明:int*p1,*p2,n=8,m;下列均是正确赋值语句的选项是( )。A) p1=p2=*p2=p1; D) p1=p