C语言选择题参考答案1.docx
《C语言选择题参考答案1.docx》由会员分享,可在线阅读,更多相关《C语言选择题参考答案1.docx(29页珍藏版)》请在冰豆网上搜索。
![C语言选择题参考答案1.docx](https://file1.bdocx.com/fileroot1/2022-11/23/ef73f526-3729-4e9e-ac53-feee8f11a496/ef73f526-3729-4e9e-ac53-feee8f11a4961.gif)
C语言选择题参考答案1
1、C语言中下列叙述正确的是______。
不能使用do-while语句构成循环
do-while语句构成的循环,必须用break语句才能退出
do-while语句构成的循环,当while语句中的表达式值为非零时结束循环
do-while语句构成的循环,当while语句中的表达式值为零时结束循环
D
本题的考查点是do-while语句。
选项A是错误的,C语言支持do-while语句;选项B是错误的,do-while构成的循环,当while语句中的表达式值为零时结束循环,而不是非零;选项C也是错误的。
故本题答案为D。
3、能正确表示a和b同时为正或同时为负的逻辑表达式是______。
(a>=0||b>=0)&&(a<0||b<0)
(a>=0&&b>=0)&&(a<0&&b<0)
(a+b>0)&&(a+b<=0)
a*b>0
D
逻辑表达式是指用逻辑运算符将关系表达式或逻辑量连接起来。
选项A中,表达式表示的是a,b为异号;
选项B中,表达式表示的是0,因为没有满足条件的值;
选项C中,表达式表示的是0,因为没有满足条件的值;
选项D表示的是a和b为同号。
故本题答案为D。
5、请选出可用作C语言用户标识符的一组标识符______。
①void②a3_b3③For④2a
define_123_abcDO
WORDIFcasesizeof
1
2
3
4
B
本题的考查点是C语言的标识符。
C语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。
①中的void和define都和C语言的关键字重名,不合法;
③中的case和C语言的关键字重名,不合法;
④中的2a是数字打头而且sizeof和C语言的关键字重名,不合法。
故本题答案为B。
6、若x和y都是int型变量,x=100、y=200,且有下面的程序片段
printf("%d",(x,y));
上面程序片段的输出结果是______。
200
100
200,100
输入格式符不够,输出不确定的值
A
本题的考查点是逗号表达式。
在(x,y)中的","是一个特殊的运算符,叫做逗号运算符,它的一般形式为:
表达式1,表达式2,求解过程为:
先求解表达式1,再求解表达式2,整个表达式的值是表达式2的值,(x,y)的值为200,所以输出结果为200。
故本题答案为A。
8、若执行下面的程序时从键盘上输入3和4,
main()
{inta,b,s;
scanf("%d%d",&a,&b);
s=a;
if(a
s=s*s;
printf("%d\n",s);
}
则输出是______。
14
16
18
20
B
本题的考查点是给变量赋值。
用户输入的3和4分别赋给了a和b,在if语句进行判断时,因为表达式的值为真,所以b的值将赋给s,s*s=16,最后的打印结果为16。
故本题答案为B。
9、设ch是char型变量,其值为A,且有下面的表达式
ch=(ch>='A'&&ch<='Z')?
(ch+32):
ch
上面表达式的值是______。
A
a
Z
Z
B
本题的考查点是条件运算符。
条件表达式的一般形式为:
表达式1?
表达式2:
表达式3,条件运算符的执行顺序:
先求解表达式1,若非0则求解表达式2,此时表达式2的值就作为整个表达式的值,若表达式1的值为0,则求解表达式3,此时表达式3的值就作为整个表达式的值。
本题中,表达式1的值为1,所以整个表达式的值为表达式(ch+32)的值,即为a。
故本题答案为B。
10、设有以下语句,其中不是对a数组元素的正确引用的是______。
(其中0≤i<10)
inta[10]={0,1,2,3,4,5,6,7,8,9,},*p=a;
a[p-a]
*(&a[i])
p[i]
*(*(a+i))
D
本题的考查点是通过指针引用数组元素。
11、下面程序
main()
{
intx=10,y=3;
printf("%d\n",y=x/y);
}
的输出是______。
0
1
3
不确定的值
C
本题的考查点是除法运算。
x/y的结果约为3.33333,但是由于打印要求为整型,所以自动转换为整型(相当于截取整数位),打印结果为3。
故本题答案为C。
12、下面的程序中______错误(每行程序前面的数字是行号)。
1#include
2main()
3{
4floata[3]={0.0};
5inti;
6for(i=0;i<3;i++)scanf("%d",a[i]);
7for(i=1;i<3;i++)a[0]=a[0]+a[i];
8printf("%f\n",a[0]);
9}
没
第4行
第6行
第8行
C
本题的考查点是函数scanf()的格式输入。
根据函数scanf()的语法可知,在函数中的参数表列部分,应当是欲赋值变量的内存地址,象第六行这样,将数组元素直接放在参数表列中是无法达到给数组元素赋值的目的。
故本题答案为C。
13、有如下程序
main()
{
intn=9;
while(n>6)
{
n--;
printf("%d",n);
}
}
该程序的输出结果是______。
987
876
8765
9876
B
本题考查点是While语句循环次数的问题。
符合n>6的n只有7,8,9;所以循环次数为3。
选项C、D可以排除。
又因n在输出之前要执行n--,所以输出结果只能是876。
本题答案为B。
14、若变量已正确定义并赋值,下面符合C语言的表达式是______。
a:
=b+1
a=b=c+2
int18.5%3
a=a+7=c+b
B
选项A和C显然错误;对于表达式a=a+7=c+b(答案D),是先执行赋值表达式a+7=c+b,再把这个表达式的值赋给a,显然,表达式a+7=c+b非法,因为赋值表达式的左值不能为常量或表达式。
本题答案为B。
15、有如下程序
main()
{floatx=2.0,y;
if(x<0.0)y=0.0;
elseif(x<10.0)y=1.0/x;
elsey=1.0;
printf("%f\n",y);
}
该程序输出结果是______。
0.000000
0.250000
0.500000
1.000000
C
本题考查的是IF…ELSE语句的使用。
x=2.0,符合第二个IF语句的条件x<10.0,所以执行y=1.0/x语句,即y=1.0/2.0=0.500000。
本题答案为C。
16、有如下程序段
int*p,a=10,b=1;
p=&a;a=*p+b;
执行该程序段后,a的值为______。
12
11
10
编译出错
B
执行p=&a;后,p指向整数a,*p即p的目标变量,也就是a;所以a=*p+b等价于a=a+b,可知a的值最终为11。
本题答案为B。
17、有如下程序
main()
{
intn[5]={0,0,0},i,k=2;
for(i=0;iprintf("%d\n",n[k]);
}
该程序的输出结果是______。
不确定的值
2
1
0
D
一维数组和多维数组的定义、初始化和引用
18、有如下定义
structperson{charname[9];intage;};
structpersonclass[10]={"John",17,
"Paul",19,
"Mary",18,
"Adam",16,};
根据上述定义,能输出字母M的语句是______。
printf("%c\n",class[3].name);
printf("%c\n",class[3].name[1]);
printf("%c\n",class[2].name[1]);
printf("%c\n",class[2].name[0]);
D
结构体和共用体类型数据的定义方法和引用方法
19、以下列出C语言常量中,错误的是______。
OxFF
1.2e0.5
2L
'\72'
B
C的数据类型及其定义方法
20、以下变量x、y、z均为double类型且已正确赋值,不能正确表示数学式子x/(y*z)的C语言表达式是______。
x/y*z
x*(1/(y*z))
x/y*1/z
x/y/z
A
C的数据类型及其定义方法
21、设有以下说明语句
structex
{intx;floaty;charz;}example;
则下面的叙述中不正确的是______。
struct是结构体类型的关键字
example是结构体类型名
x,y,z都是结构体成员名
structex是结构体类型
B
结构体和共用体类型数据的定义方法和引用方法
22、X、Y、Z被定义为int型变量,若从键盘给X、Y、Z输入数据,正确的输入语句是______。
INPUTX,Y,Z;
scanf("%d%d%d",&X,&Y,&Z);
scanf("%d%d%d",X,Y,Z);
read("%d%d%d",&X,&Y,&Z);
B
本题考查C语言的格式化输入语句。
C语言中没有INPUT与read语句,scanf()语句的格式为:
scanf("格式字符串",变量地址1,变量地址2,...);
本题答案C中,应为变量地址。
本题答案为B。
23、t为int类型,进入下面的循环之前,t的值为0,
while(t=1)
{......}
则以下叙述中正确的是______。
循环控制表达式的值为0
循环控制表达式的值为1
循环控制表达式不合法
以上说法都不对
B
本题考查C语言的while循环语句。
本题的t=1是一个赋值表达式,其值为变量的值,所以while语句的循环控制表达式的值为1。
本题答案为B。
24、设有以下函数;
f(inta)
{intb=0;
staticintc=3;
b++;c++;
return(a+b+c);
}
如果在下面的程序中调用该函数,则输出结果是______。
main()
{inta=2,i;
for(i=0;i<3;i++)printf("%d\n",f(a));
}
A)B)C)D)
7777
89107
911137
A
B
C
D
A
本题考查的是C语言的静态数据类型。
静态数据类型的变量的值在退出了函数时依然存放在内存中,且只初始化一次。
本题答案为A。
25、以下定义语句中,错误的是______。
inta[]={1,2};
char*a[3];
chars[10]="test";
intn=5,a[n];
D
本题考查C语言数组的定义与初始化。
在C语言中数组的初始化可以对部分元素,数组的定义,不能含有变量。
本题答案为D。
26、以下程序的输出结果是______。
main()
{inti,a[10];
for(i=9;i>=0;i--)a[i]=10-i;
printf("%d%d%d",a[2],a[5],a[8]);
}
258
741
852
369
C
本题使循环语句给数组元素赋值。
C语言中for循环语句的一般形式为:
for(表达式1;表达式2;表达式3)
{
语句部分;
}
本题答案为C。
27、以下程序的输出结果是______。
main()
{inta,b;
for(a=1,b=1;a<=100;a++)
{if(b>=10)break;
if(b%3==1)
{b+=3;continue;}
}
printf("%d\n",a);
}
101
6
5
4
D
本题主要考查考生对C语言中的循环语句和程序的执行逻辑。
本题中for循环语句共执行3次,所以a的值累加3次,结果为4。
本题答案为D。
CONTINUE语句和BREAK语句
28、以下程序的结果是______。
inta,b;
voidfun()
{a=100;b=200;}
main()
{inta=5,b=7;
fun();
printf("%d%d\n",a,b);
}
100200
57
200100
75
B
局部变量和全局变量
29、以下叙述中正确的是______。
C语言中的文件是流式文件,因此只能顺序存取数据
打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖
在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据
当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失
D
文件的打开与关闭(FOPEN,FCLOSE)
30、C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是______。
Void
int
float
double
B
函数的类型和返回值
31、有以下程序
structSTU
{charnum[10];floatscore[3];}
main()
{structSTUs[3]={{"20021",90,95,85},
{"20022",95,80,75},
{"20023",100,95,90}},*p=s;
inti;floatsum=0;
for(i=0;i<3;i++)
sum=sum+p->score[i];
printf("%6.2f\n",sum);
}
程序运行后的输出结果是______。
260.00
270.00
280.00
285.00
B
结构体和共用体类型数据的定义方法和引用方法
32、有以下程序
main()
{intp[7]={11,13,14,15,16,17,18},i=0,k=0;
while(i<7&&p[i]%2){k=k+p[i];i++;}
printf("%d\n",k);
}
执行后输出的结果是______。
58
56
45
24
D
一维数组和多维数组的定义、初始化和引用
33、设变量x为float型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是______。
x=x*100+0.5/100.0;
x=(x*100+0.5)/100.0
x=(int)(x*100+0.5)/100.0;
x=(x/100+0.5)/100.0;
C
表达式语句,空语句,复合语句
34、有以下程序
main()
{inti,s=0;
for(i=1;i<10;i+=2)s+=i+1;
printf("%d\n",s);
}
自然数1~9的累加和
自然数1~10的累加和
自然数1~9中奇数之和
自然数1~10中偶数之和
D
FOR循环结构
35、若程序中定义了以下函数
doublemyadd(doublea,doubleb)
{return(a+b);}
并将其放在调用语句之后,则在调用之前应该对函数进行说明,以下选项中错误的说明是______。
doublemyadd(doublea,b);
doublemyadd(double,double);
doublemyadd(doubleb,doublea);
doublemyadd(doublex,doubley);
A
对函数的“定义”和“说明”不是一回事。
“定义”是指对函数功能的确立,包括指定函数名,函数值类型、形参及其类型、函数体等,它是一个完整的、独立的函数单位。
而“说明”则是对已定义的函数的返回值进行类型说明(或称“申明”),它只包括函数名、函数类型、以及一个空的括弧,不包括形参和函数体。
对被调函数进行说明的作用是告诉系统:
在本函数中将要用到的某函数是XX类型。
也就是说明该函数的返回值的类型,以便在主调函数中按此类型对函数值作相应的处理。
本题选项A中,对变量b的类型没有说明,默认的为整型,不合题意。
故本题答案为A。
36、下面程序的功能是输出以下形式的金字塔图案:
*
***
*****
*******
main()
{inti,j;
for(i=1;i<=4;i++)
{for(j=1;j<=4-i;j++)printf("");
for(j=1;j<=______;j++)printf("*");
printf("\n");
}
}
在下划线处应填入的是______。
i
2*i-1
2*i+1
i+2
B
循环的嵌套
37、请选出以下程序的输出结果______。
#include
sub(intx,inty,int*z){
*z=y-x;
}
main(){
inta,b,c;
sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);
printf("%d,%d,%d\n",a,b,c);
}
5,2,3
-5,-12,-7
-5,-12,-17
5,-2,-7
B
用指针作函数参数
38、请选出以下程序段的输出结果______。
#include
#defineMIN(x,y)(xx:
y
main()
{
inti,j,k;
i=10;j=15;
k=10*MIN(i,j);
printf("%d\n",k);
}
15
100
10
150
C
宏定义:
不带参数的宏定义;带参数的宏定义
39、设有如下的程序段
charstr[]="Hello";
char*ptr;
ptr=str;
执行完上面的程序段后,*(ptr+5)的值为______。
'o'
'\0'
不确定的值
'o'的地址
B
字符串与字符数组
本题的考查点是字符数组的结束标志。
ptr=str实际上是将串str的首地址赋给了指针变量ptr,所以ptr+5将指向str串的第六个数组元素,即是串的隐含结束标志'\0',*(ptr+5)='\0',最后的结果为'\0'。
故本题答案为B。
40、已有定义:
charc;,程序前面已在命令中包含ctype.h文件。
不能用于判断c中的字符是否为大写字母的表达式是______。
isupper(c)
'A'<=c<='Z'
'A'<=c&&c<='Z'
c<=('z'-32)&&('a'-32)<=c
B
C运算符的种类、运算优先级和结合性
41、下面程序的输出是______。
intm=13;
intfun2(intx,inty)
{intm=3;
return(x*y-m);
}
main()
{inta=7,b=5;
printf("%d\n",fun2(a,b)/m);}
1
2
7
10
B
本题的考查点是函数的调用。
函数fun2()的作用是将形参x和y的值相乘后-3,在fun2()中的变量m是一个局部变量,它的值在fun2()函数内有效,在主函数中的m指的是全局变量,其值为13,所以fun2(a,b)/m的值为(7*5-3)/13,即2。
故本题答案为B。
42、有以下程序
#include
intfun(chars[])
{intn=0;
while(*s<='9'&&*s>='0'){n=10*n+*s-'0';s++;}
return(n);
}
main()
{chars[10]={'6','1','*','4','*','9','*','0','*'};
printf("%d\n",fun(s));
}
程序的运行结果是______。
9
61490
61
5
C
字符串与字符数组
本题考查的是指针的应用。
本题主函数中定义了一个字符型数组s,当调用fun函数时,将字符型数组s的地址指向形参字符数组s,则形参与实参共用占同一存储单元,其值也相等。
在函数fun中,第一次执行while循环时,*s='6',所以while(*s<='9'&&*s>='0')成立,执行n=10*n+*s-'0';即n=10*0+'6'-'0',其中字符'6'和'0'均代入ASCII码进行运算,所以n=6;
s++表示指针变量s后移一位,即*s='1',所以while(*s<='9'&&*s>='0')成立,执行n=10*n+*s-'0';由于前一次循环执行后的n的值为6,此时的等式为(n=10*6+'1'-'0'),故n=61;指针变量继续后移一位,*s='*',所以while(*s<='9'&&*s>='0')不成立,返回n=61的值。
故本题程序输出结果是61。
本题答案为C。
43、以下函数返回a所指数组中最小值所在的下标值。
fun(int*a,intn)
{
inti,j=0,p;
p=j;
for(i=j;iif(a[i]return(p);
}
在下划线处应填入的是______。
i=p
a[p]=a[i]
p=j
p=i
D
一维数组和多维数组的定义、初始化和引用
44、有如下程序:
longfib(intn)
{
if(n>2)
return(fib(n-1)+fib(n-2));
else
return
(2);
}
main()
{
printf("%d\n",fib(3));
}
该程序的输出结果是______。
2
4
6
8
B
函数的正确调用,嵌套调用,递归调用
45、若fp是指向某文件的指针,且已读到此文件的末尾,则函数feof(fp)的返回值是______。
EOF
0
非零值
NULL
C
本题的考查点是文件结束符的返回值问题。
函数feof是用来判断文件是否已读到末尾,如果已读到末尾则返回非零值,否则返回0。
本题答案为C。
文件的读写,文件的定位
46、有如下程序
intfunc(inta,intb)
{return(a+b);}
main()
{intx=2,y=5,z=8,r;
r=func(func(x,y),z);
printf("%d\n",r);
}
该程序的输