二级C语言24.docx
《二级C语言24.docx》由会员分享,可在线阅读,更多相关《二级C语言24.docx(26页珍藏版)》请在冰豆网上搜索。
二级C语言24
二级C语言-24
(总分:
76.50,做题时间:
90分钟)
一、{{B}}选择题{{/B}}(总题数:
35,分数:
48.00)
1.下面程序段的运行结果是{{U}}{{/U}}。
char*p="abcdefgh";
p+=3;
printf("%d/n",stfien(strcpy(p,"ABCD")));
∙A.8
∙B.12
∙C.4
∙D.7
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]p+=3使指针p指向字符"d",函数strcpy的功能是把后面的字符串复制到p指针指向的空间;strlen函数的功能是求字符串的长度,并返回字符个数,不计最后的"/0"。
本题结果为4,即字符串“ABCD”的长度。
2.若函数中有定义语句:
inta;,则{{U}}{{/U}}。
∙A.系统将自动给a赋初值0
∙B.这时a中的值是和随机数
∙C.系统将自动给a赋初值-1
∙D.这a中无任何值
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]本题考查变量赋值基本概念。
在声明一个变量后,如果未显式的对其进行赋值,则它的值是一个随机值。
3.用链表表示线性表的优点是
∙A.便于随机存取
∙B.花费的存储空间较顺序存储少
∙C.便于插入和删除操作
∙D.数据元素的物理顺序与逻辑顺序相同
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]链式存储结构克服了顺序存储结构的缺点:
它的结点空间可以动态申请和释放;它的数据元素的逻辑次序靠结点的指针来指示,不需要移动数据元素。
故链式存储结构下的线性表便于插入和删除操作。
4.以下程序的输出结果是{{U}}{{/U}}
#include<stdio.h>
main()
{inti=0,a=0;
while(i<20)
{for(;;){if((i%10)==0)break;elsei--;}
i+=11;a+=i;
}
printf("%d/n",A);
}
∙A.21
∙B.32
∙C.33
∙D.11
(分数:
1.00)
A.
B. √
C.
D.
解析:
5.下列程序执行后的输出结果是{{U}}{{/U}}。
main()
{charx=0xFFFF;printf("%d/n",x--);}
∙A.-32767
∙B.FFFE
∙C.-1
∙D.-32768
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]因为x=0xFFFF=11111111,因此当以整型形式输出时对应的数为-1。
6.有以下程序
#include<stdio.h>
main()
{inti,j,m=1;
for{i=i;i<3;i++)
{for(j=3;j>0;j--)
{if(i*j>3)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=1,j=3和j=2时都能执行m*=i*j,此时得到m的值为6;然后进行第二次循环i=2,j=3时会执行break语句,内部循环直接结束,此时i再加1,也会导致退出外部循环,所以最终结果m的值为6。
7.下面的程序执行后,文件test.t中内容是______。
#include<stdio.h>
voidfun(char*fname,char*st)
{FILE*myf;inti;
myf=fopen(fname,"w");
for(i=0;i<strlen(st);i++)fputc(st[i],myf);
fclose(myf);
}
main()
{fun("test.t","newworld");fun("test.t","hello,");}
∙A.hello,
∙B.newworldhello
∙C.newworld
∙D.hello,rld
(分数:
1.00)
A. √
B.
C.
D.
解析:
[解析]C语言中文件有文本文件与二进制文件,对文件的使用前必须先打开,打开方式有只读、写入、读写等方式。
8.下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除,请选择填空。
#include<stdio.h>
main()
{inti=0,j,k;
do{i++;k=316-13*i}while(______);
j=k/11;printf("316=13*%d+11,%d”,i,j);
}
∙A.k/11
∙B.k%11
∙C.k/11==0
∙D.k%11==0
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]本题的关键是两个加数分别能被13和11整除。
当k%11的值为0时,则退出循环,将执行j=k/11;语句,输出结果,所以该表达式合理的条件是k%11。
9.软件开发的结构化生命周期方法将软件生命周期划分成{{U}}{{/U}}
∙A.定义、开发、运行维护
∙B.设计阶段、编程阶段、测试阶段
∙C.总体设计、详细设计、编程调试
∙D.需求分析、功能定义、系统设计
(分数:
1.00)
A. √
B.
C.
D.
解析:
10.若已定义x和y为double类型,则表达式x=1,y=x+5/2的值是
∙A.2
∙B.3.0
∙C.3
∙D.3.5
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]题目中定义变量x和y为双精度double类型,根据给定算数表达式的优先级应先计算5/2,结果为2,将值代入后,y的值由x和y的数据类型得出结果为3.0,整个逗号表达式的值为后y=x+5/2的值,即3.0。
11.以下描述中正确的是
∙A.由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
∙B.do-while循环由do开始,用while结束,在while(表达式)后面不能写分号
∙C.在do-while循环体中,是先执行一次循环,再进行判断
∙D.do-while循环中,根据情况可以省略while
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]dowhile语句的一般形式为:
do循环体语句while(表达式);,其中循环体语句可以是复合型语句,但必须用花括号括起来。
while后必须要有分号作为语句的结束,在do-while循环中,不可以省略while。
12.有下列程序:
#include<stdio.h>
main()
{inta=6,b=7,m=1;
switch(a%2)
{case0:
m++;break;
case1:
m++;
switch(b%2)
{defaut:
m++;
case0:
m++;break;
}
}
printf("%d/n",m);
}
程序运行后的输出结果是{{U}}{{/U}}。
∙A.1
∙B.2
∙C.3
∙D.4
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]本题考查switch语句。
第一个switch语句,因为a=6,a%2=0,所以执行case0.将m加1,遇到break语句跳出switch语句,结束循环。
13.在深度为7的满二叉树中,叶子结点的个数为
∙A.32
∙B.31
∙C.64
∙D.63
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]在二叉树的第k层上,最多有2k-1(k≥1)个结点。
对于满二叉树来说,每一层上的结点数都达到最大值,即在满二叉树的第k层上有2k-1个结点。
因此,在深度为7的满二叉树中,所有叶子结点在第7层上,即其结点数为2k-1=27-1=64。
14.下列描述中正确的是
∙A.程序就是软件
∙B.软件开发不受计算机系统的限制
∙C.软件既是逻辑实体,又是物理实体
∙D.软件是程序、数据与相关文档的集合
(分数:
1.00)
A.
B.
C.
D. √
解析:
[解析]计算机软件是计算机系统中与硬件相互依存的另一部分,包括程序、数据及相关文档的完整集合。
选项D的描述正确。
15.下列叙述中错误的是{{U}}{{/U}}。
∙A.一种数据的逻辑结构可以有多种存储结构
∙B.数据的存储结构与数据的处理效率无关
∙C.数据的存储结构与数据的处理效率密切相关
∙D.数据的存储结构在计算机中所占的空间不一定是连续的
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]数据的存储结构分为顺序结构和链式结构,一个数据的逻辑结构可以有多种存储结构。
顺序结构中数据元素所占的存储空间是连续的,而链式存储结构中,数据元素所占的存储空间不一定是连续的。
数据的存储结构与数据的处理效率密切相关。
16.有以下结构体说明、变量定义和赋值语句:
structSTD
{charname[10];
intage;
charsex;
}s[5],*ps;
ps=&s[0];
则以下scanf函数调用语句有错误的是______。
∙A.scanf("%s",s[0].name);
∙B.scallf("%d",&s[0].age);
∙C.scanf("%c",&(ps->sex));
∙D.scanf("%d",ps->age);
(分数:
1.00)
A.
B.
C.
D. √
解析:
[解析]本题考查结构体的相关知识,题目中需要输入一个变量,scanf要求参数为指针,而D选项中ps->age为一个变量,不是指针,所以错误。
17.在以下选项中,操作不合法的一组是______。
∙A.intx[6],*p;p=&x[0];
∙B.intx[6],*p;*p=x;
∙C.intx[6],*p;p=x;
∙D.intx[5],p;p=x[0];
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]对于A和C都可使p指向数组x的首地址。
D是把数组元素x[0]赋给p。
18.已有定义:
charc;,程序前面已在命令行中包含ctype.h文件,不能用于判断c中的字符是否为大写字母的表达式是()。
∙A.isupper(C)
∙B.'A'<=c<='Z'
∙C.'A'<=c&&c<='Z'
∙D.c<=('z'-32)&&('a'-32)<=c
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]在本题中,选项B)实际是先计算关系表达式“'A'<=c”的值是0还是1,再比较该值与字符'Z'之间的大小关系,显然不能实现题目所要求的功能,而选项A)、C)、D)都可以。
19.设有定义:
intn=0,*p=&n,**q=&p,则下列选项中正确的赋值语句是
∙A.p=1;
∙B.*q=2;
∙C.q=p;
∙D.*p=5;
(分数:
1.00)
A.
B.
C.
D. √
解析:
[解析]指针变量的定义。
[解题要点]选项A),B),C)的指针赋值表达方式都不正确,*p=5表达整数5放到指针p所指向的存储单元中。
[考点链接]通过指针引用一个存储单。
20.一间宿舍可住多个学生,则实体宿舍和学生之间的联系是______。
∙A.一对一
∙B.一对多
∙C.多对一
∙D.多对多
(分数:
4.00)
A.
B. √
C.
D.
解析:
[解析]因为一间宿舍可以住多个学生,即多个学生住在一个宿舍中,但一个学生只能住一间宿舍,所以实体宿舍和学生之间是一对多的关系。
21.若x为int型变量,则执行以下语句后,x的值为()
x=6;
x+=x-=x*x;
∙A.36
∙B.-60
∙C.60
∙D.-24
(分数:
1.00)
A.
B. √
C.
D.
解析:
22.有以下程序段
intj;floaty;charname[50];
scanf("%2d%f%s",&j,&y,name);
当执行上述程序段,从键盘上输入55566777abc后,y的值为______。
∙A.55566.0
∙B.566.0
∙C.7777.0
∙D.566777.0
(分数:
1.00)
A.
B. √
C.
D.
解析:
23.有下列程序:
intfun1(doublea)(returna*=a;)
intfun2(doublex,doubley)
{doublea=0,b=0;
a=fun1(x);b=fun1(y);return(int)(a+b);
}
main()
{doublew;w=fun2(1.1,2.0),……}
程序执行后变量w中的值是{{U}}{{/U}}。
∙A.5.21
∙B.5
∙C.5.0
∙D.0.0
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]子函数fun1(doublea)的功能是返回a的平方值的整数部分。
子函数fun2(doublex,doubley)的功能是返回x的平方值的整数部分与y的平方值的整数部分的和。
又因为题中变量w的定义为double型,函数fun2的定义为int型,按照各类数值型数据间的混合运算,整型数据被转换为实型数据。
所以双精度型变量w的值为5.0。
24.以下程序段中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是
∙A.main(){int*p;fun(p);┇ }intfun(int*p){ints;p=&s;}
∙B.main(){int*p;fun(&p); ┇}intfun(int**p){ints;*p=&s;}
∙C.#include<stdlib.h>main(){int*p;fun(&p); ┇ }intfun(int**p){*p=(int*)malloc
(2);}
∙D.#include<stdlib.h>main(){int*P;fun(p); ┇ }intfun(int*p){p=(int*)malloc(sizeof(int));}
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]在选项A中,main()函数中定义了一个指针变量P,调用fun()函数时把p传给形参P,在函数中让p指向局部变量s,由于函数调用返回后,局部变量s将被释放,因此无法实现让实参p指向一个整型单元。
选项B中实现的也是让实参p指向一个在函数fun()定义的局部变量s;选项C在函数fun()中分配了两个字节的内存单元并把首地址赋值给形参p指向的变量,即main()函数的指针变量p中,由于整型变量占两个字节;选项D在主函数中定义了一个指针地址变量p,并把指针变量的值传给形参变量p,在fun()函数分配了一个整型单元并把首地址赋值给形参指针变量P,由于C语言中变量作为参数是传值的,所以并没有改变对应实参指针变量的值。
25.为了提高软件模块的独立性,模块之间最好是{{U}}{{/U}}。
∙A.控制耦合
∙B.公共耦合
∙C.内容耦合
∙D.数据耦合
(分数:
2.00)
A.
B.
C.
D. √
解析:
[解析]耦合性与内聚性是模块独立性的两个定性标准,是互相关联的。
在程序设计中,各模块间的内聚性越强,则耦合性越弱。
一般较优秀的软件设计,应尽量做到高内聚、低耦合,有利于提高模块的独立性。
26.若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为
∙A.0
∙B.1
∙C.-1
∙D.一个非0值
(分数:
1.00)
A. √
B.
C.
D.
解析:
[解析]文件尾测试函数feof()的应用,读取文件时,当文件中的数据全部读完后,文件位置指针将位于文件的结尾。
此时如果读数据,将会出现错误。
为了保证读写数据的正确性,需要进行文件尾测试,文件尾测试使用函数feof(),它的功能是测试fp指向的文件是否到达文件尾。
若到达文件尾,返回值为非0,否则返回值为0。
在本题中fP指向的某文件还没有到了文件尾,因此返回0。
27.若有以下定义和语句:
ints[4][5],(*ps)[5];
ps=s;
则对s数组元素的正确引用形式是
∙A.ps+1
∙B.*(ps+3)
∙C.ps[0][2]
∙D.*(ps+1)+3
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]本题首先定义了一个4行5列的数组s,又定义了一个指向由5个元素组成的一维数组的指针变量ps,通过赋值让ps指向了数组s的首地址。
此时数组元素s[i][j]的地址为“*(ps+1)+j”,数组元素s[i][j]可表示为*(*(ps+1)+j)。
选项B表示的是数组元素a[3][0]的地址;选项D表示的是数组元素s[1][3]的地址;选项A中“ps+1”为指向下一行(第二行)的地址;选项c中ps[0][2]无条件等价于“*(ps[0]+2)”又无条件等价于”(*(ps+0)+2)”,即是数组元素s[0][2]。
所以,4个选项中C为所选。
28.若有以下说明和定义:
uniondt
{inta;charb;doublec;}data;
以下叙述中错误的是()。
∙A.data的每个成员起始地址都相同
∙B.变量data所占内存字节数与成员c所占字节数相等
∙C.程序段:
data.a=5;printf("%f/n",data.c);输出结果为5.000000
∙D.data可以作为函数的实参
(分数:
1.00)
A.
B.
C.
D. √
解析:
[解析]选项A),共用体的每个成员的起始地址都相同;选项B),共用体变量所占的内存长度等于最长的成员的长度;选项C),因为每个成员的起始地址相同,所以整型数5以浮点型输出时为5.000000;选项D),C语言规定,不能把共用体变量作为函数的参数。
29.在Windows环境下,能实现窗口移动的操作是()
∙A.用鼠标拖动窗口中的任何部位
∙B.用鼠标拖动窗口的边框
∙C.用鼠标拖动窗口的控制按钮
∙D.用鼠标拖动窗口的标题栏。
(分数:
1.00)
A.
B.
C.
D. √
解析:
[解析]鼠标拖动窗口的标题栏,能实现窗口的移动;拖边框,实现窗体的大小调整。
30.若有以下语句,则以下叙述中正确的是
typedefstructS
{intg;charh;}T;
∙A.可用S定义结构体变量
∙B.可用T定义结构体变量
∙C.S是struct类型的变量
∙D.T是structS类型的变量
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]typedefstructS{intg;charh;}T;的功能是将"structS"结构体类型用“T”来表示,所以可以用T来定义结构体变量。
31.若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是_______。
∙A.pb=&x;
∙B.pb=x;
∙C.*pb=&x;
∙D.*pb=*x
(分数:
1.00)
A. √
B.
C.
D.
解析:
[解析]选项A将变量x的地址赋绐指针变量pb,使pb指向x‘选项B是烙x的值当作地址赋给指针pb,pb指向一个地址等于x值的内存单元;选项c将x的地址赋给指针pb指向的地址等于x的内存单元。
32.若有代数式
(其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是______。
∙A.sqrt(fabs(pow(n,x)+exp(x)))
∙B.sqrt(fabs(pow(n,x)+pow(x,e)))
∙C.sqrt(abs(n^x+e^x))
∙D.sqrt(fabs(pow(x,n)+exp(x)))
(分数:
2.00)
A. √
B.
C.
D.
解析:
[解析]B选项中函数pow(x,e)错误,应该直接使用exp(x)函数。
C选项中函数abs(n^x+e^x)错误,应该使用fabs()返回浮点数的绝对值。
D选项中pow(x,n)参数顺序错误。
本题正确答案为A。
33.设a=12,a定义为整型变量。
表达式a+=a-=a*=a的值为______。
∙A.12
∙B.144
∙C.0
∙D.132
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]表达式a+=a-=a*=a的运算方向是自右向左,即先计算a*=a,a值为a*a=144,再计算a-=a,a值为a-a=0,再计算计a+=a,故表达式和a的值都为a+a=0。
34.在数据结构中,从逻辑结构上看可以分成______。
∙A.动态结构和静态结构
∙B.线性结构和非线性结构
∙C.内部结构和外部结构
∙D.紧凑结构和非紧凑结构
(分数:
2.00)
A.
B. √
C.
D.
解析:
35.以下选项中,合法的是{{U}}{{/U}}。
∙A.charstr3[]={'d','e','b','u','g','/0'};
∙B.charstr4;str4="helloworld";
∙C.charname[10];name="china";
∙D.charstr1[5]="pass",str2[6];str2=str1;
(分数:
2.00)
A. √
B.
C.
D.
解析:
[解析]选项B不能把一个字符串赋值给一个字符变量,选项C和D犯了同样的错误是把字符串赋给了数组名。
二、{{B}}填空题{{/B}}(总