谭浩强C语言程序设计习题集Word文件下载.doc
《谭浩强C语言程序设计习题集Word文件下载.doc》由会员分享,可在线阅读,更多相关《谭浩强C语言程序设计习题集Word文件下载.doc(152页珍藏版)》请在冰点文库上搜索。
A
参考分析:
C语言总是从main函数开始,main函数结束。
但是C语言中存在一个exit(0)函数,它可以使得程序在任何时候、任何位置结束程序的运行。
如果不考虑exit(0)等函数的特殊作用,C则总是在main函数结束。
*1.2以下叙述正确的是。
A)在C程序中,main函数必须位于程序的最前面
B)在C程序的每一行只能写一条语句
C)C语言本身没有输入输出语句
D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误
C
C程序对main函数的位置没有任何要求;
其书写格式自由,一行可以写多条语句,一条语句(多关键字语句)可以写在多行;
C语言忽略注释,把注释看作是一个空格,不会对注释中的内容进行语法检查。
因此,如果注释中存在错误,系统是不可能发现的。
另外,C语言的I/O操作均通过函数实现,系统本身未提供相应的语句。
1.3以下叙述不正确的是。
A)一个C源程序可由一个或多个函数组成
B)一个C源程序必须包含一个main函数
C)C程序的基本组成单位是函数
D)在C程序中,注释说明只能位于一条语句的后面
D
C语言中,注释语句的位置是任意的,当然,它不能破坏标识符的完整性。
C语言只是将一个注释看作是一个空格,因此对注释内的任何错误都不作检查。
1.4C语言规定:
在一个源程序中,main函数的位置。
A)必须在最开始B)必须在系统调用的库函数的后面
C)可以任意D)必须在最后
*1.5一个C语言程序是由。
A)一个主程序和若干个子程序组成B)若干函数组成
C)若干过程组成D)若干子程序组成
B
通常许多语言程序由主程序和子程序构成,但是C语言是函数式语言,整个程序由众多函数组成。
尽管有时习惯上称main函数为主程序,显然,严格地讲还是B更为符合C语言的规则。
1.6C源程序的基本单位是【】。
函数
1.7一个C源程序中至少应包括一个【】。
main()函数
1.8在一个C源程序中,注释部分两侧的分界符分别为【1】和【2】。
【1】/*【2】*/
1.9在C语言中,输入操作是由库函数【1】完成的,输出操作是由库函数【2】完成的。
【1】scanf【2】printf
**2.1C语言中(以16位PC机为例),各数据类型的存储空间长度的排列顺序为。
A)char<
int<
long<
=float<
doubleB)char=int<
double
C)char<
long=float=doubleD)char=int=long<
分析:
在不同的计算机系统中,不同的C语言系统中,其各种数据类型所占据的存储空间是不同的,但是有一个总的原则,即:
char<
=short<
=int<
=long<
=float<
=double,只有A符合16位PC机中的具体环境。
*2.2若x、i、j和k都是int型变量,则计算下面表达式后,x的值为。
x=(i=4,j=16,k=32)
A)4B)16C)32D)52
逗号表达式的计算结果是最后一个表达式的值。
k=23是括号内最后一个表达式,因此x变量的值来自k变量的值。
**2.3假设所有变量均为整型,则表达式(a=2,b=5,a+b++,a+b)的值是。
A)7B)8C)5D)2
b++在所在表达式参与运算时的值是5,该表达式计算完成后,b进行自增运算,故a+b的值为2+6=8。
2.4下列四组选项中,均不是C语言关键字的选项是。
A)defineB)getcC)includeD)while
IFcharscanfgo
typeprintfcasepow
是关键字的有:
char、case、while。
2.5下列四组选项中,均是C语言关键字的选项是。
A)autoB)switchC)signedD)if
enumtypedefunionstruct
includecontinuescanftype
不是关键字的:
include、scanf、type
*2.6下面四个选项中,均是不合法的用户标识符的选项是。
A)AB)floatC)b-aD)_123
P_0la0gototemp
do_AintINT
合法的有:
A、P_0、la0、_A、_123、temp、INT。
**2.7C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符。
A)必须为字母B)必须为下划线C)必须为字母或下划线
D)可以是字母、数字和下划线中的任一种字符
教材中只是强调首字符必须为字母,我们应当知道,在语言系统中,下划线和字母具有同等的“法律效力”。
*2.8下面四个选项中,均是合法整型常量的选项是。
A)160B)-0xcdfC)-01D)-0x48a
-0xffff01a986,0122e5
0110xe06680x
不合法的B2,C2,C3,D2。
解释:
A2:
-0xffff十六进制数本身已经包含了符号位,一般不前面加符号位,但加上符号位也不错误;
C3:
0668在有些C系统中,八进制数中允许出现8,但是通常不允许使用8;
D3:
0x显然后面缺少数值,但在TC中是允许的。
*2.9下面四个选项中,均是不合法的整型常量的选项是。
A)--0f1B)-0XcdfC)-018D)-0x48eg
-0xffff017999-068
001112,4565e203f
不合法的A1,B3,C1,C3,D。
A1:
--0f1十六进制数没有0x,显然不合法,这里需要讨论的是常量前面允许不允许加上--号,是否可以负负得正,显然不可以,--在C中是自减运算,它只适用于变量;
B1:
0XcdfX大写也可以!
5e2是个实型数。
*2.10下面四个选项中,均是不合法的浮点数的选项是。
A)160.B)123C)-.18D)-e3
0.122e4.2123e4.234
e3.e50.01e3
不合法的有A3,B,D1。
部分解释:
A1,D2:
C语言中小数点前面或后面的0可以省略。
但是不能只有小数点自身;
A3,B3,D1:
e的前后必须有合法数字。
1.e2.1e2合法,.e2不合法;
123是整型数,不是浮点数。
*2.11下面四个选项中,均是合法的浮点数的选项是。
A)+1e+1B)-.60C)123eD)-e3
5e-9.412e-41.2e-.4.8e-4
03e2-8e5+2e-15.e-0
不合法的有A2:
阶码不能为小数;
A3:
浮点数的尾数及阶码不能用八进制数表示;
C1:
e后必须有整数,C2:
D1:
缺少尾数。
*2.12下面四个选项中,均是合法转义符的选项是。
A)'
\'
'
B)'
C)'
\018'
D)'
\\0'
'
\\'
'
\017'
'
\f'
'
\101'
\n'
\"
xab'
'
x1f'
"
后面的数字,c总是按照八或十六进制解释。
由于c支持扩展ASCII字符集,所以,八进制数范围在0~377,十六进制数范围在00~ff。
*2.13下面四个选项中,均是不合法的转义符的选项是。
\1011'
\011'
\abc'
'
\xf'
\a'
'
\}'
不合法的有B1,B2,B3,C3,D1,D3;
但B3和C3值得讨论,实际上,'
是一个转义字符(07beep)。
C中只有少数字母是转义字符,大多数字母不是。
像'
\c'
就不是,它就是字符c自身,非转义字母加"
也仅表示它本身。
C3'
也表示自身。
本题的命题人显然不知道'
也是转义字符。
*2.14下面正确的字符常量是。
A)"
c"
B)'
W'
D)"
*2.15下面四个选项中,均是不正确的八进制或十六进制数的选项是。
A)016B)0abcC)010D)0a12
0x8f017-0x117ff
0180xa0x16-123
不正确的有A3:
非法八进制数;
B1、D1、D2:
缺少x;
D3是十进制数。
2.16下面四个选项中,均是正确的八进制或十六进制数的选项是。
A)-10B)0abcC)0010D)0a12
0x8f-017-0x11-0x123
-0110xc0xf1-0xa
不正确的有A1:
这是十进制数;
B1、D1:
缺少x
2.17下面四个选项中,均是正确的数值常量或字符常量的选项是。
A)0.0B)"
a"
C)'
3'
D)+001
0f3.9e-2.50110xabcd
8.9e1e10xFF002e2
&
0a50.
不正确的有A2、C4:
不是ox打头;
e后不是整数;
B1是字符串;
B2:
2.5不是整数。
2.18下面不正确的字符串常量是。
abc'
B)"
12'
12"
C)"
0"
D)"
"
与PASCAL不同,B)字符串内的单引号不需双写。
C语言中,在不引起误解的情况下,双引号界定的字符串里的单引号可以不加转义标志"
单引号界定的双引号字符也可以不加转义标志"
。
2.19对应以下各代数式中,若变量a和x均为double类型,则不正确的c语言表达式是。
A)ex^2/2exp(x*x/2)/sqr(2*3.14159)
√2π
B)½
(ax+a+x/4a)1.0/2.0*(a*x+(a+x)/(4*a))
C)√sinx2.5sqrt((pow(sin(x*3.14159/180),2.5))
D)x2-e5x*x-exp(5.0)
2.20若有代数式3ae/bc,则不正确的C语言表达式是。
A)a/b/c*e*3B)3*a*e/b/cC)3*a*e/b*cD)a*e/c/b*3
注意表达式的计算顺序
2.21已知各变量的类型说明如下,则不符合C语言语法规定的表达式是。
intk,a,b;
unsignedlongw=5;
doublex=1.42;
A)x%(-3)B)w+=-2C)k=(a=2,b=3,a+b)D)a+=a-=(b=4)*(a=3)
不符合C语法规定的只有A,因为X为实型数。
2.22已知各变量说明如下,则符合C语言语法规定的表达式是。
inti=8,k,a,b;
doublex=1.42,y=5.2;
A)a+=a-=(b=4)*(a=3)B)a=a*3=2C)x%(-3)D)y=float(i)
B)表达式不能出现在赋值号右侧;
C)x是实型数,不能进行取余运算;
D)应将float用括号扩起来(强制类型转换)。
*2.23以下不正确的叙述是。
A)在C程序中,逗号运算符的优先级最低
B)在C程序中,APH和aph是两个不同的变量
C)若a和b类型相同,在计算表达式a=b后,b的值将放入a中,而b中的值不变
D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值
整型变量可以输入实型数值,实型变量也可以输入整型数值
2.24以下正确的叙述是。
A)在C程序中,每行只能写一条语句
B)若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数
C)在C程序中,无论是整数还是实数,都能被准确无误地表示
D)在C程序中,%是只能用于整数运算的运算符
注意它的描述,是只能用于整数运算,而不是整型数运算。
*2.25以下符合C语言语法的有赋值能力的表达式是。
A)d=9+e+f=d+9B)d=9+e,f=d+9
C)d=9+e,e++,d+9D)d=9+e++=d+7
C不是赋值表达式,是逗号表达式,赋值仅是其中的一部分。
严格说来,B也不是赋值表达式,它是由两个赋值表达式组成的逗号表达式。
**2.26已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='
A'
+'
6'
-'
;
后,c2的值为。
A)DB)68C)不确定的值D)C
表达式中的各字符以各自的ASCII码参与运算。
*2.27在C语言中,要求运算数必须是整型(数)的运算符是。
A)/B)++C)!
=D)%
理论上++运算都是针对整型(含字符型)的,尽管现在很多系统提供了对实型变量的增量运算。
*2.28若以下变量均是整型,且num=sum=7;
则计算表达式sUM=num++,sUM++,++num后sum的值为。
A)7B)8C)0D)10
注意sum和sUM不是一个变量(区分大小写)。
*2.29在C语言中,int、char和short三种类型数据在内存中所占用的字节数。
A)由用户自己定义B)均为两个字节
C)是任意的D)由所用机器的字长决定
参考答案很明确地表明了,C语言中各种类型在内存中所占用的字节数由所用机器字长决定。
通常在PC机中字符、整型、实型所占用的内存空间大小为1、2、4个字节。
2.30若有说明语句:
charc='
\72'
则变量c。
A)包含1个字符。
B)包含2个字符。
C)包含3个字符。
D)说明不合法,c的值不确定。
转义字符'
为字符'
:
2.31若有定义:
inta=7;
floatx=2.5,y=4.7;
则表达式x+a%3*(int)(x+y)%2/4的值是。
A)2.500000B)2.750000C)3.500000D)0.000000
计算时要注意其结合性和优先级。
*2.32sizeof(float)是。
A)一个双精度型表达式B)一个整型表达式
C)一种函数调用D)一个不合法的表达式
算术表达式的类型由表达式计算结果的类型决定
*2.33设变量a是整型,f是实型,i是双精度型,则表达式10+'
a'
+i*f值的数据类型为。
A)intB)floatC)doubleD)不确定
实型只要参与运算就自动转换为double型。
2.34下面四个选项中,均是非法常量的选项是。
as'
B)'
C)-0x18D)0xabc
-0fff'
\01'
01177'
\0'
\0xa'
12,4560xf"
A3转义字符以十六进制描述时,前面不能加0。
非法的还有B3
*2.35若有代数式√yx+log10y,则正确的C语言表达式是。
A)sqrt(fabs(pow(y,x)+log10(y)))
B)sqrt(abs(pow(y,x)+log10(Y)))
C)sqrt(fabs(pow(x,y)+log10(y)))
D)sqrt(abs(pow(x,y)+log10(y)))
c语言中整型和实型的绝对值函数各自独立,为abs和fabs;
pow为一系统函数pow(y,x)=>
yx。
2.36若有代数式|x3+lgx|,则正确的C语言表达式是。
A)fabs(x*3+log10(x))
B)abs(pow(x,3)+log10(x))
C)abs(pow(x,3.0)+log10(x))
D)fabs(pow(x,3.0)+log10(x))
以上两题均未说明x,y的类型,从表达式的性质可分析隐含为实型,因此应使用fabs。
*2.37在C语言中,char型数据在内存中的存储形式是。
A)补码B)反码C)原码D)ASCII码
计算机系统不能存储字符本身,存储的是字符的ASCII码。
*2.38设变量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
m=n*100+0.5赋值过程中有实型转整型的自动转换。
2.39表达式18/4*sqrt(4.0)/8值的数据类型为。
A)intB)floatC)doubleD)不确定
表达式的类型由表达式结果的类型决定。
2.40设C语言中,一个int型数据在内存中占2个字节,则unsignedint型数据的取值范围为。
A)0-255B)0-32767C)0-65535D)0-2147483647
各种数据类型的取值范围是由其字长决定,字长确定的情况下,有符号数与无符号数的范围应当容易计算得知。
2.41设有说明:
charw;
intx;
floaty;
doublez;
则表达式w*x+z-y值的数据类型为。
A)floatB)charC)intD)double
虽然本题各变量没有具体的变量值,由于参与运算的变量中z变量为double型,表达式计算的结果肯定为double型。
2.42若有以下定义,则能使值为3的表达式是。
intk=7,x=12;
A)x%=k%=5B)x%=k-k%5
C)x%=(k-k%5)D)(x%=k)-(k%=5)
A的值为0,B、C两个表达式相同,值为2,只有D的值为3。
2.43设以下变量均为int类型,则值不等于7的表达式是。
A)x=y=6,x+y,x+1B)x=