1、二级 C语言笔试 372及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:70.00)1.下列关于线性链表的描述中正确的是( )。(分数:2.00)A.存储空间不一定连续,且各元素的存储顺序是任意的B.存储空间不一定连续,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且各前件元素一定存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的2.下列数据结构中,属于非线性的是( )。(分数:2.00)A.线性表B.队列C.树D.栈3.下列程序中函数 reverse()的功能是将 a所指数组中的内容进行逆置。 #includestdio
2、.h void reverse(int a,iht n) int i,t; for(i=0;in/2;i+) t=ai;ai=an-1-i;an-1-i=t; main() int b10=1,2,3,4,5,6,7,8,9,10;int i,s=0; reverse(b,10) ; for(i=0;i3;i+)s+=bi;printf(“%d/n“,s); 程序运行后的输出结果是( )。(分数:2.00)A.27B.6C.25D.304.对于长度为 n的线性表,在最坏情况下,下列各种排序法所对应的比较次数中正确的是( )。(分数:2.00)A.冒泡排序为 n/2B.冒泡排序为 nC.快速排序
3、为 nD.快速排序为 n(n-1)/25.结构化程序设计的 3种基本结构是( )。(分数:2.00)A.过程、子程序和分程序B.顺序、选择和重复C.递归、堆栈和队列D.调用、返回和转移6.两次运行下列的程序,如果从键盘上分别输入 3和 1,则输出结果是( )。 main() int x; scanf(“%d“, if(x+2) printf(“%d“,x); elseprintf(“%d/n“,x-); (分数:2.00)A.4和 2B.4和 1C.4和 0D.3和 17.下列数据结构中,能用二分法进行查找的是( )。(分数:2.00)A.顺序存储的有序线性表B.结性链表C.二叉链表D.有序线
4、性链表8.执行下列程序后,输出的结果是( )。 #includestdio.h #define S(X)X*X void main() iht a=9,k=3,m=2; a/=S(k+m)/S(k+m); printf(“%d“,A) ; (分数:2.00)A.1B.4C.9D.09.下列叙述中错误的是( )。(分数:2.00)A.线性表是由 n个元素组成的一个有限序列B.线性表是一种线性结构C.线性表的所有结点有且仅有一个前件和后件D.线性表可以是空表10.某二叉树共有 60个叶子结点与 50个度为 1的结点,则该二叉树中的总结点数为( )。(分数:2.00)A.148B.169C.182D
5、.19812.设有程序段: int k=12; while(k=1) k=k-1; 则下列描述中正确的是( )。(分数:2.00)A.while循环执行 10次B.循环是无限循环C.循环体语句一次也不执行D.循环体语句执行一次13.下列程序的输出结果是( )。 #includestdio.h void main() int b6-2,4,6,8,10,12; int*p=b,*q= printf(“%d“,*(p+); printf(“%d,“,*q); (分数:2.00)A.4,4B.2,2C.4,5D.2,414.在执行完下列的 C语句段之后,则 B的值是( )。 char a=A; in
6、t b; B=(34(分数:2.00)A.0B.1C.TRUED.FALSE15.下列程序的输出结果是( )。 int f1(int x,inty)return xy?x:y; int f2(int x,inty)return xy?y:x; main() int a=4,b=3,c=5,d=2,e,f,g; e=f2(f1(a,B) ,f1(c,D) ); f=f1(f2(a,B) ,f2(c,D) );g=a+b+C+d-e-f; phntf(“%d,%d,%d/n“,e,f,g); (分数:2.00)A.4,3,7B.3,4,7C.5,2,7D.2,5,716.语句 int(*ptr)(
7、)的含义是( )。(分数:2.00)A.ptr是一个返回值是血的函数B.ptr是指向 int型数据的指针变量C.ptr是指向函数的指针,该函数返回一个血型数据D.ptr是一个函数名,该函数的返回值是指向 int型数据的指针17.若有下列说明,则( )不是对 strcpy库函数的正确的调用。strcpy 库函数用于复制一个字符串:char*str1=“abcdt“,str210,*str3=“hijklmn“,*str42,*str5=“aaaa“;(分数:2.00)A.strcpy(str2,str1)B.strcpy(str3,str1)C.strcpy(str4,str1)D.strcpy
8、(str5,str1)18.下列能正确定义一维数组的选项是( )。(分数:2.00)A.int a5=0,1,2,3,4,5;B.char a=0,1,2,3,4,5;C.char a=A,B,C;D.int a5=“0123“;20.下列叙述错误的是( )。(分数:2.00)A.在 C语言中的保留字必须小写B.变量的存储类型决定了变量的存储位置及其生存期C.宏定义以#define 开头,行末必须加分号D.在 C语言中的注释行可以出现在程序的任何位置21.若有下列定义(设 int类型变量占 2个字节): int i=8; 则下列语句: printf(“i=%08d“,i); 输出的结果是( )
9、。(分数:2.00)A.i=8,B.i=00000008,C.i=08,D.822.已知 int a=2,b=3;则执行表达式 a=ab 后,变量 a的值为( )。(分数:2.00)A.0B.1C.2D.323.已知有结构体: struct sk iht a; float b; )data,*p; 若有 p=C.p-dataD.data24.有下列程序段: int n,t=-1,S=0; scanf(“%d“, dos=s+t;t=t-2;while(t!=n); 为使此程序段不陷入死循环,从键盘输入的数据应该是( )。(分数:2.00)A.任意正奇数B.任意负偶数C.任意正偶数D.任意负奇数
10、25.简单的交换排序方法是( )。(分数:2.00)A.快速排序B.选择排序C.堆排序D.冒泡排序26.下列程序的输出结果是( )。 #includestdio.h main() int a23=1,2,3,4,5,6,(*p)3,i; p=a; for(i=0;i3;i+) if(i2) p1i=p1i-1; else p1i=1; printf(“%d/n“,a01+a11+a12); (分数:2.00)A.8B.7C.12D.927.若有运算符:、=、%、sizeof,则它们按优先级(由高至低)的正确排列顺序为( )。(分数:2.00)A.%、sizeof、=B.sizeof、%、=、C
11、.sizeof、%、=D.sizeof、%、=28.设有下列说明语句: strcut str int x;float y;char z;st; 则下列的叙述中不正确的是( )。(分数:2.00)A.struct是结构体类型的关键字B.st是结构体类型名C.x、y、z 都是结构体成员名D.struct str是结构体类型名29.字符串“/“ABCDEF/“/“的长度是( )。(分数:2.00)A.15B.10C.7D.830.设 x=015,则 X=X017的值是( )。(分数:2.00)A.00001111B.11111101C.00000010D.1100000031.按照“先进先出”组织数
12、据的数据结构是( )。(分数:1.00)A.队列B.栈C.双向链表D.二叉树32.下列选项中,不是一个算法的基本特征的是( )。(分数:1.00)A.完整性B.可行性C.有穷性D.拥有足够的情报33.下列程序的输出结果是( )。 #inCludestdio.h main() charch25=“1234“,“5678“,*p2; int i,j,s=0; for(i=0;i2;i+) pi=chi; for(i=0;i2;i+) for(j=0;pij/0;j+=2) s=pij-0; printf(“%d“,s); (分数:1.00)A.6357B.6135C.1357D.69135734.
13、下列程序段的输出结果为( )。 #includestdio.h main() static char a=“language“; char*p; p=a; for(p=a;pa+8;p+=2) putchar(*p); (分数:1.00)A.languageB.lnugC.有语法错误D.lang35.若有说明语句:doubleop,a;,则能通过 scanf语句正确给输入项读入数据的程序段是( )。(分数:1.00)A.*p=scanf(“%1f“,;B.*p=scanf(“%f“,;C.p=scanf(“%1f“,*;D.p=scanf(“%1f“,;36.运行下列程序时,若输入的数据为“1
14、,2,3”,则输出结果是( )。 main() float a,b,C,t; scanf(“%f,%f,%of“, if(aB) t=a;a=b;b=t; if(aC) t=a;a=c;c=t; if(bC) t=b;b=c;c=t; printf(“%f/n%f/n%f/n“,a,b,C) ; (分数:1.00)A.1.00 2.00 3.00B.1.00 3.00 2.00C.1 3 2D.3.000000 2.000000 1.00000037.有下列函数定义: fun(float h) printf(“%f,%f/n”,h,h*h); 该函数的类型是( )。(分数:1.00)A.int
15、类型B.float类型C.void类型D.函数无类型说明,定义有错38.执行下列程序中的输出语句后,a 的值是( )。 main() int a; printf(“%d/n“,(a=2*3,a*5,a+7) ); (分数:1.00)A.17B.37C.6D.1339.若 fp是指向某文件的指针,且尚未读到文件末尾,则函数 feof(fp)的返回值是( )。(分数:1.00)A.B.C.D.40.假定 w、x、y、m 均为血型变量,则执行下列的语句后,m 的值是( )。 w=6,x=4,y=3; m=(wx)?w:x; m=(my)?m:y;(分数:1.00)A.3B.4C.5D.6二、B填空题
16、/B(总题数:15,分数:30.00)41.软件生命周期分为软件定义期、软件开发期和软件维护期,详细设计属于 1 中的一个阶段。(分数:2.00)填空项 1:_42.结构化分析方法是面向 1 进行分析的方法。(分数:2.00)填空项 1:_43.常用的软件结构设计工具是结构图(SC) ,也称程序结构图。其中,用矩形表示 1,用带空心圆的箭头表示传递的是数据。(分数:2.00)填空项 1:_44.在进行模块测试时,要为每个被测试的模块另外设计两类模块:驱动模块和承接模块,其中 _的作用是将测试数据传送给被测试的模块,并显示被测试模块所产生的结果。(分数:2.00)填空项 1:_45.诊断和改正程
17、序中错误的工作通常称为 1。(分数:2.00)填空项 1:_46.x和 y都是 double型变量,x 的初值为 4.0,y的初值为 2.0,则表达式 pow(y,fabs(x)的值为 1。(分数:2.00)填空项 1:_47.若 x为血类型,请写出与!x 等价的 C语言表达式 1。(分数:2.00)填空项 1:_48.下列程序的运行结果是_。 #includestdio.h main() int a,b,C; a=3;b=4;c=5; if(aB) if(aC) printf(“%d“,A) ; elseprintf(“%d“,B) ; printf(“%d/n“,C) ; (分数:2.00
18、)填空项 1:_49.下列语句能循环_次。 ints=12; while(s); -s;(分数:2.00)填空项 1:_50.下列程序的运行结果是_。 main() int a=1,b=10; do b-=a;a+;while(b-0) ; printf(“%d,%d/n“,a,B) ; (分数:2.00)填空项 1:_51.若定义#define PI 3.14159,则执行完下列程序后输出结果是_。 #define PI 3.14159;printf(“PI=%P“,PI);(分数:2.00)填空项 1:_52.下列程序的输出结果是_。 main() int a=31,27,20,12,6,
19、1,*p=a; p+; printf(“%d/n“,*(p+2); (分数:2.00)填空项 1:_53.若有下列定义和语句: char*s1=“12345“,*s2=“1234“; printf(“%d/n“,strlen(strcpy(s1,s2); 则输出结果为_。(分数:2.00)填空项 1:_54.下列程序的运行结果是_。 main() int i,a10; a0=a1=1; for(i=2;i5;i+) ai=ai-2+ai-1; for(i=0;i5;i+) if(i%2=0) printf(“/n“); printf(“%d“,ai); (分数:2.00)填空项 1:_55.下
20、列程序的输出结果是_。 #includestdio.h int fun(int x) int p; if(x=0x=1) return 3; else p=x-fun(x-2) ; return p; void main() printf(“/n%d“,fun(11);(分数:2.00)填空项 1:_二级 C语言笔试 372答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:70.00)1.下列关于线性链表的描述中正确的是( )。(分数:2.00)A.存储空间不一定连续,且各元素的存储顺序是任意的 B.存储空间不一定连续,且前件元素一定存储在后件元素的前面
21、C.存储空间必须连续,且各前件元素一定存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的解析:解析 线性表的链式存储结构中的结点空间是动态生成的,它们在内存中的地址可能是连续的,也可能是不连续的。2.下列数据结构中,属于非线性的是( )。(分数:2.00)A.线性表B.队列C.树 D.栈解析:解析 线性结构,是指数据元素只有一个直接前件元素和直接后件元素。线性表是线性结构。栈和队列是指对插入和删除操作有特殊要求的线性表,树是非线性结构。3.下列程序中函数 reverse()的功能是将 a所指数组中的内容进行逆置。 #includestdio.h void reverse(in
22、t a,iht n) int i,t; for(i=0;in/2;i+) t=ai;ai=an-1-i;an-1-i=t; main() int b10=1,2,3,4,5,6,7,8,9,10;int i,s=0; reverse(b,10) ; for(i=0;i3;i+)s+=bi;printf(“%d/n“,s); 程序运行后的输出结果是( )。(分数:2.00)A.27 B.6C.25D.30解析:解析 本题考查函数调用时的参数传递。函数 reverse 将数组 b进行了逆置,此时的 b10=10,9,8,7,6,5,4,3,2,1,后面 for语句的功能是将 b中的前 3个数累加,
23、将结果放在 s中,最后将 s输出,结果 s=10+9+8=27。4.对于长度为 n的线性表,在最坏情况下,下列各种排序法所对应的比较次数中正确的是( )。(分数:2.00)A.冒泡排序为 n/2B.冒泡排序为 nC.快速排序为 nD.快速排序为 n(n-1)/2 解析:解析 在最坏情况下,冒泡排序和快速排序的比较次数都是 n(n-1)/2。所谓冒泡排序,就是将相邻的两个数据相比较,如前面的数据大于后面的,则位置互换。这样不停地比较、互换,其实就是把大的数往后排,小的数往前排(就像冒泡一样冒出来了)。5.结构化程序设计的 3种基本结构是( )。(分数:2.00)A.过程、子程序和分程序B.顺序、
24、选择和重复 C.递归、堆栈和队列D.调用、返回和转移解析:解析 程序的 3种基本控制结构包括顺序、选择和重复(循环),这 3种结构就足以表达出各种其他形式的结构。6.两次运行下列的程序,如果从键盘上分别输入 3和 1,则输出结果是( )。 main() int x; scanf(“%d“, if(x+2) printf(“%d“,x); elseprintf(“%d/n“,x-); (分数:2.00)A.4和 2 B.4和 1C.4和 0D.3和 1解析:解析 本题考查 ifelse语句。首先 scanf函数通过键盘读入 x的值。当 x=3时,第一个 if语句,先判断条件,取 x的值 3和 2
25、比较,然后将 x的值加 1,发现条件成立,执行下列的 printf语句,输出x的值 4。当 x=1时,第一个汀语句,先判断条件,取 x的值 1和 2比较,然后将 x的值加 1(x的值变为2),发现条件不成立,执行下列的 else语句,先输出 x的值 2,再将 x的值减 1。7.下列数据结构中,能用二分法进行查找的是( )。(分数:2.00)A.顺序存储的有序线性表 B.结性链表C.二叉链表D.有序线性链表解析:解析 二分法查找只适用于顺序存储的有序线性表,对于顺序存储的非有序线性表和线性链表,都只能采用顺序查找。8.执行下列程序后,输出的结果是( )。 #includestdio.h #def
26、ine S(X)X*X void main() iht a=9,k=3,m=2; a/=S(k+m)/S(k+m); printf(“%d“,A) ; (分数:2.00)A.1B.4C.9D.0 解析:解析 本题主要是考查带参数的宏定义及其相关运算。本题中宏运算过程如下:a=a/(S(k+m)/S(k+m)=a/(k+ m*k+m/k+m*k+m)=9/(3+2*3+2/3+2*3+2)=0。9.下列叙述中错误的是( )。(分数:2.00)A.线性表是由 n个元素组成的一个有限序列B.线性表是一种线性结构C.线性表的所有结点有且仅有一个前件和后件 D.线性表可以是空表解析:解析 线性表是一种线
27、性结构,由”(n0)个元素组成,所以线性表可以是空表。但是在线性表中,第一个结点没有前件,最后一个结点没有后件,其他结点有且只有一个前件和后件,所以 C是错误的。10.某二叉树共有 60个叶子结点与 50个度为 1的结点,则该二叉树中的总结点数为( )。(分数:2.00)A.148B.169 C.182D.198解析:解析 叶子结点总是比度为 2的结点多一个。所以,具有 60个叶子结点的二叉树有 59个度为 2的结点。总结点数=60 个叶子结点+59 个度为 2的结点+50 个度为 1的结点=169 个结点。解析:解析 在选项 A)中,因为!a=0,所以关系表达式!a=1 的值为 0,又因为逻
28、辑与运算符“ while(k=1) k=k-1; 则下列描述中正确的是( )。(分数:2.00)A.while循环执行 10次B.循环是无限循环C.循环体语句一次也不执行 D.循环体语句执行一次解析:解析 本题考查 while循环。while 循环的控制表达式 k=1是个赋值表达式而不是逻辑表达式,所以循环体一次也不执行。13.下列程序的输出结果是( )。 #includestdio.h void main() int b6-2,4,6,8,10,12; int*p=b,*q= printf(“%d“,*(p+); printf(“%d,“,*q); (分数:2.00)A.4,4B.2,2C.
29、4,5D.2,4 解析:解析 首先定义了一个指向一维数组 b的指针 p,一个指向指针 p的指针变量 q,输出*(p+)是先输出*p 即 b0的值,再将指针 p指向数组的下一个元素 b1,输出 *q 是输出指针 p所指单元的内容,即 b1的值。14.在执行完下列的 C语句段之后,则 B的值是( )。 char a=A; int b; B=(34(分数:2.00)A.0B.1 C.TRUED.FALSE解析:解析 本题考查 C语言 3个知识点:将一个字符赋给一个字符变量时,并不是将该字符本身存储到内存中,而是将该字符对应的 ASCII码存储到内存单元中:大写字母的 ASCII码值小于其对应小写字母
30、的 ASCII码值:只要逻辑与运算符 int f2(int x,inty)return xy?y:x; main() int a=4,b=3,c=5,d=2,e,f,g; e=f2(f1(a,B) ,f1(c,D) ); f=f1(f2(a,B) ,f2(c,D) );g=a+b+C+d-e-f; phntf(“%d,%d,%d/n“,e,f,g); (分数:2.00)A.4,3,7 B.3,4,7C.5,2,7D.2,5,7解析:解析 根据函数 int f1(int x,int y)return xy?x:y;和 int馒(int x,int y)retum xy?y:x;的定义可知,如果
31、xy 成立,则函数 n返回 x的值,函数 C返回 y的值。所以 n(a, B=4,n(c,d)=5,C(a, B=3,f2(c,d)=2,故 e=f2(4,5)=4, f=n(3,2)=3,g=4+3+5+2-4-3=7。16.语句 int(*ptr)()的含义是( )。(分数:2.00)A.ptr是一个返回值是血的函数B.ptr是指向 int型数据的指针变量C.ptr是指向函数的指针,该函数返回一个血型数据 D.ptr是一个函数名,该函数的返回值是指向 int型数据的指针解析:解析 本题考查的是指向函数的指针。函数指针定义的基本格式为:类型标识符(指针变量名)( )。“类型标识符”为函数返回
32、值的类型。17.若有下列说明,则( )不是对 strcpy库函数的正确的调用。strcpy 库函数用于复制一个字符串:char*str1=“abcdt“,str210,*str3=“hijklmn“,*str42,*str5=“aaaa“;(分数:2.00)A.strcpy(str2,str1)B.strcpy(str3,str1)C.strcpy(str4,str1) D.strcpy(str5,str1)解析:解析 strcpy(s1,s2)函数的功能是将字符串 s2复制到字符串 s1中(注意:要保证 s1存储区能容纳下 s2字符串)。18.下列能正确定义一维数组的选项是( )。(分数:2
33、.00)A.int a5=0,1,2,3,4,5;B.char a=0,1,2,3,4,5; C.char a=A,B,C;D.int a5=“0123“;解析:解析 在定义数组时,如果赋给的初始值个数大于数值的长度,这样就会越界,因此选项 A)错误;选项 C 中定义的是一个字符变量 C;选项 D)中整型数组 a中只能存储整型数据,而不能存储字符串常量“0123”。解析:解析 要解答此题只要知道两个知识点:在 C语言中规定进行强制类型转换的格式是:(double)变量名;在 C语言中不允许给表达式赋值。20.下列叙述错误的是( )。(分数:2.00)A.在 C语言中的保留字必须小写B.变量的存
34、储类型决定了变量的存储位置及其生存期C.宏定义以#define 开头,行末必须加分号 D.在 C语言中的注释行可以出现在程序的任何位置解析:解析 本题涉及 C语言最基本的 4个知识点:C 语言的保留字必须小写:变量的存储类型不同,其存储位置和生存期也不一样:C 语言允许其注释部分出现在程序中的任何位置;宏定义以#define开头,行末不需要加分号。21.若有下列定义(设 int类型变量占 2个字节): int i=8; 则下列语句: printf(“i=%08d“,i); 输出的结果是( )。(分数:2.00)A.i=8,B.i=00000008, C.i=08,D.8解析:解析 本题考查 p
35、rintf函数的格式。“%08”格式符中的“0”表示在指定数据输出宽度的同时,在数据前面的多余空格处加“0”;“8”表示指定数据的输出宽度为 8位。22.已知 int a=2,b=3;则执行表达式 a=ab 后,变量 a的值为( )。(分数:2.00)A.0B.1 C.2D.3解析:解析 先计算关系表达式 ab=23 为真(表达式为真时,如果变量为 int型变量则真用 1表示,假用 0表示),即 a=1。23.已知有结构体: struct sk iht a; float b; )data,*p; 若有 p= C.p-dataD.data解析:解析 本题主要考查结构指针:p= scanf(“%d
36、“, dos=s+t;t=t-2;while(t!=n); 为使此程序段不陷入死循环,从键盘输入的数据应该是( )。(分数:2.00)A.任意正奇数B.任意负偶数C.任意正偶数D.任意负奇数 解析:解析 因为变量 t的初始值等于 1,经过第一次 d。 while 循环中,执行 t=t-2这条语句一次,所以变量 t的值为-1,判断关系表达式 t!=n是否成立,如果关系表达式成立,则执行第二次循环,再执行 t=t-2这条语句一次,所以变量 t的值为-3,接着再判断关系表达式 t!=n是否成立,如果关系表达式成立,执行第三次循环,否则退出循环。由此可知,所以只要输入变量 n的值为负奇数,则一定会使t
37、=n成立,则退出 do while循环。25.简单的交换排序方法是( )。(分数:2.00)A.快速排序B.选择排序C.堆排序D.冒泡排序 解析:解析 所谓的交换类排序方法是指借助数据元素之间的互相交换进行排序的一种方法,包括冒泡排序和快速排序,冒泡排序是一种最简单的交换排序方法,它通过相邻元素的交换,逐步将线性表变成有序。26.下列程序的输出结果是( )。 #includestdio.h main() int a23=1,2,3,4,5,6,(*p)3,i; p=a; for(i=0;i3;i+) if(i2) p1i=p1i-1; else p1i=1; printf(“%d/n“,a01
38、+a11+a12); (分数:2.00)A.8B.7 C.12D.9解析:解析 第 1次执行 for循环,p10=p10-1=3:第 2次执行 for循环,p11=p11-1=4:第 3次执行 for 循环,p12=1,最后输出的是 a01+a11+ a12=2+4+1=7。27.若有运算符:、=、%、sizeof,则它们按优先级(由高至低)的正确排列顺序为( )。(分数:2.00)A.%、sizeof、=B.sizeof、%、=、C.sizeof、%、=D.sizeof、%、= 解析:解析 主要考查运算符的优先级。sizeof 的优先级最高,后面的顺序是:%、,优先级最低的是“=”。28.设
39、有下列说明语句: strcut str int x;float y;char z;st; 则下列的叙述中不正确的是( )。(分数:2.00)A.struct是结构体类型的关键字B.st是结构体类型名 C.x、y、z 都是结构体成员名D.struct str是结构体类型名解析:解析 本题主要考查结构类型的定义:struct 是结构体类型的关键字;stmct str 是结构体类型名;x、y、z 都是结构体成员名;st 是结构变量名。29.字符串“/“ABCDEF/“/“的长度是( )。(分数:2.00)A.15B.10 C.7D.8解析:解析 本题涉及字符串最基本两个概念:字符串的长度是指字符串中
40、字符的个数,但不包括字符串结束符:以反斜杠“/”开头的特殊字符序列,意思是把反斜杠后面的字符序列转换成特定的含义,而不是原来的含义,不包含在字符串长度之内,“1”连同后面的字符为一个长度。30.设 x=015,则 X=X017的值是( )。(分数:2.00)A.00001111B.11111101C.00000010 D.11000000解析:解析 本题主要考查按位异或运算,x=015(二进制 00001101),017的二进制为 000001111,两者异或结果为 00000010。31.按照“先进先出”组织数据的数据结构是( )。(分数:1.00)A.队列 B.栈C.双向链表D.二叉树解析
41、:解析 队列是一种特殊的线性表,只允许在表的一端插入元素,在表的另一端删除元素,插入元素的一端叫“队尾”,删除元素的一端叫“队头”,先插入的元素先被删除,是按“先进先出”的原则组织数据的。32.下列选项中,不是一个算法的基本特征的是( )。(分数:1.00)A.完整性 B.可行性C.有穷性D.拥有足够的情报解析:解析 作为一个算法,一般应该具有下列 4个特征:可行性,即考虑到实际的条件能够达到一个满意的结果:确定性,算法中的第一个步骤都必须是有明确定义的;有穷性,一个算法必须在有限的时间内做完;拥有足够的情报。33.下列程序的输出结果是( )。 #inCludestdio.h main() c
42、harch25=“1234“,“5678“,*p2; int i,j,s=0; for(i=0;i2;i+) pi=chi; for(i=0;i2;i+) for(j=0;pij/0;j+=2) s=pij-0; printf(“%d“,s); (分数:1.00)A.6357B.6135C.1357 D.691357解析:解析 本题先将指针 p指向二维数组 ch25,相当于 p0=“1234“,p1=“5678“,通过双重for循环,是要将 p中的字符隔一个输出一个,通过 s=pij-0这条语句是将所要输出的字符转换成相应的+进制数。34.下列程序段的输出结果为( )。 #includestd
43、io.h main() static char a=“language“; char*p; p=a; for(p=a;pa+8;p+=2) putchar(*p); (分数:1.00)A.languageB.lnug C.有语法错误D.lang解析:解析 本程序首先定义了静态字符数组 a,然后将指针 p指向数组 a的首地址。 第 1次 for循环,p=a,p 指向数组的第 1个元素,*p 是取指针 p所指地址的内容,输出 1;第 2次 for循环, p=p+2,则p指向数组的第 3个元素,*p 是取指针 p所指地址的内容,输出 n;第 3次 for循环,p=p+2,则 p指向数组的第 5个元素
44、,*p 是取指针 p所指地址的内容,输出 u;第 4次 for循环,p=p+2,则 p指向数组的第 7个元素,*p 是取指针 p所指地址的内容,输出 g,结束循环。35.若有说明语句:doubleop,a;,则能通过 scanf语句正确给输入项读入数据的程序段是( )。(分数:1.00)A.*p=scanf(“%1f“,;B.*p=scanf(“%f“,;C.p=scanf(“%1f“,*;D.p=scanf(“%1f“,; 解析:解析 double*p,a;语句表示定义了一个指向双精度型的指针变量 p和双精度型变量 a,而语句p=scanf(“%1f“,p)表示用键盘输入的数赋给指针变量 p
45、所指向的地址单元中。scanf()函数要求在输入 double型数据,格式控制符必须用%if (或%le)。否则,数据不能正确输入。所以选项 D)为正确答案。36.运行下列程序时,若输入的数据为“1,2,3”,则输出结果是( )。 main() float a,b,C,t; scanf(“%f,%f,%of“, if(aB) t=a;a=b;b=t; if(aC) t=a;a=c;c=t; if(bC) t=b;b=c;c=t; printf(“%f/n%f/n%f/n“,a,b,C) ; (分数:1.00)A.1.00 2.00 3.00B.1.00 3.00 2.00C.1 3 2D.3.
46、000000 2.000000 1.000000 解析:解析 本题考查 if语句。第 1个 if语句,实现如果 ab,则交换 a、b 值的功能;第 2个 if语句,实现如果 ac,则交换 a、c 的值的功能;第 3个 if语句,实现如果 bc,则交换 b、c 的值的功能。3个 if语句结合起来实现的功能就是将 a、b、c 按从大到小排序。37.有下列函数定义: fun(float h) printf(“%f,%f/n”,h,h*h); 该函数的类型是( )。(分数:1.00)A.int类型 B.float类型C.void类型D.函数无类型说明,定义有错解析:解析 本题考查默认函数的函数值的类型。在函数定义时,由于函数没有说明其类型,系统默认一律自动按整型处理,因此,函数的类型为 int类型。38.执行下列程序中的输出语句后,a 的值是( )。 main() int a; printf(“%d/n“,(a=2*3,a*5,a+7) ); (分数:1.00)A.