C语言练习题及参考答案.docx
《C语言练习题及参考答案.docx》由会员分享,可在线阅读,更多相关《C语言练习题及参考答案.docx(46页珍藏版)》请在冰豆网上搜索。
![C语言练习题及参考答案.docx](https://file1.bdocx.com/fileroot1/2023-3/31/2a685e70-ae31-4fbd-857f-5c8752f059e0/2a685e70-ae31-4fbd-857f-5c8752f059e01.gif)
C语言练习题及参考答案
练习题1及参考答案
1.单项选择题
(1)以下并非C语言的特点的是?
?
?
?
?
。
A.?
C语言简洁和紧凑
B.能够编制出功能复杂的程序
C.?
C语言可以直接对硬件进行操作
D.?
C语言移植性好
【答】B
(2)一个C程序的执行是从?
?
?
?
?
。
A.?
main()函数开始,直到main()函数结束
B.第一个函数开始,直到最后一个函数结束
C.第一个语句开始,直到最后一个语句结束
D.?
main()函数开始,直到最后一个函数结束
【答】A
(3)在C程序中,main()的位置?
?
?
?
?
。
A.必须作为第一个函数
B.必须作为最后一个函数
C.可以任意
D.必须放在它所调用的函数之后
【答】C
(4)一个C程序是由?
?
?
?
?
。
A.一个主程序和若干子程序组成
B.一个或多个函数组成
C.若干过程组成
D.若干子程序组成
【答】B
(5)下列说法正确的是?
?
?
?
?
。
A.在执行C程序时不是从main()函数开始的
B.?
C程序书写格式限制严格,一行内必须写一个语句
C.?
C程序书写格式比较自由,一个语句可以分行写在多行上
D.?
C程序书写格式严格要求一行内必须写一个语句,并要求行号
【答】C
2.填空题
(1)一个C源程序至少有?
?
①?
?
个main()函数和?
?
②?
?
个其他函数。
【答】①一?
②若干
(2)任何C语句必须以?
?
?
?
?
结束。
【答】分号
(3)C语言源程序的基本单位是?
?
?
?
?
。
【答】函数
(4)C编译程序的功能是?
?
?
?
?
。
【答】将C源程序编译成目标代码
练习题2及参考答案
1.单项选择题
(1)以下字符串为标识符的是?
?
?
?
?
。
A._MY?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.2_2222?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
C.short?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.LINE5
【答】A
(2)下列符号可以作为变量名的是?
?
?
?
?
。
A.+a?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.*p?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
C._DAY?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.nextday
【答】C
(3)设c是字符变量,则以下表达式正确的是?
?
?
?
?
。
A.c=666?
?
?
?
?
?
?
?
?
?
?
?
B.c='c'?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
C.c="c"?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.c="abcd"
【答】B
(4)23+'m'+3.6-123.45/'b'的结果是?
?
?
?
?
型数据。
A.char?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.double?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
C.int?
?
?
?
?
?
?
?
?
?
?
?
?
D.longint
【答】3.6和123.45均为double型,运算结果也是double型。
本题答案为B。
(5)若变量已正确赋值,以下符合C语言语法的表达式是?
?
?
?
?
。
A.a=a+7;?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.a=7+b+c,a++
C.int(12.3%4)?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.a=a+7=c+b
【答】选项A错误,以分号结尾是一个语句而不是表达式;选项B正确,是一个逗号表达式;选项C错误,因为%求模运算的两个运算数必须均为整数;选项D错误,给一个表达式(a+7)而非变量赋值是不正确的。
本题答案为B。
(6)整型变量x=1,y=3,经下列计算后,x的值不等于6的表达式是?
?
?
?
?
。
A.x=(x=1+2,x*2)?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.x=y>2?
6:
5
C.x=9-(--y)-(--y)?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.x=y*(int)(4.8/2)
【答】选项A的计算过程——x=1+2=3,再计算x=x*2=6;选项B的计算过程——y>2为真,x=6;选项C的计算过程——式中有两个--运算,最后y=1,x=9-1-1=7;选项D的计算过程——x=y*(int)(4.8/2)=y*2=6。
本题答案为C。
(7)若定义
intm=7,n=12;
则能得到值为3的表达式是?
?
?
?
?
。
A.n%=(m%=5)?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.n%=(m-m%5)
C.n%=m-m%5?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.(n%=m)-(m%=5)
【答】A、B、C、D选项各表达式的值分别是0、2、2、3。
本题答案为D。
(8)以下程序的运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
inti=5,j=6,m=i+++j;
?
?
?
printf("%d,%d,%d\n",i,j,m);
}
A.6,6,11?
?
?
?
?
?
B.5,6,11?
?
?
?
?
?
C.5,6,12?
?
?
?
?
?
D.6,6,12
【答】m=i+++j等价于m=(i++)+j。
本题答案为A。
(9)以下程序的运行结果是?
?
?
?
?
。
#include
voidmain()
{
?
?
?
doublef=3.14159;
?
?
?
intn;
?
?
?
n=(int)(f+10)%3;
?
?
?
printf("%d\n",n);
}
A.1?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.0?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
C.2?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.3
【答】f+10=13.14159,(int)(f+10)=13,13%3=1。
本题答案为A。
(10)以下程序的运行结果是?
?
?
?
?
。
#include
voidmain()
{
?
?
?
intn,i=2,j=4;
?
?
?
n=(++i==j--);
?
?
?
printf("%d\n",n);
}
A.0?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.1?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
C.2?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.3
【答】++i返回3,j--返回4,两者不等,故n=0。
本题答案为A。
2.填空题
(1)表达式语句与表达式的不同是?
?
?
?
?
。
【答】语句必须以分号结尾,而表达式结尾没有分号;语句可以出现在函数体中数据定义或声明语句后面的任何位置,而表达式只能出现在语句中规定的位置或表达式中(嵌套出现)。
(2)在C语言中可以利用?
?
?
?
?
将一个表达式的值转换成指定的类型。
【答】强制类型转换
(3)写出完成下列功能的表达式:
·如果变量c是大写字母,则将c转换成对应的小写,否则c的值不改变。
?
?
①?
?
·如果d是数字,则将d转换成相应的整数,否则d的值不改变。
?
?
②?
?
·返回两个整数x、y中较大者。
?
?
③?
?
·返回三个整数x、y和z中最大者。
?
?
④?
?
【答】①c=(c>='A'&&c<='Z')?
c-'A'+'a':
c
②d=(d>='0'&&d<='9')?
d-'0':
d
③(x>y)?
x:
y
④(x>y)?
(x>z?
x:
z):
(y>z?
y:
z)或(x>y&&x>z)?
x:
(y>z?
y:
z)
(4)以下程序的运行结果是?
?
?
?
?
。
#include
#include
main()
{
?
?
chars[]="ab\n\\\'\r\b";
?
?
printf("%d,%d\n",sizeof(s),strlen(s));
}
【答】字符串s由字符'a'、'b'、'\n'、'\\'、'\''、'\r'、'\b'等7个字符组成,故长度为7,但字符串本身有一个结束标志'\0'。
所以,s的长度为7,在内存中占用8个字节。
输出为:
8,7。
(5)以下程序的运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
inta=2,b=4,c=6,x,y;
?
?
?
y=(x=a+b),(b+c);
?
?
?
printf("y=%d,x=%d\n",y,x);
}
【答】结果为y=6,x=6。
(6)以下程序的运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
chara,b;
?
?
?
a='a';b='b';
?
?
?
a=a-32;b=b-32;
?
?
?
printf("%c,%c,%d,%d\n",a,b,a,b);
}
【答】A,B,65,66
(7)以下程序的运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
inti,j,x,y;
?
?
?
i=5;j=7;
?
?
?
x=++i;y=j++;
?
?
?
printf("%d,%d,%d,%d\n",i,j,x,y);
}
【答】执行x=++i后,i=6,x=6;执行y=j++后,j=8,y=7;所以输出为:
6,8,6,7。
(8)以下程序的运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
inta=1;
?
?
?
charc='a';
?
?
?
floatf=2.0;
?
?
?
printf("①:
%d\n",a+2!
=c-100);
?
?
?
?
printf("②:
%d\n",(a>c)>=(f>4));
?
?
?
?
printf("③:
%d\n",!
a==!
f);
?
?
?
?
printf("④:
%d\n",(!
a&&1)!
=(!
c||1));
?
?
?
?
printf("⑤:
%d\n",(!
a>2)?
3:
0)<((f!
=1)?
0:
1);
?
?
?
?
printf("⑥:
%d\n",(1,2,3)==(3,3,3));
}
【答】①:
1(a+2=3,c-100=-3,表达式结果=1(真))
②:
1(a>c的结果是0(假),f>4的结果是0,表达式结果=1)
③:
1(!
a的结果是0,!
f的结果是0,表达式结果=1)
④:
1(!
a&&1的结果是0,!
c||1的结果是1,表达式结果=1)
⑤:
0(!
a>2的结果是0,(!
a>2)?
3:
0的结果是0,f!
=1的结果是1,(f!
=1)?
0:
1的结果是0,表达式结果=0)
⑥:
1((1,2,3)表达式的结果是3,(3,3,3)的结果是3
练习题3及参考答案
1.单项选择题
(1)以下说法正确的是?
?
?
?
?
。
A.输入项可以为一个实型常量,如scanf("%f",3.5)
B.只有格式控制没有输入项也能进行正确输入,如scanf("%d")
C.当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf("%4.2f",&f)
D.当输入数据时,必须指明变量的地址,如scanf("%f",&f)
【答】D
(2)若a为整型变量,则以下语句?
?
?
?
?
。
a=-2L;
printf("%d\n",a);
A.赋值不合法?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.输出值为-2
C.输出为不确定值?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.输出值为2
【答】B
(3)若x和y均定义为int型,z定义为double型,以下scanf()函数调用语句不合法的是?
?
?
?
?
。
A.scanf("%d%lx,%le",&x,&y,&z);?
?
?
?
?
?
?
?
?
?
?
?
B.scanf("%2d*%d%lf",&x,&y,&z);
C.scanf("%x%*d%o",&x,&y);?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.scanf("%x%o%6.2f",&x,&y,&z);
【答】scanf()函数中没有精度控制。
本题答案为D。
(4)若a,b,c均定义为int型,要给它们输入数据,正确的输入语句是?
?
?
?
。
A.read(a,b,c);?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.scanf("%d%d%d",a,b,c);
C.scanf("%D%D%D",a,b,c);?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.scanf("%d%d%d",&a,&b,&c);
【答】D
(5)若有定义和语句:
intn=10;
printf("%\n",n);
其输出结果是?
?
?
?
。
A.输出10?
?
?
?
?
?
?
?
?
?
?
B.输出一空行?
?
?
?
?
?
?
?
?
?
?
?
C.没有输出?
?
?
?
?
?
?
?
D.编译不通过
【答】D
(6)若a是float型变量,b是unsigned型变量,以下输入语句中合法的是?
?
?
?
。
A.scanf("%6.2f%d",&a,&b);?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.scanf("%f%n",&a,&b);
C.scanf("%f%3o",&a,&b);?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.scanf("%f%f",&a,&b);
【答】C
(7)字母a的ASCII码为97,则下列语句的运行结果为?
?
?
?
。
chara='a';
a--;
printf("%d,%c\n",a+'2'-'0',a+'3'-'0');
A.b,c?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.a--运算不合法,故有语法错
C.98,c?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.格式描述和输出项不匹配,输出无定值
【答】C
(8)若k1,k2,k3,k4均为int型变量,为了将整数10赋给k1和k3,将整数20赋给k2和k4,则对应以下scanf()函数调用语句的正确输入方式是?
?
?
?
。
scanf("%d%d",&k1,&k2);
scanf("%d,%d",&k3,&k4);
A.1020
B.1020
C.10,20
D.1020
1020
1020
10,20
10,20
【答】D
(9)有如下程序,输入数据12345678↙后,x的值是?
①?
,y的值是?
②?
。
#include
main()
{
?
?
?
intx;
?
?
?
floaty;
?
?
?
scanf("%3d%f",&x,&y);
}
①A.12345?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.123?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
C.45?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.345
【答】①B?
②A
(10)有如下程序,输入数据25,13,10↙后,正确的运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
intx,y,z;
?
?
?
scanf("%d%d%d",&x,&y,&z);
?
?
?
printf("x+y+z=%d\n",x+y+z);
}
A.x+y+z=48?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.x+y+z=35
C.x+y+z=38?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.不确定值
【答】输入的数据与scanf()函数的格式不匹配。
本题答案为D。
(11)有如下程序,输入数据12345↙后,x的值是?
①?
,y的值是?
②?
。
#include
main()
{
?
?
?
intx;
?
?
?
floaty;
?
?
?
scanf("%3d%f",&x,&y);
}
①A.12?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.123?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
C.12345?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.0
②A.12.000000?
?
?
?
?
?
?
?
?
B.345.000000?
?
?
?
?
?
?
?
?
?
?
?
?
C.12345.000000?
?
?
?
?
?
?
?
?
?
D.0.000000
【答】①A?
②B
(12)有如下程序,输入数据后,程序的运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
inta;
?
?
?
floatb,c;
?
?
?
scanf("%2d%3f%4f",&a,&b,&c);
?
?
?
printf("a=%d,b=%f,c=%f\n",a,b,c);
}
A.a=98,b=765,c=4321?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.a=10,b=432,c=8765
C.a=98,b=765.000000,c=4321.000000?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.a=98,b=765.0,c=4321.0
【答】C
(13)以下程序的运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
floata=3.1415;
?
?
?
printf("|%6.0f|\n",a);
}
A.|3.1415|?
?
?
?
?
?
?
?
?
?
?
?
B.|3.0|?
?
?
?
?
?
?
?
C.|3|?
?
?
?
?
?
?
?
?
?
D.|3.|
【答】C
(14)以下程序的运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
floata=3.1415;
?
?
?
printf("|%06.0f|\n",a);
}
A.|000003|?
?
?
?
?
?
?
?
?
?
?
B.|3.1415|?
?
?
?
?
?
?
?
?
?
?
?
C.|00003.0|?
?
?
?
?
?
?
?
?
?
D.|3|
【答】A
(15)以下程序的运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
floata=3.1415;
?
?
?
printf("|%-6.0f|\n",a);
}
A.|3|?
?
?
?
?
?
?
?
?
?
?
?
?
B.|000003|?
?
?
?
?
?
?
?
?
?
?
C.|3.1415|?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.|3.0|
【答】A
(16)以下程序的运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
inti=010,j=10;
?
?
?
printf("%d,%d\n",++i,j--);
}
A.11.10?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.9,10?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
C.010,9?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.10,9
【答】B
(17)以下程序的运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
intx=10,y=10;
?
?
?
printf("%d,%d\n",x--,--y);
}
A.10,10?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.9,9?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
C.9,10?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.10,9
【答】D
2.填空题
(1)以下程序的运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
floatf=3.1415927;
?
?
?
printf("%f,%5.4f,%3.3f",f,f,f);
}
【答】3.141593,3.1416,3.142
(2)以下程序的运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
floatf=3.5;
?
?
?
printf("%f,%g",f,f);
}
【答】3.500000,3.5
(3)以下程序的运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
floatf=31.41592;
?
?
?
printf("%f,%e",f,f);
}
【答】31.415920,3.141592e+001
(4)以下程序的运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
intx=0177;
?
?
?
printf("%3d,%6d,%6o,%6x,%6u\n",x,x,x,x,x);
}
【答】127,127,177,7f,127
(5)以下程序的运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
intx=0177;
?
?
?
printf("%-3d,%-6d,%-6o,%-6x,%-6u\n",x,x,x,x,x);
}
【答】127,127,177,7f,127
(6)以下程序的运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
charc='A'+10;
?
?
?
printf("c=%c\n",c);
}
【答】c=K
(7)以下程序输入123456↙后,其运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
inta,b;
?
?
?
scanf("%2d%3d",&a,&b);
?
?
?
printf("a=%d,b=%d\n",a,b);
}
【答】a=12,b=345
(8)以下程序输入ABC↙后,其运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
charc;
?
?
?
scanf("%3c",&c);
?
?
?
printf("c=%c\n",c);
}
【答】c=A
(9)以下程序输入100↙后,其运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
intn;
?
?
?
scanf("%o",&n);
?
?
?
printf("n=%d\n",n);
}
【答】n=64
(10)以下程序输入x=1.23,y=50↙后,其运行结果是?
?
?
?
?
。
#include
main()
{
?
?
?
floatx,y;
?
?
?
scanf("x=%f,y=%f",&x,&y);
?
?
?
printf("x=%7.2f,y=%7.2f\n",x,y);
}
【答】x=1.23,y=50.00
(11)执行以下程序时,若从第一列开始输入数据,为使变量a=3,b=7,x=8.5,y=71.82,
c1='A',c2='a'正确的数据输入形式是?
?
?
?
?
。
#include