第五套c语言选择题.docx
《第五套c语言选择题.docx》由会员分享,可在线阅读,更多相关《第五套c语言选择题.docx(22页珍藏版)》请在冰豆网上搜索。
第五套c语言选择题
1、下列叙述中正确的是( )。
A)线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的
B)线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构
C)线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构
D)线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性
参考答案:
B
【解析】线性链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。
2、下列叙述中正确的是( )。
A)栈是一种先进先出的线性表
B)队列是一种后进先出的线性表
C)栈与队列都是非线性结构
D)以上三种说法都不对
参考答案:
D
【解析】栈是一种先进后出的线性表,队列是一种先进先出的线性表,栈与队列都是线性结构。
3、软件测试的目的是( )。
A)评估软件可靠性
B)发现并改正程序中的错误
C)改正程序中的错误
D)发现程序中的错误
参考答案:
D
【解析】软件测试是为了发现错误而执行程序的过程,测试要以查找错误为中心,而不是为了演示软件的正确功能。
不是为了评估软件或改正错误。
4、在软件开发中,需求分析阶段产生的主要文档是( )。
A)软件集成测试计划
B)软件详细设计说明书
C)用户手册
D)软件需求规格说明书
参考答案:
D
【解析】需求分析阶段的工作可以概括为:
需求获取、需求分析、编写需求规格说明书、需求评审四个方面。
所以选择D)。
5、软件生命周期是指( )。
A)软件产品从提出、实现、使用维护到停止使用退役的过程
B)软件从需求分析、设计、实现到测试完成的过程
C)软件的开发过程
D)软件的运行维护过程
参考答案:
A
【解析】通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。
也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期
6、面向对象方法中,继承是指( )。
A)一组对象所具有的相似性质
B)一个对象具有另一个对象的性质
C)各对象之间的共同性质
D)类之间共享属性和操作的机制
参考答案:
D
【解析】继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为基础建立新类的定义技术。
广义的说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。
7、层次型、网状型和关系型数据库划分原则是( )。
A)记录长度
B)文件的大小
C)联系的复杂程度
D)数据之间的联系方式
参考答案:
D
【解析】层次模型的基本结构是树形结构,网状模型是一个不加任何条件限制的无向图,关系模型采用二维表来表示,所以三种数据库的划分原则是数据之间的联系方式。
8、一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是( )。
A)一对一
B)一对多
C)多对多
D)多对一
参考答案:
C
【解析】因为一个人可以操作多个计算机,而一台计算机又可以被多个人使用,所以两个实体之间是多对多的关系。
9、数据库设计中反映用户对数据要求的模式是( )。
A)内模式
B)概念模式
C)外模式
D)设计模式
参考答案:
C
【解析】数据库系统的三级模式是概念模式、外模式和内模式。
概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。
外模式也称子模式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述,所以选择C)。
内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法。
10、有三个关系R、S和T如下:
则由关系R和S得到关系T的操作是( )。
A)自然连接
B)差
C)交
D)并
参考答案:
B
【解析】关系T中的元组是R关系中有而S关系中没有的元组的集合,所以进行的是差的运算。
11、以下叙述中错误的是( )。
A)C语言是一种结构化程序设计语言
B)使用三种基本结构构成的程序只能解决简单问题
C)结构化程序设计提倡模块化的设计方法
D)结构化程序由顺序、分支、循环三种基本结构组成
参考答案:
B
【解析】C语言是一种结构化程序设计语言。
结构化程序设计是以模块化设计为中心的,有三种基本结构:
顺序、选择和循环结构。
各模块相互独立,因而可将原来较为复杂的问题化简为一系列简单模块并充分利用现有模块搭建新系统,提高程序的重用性和可维护性。
12、下面四个选项中,均是不合法的用户标识符的选项是( )。
A)c-bgotoint
B)AP 0do
C)floatla0 A
D) 123tempgoto
参考答案:
A
【解析】C语言规定的标识符只能由字母、数字和下划线3种字符组成,第一个字符必须为字母或下划线,并且不能使用C语言中的关键字作为标识符。
选项A)中goto和int是关键字,c-b中'-'不是组成标识符的3种字符之一;选项B)中do是关键字;选项C)中float是关键字;选项D)中goto是关键字;所以,均是不合法用户标识符的选项是A)。
13、以下选项中值为1的表达式是( )。
A)
B)
C)
D)
参考答案:
B
【解析】字符常量0的值是48,1的值是49,\0的值是0。
所以1-0=-47,1-\0=1,1-0=49,\0-0=-48。
14、已知各变量的类型说明如下:
intk,a,b;
unsignedlongw=5;
doublex=1.42;
则以下不符合C语言语法的表达式是( )。
A)x%(-3)
B)w+=-2
C)k=(a=2,b=3,a+b)
D)a+=a-=(b=4)*(a=3)
参考答案:
A
【解析】"%"是求余运算符或模运算符,"%"两侧均应为整型数据,选项A)中的x是double型数据。
15、设变量x为float型且已赋值,则以下语句能将x中的数值保留到小数点后两位,并将第3位四舍五入的是( )。
A)x=(x*100+0.5)/100.0
B)x=(int)(x*100+0.5)/100.0
C)x=x*100+0.5/100.0
D)x=(x/100+0.5)*100.0
参考答案:
B
【解析】(int)(x*100+0.5)把float型数据(x*100+0.5)强转成int,这样就可以去掉小数点,+0.5就是为了四舍五入。
例如x=1.234,则(1.234*100+0.5)=123.9,则(int)123.9/100.0=123/100.0=1.23。
16、以下程序运行后的输出结果是( )。
main(){
inti=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3));
printf("%d%d%d\n",i,j,k);
}
A)123
B)234
C)223
D)233
参考答案:
D
【解析】首先i++==1&&(++j==3||k++==3)是一个逻辑表达式,i++==1&&(++j==3||k++==3)分为两部分i++==1和(++j==3||k++==3),它们的关系是"且"的关系,所以两部分都会被执行,其中i++==1是先判断i是否等于1(因为++在后面)此时i=1,在执行完后i=2。
然后执行第二部分(++j==3||k++==3),又分为两部分:
++j==3和k++==3两部分,这两部分是"或"的关系,如果第一部分满足条件就不执行后面的,如果第一部分不满足条件,就执行后面的部分。
++j==3是j先自己加1然后判断j是否等于3,这部分的结果为真,所以后面的部分不执行,因此最后的结果为i=2j=3k=3。
17、当变量c的值不为2、4、6时,值也为"真"的表达式是( )。
A)(c==2)||(c==4)||(c==6)
B)(c>=2&&c<=6)||(c!
=3)||(c!
=5)
C)(c>=2&&c<=6)&&!
(c%2)
D)(c>=2&&c<=6)&&(c%2!
=1)
参考答案:
B
【解析】满足表达式(c>=2&&c<=6)的整型变量c的值是2,3,4,5,6。
当变量c的值不为2,4,6时,其值只能为3或5,所以表达式c!
=3和c!
=5中至少有一个为真,即不论c为何值,表达式B)都为"真"。
18、设变量均已正确定义,若要通过scanf("%d%c%d%c",&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。
以下所示的输入形式中正确的是(注:
□代表空格字符)( )。
A)10□X□20□Y<回车>
B)10□X20□Y<回车>
C)10□X<回车>
20□Y<回车>
D)10X<回车>
20Y<回车>
参考答案:
D
【解析】本题中,scanf函数的格式控制没有空格,所以,对于选项A)、B)、C),输入的第一个空格会作为字符赋值给变量c1,而不会被解释成分隔符。
19、设有定义:
intk=1,m=2;floatf=7;,则以下选项中错误的表达式是( )。
A)k=k>=k
B)-k++
C)k%int(f)
D)k>=f>=m
参考答案:
C
【解析】选项C)中int(f)不正确,因为强制类型转换表示为:
(类型名)(表达式),正确表示为(int)f。
20、有以下程序:
#include
main()
{ inti,j,m=55;
for(i=1;i<=3;i++)
for(j=3;j<=i;j++)m=m%j;
printf("%d\n",m);
}
程序的运行结果是( )。
A)0
B)1
C)2
D)3
参考答案:
B
【解析】本题考查循环语句的嵌套以及条件的判断问题。
在程序中,内层循环判断条件为"j<=i",而j的初值为3,故当i的值为1和2时,内层循环体都不会被执行。
只有当i和j都等于3时才会执行一次。
m的值为55对3取模,计算结果为1。
21、有定义语句:
chars[10];,若要从终端给s输入5个字符,错误的输入语句是( )。
A)gets(&s[0]);
B)scanf("%s",s[1]);
C)gets(s);
D)scanf("%s",s+1);
参考答案:
B
【解析】在格式输入中,要求给出的是变量的地址,而B)答案中给出的s[1]是一个值的表达式。
22、下面函数调用语句含有实参的个数为( )。
func((exp1,exp2)(exp3,exp4,exp5));
A)1
B)2
C)4
D)5
参考答案:
B
【解析】函数调用的一般形式为:
函数名(形参表)若函数无形参,调用形式为:
函数名(),当所调用的函数用于求出某个值时,函数的调用可作为表达式出现在允许表达式出现的任何地方,本题中调用语句的参数个数为2个。
23、有以下程序:
voidsort(inta[],intn){
inti,j,t;
for(i=0;i}
main()
{ intaa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(aa+2,5);
for(i=0;i<10;i++)printf("%d,",aa[i]);
printf("\n");
}
程序运行后的输出结果是( )。
A)1,2,3,4,5,6,7,8,9,10,
B)1,2,7,6,3,4,5,8,9,10,
C)1,2,7,6,5,4,3,8,9,10,
D)1,2,9,8,7,6,5,4,3,10,
参考答案:
C
【解析】本题重点考查的是函数的调用。
程序中sort函数的作用是将指定的数由大到小排序。
被调函数"sort(aa+2,5);"中的实参aa+2是指aa[2]的地址,将其传给了形参a[],使得形参中a[0]的值为主函数中aa[2]的值,即3;实参中的5传给形参中的n,在sort函数中起着限制循环次数的作用,即使得参加排序的只有5个数,从aa[2]到aa[6],所以本题输出的结果是1,2,7,6,5,4,3,8,9,10,。
24、设变量已正确定义并赋值,以下正确的表达式是( )。
A)x=y*5=x+z
B)int(15.8%5)
C)x=y+z+5,++y
D)x=25%5.0
参考答案:
C
【解析】赋值运算符左边必须是单一变量名,而A)选项中的"y*5=x+z"部分是非法赋值。
在求余运算中的操作对象中只能是整型,故选项B)和选项D)是错误的。
选项C)为逗号表达式。
25、有以下程序:
#include
voidfun(inta,intb){intt;
t=a;a=b;b=t;
}
main(){intc[10]={1,2,3,4,5,6,7,8,9,0},i;
for(i=0;i<10;i+=2)fun(c[i],c[i+1]);
for(i=0;i<10;i++)printf("%d,",c[i]);
printf("\n");
}
程序的运行结果是( )。
A)1,2,3,4,5,6,7,8,9,0,
B)2,1,4,3,6,5,8,7,0,9,
C)0,9,8,7,6,5,4,3,2,1,
D)0,1,2,3,4,5,6,7,8,9,
参考答案:
A
【解析】在C语言中函数参数的传递是"传值"的,即形参和实参是两个没有关系的变量,函数fun虽然看似交换了参数值,但是只交换了形参的值,其结果不会传递给实参,因此数组C没有变化。
主函数中给数组C元素赋值1,2,…,9,0。
第一个for循环语句中调用fun函数,该函数功能是交换变量的数值,注意循环变量i的增量。
第二个for循环语句将数组C中元素的值进行输出。
26、设有如下程序段:
chars[20]="beijing",*p;
p=s;
则执行p=s;语句后,以下叙述中正确的是( )。
A)可以用*p表示s[0]
B)s数组中元素的个数和p所指字符串长度相等
C)s和p都是指针变量
D)数组s中的内容和指针变量p中的内容相等
参考答案:
A
【解析】p=s;后,指针p指向s的首地址,*p=s[0],因此选项A)是正确的;p是字符串指针,所指向的字符串为"beijing",其长度为7,而数组s中元素的个数为20,因此选项B)和D)是错误的;s是数组,不是指针变量,所以选项C)也是错误的。
27、有以下程序:
#include
voidfun(intp){intd=2;
p=d++;printf("%d",p);}
main(){
inta=1;
fun(a);printf("%d\n",a);}
程序运行后的输出结果是( )。
A)32
B)12
C)21
D)22
参考答案:
C
【解析】C语言中函数参数传递满足"单向传递",只由实参传给形参,而不能由形参传给实参。
Fun函数体内输出p的值为2,而并没有影响到fun函数外a的值,a的值在main函数体内依然为1,所以选项C)正确。
28、以下程序的输出结果是( )。
fun(charp[][10]){intn=0,i;
for(i=0;i<7;i++)if(p[i][0]==T)n++;
returnn;
}
main(){charstr[][10]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
printf("%d\n",fun(str));
}
A)1
B)2
C)3
D)0
参考答案:
B
【解析】此程序是统计一周七天中英文名称首字母为"T"的个数,p[i][0]是字符串的首字符,一共有两个"T",因此n=2。
29、下面程序由两个源程序文件t4.h和t4.c组成,程序编译运行的结果是( )。
t4.h的源程序为:
#defineN10
#definef2(x)(x*N)t4.c的源程序为:
#include
#defineM8
#definef(x)((x)*M)#include"t4.h"
main(){inti,j;
i=f(1+1);j=f2(1+1)printf("%d%d\n",i,j);
}
A)920
B)1611
C)911
D)1610
参考答案:
B
【解析】i=f(1+1)展开后为i=(1+1)*M=(1+1)*8=16。
j=f2(1+1)展开后为j=1+1=1+1*10=11。
30、下面的程序段运行后,输出结果是( )。
inti,j,x=0;
staticinta[8][8];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
a[i][j]=2]
for(i=0;i<8;i++)
x+=a[i][j];
printf("%d",x);
A)9
B)0
C)不确定值
D)18
参考答案:
B
【解析】本题主要考查的是用二维数组首地址和下标来引用二维数组元素的方法。
通过分析可知,程序中的双重循环定义了一个如下的二维数组:
0 1 2 0 0 0 0 0
2 3 4 0 0 0 0 0
4 5 6 0 0 0 0 0
0 0 0 0 0 0 0 0
……
0 0 0 0 0 0 0 0
由于数组的下标是从0开始的,所以二维数组元素a[i][j]表示的是二维数组a的第i+1行、第j+1列对应位置的元素。
从第二次的嵌套循环结束后j的值为,所以
for(i=0;i<8;i++)x+=a[i][j];
计算的是数组中所有第四列的元素的和,即0。
31、有以下程序:
#include
intf(intn);
main(){inta=3,s;
s=f(a);s=s+f(a);printf("%d\n",s);
}
intf(intn){staticinta=1;
n+=a++;
returnn;
}
程序运行后的输出结果是( )。
A)7
B)8
C)9
D)10
参考答案:
C
【解析】s=f(a)表达式第一次调用f(n)函数时,f(n)函数运行结果为n=4,a=2,即s等于4;s=s+f(a)表达式第二次调用f(n)函数时,f(n)函数运行结果为n=5,所以得到s值为9。
32、有以下程序:
#include
main(){
intc=0,k;
for(k=1;k<3;k++)switch(k){default:
c+=k;
case2:
c++;break;
case4:
c+=2;break;
}
printf("%d\n",c);
}
程序运行后的输出结果是( )。
A)9
B)7
C)5
D)3
参考答案:
D
【解析】第一次循环时,k=1,在switch语句中,先执行default后面的语句,即c=c+k=1,因为没有break语句,所以不会跳出switch结构,会接着执行case2后面的语句,即c=c+1=2,然后跳出switch;第二次循环时,k=2,直接执行case2后面的语句,即c=c+1=3,然后跳出switch语句,结束循环,执行输出语句。
33、有以下程序:
#include
structord
{ intx,y;}dt[2]={11,12,13,14};
main(){
structord*p=dt;
printf("%d,",++(p->x));printf("%d\n",++(p->y));
}
程序运行后的输出结果是( )。
A)11,12
B)12,13
C)13,14
D)14,1l
参考答案:
B
【解析】本题中定义了一个结构体数组dt[2],其中dt[0].x=11,dt[0].y=12,dt[1].x=13,dt[1].y=14。
在main函数中指针p指向了结构体数组的第一个元素,因此p->x值为11,p->y值为12,自加运算的结果分别为12和13。
34、有以下程序:
#definef(x)(x*x)main()
{ inti1,i2;
i1=f(8)/f(4);i2=f(4+4)/f(2+2);
printf("%d,%d\n",i1,i2);
}
程序运行后的输出结果是( )。
A)64,28
B)4,4
C)4,3
D)64,64
参考答案:
C
【解析】本题考查的是宏定义。
对带参数的宏的展开只是将语句中宏名后面括号内的实参字符串代替#define命令行中的形参。
本题中"i1=f(8)/f(4)"用"#definef(x)(x*x)"代替得i1=(8*8)/(4*4)/(2+2*2+2),求得结果为3。
故本题输出的值为4,3。
35、设有以下说明语句:
structex
{intx;floaty;charz;}example;
则下面的叙述中不正确的是( )。
A)struct结构体类型的关键字
B)example是结构体类型名
C)x,y,z都是结构体成员名
D)structex是结构体类型名
参考答案:
B
【解析】本题中,structex是结构体类型名,example是结构体变量名。
36、有以下程序:
intfun1(doublea){return(int)(a*=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中的值是( )。
A)5.21
B)5
C)5.0
D)0.0
参考答案:
C
【解析】题中变量w的定义为double型,函数fun2()的定义为int型,按照各类数值型数据间的混合运算,整型数据被转换为实型数据。
37、有以下程序:
#include
#include
main(){charstr[][20]={"One*World","one*Dream!
"},*p=str[1];
printf("%d,",strlen(p));printf("%s\n",p);
}
程序运行后的输出结果是( )。
A)9,One*World
B)9,One*Dream!
C)10,One*Dream!
D)10,One*World
参考答案:
C
【解析】可以将二维数组str看成是一个特殊的一维数组,其元素也是一个数组。
那么,str[0]为"One*World",str[1]为"One*Dream!
"。
38、阅读下列程序,当运行函