复习解析加练习.docx
《复习解析加练习.docx》由会员分享,可在线阅读,更多相关《复习解析加练习.docx(76页珍藏版)》请在冰豆网上搜索。
![复习解析加练习.docx](https://file1.bdocx.com/fileroot1/2023-4/16/110cfd89-9425-471c-b2b0-ce7609bc90d9/110cfd89-9425-471c-b2b0-ce7609bc90d91.gif)
复习解析加练习
第一章复习p6
1.以下叙述正确的是_____________。
A)C语言比其他语言高级
B)C语言可以不用编译就能被计算机识别执行
C)C语言以接近英语国家的自然语言和数学语言作为语言的表达形式
D)C语言出现得最晚,具有其他语言的一切优点
答案:
C
解析:
本题考查了C语言的发展和特点。
首先,C语言是中级语言,说它比其他语言都要高级是不正确的,所以A选项错误。
其次,__个C源程序需要经过编译,连接后才可以执行,所以B选项错误。
而C语言之后又出现了Java等更新更高级的语言,所以D选项明显也是错误的。
所以答案选C。
2.在一个C语言程序中____________________________________。
A)main函数必须出现在所有函数之前
B)main函数可以在任何地方出现
C)main函数必须出现在所有函数之后
D)main函数必须出现在固定位置
答案:
B
解析:
本题i要考查了voidmain()函数在程序中的位置.voidmain()函数在程序中的位置是任意的,所以答案选B。
3.以下叙述中正确的是_________________________.
A)C程序中注释部分可以出现在程序中任意合适的地方
B)花括号"{"和"}"只能作为函数体的定界符
C)构成C程序的基本单位是函数,所有函数名都可以由用户命名
D)分号是C语句之间的分隔符,不是语句的一部分
答案:
A
解析:
本题考查了C程序的构成,A选项显然是正确的,因为只要用"/*"和"*/"括起来的部分,C程序就认为是注释,编译时会直接跳过,不会影响源程序。
花括号"{"和"}"不仅能作为函数体的界定符,它还能作为复合语句的界定符,所以B选项错误。
用户虽然可以对函数命名,但是C程序中的库函数的名称是固定的,用户不能对这些函数进行命名,所以C选项错误.一个语句如果没有分号,它就不能构成一个语句,分号是语句的一部分,所以D选项错误。
所以答案选A.
4.以下叙述中正确的是________________________.
A)C语言的源程序不必通过编译就可以直接运行
B)C语言中的每条可执行语句最终都将被转换成二进制的机器指令
C)C源程序经编译形成的二进制代码可以直接运行
D)C语言中的函数不可以单独进行编译
答案:
B
解析:
C程序从编写到运行需要经过编译和连接后才能生成可执行的文件,所以A选项中说C语言不经过编译便能运行的说法是明显错误的。
而编译出的二进制编码不经过连接程序与库函数连接起来,是不可能生成可执行文件的,所以C选项错误。
而C语言中函数是可以单独进行编译的,所以D选项错误。
所以答案选B.
5.以下不能定义为用户标识符的是__________________________.
A)MainB)_0C)_intD)sizeof
答案:
D
解析:
本题i要考查标识符的定义规则,标识符应满足:
①所有标识符必须由一个字母(a~z,A~Z)或下划线(_)开头;
②标识符的其他部分可以用字母,下划线或数字(0~9)组成:
③大小写字母表示不同意义,即代表不同的标识符;
④标识符只有前32个字符有效:
⑤标识符不能使用C语言的关键词.
A,B,C都满足要求,而D选项的sizeof是一个关键字,用来计算表达式和类型的字节数,它不能用作标识符。
所以答案选D.
第一章练习题
一.选择题
1.能将高级语言编写的源程序转换为目标程序的是________________________________________________。
A)链接程序B)解释程序C)编译程序D)编辑程序
C
2.以下叙述中正确的是_____________。
A)构成C程序的基本单位是函数
B)可以在一个函数中定义另一个函数
C)voidmain()函数必须放在其他函数之前
D)所有被调用的函数一定要在调用之前进行定义
A
3.一个C程序的执行是从_____________。
A)本程序的main函数开始,到main函数结束
B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
C)本程序的main函数开始,到本程序文件的最后一个函数结束
D)本程序文件的第一个函数开始,到本程序main函数结束
A
4.一个C语言程序是由_____________。
A)一个主程序和若干子程序组成B)函数组成
C)若干过程组成D)若干子程序组成
B
5.以下叙述正确的是_____________。
A)在C程序中,main函数必须位于程序的最前面
B)C程序的每行中只能写一条语句
C)C语言本身没有输入输出语句
D)在对一个C程序进行编译的过程中,可以发现注释中的拼写错误
C
二,填空题
1.在一个C源程序中,注释部分两侧的分界符分别为_____________和_____________。
/**/
2.一个C源程序中至少应包括一个_____________。
主程序
3.在C语言中,格式输入操作是由库函数_____________完成的,格式输出操作是由库函数_____________完成的。
scanf(),printf()
4.C源程序的基本单位是_____________。
函数
/////////////////////////////26
第二章复习
1.下列叙述中正确的是_________________________.
A)C语言中既有逻辑类型也有集合类型
B)C语言中没有逻辑类型但有集合类型
C)C语言中有逻辑类型但没有集合类型
D)C语言中既没有逻辑类型也没有集合类型
答案:
D
解析:
本题考查C语言中的数据类型,C语言中有字符型,整型,实型,构造类型,指针类型和空类型等。
C语言中没有逻辑类型和集合类型,所以选D选项。
2.以下符合C语言语法的实型常量是______________.
A)1.2E0.5B)3.14.159EC).5E-3D)E15
答案:
C
解析:
本题考查C语言常量中的实型常量的指数形式。
字母E或e之前之后必须有数宇,且E或e后面指数必须为整数.
A选项中e后面的数字是小数,所以错误.
B选项e后面没确数字,所以也是错误的.
D选项e前面没有数字,是错误的.
C选项符合规则,所以答案选C.
3.若有以下程序:
voidmain()
{
chara;
a='H'-'A'+'0';
printf("%c\n",a);
}
执行后输出结果是_________________________。
答案:
7
4.有以下程序:
voidmain()
{
intm=12,n=34;
printf("%d%d",m++,++n);
printf("%d%d\n",n++,++m);
}
程序运行后的输出结果是________________________________________________。
A)12353514B)12353513C)12343514D)12343513
答案:
A
解析:
本题考查的是自增自减运算的用法。
注意以下规则:
++i,i自增1后再参与其他运算。
--i,i自减1后再参与其他运算.
i++,i参与运算后,i的值再自增1;i--,i参与运算后,i的值再自减1.
分析此题,m++,先显示m,为12:
再自增,m变成13;
++n,先自增,n变为35,再显示,为35。
然后n++,n先显示,为35:
再自增,n变成36。
++m,m先自增,变成14,再显示,为14.
所以最后显示为12353514,所以答案选A.
5.若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|<10的是____________________________________.
A)abs(x-y)<10B)x-y>-10&&x-y<10
C)(x-y)<-10||!
(y-x)>10D)(x-y)*(x-y)<100
答案:
C
本题考查了关系表达式与逻辑表达式的用法。
选项A中"abs"是求整数绝对值的库函数,显然这种表示是直接按照题意来的,所以A选项正确.
|x-y|<10相当于-10而利用基本的数学知识我们也可以很容易知道D选项是正确的。
而在C选项中,要满足题意的话,x-y<-10时,整个逻辑表达式结果应为"假",即为0,因为x-y<-10成立时,绝对值已经大于10了.而C项中,假如x-y<-10,表达式中第一部分就为"真",值为1,经过或运算,显然表达式结果为1,与题意相违背,所以C选项是不能表达题中关系的,所以选C.
6.以下程序运行后的输出结果是_________________________.
voidmain()
{
inta,b,c;
a=1O;
b=20;
c=(a%b<1)||(a/b>1);
printf("%d%d%d\n",a,b,c);
}
答案:
10200
解析:
本题考查的是算数表达式和逻辑表达式的用法,同时考察了基本的优先级关系。
这道题c=(a%b<1)||(a/b>1)中,首先应算出括号中表达式的值.a%d=10%20,值为10,10>1,所以a%b再看a/b,a/b=10/20,由于是整型,则a/b=0,所以a/b>1值为0.根据逻辑或的用法,可得(a%b<1)||(a/b>1)=0,则c=0.所以答案就为10200。
7.已有定义:
intx=3,y=4,z=5;则表达式!
(x+y)+z-1&&y+z/2的值是_________________________.
A)6B)0C)2D)1
答案:
D
解析:
本题考查C语言中的优先级问题。
本题表达式!
(x+y)+z-1&&y+z/2中运算符的优先级由高到低为(),!
/,+,-,&&,因此计算时,先计算x+y=7,然后计算!
7,为0,0+z-1=4,y+z/2=4+2=6:
最后4&&6=1,所以答案选D。
1.若有条件表达式(exp)?
a++:
b--,则以下表达式中能完全等价于表达式(exp)的是____________________________________。
A)(exp==0)B)(exp!
=0)
C)(exp==1)D)(exp!
=1)
B
2.设以下变量均为int类型,则值不等于7的表达式是______________.
A)(x=y=6,x+y,x+1)B)(x=y=6,x+y,y+1)
C)(x=6,x+1,y=6,x+y)D)(y=6,y+1,x=y,x+1)
C
3.设C语言中,一个int型数据在内存中占2个字节,则unsignedint型数据的取值范围为____________________________________.
A)O~255B)0~32767C)0~65535D)0~2147483647
C
4.设变量n为float类型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是__________________________.
A)n=(n*100+0.5)/100.0B)m=n*100+0.5,n=m/100.0
C)n=n*100+0.5/100.0D)n=(n/100+0.5)*100.0
B
5.sizeof(float)是_____________。
A)一个双精度型表达式B)一个整型表达式
C)一种函数调用D)一个不合法的表达式
B
6.设有说明:
charw;intx;floaty;doublez;
则表达式w*x+z-y值的数据类型为_________________________;
A)floatB)charC)intD)double
D
7.语句printf("a\bre\'hi\'y\\\bou\n");的输出结果是__________________________________________________。
(说明:
'\b'是退格符)
A)a\bre\'hi\'y\\\bouB)a\bre\'hi\'y\bou
C)re'hi'youD)abre'hi'y\bou
C
8.下列程序的输出结果是__________________________。
voidmain()
{
doubled=3.2;
intx,y;
x=1.2;
y=(x+3.8)/5.0;
printf("%d\n",d*y);
}
A)3B)3.2C)0D)3.07
C
9.已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'+'6'-'3'后,c2的值为__________________________________________________。
A)DB)68C)不确定的值D)C
A
10.以下不正确的叙述是____________________________________。
A)在C程序中,逗号运算符的优先级最低
B)在C程序中,APH和aph是两个不同的变量
C)若a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,而b中的值不变
D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值
D
11.有以下程序:
voidmain()
{
inta=1,b=2,m=0,n=0,k;
k=(n=b>a)||(m=a+b);
printf("%d,%d\n",k,m);
}
程序运行后的输出结果是______________。
A)0,0B)0,1C)1,0D)1,1
12.假定w,x,y,z,m均为int型变量,有如下程序段:
w=1;x=2;y=3;z=4;
m=(ww:
x;
m=(mm:
y;
m=(mm:
z;
则该程序运行后,m的值是_________________________________________________。
A)4B)3C)2D)1
D
二,填空题
1.若a是int型变量,且a的初值为6,则计算表达式a+=a-=a*a后a的值为____________________________________。
-60
相当于a=6-6*6=-30,a=-30+(-30)最后结果为-60
分析时以中间的a为分析开始点,它的左右的操作符同等优先级,按"从右到左结合",现完成右边的操作,在进行左边的操作.
又如,a的初值为4,则计算表达式a+=a-=a*a后a的值为-24
2.在C语言中的实型变量分为两种类型,它们是_____________和______________________________________.
3.在C语言中(以16位PC机为例),一个char型数据在内存中所占的字节数为____________________________________;
一个int型数据在内存中所占的字节数为_____________.1,2?
?
?
?
?
?
?
?
4.若有语句:
inti=-1,j=i%4;
printf("%d\n",j);
则输出结果是________________________________________________。
-3
5.若有定义:
intb=7;floata=2.5,c=4.7;则下面表达式的值为_____________.5.500000
a+(int)(b/3*(int)(a+c)/2)%4
6.若a为整型变量,则表达式(a=4*5,a*2),a+6的值为______________.26
7.以下程序输出的结果是__________________________。
0?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
voidmain()
{
inta=5,b=4,c=3,d;
d=(a>b>C);
printf("%d\n",d);
}
8.intx=3,y=2;floata=2.5,b=3.5:
则表达式(x+y)%2+(int)a/(int)b的值为_____________________________________.1
9.以下程序的输出结果是____________________________________________________________。
2,1
voidmain()
{
inta=1,b=2;
a=a+b;b=a-b;a=a-b;
printf("%d,%d\n",a,b);
}
/////////////////////////////41
第三章复习
1.有以下语句段:
intn1=10,n2=20;
printf("_____________",n1,n2);
要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空.
n1=10
n2=20
答案:
n1=%d\nn2=%d
解析:
考察printf()函数的使用以及转义字符的用法。
2.若有以下下程序段:
intm=0xabc,n=0xabc;
m-=n;
printf("%x\n",m);
执行后输出结果是______________。
A)0X0B)0x0C)0D)0XABC
答案:
C
解析:
以0x开头表示十六进制的整型常量,在使用函数printf()输出十六进制常量时不会输出0x前缀。
所以C选项正确。
3.有以下程序段:
intm=0,n=0;
charc='a';
scanf("%d%c%d",&m,&c,&n);
printf("%d,%C,%d\n",m,c,n);
若从键盘上输入:
10A1O<回车>,则输出结果是__________________________.
A)10,A,10B)10,a,10C)10,a,0D)10,A,0
答案:
A
解析:
在有多个输入项时,且格式控制字符全是同数据类型的格式说明符时,只能用空格,跳格键或回车作为分隔符。
但假如数据类型不同,则不需要以这些分隔符作区分。
从键盘上输入的第一个数据10存入整型变量m,字符A存入字符变量c,第二个10存入整型变量n,所以选项A正确。
4.有以下程序:
voidmain()
{
intm,n,p;
scanf("m=%dn=%dp=%d",&m,&n,&p);
printf("%d%d%d\n",m,n,p);
}
若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是_____________。
A)m=123n=456p=789B)m=123n=456p=789
C)m=123,n=456,p=789D)123456789
答案:
A
解析:
本题i要考查了scanf和printf的用法。
在输入数据时,双引号中的部分其类型与个数必须与控制字符串中格式字符的类型,个数一致。
同时注意这里的"m=","n=","p="是非格式控制字符,在输入数据时应输入与这些字符相同的字符。
所以答案选A.
5.以下程序运行时若从键盘输入:
102030<回车>,输出结果是_____________.
#include
voidmain()
{
inti=0,j=0,k=0;
scanf("%d%*d%d",&i,&j,&k);
printf("%d%d%d\n",i,i,k);
}
答案:
10300
解析:
本题考查的是输入函数中格式说明符的用法。
本题最重要的是弄清楚'*'的作用。
'*'表示按规定格式输入但不赋予相应变量,作用是跳过相应的数据。
这样很明显,当输入到20时,由于'*'的作用,20被跳过。
于是30赋给j,而k的值不变。
所以答案为10300。
6.有以下程序:
voidmain()
{
intx=102,y=012;
printf("%2d,%2d\n",x,y);
}
执行后输出结果是,,。
A)10,01B)002,12C)102,10D)02,10
答案:
C
解析:
本题i要考查输出函数格式说明符的用法。
在输出说明符中,可以用十进制整数来表示输出的最少位数。
若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则左端补以空格或0.本题首先要把012化为十进制数,即为10,然后根据上述规则,102多于定义的宽度,按实际位数输出,为102;而10刚好是2位,所以也可以显示。
所以最后结果显示102,100所以答案选C.
////////////////////////////////p43
一,选择题
1.下列程序执行后的输出结果是________________________________________________.
voidmain()
{
charx=0xFFFF;
printf("%d\n",x--);
}
A)-32767B)FFFEC)-1D)-32768
C
2.若有以下程序段(n所赋的是八进制数):
intm=32767,n=032767;
printf("%d,%o/n",m,n);
执行后输出结果是_____________。
A)32767,32767B)32767,032767
C)32767,77777D)32767,077777
A
3.有以下程序:
#include
voidmain()
{printf("%d\n",NULL);}
程序运行后的输出结果是____________________________________.
A)0B)1
C)-1D)NULL没定义,出错
A
4.若变量已正确说明为float类型,要通过语句scanf("%f%f%f",&a,&b,&c);给a赋予10.0,b赋予22.0,c赋予33.0,不正确的输入形式是_____________.
A)10<回车>
22<回车>
33<回车>
B)10.0,22.0,33.0<回车>
C)10.0<回车>
22.033.0<回车>
D)1022<回车>
33<回车>
B
5.以下程序段的输出结果是_____________.
inta=1234;
printf("%2d\n",a);
A)12B)34C)1234D)提示出错
C
6.设有如下程序段:
intx=2002,y=2003;
printf("%d\n",(x,y