C语言选择题及答案
成绩的取得离不开我们平时的努力,以下是小编为大家整理的C语言选择题及答案,希望对大家的学习起到帮助!
选择题
1.在深度为5的满二叉树叶中,叶子结点的个数为 。
A.32
B.31
C.16
D.15
2.软件生命周期中,花费最多的阶段是 。
A.详细设计
B.软件编码
C.软件测试
D.软件维护
3.视图设计一般有3种设计次序,下列不属于视图设计次序的是 。
A.自顶而下
B.由内向外
C.由外向内
D.自底向上
4.下列数据结构中,能用二分法进行查找的是 。
A.顺序存储的有序线性表
B.结性链表
C.二叉链表
D.有序线性链表
5.以下叙述中错误的是 。
A.对于double类型数组,不可以直接用数组名对数组进行整体输入或输出
B.数组名代表的是数组所占存储区的首地址,其值不可改变
C.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息
D.可以通过赋初值的方式确定数组元素的个数
6.以下只有在使用时才为该类型变量分配内存的存储类型说明是 。
A.auto和static
B.auto和register
C.register和static
D.extern和register
7.下列可作为C语言赋值的语句的是 。
A.x一3,y=5
B.a=b=6
C.i--;
D.a,c
8.若整型变量a、b、c、d中的值依次为2、2、3、4,则条件表达式a A.1
B.2
C.3
D.4
9.下列叙述中错误的是 。
A.线性表是由n个元素组成的一个有限序列
B.线性表是一种线性结构
C.线性表的所有结点有且仅有一个前件和后件
D.线性表可以是空表
10.以下程序执行后sum的值是 。
main
int i,sum;
fori=1;i<6;i++sum+=i:
printf"1%d\n",sum:
A.15
B.14
C.不确定
D.0
11.设j为Int型变量,则下面for循环语句的执行结果是 。
forj=10;j>3;j--
ifj%3j--;
--j;--j;
printf"%d",j;
A.6 3
B.7 4
C.6 2
D.7 3
12.表示关系X<=Y<=Z的C语言表达式为 。
A.X<=Y&&Y<=Z
B.X<=YANDY<=Z
C.X<=Y<=Z
D.X<一Y&Y<一Z
13.设有如下定义:
int arr[]=6,7,8,9,10;
int*ptr:
ptr=arr;
*ptr2=2;
printf"%d,%d\n",*ptr,*ptr2:
则下列程序段的输出结果为 。
A.8,10
B.6,8
C.7,9
D.6,2
14.设有定义语句:
int x[-6]=2,4,6,8,5,7,*p=X,i;
要求依次输出X数组6个元素中的值,不能完成此操作的语句是 。
A.fori=0;i<6;i++printf"%2d",*p++;
B.fori=0;i<6;i++printf"%2d",*pq-i;
C.fori=0;i<6;i++printf"%2d",*p++;
D.fori=0;i<6;i++printf"%2d",*p++;
15.数字字符0的ASCII值为48,运行以下程序的输出结果是 。
main
char a=’1’,b=’2’;
printf"%C,",b++;printf"%d\n",b—a;
A.3,2
B.50,2
C.2,2
D.2,50
16.设有如下定义:
int*ptr;
则以下叙述中正确的是 。
A.ptr是指向一维组数的指针变量
B.ptr是指向int型数据的指针变量
C.ptr是指向函数的指针,该函数返回一个int型数据
D.ptr是一个函数名,该函数的返回值是指int型数据的指针
17.设有定义的语句:“char c1=92,c2=92;”,则以下表达式中的值为零的是 。
A.c1^c2
B.c1&c2
C.~c2
D.c1 | c2
18.以下程序的输出结果是 。
void funint*a,int i,int i
int t;
ifi t=a[i[;a[i]=a[j];a[j]一t;
i++;j--;
funa,i,j;
main
int K[]=2,6,1,8,i;
funx,0,3;
fori=0;i<1;i++printf"%2d",x[i];
printf"\n";
A.1,2,6,8
B.8,6,2,1
C.8,1,6,2
D.8,6,1,2
19.有以下程序:
main
int i,j;
forj=10;j<11;j++
fori=9;i if!j%ibreak;
ifi==j-1
printf"%d",j;
输出结果是 。
A.11
B.10
C.9
D.10 11
11.设j为Int型变量,则下面for循环语句的执行结果是 。
forj=10;j>3;j--
ifj%3j--;
--j;--j;
printf"%d",j;
A.6 3
B.7 4
C.6 2
D.7 3
12.表示关系X<=Y<=Z的C语言表达式为 。
A.X<=Y&&Y<=Z
B.X<=YANDY<=Z
C.X<=Y<=Z
D.X<一Y&Y<一Z
13.设有如下定义:
int arr[]=6,7,8,9,10;
int*ptr:
ptr=arr;
*ptr2=2;
printf"%d,%d\n",*ptr,*ptr2:
则下列程序段的输出结果为 。
A.8,10
B.6,8
C.7,9
D.6,2
14.设有定义语句:
int x[-6]=2,4,6,8,5,7,*p=X,i;
要求依次输出X数组6个元素中的值,不能完成此操作的语句是 。
A.fori=0;i<6;i++printf"%2d",*p++;
B.fori=0;i<6;i++printf"%2d",*pq-i;
C.fori=0;i<6;i++printf"%2d",*p++;
D.fori=0;i<6;i++printf"%2d",*p++;
15.数字字符0的ASCII值为48,运行以下程序的输出结果是 。
main
char a=’1’,b=’2’;
printf"%C,",b++;printf"%d\n",b—a;
A.3,2
B.50,2
C.2,2
D.2,50
16.设有如下定义:
int*ptr;
则以下叙述中正确的是 。
A.ptr是指向一维组数的指针变量
B.ptr是指向int型数据的指针变量
C.ptr是指向函数的指针,该函数返回一个int型数据
D.ptr是一个函数名,该函数的返回值是指int型数据的指针
17.设有定义的语句:“char c1=92,c2=92;”,则以下表达式中的值为零的是 。
A.c1^c2
B.c1&c2
C.~c2
D.c1 | c2
18.以下程序的输出结果是 。
void funint*a,int i,int i
int t;
ifi t=a[i[;a[i]=a[j];a[j]一t;
i++;j--;
funa,i,j;
main
int K[]=2,6,1,8,i;
funx,0,3;
fori=0;i<1;i++printf"%2d",x[i];
printf"\n";
A.1,2,6,8
B.8,6,2,1
C.8,1,6,2
D.8,6,1,2
19.有以下程序:
main
int i,j;
forj=10;j<11;j++
fori=9;i if!j%ibreak;
ifi==j-1
printf"%d",j;
输出结果是 。
A.11
B.10
C.9
D.10 11
20.有以下程序.
#include
main
char c1,c2,c3,c4,c5,c6;
scanf"%c%c%c%c",&c1,&c2,&c3,&c4;
c5=getchar; c6=getchar;
putcharc1;putcharc2;
printf"%c%c\n",c5,c6;
程序运行后,若从键盘输入从第l列开始
123<回车>
45678<回车>
则输出结果是 。
A.1267
B.1256
C.1278
D.1245
C语言选择题及答案
21.执行下面的程序后,a的值为 。
main
int a,b;
fora=1,b=1;a<=10;a++
ifb%3==l
b+=3;
continue;
b-=5;
A.7
B.8
C.9
D.10
22.下列叙述中正确的是 。
A.用E—R图能够表示实体集之间一对一的联系、一对多的联系、多对多的联系
B.用E—R图只能表示实体集之间一对一的联系
C.用E—R图只能表示实体集之间一对多的联系
D.用E—R图表示的概念数据模型只能转换为关系数据模型
23。若有运算符:>、一、<<、%、sizeof,则它们按优先级由高至低的正确排列顺序为 。
A.%、sizeof、>、<<、=
B.sizeof、%、>、=、<<
C.sizeof、<<、>、%、=
D.sizeof、%、<<、>、=
24.若变量a,b已正确定义,且b已正确赋值,则合法的语句是 。
A.b=doubleb;
B.inta=intb;
C.a=a++=5;
D.a=doubleb;
25.执行下列程序中的输出语句后,a的值是 。
main
int a;
printf"%d\n",a=2*3,a*5,a+7;
A.17
B.37
C.6
D.13
26.运行下列程序时,若输入的数据为“1,2,3”,则输出结果是 。
main
float a,b,c,t;
scanf"%f,%f,%f",&a,&b,&c;
ifa t=a;a=b.b=t;
ifa t=a;a=c;c=t;
itb t=b;b=C;c—=;
printf"%f\n%f\n%f\n",a,b,c;
A.1.00
2.00
3.00
B.1.00
3.00
2.00
C.1
3
2
D.3.00000
2.00000
1.00000
27.设有程序段:
int k=12:
whilek=1k=k一1;
则下列描述中正确的是 。
A.while循环执行10次
B.循环是无限循环
C.循环体语句一次也不执行
D.循环体语句执行一次
28.在执行完下列的c语句段之后,则B的值是 。
char a=’A’;
int b;
B=34&&56&&a<’b’;
A.0
B.1
C.TRUE
D.FALSE
29.有下列函数定义:
funfloat h
printf"%f,%f\n",h,h*h;
该函数的类型是 。
A.int类型
B.float类型
C.void类型
D.函数无类型说明,定义有错
30.有下列程序段:
int n,t=1,S=0;
scanf"%d",&n;
dos=s+t;t=t-2;whilet!=n;
为使此程序段不陷入循环,从键盘输入的数据应该是 。
A.任意正奇数
B.任意负偶数
C.任意正偶数
D.任意负奇数
31.若有说明语句:double*p,a;则通过scanf语句正确给输入项读人数据的程序段是 。
A.*p=&a;scanf"%1f”,p;
B.*p=&a;scanf"%f",p;
C.p=&a;scanf"%",*p;
D.p=&a;scanf"%1f",p;
32.下列程序的输出结果是 。
#include
main
int a[2][3]=1,2,3,4,5,6,*p[3],i;
p=a ;
fori=0;i<3;i++
ifi<2
p[1][i]=p[1][i]-1;
else
p[1][i]=1;
printf"%d\n",a[o][1]+a[1][1]+a[1][2];
A.8
B.7
C.12
D.9
33.执行下列程序后,输出的结果是 。
#include
#define SX X*X
void main
int a=9,k=3,m=2;
a/=Sk+m/Sk+m:
printf"%d",a;
A.1
B.4
C.9
D.0
34.设x=015,则x=x^017的值是 。
A.00001111
B.11111101
C.00000010
D.1 1000000
35.若fp是指向某文件的指针,且尚未读到文件末尾,则函数feoffp的返回值是 。
A.EOF B.-l
c.非零值D.0
36.设变量a、b、c、d和y都已正确定义并赋值。若有以下if语句:
ifa ifc==dy=0;
else y=1;
该语句所表示的含义是 。
A.y=0,a y=1,a≥b
B.y=0,a y=1,a≥b且c≠d
C.y=0,a y=1,a D.y=0,a y=1,c≠d
37.下列程序的运行结果是 。
#include
void main
int s=0,k;
fork=7;k>1;k--
switchk
case 1:
case 4:
case 7:
s++:
break;
case 2:
case 3:
case 6:break;
case 0:
case 5:
s+=2:
break;
printf"s=%d",s;
A.s=3
B.s=4
C.s=5
D.无输出结果
38.若i、j已定义成mt型,则下列程序段中内循环体的总执行次数是 。
fori=6;i>0;i--
forj=0;j<4;j++…
A.20
B.24
C.25
D.30
39.下列叙述中正确的是 。
A.只能在循环体内和switch语句体内使用break语句
B.eotinue语句的作用是结束整个循环的执行
C.在循环体内使用break语句或continue语句的作用相同
D.从多层循环嵌套中退出时,只能使用got0语句
40.有以下程序:
#include
void WriteStrchar*fn.char*str
FILE*fp;
fp=fopenfn,"w";fputsstr,fp;fclosefp;
main
WriteStr"tl.dat","start";
WriteStr"t1.dat","end";
程序运行后,文件t1.dat中的'内容是 。
A.start
B.end
C.startend
D.endrt
C语言选择题及答案
选择题答案与解析:
1.C。【解析】根据二叉树的性质及定义,一棵深度为k 且有2k-1个结点的二叉树为满二叉树。满二叉树的叶子结点为最后一层的结点数,又根据满二叉树的性质,在满二叉树的第i层上至多有2i-1个结点。因此深度为5的满二叉树的叶子结点数为25-1=16个。
2.D。【解析】本题考查对软件生命周期的理解,软件生命周期整体上可分为定义阶段、开发阶段和维护阶段。其中定义阶段包括可行性研究与计划制订和需求分析;开发阶段包括概要设计、详细设计、开发和测试;维护阶段是一个单独阶段,不包含在开发阶段内,它是所花费用最多的一个阶段。
3.C。【解析】视图设计的设计次序分3种:自顶向下、自底向上和由内向外。它们为视图设计提供了具体的操作方法,设计者可根据实际情况灵活掌握。
4.A。【解析】二分法查找只用于顺序存储的有序线性表,而顺序查找用在顺序存储的非有序线性表和线性链表。
5.C。【解析】数组下标从0开始,当数组元素的下标超出了定义的范围时,系统不会出“下标越界”的信息,运行会出错,因此在编程时务必检查下标是否越界。
6.B。【解析】在用静态static与外部extern定义变量时,系统立刻给其分配内存,而定义自动类auto与强制放入寄存器register类型变量时,只有当使用时才分配内存。
7.C。【解析】本题考查赋值语句,而选项A、B是表达式,不合题意,选项D中强制类型转换,应把类型名用括号括起来,选项C中i--也可写成i=i-1,故选择c选项。
8.C。【解析】本题考查三目运算符a 9.C。【解析】线性表可以是空表,在线性表中,第一个结点没有前驱结点前件,最后一个结点没有后继结点,其他结点有且只有一个前驱点后继点。
10.C。【解析】sum+=i等价于sun+i,在本题中sum 没有赋初值,而题中只输出sum的值,因此整个结果为不确定值。
11.B。【解析】当j=10时,for循环成立,j%3为1,if条件也为真,当执行完j--后,j为9,再执行“--j;--J;”后,j的值为7,因此输出7,继续循环执行j--后j为6,当j
=6时for循环成立,j%3为0,if条件为假,此时执行“-- j;--j;”后,j为4,输出4,再继续循环执行j--后j为3,当j=3时,for循环不成立,退出循环,故选择8选项。
12.A。【解析】题中X<=Y<=Z的意思为X<=Y 并且Y<=Z,在c语言中,要表示“且”的关系,应用“与”逻辑运算符,即“&&”,故选择A选项。
13.D。【解析】程序中ptr指针指向数组art的首地址,*ptr=arr[0]=6,*ptr2=2,故选D。
14.D。【解析】本题要求输出每个元素的值,D选项中*p++等价于*p=*p+1,其仅仅是对*p加1,并没有达到输出其每个值的作用。
15.C。【解析】b++是先用表达式的值然后自增l,因此表达式值为’2 ’,b为’3 ’;b-a=’3 ’-’1’=2,因此最后输出的结果为2,2,前一个为字符2,后一个为数字2。
16.C。【解析】本题中int*ptr的含义是指向函数
的指针变量,其为指向函数的指针变量,该函数返回一个int 型数据,故选择C选项。
17.A。【解析】当值相同时按位异或,则为0,按位或与按位与时仍不变,负数也为非0。
18.C。【解析】本题用了函数调用,fun中if语句成立则进行i,j的交换,用到主函势中则为把下标为0、3,1、2互换,因此,当执行完后X的数组为8,1,6,2,故选择C选项。
19.B。【解析】本题考多循环的使用,当j=10,i=9时, 循环成立,第一个if条件为假,第二个if条件i==j-1成立,则输出j的值为10,接者执行i++后,i为10;当i为10,for循环不成立,退出内层循环,此时执行j++后,j为11,循环不成立,退出循环。
20.D。【解析】scanf函数读取的是char型数据,所以回车时输入的换行符也是有效字符。于是cl,c2,c3,c4的内容分别是1,2,3,’\n’。
21.D。【解析】本题考查continue的用法,continue语句的作用是结束本次循环,直接进行下次循环。所以在程序中,只有当a=10时,才退出循环,故选择D选项。
22.A。【解析】用E—R图可以描述实体及其相互之间的联系,还可以描述多个实体集之间的联系和一个实体集内部实体之间的联系。用E—R图表示的概念数据模型不仅能转换为关系数据模型,还可以转换为其他数据模型,如网状模型和层次模型等。所以A的说法正确。
23.D。【解析】主要考查运算符的优先级。sizeof的优先级最高,其次是%<<>.优先级最低的是“=”。
24.B。【解析】在C语名中规定进行强制类型转换的格式是:类型名变量名;并且给表达式赋值。
25.C。【解析】本题考查逗号表达式。程序输出时输出一个%d,所以输出第一个a的值与后续无关。
26.D。【解析】本题考查if语句。第1个if语句,如果
a 27.C。【解析】本题考查while,while循环表达式k=1是个赋值表达式而不是逻辑表达式,k的初值为12不符合循环条件,所以循环体一次也不执行。
28.B。【解析】本题考查3个知识点:将一个字符赋给一个字符变量时,是将该字符对应的ASCIl码存储到内存单元中;常见ASCII码的值如A和a;只要逻辑与运算符&&的两个运算对象都为真时,返回值就是1。
29.A。【解析】本题考查函数值的类型,在函数定义时, 由于函数没有说明其类型,系统默认一律自动按整型int
处理。
30.D。【解析】本题主要考查do—while循环,因为变量t的初始值等于1,经过第一次do-while循环后,执行t= t-1这条语句一次,所以变量t的值为-1,判断关系表达式t!=n是否成立,如果关系表达式成立,则执行第二次循环,如果关系表达式不成立,退出循环。由此可见,只要输入变量n的值为负奇数,则一定会使t==n成立,故退出do-while循环。
31.D。【解析】double*p,a定义了一个指向双精度型的指针变量P和双精度型变量a,p=&a表示将变量a的地址赋给指针变量p;scanf"%If",p表示用键盘输入的数赋给指针变量P所指向的地址单元中,scanf函数要求在输入double型数据,格式控制符必须用%1f。否则,数据不能正确输入。所以选项D正确。
32.B。【解析】本题考查for循环及if…else语句嵌套,第1次执行for循环,p[1][0]=p[1][0]=p[1][0]-1=3;第2 次执行for循环,p[1][1]=p[1][1]-1=4;第3次执行for 循环,p[1][2]=l,最后输出的是a[0][1]+a[1][1]+a[1] [2]=2+4+1=7。
33.D。【解析】本题主要考查带参数的宏定义,过程如下:由于定义为definex x*x没有括号优先级,所以:a= a/Sk+m/Sk+m=a/k+m*k+m/k+m*k+m =9/3+2*3+2/3+2*3+2=0。
34.C。【解析】本题考查按位异或运算,异或就是相同为0,不同为1化为二进制00001101,017的二进制为000001111,两者异或结果为00000010。
35.D。【解析】本题考查leontp函数,其功能是:测试所指的文件的位置指针是否已达到文件尾,如果已达到文件尾,则函数返回非0值;否则返回0,表示文件未结束。
36.C。【解析】语句“ifc==dy=0;else y=1;”是ifa 37.B。【解析】运行程序,当k=7时switch7执行case:7,s++后s=1,break跳出。k--,k=7继续循环switch6,执行case 6;直接跳出循环,k--变成5,继续循环switch5,执行case 5后面的语句s+=2,也相当于s= s+2,此时s为3,break跳出,k变为4,继续循环,执行case 4为空,继续执行case 7;s++为4跳出循环,k--变为3,继续循环,执行case 3,空语句往下执行case 6,跳出,k -- 为2,继续循环,执行case 2;空语句往下执行case 3,空语句再执行case 7,跳出循环,k--为1不符合循环,退出,此时S=4。
38.B。【解析】本题考查for循环的使用。对于第1个for循环,任何一个i,内层j的循环都要使j~0到3,j=4时不符合,所以退出j循环;然后i减1,J仍然要从0~3,j=4 时退出J循环直到i变成0,退出i循环。第一条for语句执行6次,第二条for语句执行4次,所以内循环体执行6*4 =24次。
39.A。【解析】本题考查循环跳出的知识点:①break语句可以出现在switch循环体内及语句体内,它的作用是跳出循环体,不能用于其他的语句;②continue语句的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,而接着判定循环条件是否成立,确定下一次循环是否继续执行,执行contiune语句不会使整介循环终止;③循环体内使用break语句会使循环提前终止;④从多层循环嵌套中退出时,可以使用90t0语句或者break语句。
40.B。【解析】用"w"方式打开文件,意思是如果文件名相同则覆盖原来的文件,所以当再次输入时覆盖了第一次的内容,B选项正确。