logo资料库

谭浩强c语言程序设计练习习题集.pdf

第1页 / 共140页
第2页 / 共140页
第3页 / 共140页
第4页 / 共140页
第5页 / 共140页
第6页 / 共140页
第7页 / 共140页
第8页 / 共140页
资料共140页,剩余部分请下载后查看
目录 重要 次重要 重复或欲删除 第一章 C 语言概述 基础 1.1 选择题 1.2 填空题 第二章 数据类型、运算符与表达式 2.1 选择题 2.2 填空题 第三章 最简单的 C 程序设计 3.1 选择题 3.2 填空题 第四章 逻辑运算和判断选取控制 4.1 选择题 4.2 填空题 4.3 编程题 第五章 循环控制 5.1 选择题 5.2 填空题 5.3 编程题 第六章 数组 6.1 选择题 6.2 填空题 6.3 编程题 第七章 函数 7.1 选择题 7.2 填空题 7.3 编程题 第八章 编译预处理 8.1 选择题 8.2 填空题 8.3 编程题 第九章 指针 9.1 选择题 9.2 填空题
第一章 C 语言概述 1.1 选择题 *1.1 一个 C 程序的执行是从 。 A) 本程序的 main 函数开始 ,到 main 函数结束 B)本程序文件的第一个函数开始 ,到本程序文件的最后一个函数结束 C)本程序的 main 函数开始 ,到本程序文件的最后一个函数结束 D)本程序文件的第一个函数开始 ,到本程序 main 函数结束 参考答案: 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.4 C 语言规定:在一个源程序中 ,main 函数的位臵 。 B)必须在系统调用的库函数的后面 D)必须在最后 A) 必须在最开始 C)可以任意 参考答案: C *1.5 一个 C 语言程序是由 。 A) 一个主程序和若干个子程序组成 C)若干过程组成 B)若干函数组成 D)若干子程序组成 参考答案: B 参考分析:通常许多语言程序由主程序和子程序构成 ,但是 C 语言是函数式语言 ,整个程 序由众多函数组成。尽管有时习惯上称 main 函数为主程序,显然,严格地讲还是 B 更
为符合 C 语言的规则。 1.2 填空题 1.6C 源程序的基本单位是【 】。 参考答案:函数 1.7 一个 C 源程序中至少应包括一个【 】。 参考答案: main()函数 1.8 在一个 C 源程序中,注释部分两侧的分界符分别为【 1】和【 2】。 参考答案:【1】/* 【2】*/ 1.9 在 C 语言中,输入操作是由库函数【 1】完成的,输出操作是由库函数【 2】完成的。 参考答案:【1】scanf 【2】printf 第二章 数据类型、运算符与表达式 2.1 选择题 **2.1 C 语言中 (以 16 位 PC机为例 ),各数据类型的存储空间长度的排列顺序为 A)char
参考分析:不是关键字的: include、scanf、type *2.6 下面四个选项中 ,均是不合法的用户标识符的选项是 A)A P_0 do B)float la0 _A C)b-a goto int D)_123 temp INT 。 参考答案: C 参考分析:合法的有: A、P_0、la0、_A、_123、temp、INT 。 **2.7 C 语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字 符 。 A) 必须为字母 B)必须为下划线 D)可以是字母、数字和下划线中的任一种字符 C)必须为字母或下划线 参考答案: C 参考分析:教材中只是强调首字符必须为字母 ,我们应当知道 ,在语言系统中 ,下划线和字 母具有同等的 ―法律效力 ‖。 *2.8 下面四个选项中 ,均是合法整型常量的选项是 。 A)160 B)-0xcdf C)-01 D)-0x48a -0xffff 011 01a 0xe 986,012 0668 2e5 0x 参考答案: A 参考分析: 不合法的 B2,C2,C3,D2。解释:A2:-0xffff 十六进制数本身已经包含了符号位 , 一般不前面加符号位 ,但加上符号位也不错误; C3:0668 在有些 C 系统中 ,八进制数中允 许出现 8,但是通常不允许使用 8;D3:0x 显然后面缺少数值 ,但在 TC 中是允许的。 *2.9 下面四个选项中 ,均是不合法的整型常量的选项是 。 A)--0f1 -0xffff 0011 B)-0Xcdf 017 12,456 C)-018 999 5e2 D)-0x48eg -068 03f 参考答案: D 参考分析:不合法的 A1,B3,C1,C3,D。解释: A1:--0f1 十六进制数没有 0x,显然不合法 , 这里需要讨论的是常量前面允许不允许加上 --号,是否可以负负得正 ,显然不可以 ,--在 C 中是自减运算 ,它只适用于变量; B1:0Xcdf X 大写也可以! C3:5e2是个实型数。 *2.10 下面四个选项中 ,均是不合法的浮点数的选项是 。 A)160. 0.12 e3 B)123 C)-.18 2e4.2 .e5 123e4 0.0 D)-e3 .234 1e3 参考答案: B 参考分析:不合法的有 A3,B,D1。部分解释: A1,D2:C 语言中小数点前面或后面的 0 可 以省略。但是不能只有小数点自身; A3,B3,D1:e 的前后必须有合法数字。 1.e2 法,.e2不合法; B1:123 是整型数 ,不是浮点数。 *2.11 下面四个选项中 ,均是合法的浮点数的选项是 D)-e3 C)123e 。 B)-.60 A)+1e+1 5e-9.4 03e2 12e-4 -8e5 1.2e-.4 +2e-1 .8e-4 5.e-0 .1e2合
参考答案: B 参考分析:不合法的有 A2:阶码不能为小数; A3:浮点数的尾数及阶码不能用八进制数表 示; C1:e 后必须有整数 ,C2:阶码不能为小数; D1:缺少尾数。 *2.12 下面四个选项中 ,均是合法转义符的选项是 。 A)'\'' '\\' '\n' B)'\' C)'\018' D)'\\0' '\017' '\"' '\f' 'xab' '\101' 'x1f' 参考答案: A 参考分析:"\" 后面的数字 ,c 总是按照八或十六进制解释。 由于 c 支持扩展 ASCII 字符集, 所以,八进制数范围在 0~377,十六进制数范围在 00~ff 。 *2.13 下面四个选项中 ,均是不合法的转义符的选项是 。 A)'\"' '\\' '\xf' B)'\1011' C)'\011' '\' '\a' '\f' '\}' D)'\abc' '\101' 'x1f' 参考答案: B 参考分析:不合法的有 B1,B2,B3,C3,D1,D3;但 B3 和 C3 值得讨论 ,实际上 ,'\a'是一个转 义字符 (07 beep)。C 中只有少数字母是转义字符 ,大多数字母不是。像 '\c'就不是 ,它就是 字符 c 自身 ,非转义字母加 "\" 也仅表示它本身。 C3'\}' 也表示自身。本题的命题人显然不 知道 '\a'也是转义字符。 *2.14 下面正确的字符常量是 。 A)"c" B)'\\'' C)'W' D)"" 参考答案: C *2.15 下面四个选项中 ,均是不正确的八进制或十六进制数的选项是 。 A)016 0x8f 018 B)0abc 017 0xa C)010 -0x11 0x16 D)0a12 7ff -123 参考答案: D 参考分析:不正确的有 A3:非法八进制数; B1、D1、D2:缺少 x;D3 是十进制数。 2.16 下面四个选项中 ,均是正确的八进制或十六进制数的选项是 。 A)-10 0x8f -011 B)0abc -017 0xc C)0010 -0x11 0xf1 D)0a12 -0x123 -0xa 参考答案: C 参考分析:不正确的有 A1:这是十进制数; B1、D1:缺少 x 2.17 下面四个选项中 ,均是正确的数值常量或字符常量的选项是 A)0.0 0f 8.9e '&' B)"a" C)'3' D)+001 3.9e-2.5 1e1 '\"' 011 0xFF00 0a 0xabcd 2e2 50. 。 参考答案: D 参考分析:不正确的有 A2、C4:不是 ox 打头; A3:e 后不是整数; B1 是字符串; B2: 2.5 不是整数。 2.18 下面不正确的字符串常量是 。
A)'abc' B)"12'12" C)"0" D)" " 参考答案: A 参考分析:与 PASCAL 不同,B)字符串内的单引号不需双写。 C 语言中 ,在不引起误解的 情况下 ,双引号界定的字符串里的单引号可以不加转义标志 "\", 单引号界定的双引号字符 也可以不加转义标志 "\" 。 2.19 对应以下各代数式中,若变量 a 和 x 均为 double 类型,则不正确的 c 语言表达式 是 。 A) ex^2/2 √2π exp(x*x/2)/sqr(2*3.14159) B)? (ax+a+x/4a) 1.0/2.0*(a*x+(a+x)/(4*a)) C)√sinx2.5 D)x 2-e5 sqrt((pow(sin(x*3.14159/180),2.5)) x*x-exp(5.0) 参考答案: C 2.20 若有代数式 3ae/bc,则不正确的 C 语言表达式是 C)3*a*e/b*c B)3*a*e/b/c A)a/b/c*e*3 。 D)a*e/c/b*3 参考答案: C 参考分析:注意表达式的计算顺序 2.21 已知各变量的类型说明如下 ,则不符合 C 语言语法规定的表达式是 int k,a,b; unsigned long w=5; double x=1.42; A)x%(-3) B)w+=-2 C)k=(a=2,b=3,a+b) D)a+=a-=(b=4)*(a=3) 参考答案: A 参考分析:不符合 C 语法规定的只有 A,因为 X 为实型数。 2.22 已知各变量说明如下 ,则符合 C 语言语法规定的表达式是 int unsigned long w=5; double x=1.42,y=5.2; i=8,k,a,b; A)a+=a-=(b=4)*(a=3) B)a=a*3=2 C)x%(-3) D)y=float(i) 。 。 参考答案: A 参考分析: B)表达式不能出现在赋值号右侧; C)x 是实型数 ,不能进行取余运算; D)应 将 float 用括号扩起来(强制类型转换) 。 *2.23 以下不正确的叙述是 。 A) 在 C 程序中 ,逗号运算符的优先级最低 B)在 C 程序中 ,APH 和 aph是两个不同的变量 C)若 a 和 b 类型相同 ,在计算表达式 a=b 后,b 的值将放入 a中,而 b 中的值不变 D)当从键盘输入数据时 ,对于整型变量只能输入整型数值 ,对于实型变量只能输入实 型数值 参考答案: D 参考分析:整型变量可以输入实型数值 ,实型变量也可以输入整型数值 2.24 以下正确的叙述是 。 A) 在 C 程序中 ,每行只能写一条语句 B)若 a 是实型变量 ,C 程序中允许赋值 a=10,因此实型变量中允许存放整型数
C)在 C 程序中 ,无论是整数还是实数 ,都能被准确无误地表示 D)在 C 程序中 ,%是只能用于整数运算的运算符 参考答案: D 参考分析:注意它的描述 ,是只能用于整数运算 ,而不是整型数运算。 *2.25 以下符合 C 语言语法的 有赋值 能力的 表达式是 。 A)d=9+e+f=d+9 C)d=9+e,e++,d+9 B)d=9+e,f=d+9 D)d=9+e++=d+7 参考答案: B 参考分析: C 不是赋值表达式 ,是逗号表达式 ,赋值仅是其中的一部分。严格说来 ,B 也不 是赋值表达式 ,它是由两个赋值表达式组成的逗号表达式。 **2.26 已知字母 A 的 ASCII 码为十进制数 65,且 c2 为字符型 ,则执行语句 c2='A'+'6'-'3'; 后,c2 的值为 。 A)D B)68 C)不确定的值 D)C 参考答案: A 参考分析:表达式中的各字符以各自的 ASCII 码参与运算。 *2.27 在 C 语言中 ,要求运算数必须是整型 (数)的运算符是 。 A)/ B)++ C)!= D)% 参考答案: D 参考分析:理论上 ++运算都是针对整型 (含字符型 )的,尽管现在很多系统提供了对实型变 量的增量运算。 *2.28 若以下变量均是整型 ,且 num=sum=7;则计算表达式 sUM=num++, sUM++,++num 后 sum 的值为 。 A)7 B)8 C)0 D)10 参考答案: A 参考分析:注意 sum 和 sUM 不是一个变量(区分大小写) 。 *2.29 在 C 语言中 ,int、char 和 short 三种类型数据在内存中所占用的字节数 。 A)由用户自己定义 C)是任意的 B)均为两个字节 D)由所用机器的字长决定 参考答案: D 参考分析:参考答案很明确地表明了 ,C 语言中各种类型在内存中所占用的字节数由所用 机器字长决定。通常在 PC 机中字符、整型、实型所占用的内存空间大小为 1、2、4 个 字节。 2.30 若有说明语句: char c='\72';则变量 c 。 A)包含 1 个字符。 C)包含 3 个字符。 B)包含 2 个字符。 D)说明不合法 ,c 的值不确定。 参考答案: A 参考分析:转义字符 '\72'为字符 ':'。 2.31 若有定义:int a=7; float x=2.5,y=4.7; 则表达式 x+a%3*(int)(x+y)%2/4 的值是 A)2.500000 B)2.750000 C)3.500000 D)0.000000 。 参考答案: A 参考分析:计算时要注意其结合性和优先级。 *2.32 sizeof(float)是 。 A)一个双精度型表达式 C)一种函数调用 B)一个整型表达式 D)一个不合法的表达式
参考答案: B 参考分析:算术表达式的类型由表达式计算结果的类型决定 *2.33 设变量 a是整型 ,f 是实型 ,i 是双精度型 ,则表达式 10+'a'+i*f 值的数据类型为 。 A)int B)float C)double D)不确定 参考答案: C 参考分析:实型只要参与运算就自动转换为 double 型。 2.34 下面四个选项中 ,均是非法常量的选项是 。 D)0xabc B)'\\' '\01' 12,456 A)'as' -0fff '\0xa' 参考答案: A 参考分析: A3 转义字符以十六进制描述时 ,前面不能加 0。非法的还有 B3 *2.35 若有代数式 √yx+log10y,则正确的 C 语言表达式是 C)-0x18 01177 0xf '\0' "a" 。 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))) 参考答案: A 参考分析: c 语言中整型和实型的绝对值函数各自独立,为 abs和 fabs;pow 为一系统函 数 pow(y,x)=>y x。 2.36 若有代数式 |x3+lgx|,则正确的 C 语言表达式是 。 A)fabs(x*3+log 10(x)) B)abs(pow(x,3)+log10(x)) C)abs(pow(x,3.0)+log10(x)) D)fabs(pow(x,3.0)+log10(x)) 参考答案: D 参考分析:以上两题均未说明 x,y 的类型,从表达式的性质可分析隐含为实型,因此应 使用 fabs。 *2.37 在 C 语言中 ,char 型数据在内存中的存储形式是 A)补码 B)反码 C)原码 参考答案: D 参考分析:计算机系统不能存储字符本身 ,存储的是字符的 ASCII 码。 *2.38 设变量 n 为 float,m 为 int 类型,则以下能实现将 n 中的数值保留小数点后两位 ,第三 位进行四舍五入的表达式是 。 A)n=(n*100+0.5)/100.0 C)n=n*100+0.5/100.0 B)m=n*100+0.5,n=m/100.0 D)n=(n/100+0.5)*100.0 参考答案: B 参考分析: m=n*100+0.5 赋值过程中有实型转整型的自动转换。 2.39 表达式 18/4*sqrt(4.0)/8 值的数据类型为 。 A)int B)float C)double D)不确定 参考答案: C 参考分析:表达式的类型由表达式结果的类型决定。 2.40 设 C 语言中 ,一个 int 型数据在内存中占 2 个字节 ,则 unsigned int 型数据的取值范围 为 。 A)0-255 参考答案: C B)0-32767 C)0-65535 D)0-2147483647 。 D)ASCII 码
分享到:
收藏