《《c语言基础教程》吕凤翥习题答案.docx》由会员分享,可在线阅读,更多相关《《c语言基础教程》吕凤翥习题答案.docx(140页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、大家灌意了,这是情大学出版社的吕良嗜第二版配套卷第一章司致、选择填空1. 下列各种高级语言中,()是面向对象的程序设计-J .语百。A.BASIC; B.PASCAL; C.C+ D.Ada2. 下列各种高级语言中,()是最早提出了对象的概念。A.Algol 60; B.Simula 67; C.Smalltalk; D.C+3. 下述面向对象抽象的原理中,()是不对的。A,数据抽象;B.行为共享;C.进化;D.兼容;4. ()不是面向对象系统所包含的要数。A.重载;B.对象C.类;D.继承;5. 关于C+与C语言的关系的描述中,()是错误的。A. C语言是C+的个子集;B. C语言与C+是兼
2、容的;C. C+对C语言进行了一些改进;D. C+和C语言都 是面向对象的;6 .下面关于对象概念的描述中,()是错误的。A.对象就是C语言中的结构变量;B.对象代表着正在 创建的系统中的个实体;C.对象是个状态和操作(或方法)的封装体;D.对 象之间的信息传递是通过消息进行的;7 .下面关于类概念的描述中,()是错误的。A.类是抽象数据类型的实现;B.类是具有共同行为的若 干对象的统描述体;C.类是创建对象的样板;D.类就是C语言中的结构类 型;8 .C+对C语言作了很多改进,下列描述中()使得C语言发生了质变,即从面向过程变成为面向对 象。A.增加了一些新的运算符;B.允许函数重载,并允许
3、 设置缺省参数;C.规定函数说明必须用原型;D.引进了类和对象的概 念;9 .按照标识符的要求,()符号不能组成标识符。A.连接符;B.下划线;C.大小写字母;D.数字字符;10 .下列符号中,()不可作为分隔符。A., ; B.: ;C.? ; D.;二、判断下列描述的正确性,对者划,错者划X。1. C+引进了引用的概念,对编程带来了很多方便。V2. C+允许使用友元,但是友元会破坏封装性。V3. C+中使用了新的注释符(/,C语言中注释符(/*) 不能在C+中使用。X4. C+中为了减轻使用者的负担,与C语言相比较C+中减少了一些运算符。X5. C+程序中,每条语句结束时都加一个分号(;)
4、 V6. C+中标识符内的大小写字母是没有区别的。X7. C+中不允许使用宏定义的方法定义符号常量,只能用 关键字const来定义符号常量。X8. 在编写C+程序时,一定要注意采用人们习惯使用的 书写格式,否则将会降低其可读性。V9. C+是种以编译方式实现的高级语言。V10. 在C+编译过程中,包含预处理过程、编译过程和连 接过程,并且这三个过程的顺序是不能改变的。V11. 预处理过程是一般编译过程之后连接过程之前进行 的。X12. 源程序在编译过程中可能会出现些错误信息,但在 连接过程中将不会出现错误信息。X三、分析下列程序的输出结果1. #includevoid main()(coutB
5、eiJingncoutShangHain ;coutTianJingendl;1. BeiJjing ShangHaiTianJing2. #includevoid main()(int a,b;coutinput a,b:;cinab;couta=a,b=bendl;couta-b=a-bn;)假定,输入如下两个数据:852. Input a,b:8 5A=8,b=5A-b=33. #include void main()(char c=,m,;int d=5;coutd=ndn:;coutc=cn;D=5,c=m四、编译下列程序,改正所出现的各种错误信息,并分析 输出结果:1 main (
6、)(coutThis is a string!1;)1. #includevoid main()(cout,This is a string!”;输出结果:This is a string!2、 #includevoid main()(cinx;int p=x*x;coutp=pn;#includevoid main() int x;cinx;int p=x*x;coutvv”p二 vvpvv“n;)输出结果:3p=93、 #include void main () int i,j;i=5;int k=i+j;couti+j=kn;)#include void main ()int i,j;i
7、=5;j=3;int k=itj;coutvvi+jvvkvv“n”;输出结果:I+j=8五、通过对第四题中三个程序的所出现问题的修改,回答 下列问题:1 .从对第四题1题的修改中,总结出编程时应注意哪三 个问题?2 . C+程序中所出现的变量是否都必须先说明才能引 用?3 .使用cout和运算符vv输出字符串时应注意什么问 题?4 .有些变量虽然说明了但是没有赋值,这时能否使用?5 . 个程序编译通过了并且运行后得到了输出结果,这 个结果是否一定是正确的?第二章司敢、选择填空1、在16位机中,int型字宽为()字节。A. 2; B 4; Co 6; D 82、类型修饰符unsigned修饰(
8、)类型是错误的。A. char; B. int; C.long int ; Dfloat3、下列十六进制的整型数常数表示中,()是错误的。A. Oxaf; B. OXlb; C. 2fx; D. OxAE4、下列double型常量表示中,()是错误的。A. E15; B. .35; C. 3E5; D. 3E-55、下列字符常量表示中,()是错误的。A.105; B.C.4f;D.a6、下列字符串常量表示中,()是错误的。A.yesorNon; B.VOKIV; C. abcdnn; D. ABC07、下列变量名中,()是合法的。A.CHINA; B. byte-size; C. double
9、; D. A+a8、在inta5=l,3,5;中,数组元素al的值是()A. 1;B.O; C.3; D.29、在 intb3=1,3,2,4,5,6,0;中 a的值 是()。A.O; B. 5;C.6; D.210、下列给字符数组进行初始化中,()是正确的。A. char sl =abcd; B. char s23=xyz;C. char s33=a,x,y;D. chars423=xyz,mnp!;11 在 int a=3,*p=&a;中,*p 的值是()。A.变量a的地址值;B.无意义;C.变量p的地 址值;D.312、对于int*pa5;的描述,()是正确的。A. pa是个指向数组的指
10、针,所指向的数组是5个 int型元素;B. pa是个指向某个数组中第5个元素的指针,该元 素是int型变量;C. pa5表示某个数组的第5个元素的值;D. pa是个具有5个元素的指针数组,每个元素是 个int型指针;13、下列关于指针的运算中,()是非法的。A.两个指针在一定条件下,可以进行相等或不等的 运算;B.可以用个空指针赋值给某个指针;C, 个指针可以加上两个整数之差;D.两个指针在一定条件下,可以相加。14、指针可以用来表示数组元素,下列表示中()是错 误的。已知:inta37;A. *(a+l)5; B. *(*a+3); C. *(*(a+l); D.*(&a00+2)15、下列
11、表示引用的方法中,()是正确的。已知:intm=10;A. int &x=m; B. int &y=10; C. int &z; D. float &t二&m16、下列各运算符中,()可以作用于浮点数。A. +; B. %; C. ; D. &17、下列各运算符中,不能作用于浮点数。A. /;B.&; C.!; D.18、下列各运算符中,()优先级最高。A.+ (双目);B.* (单目);C. b)+(int(b)%2); D.- -a+b22、下列表达式中,()是合法的。已知:double m=3.2; int n=3;A. m2; B. (m+n)ln C. !m*=n; D. m=5,n
12、=3.1,m+n23、下列关于类型转换的描述中,()是错误的。A,在不同类型操作数组成的表达式中,其表达 式类型一定是最高类型double型;B.逗号表达式的类型是最后个表达式的类 型;C.赋值表达式的类型是左值的类型;D.在由底向高的类型转换中是保值映射。24、下列各表达式中,有二义性。已知:inta (5) ; b (6);A. a+b3; B. +a+b+; C.b+(a=3); D. ( a=3)-a+二、判断下列描述是否正确,对者划J,错者划X。1、任何字符常量与一个任意大小的整型数进行加减 都是有意义的。X2、转义序列表示法只能表示字符不能表示数字。V3、在命名标识符中,大小写字母
13、是不加区别的。X4、C+的程序中,对变量一定要先说明再使用,说 明只要在使用之前就可以。V5、C+中数组元素的下标是从0开始,数组元素是 连续存储在内存单元中的。V6、数组赋初值时,初始值表中的数据项的数目可以 大于或等于数组元素的个数。X7、枚举变量的取值受到该枚举变量所对应的枚举表 中的枚举符的局限。V8、指针是用来存放某种变量的地址值的变量。这种变量的地址值也可以存放在某个变量中,存放某个 指针的地址值的变量称为指向指针的指针,即二级 指针。V9、引用是用来给某个变量以别名的变量。,对引用的 操作,实质上就是对被引用的变量的操作。V10、运算符的优先级和结合性可以确定表达式的计 算顺序。
14、V11、在说明语句中,的值和的值是相等的。V12、已知:表达式具有两用性。X13、移位运算符在移位操作中,无论左移还是右移, 所移出的空位一律补; X14、某个变量的类型高是指该变量被存放在内存中 的高地址处。X15、隐含的类型转换都是保值映射,显式的类型转换 都是非保值映射。X16、类型定义是用来定义些C+中所没有的新的 类型。X三、计算下列各表达式的值(下列各表达式是相互独立的,不考虑前面对后面的影 响。)1、已知:unsigned int x=015,y=0x2b;A.xly; B.xAy; C.x&y; D.x+y; E.x=3; F.y=4.ABCDEF473894294967238
15、1042inti(10),j(5);A.+i-j;B.i=j; C.i=3/2*(j=3-2); D.-iAj; E.i&jll;F.i+i&Oxff.ABCDEF6501-16120知:int a(5),b(3);计算下列表达式得值以及a和b的值。A.! a&b+; B.allb+4&a*b; C.a= 1 ,b=2,ab?+a:+b;D.+b,a= 1 ,a+5;E.a+=b%=a+b; F.a!=b2,5,)ll2=3+2-(t0,-7).四、按列要求编写程序1 .从键盘上输入两个int型数,比较其大小,并输出显示 其中小的。2 .从键盘上输入个int型数,个浮点型数比较其大小, 并输出
16、其中大的。3 .输入摄氏温度,编程输出华氏温度。已知:华氏温 度转换为摄氏温度的计算公式如下:C=(F-32)*5/9其中,F表示华氏温度,C表示摄氏温度。#include void main()float c,f;coutvv”华氏温度:;cinf;c=(f-32)*5/9;coutvv” 摄氏温度:,cendl;)4 .编程实现输入公里数,输出显示其英里数。已知:1英 里二1.60934公里(用符号常量)。#include const float r= 1.60934;void main()(float m,I;coutvv” 公里数:“;cinm;I=r*m;coutvv英里数:” vv
17、kvendl;)5 .输入个int型数,将它的低4位(右4位)都置为1。#include void main()int n,m;coutvv”输入个整数:“;cinn;m=nll5;coutvv”结果为:,mendl;)第三章司数、选择填空1 .预处理命令在程序中都是以()开头的。A. * ; B. # ; C .D. / ;2 .文件包含命令中被包含的文件的扩转名()A.必须为.h; B.不能用.h; C泌须是.c;D.不一定是.h;3 .下列条件编译命令中#if()语句序列1#else语句序列2#endifA.整常量表达式;B.任何标识符;C .任意表达式;D. 被定义的宏名;4 .带参数
18、的宏定义中,程序中引用宏定义的实参()。 A.只能是常量;B.只能是整型量;C .只能是整形表达式; D.可以是任意表达式;5 .下列()是语句A. ; ; B.a=17; C .x+y; D. cout,n?,;6 .下列for循环的次数为()for(int i(0),x=0;!x&i=5;i+)A.5;B.6;C.l; D.无限;7 .下列while循环的次数是()while(int i=0)i-;A.O; B.1;C.5;D.无限;8 .下列do-while循环的循环次数为()。已知:inti(5);docouti- - endl;i-;while(i!=0);A.O;B.1;C .5;
19、 D.无限;9 .下列for循环的循环体执行次数为() for(mti(0),j(10);i=j=10;i+,j-) A.O;B,1;C.1O; D.无限;10 .已知:int a,b;下列switch语句中,()是正确的。A.switch(a);case a:a+;break; case b:b+;break;B.switch(a+b) case l:a+b;break;case 2:a-b lC. switch(a*a) casel,2:+a;case3,4:+b;)D.switch(a/10+b) case 5:a/5;break default:a+b;)11 .下述关于循环体的描述中
20、,()是错误的。A.循环体中可以出现break语句和continue语句;B.循环体中还可以出现循环语句;C.循环体中不能出现goto语句;D.循环体中可以出现开关语句。12.下述关于goto语句的描述中,()是正确的。 A.goto语句可在个文件中随意转向;B.goto语句后面要跟上一个他所转向的语句;C.goto语句可以同时转向多条语句;D.goto语句可以从个循环体内转到循环体外。13. 下述关于break语句的描述中,()是正确的。A.break语句可用于循环体内,它将退出该重循环;B.break语句可用于开关语句中,它将退出开关语句。C.break语句可用于if体内,它将退出if语句
21、;D.break语句在个循环体内可以出现多次。14. 下述关于开关语句的描述中,()是正确的。A.开关语句中default子句可以没有,也可以有一个;B.开关语句中每个语句序列中必须有break语句;C.开关语句中default子句只能放在最后;D.开关语句中case子句后面的表达式可以是整形表 达式。15. 下列关于条件语句的描述中,()是错误的。A.if语句中只有一个else子句;B.if语句中可以有多个else if子句;C.if语句中if体内不能是开关语句;D.if语句中的if体中可以是循环语句。、判断下列描述是否正确,对者划,错者划X。1 .预处理命令是在进行编译时首先执行的,然后再
22、进行正常 编译。2 .宏定义命令是以分号结束的。X3 .带参数的宏定义只能有1至2个参数。X4 .文件包含命令所包含的文件是不受限制的。X5 .条件编译命令只在编译时有作用。V6 .预处理命令的主要作用是提高效率的。X7 复合语句就是分程序。X8 ,条件语句不能作为多路分支语句。X9 ,开关语句不可以嵌套,在开关语句的语句序列中不能再有 开关语句X10 .开关语句中的default关键字,只能放在该语句的末尾,不能放在开头或中间。X11 . Switch语句中必须有break语句否则无法退出switch 语句。X12 . While循环语句的循环体至少执行次。X13 . Do-while循环可
23、以写成while循环的格式。V14 . For循环是只有可以确定的循环次数时可使用, 否则不能用for循环。X15 .只有for循环的循环体可以是空语句,其他种循环 的循环体不能用空语句。X16 .当循环体为空语句时,将说明该循环不作任何工作, 只起延时作用。X17 .循环是可以嵌套的,个循环体内可以包含另种 循环语句。V18 .在多重循环中,内重循环的循环变量应用的次数比 外重的多。V19 . Break语句可以出现在各种循环体中。V20 . continue语句只能出现在循环体中。V三、分析下列程序的输出结果。1.#include#define M 1.5#define A(a) M*av
24、oid main()int x(5),y(6); coutA(x+y)endl;)13.5#include#define MAX(a,b) (a)(b)?(a):(b) void main()(int m(l),M2),p(0),q; q=MAX(n,n+p)* 10;coutqendl;)20#include#includefl.cpp void main() (int a(5),b;b=fl(a);coutbendl;)fl.cpp文件内容如下:#define M(m) m*m fl(int x)(int a(3);return -M(x+a);)134.#include void mai
25、n()(int i(0);while(+i)(if(i= =10) break;if(i%3!=l) continue; coutiendl;1475.#includevoid main()(int i(l);doi+; cout+iendl;if(i= =7) break;while(i= =3); coutOk!n;)35Ok!6.#include void main()int i(l),j(2),k(3),a(10); if(!i)a-else if (j)if(k) a=5;elsea=6;a+;coutaendl;if(ij)if(i!=3)if(!k)a= 1;else if(k)
26、a=5;a+=2;coutaendl;)677.#includevoid main()inti,j,a88;* * a=l;for(i=l ;i8;i+)(* *(a+i)= l;* (*(a+i)+i)=l;for(j=l ;jvi;j+)*(*(a+i)+j)= *(*(a+i-l)+j-l)+ *(*(a+i-l)+j);)for(i=0;i8;i+)(for(j=0;j=i;j+)cout,n*(*(a+i)+j);coutendl;7. 11 11 2 113 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 11 7 21 35 35 21 7 18.
27、#includevoid main()(int x(5);doswitch(x%2)(case l:x- break;case 0:x+;break;)x-;coutxendl;while(x0);)8. 3-19.#includevoid main()(int a(5),b(6),i(O),j(O);switch(a)(case 5:switch(b)(case 5:i+;break;case 6:j+;break;default: i+;j+;)case 6: i+;j+;break;default: i+;j+;)couti,tjendl;1,210.#includechar input
28、=nSSSWILTECHllllWlWALLMPr;void main()(int i;char c;for(i=2;(c=inputi)!=0;i+)(switch(c)(case a:couti;continue;casel:break;case 1: while(c=input+4-i) !=*r&c !=0*);case 9:coutc;case E:case L:continue;default :coutc; continue;)cout *;)coutendl;SWITCH O WAMP四、按下列要求编程,并上机调试。1 .求100之内的自然数中奇数之和。2 ,求100之内的自然
29、数中被13整除的最大数。3 .求输入两个正整数的最大公约数和最小公倍数。4 .求下列分数序列的前15项之和。2/1, 3/2, 5/3, 8/5, 13/8, 21/13, .5 . 求工i! (i= 1,. . .,10)(即求 1 ! +2! +3! +4! +5! +6! +7! +8! +9! +10!之和)6 .求出11000之间的完全平方数。所谓完全平方数 是指能够表示成为另个证书的平方的整数。要求每行 输出8个数。7 .输入4个int型数,按其大小顺序输出。8 .有一函数如而所示:G+5(1 xvlO)x-5(x210)已知X值时,输出y值。9 .求一元二次方程ax2+bx+c=
30、0的解。讨论下述情况:(1) b2-4ac=0,有两个相等实根;(2) b2-4ac0,有两个不等实根;(3) b2-4acv0,有两个共朝复根;(4) a=0,不是二次方程。10.编程输出如下图案。* * * * * * * * * * * * * * * * * * * * * * *第四章司敦、选择填空1.当个函数无返回值时,定义它时函数的类型应是A. void; B.任意;C . int;D,无;2.在函数说明时,下列()项是不必要的。A.函数的类型;B.函数参数类型和名次;C .函数名字;D.返回值表达式;3,在函数的返回值类型与返回值表达式的类型的描述 中,()是错误的。A.函数的
31、返回值的类型是定义函数时确定的;B.函数的返回值的类型就是返回值表达式的类型;C.函数的返回值表达式的类型与函数返回值类型不 同时,表达示类型应转换成函数返回值类型;D.函数的返回值类型决定了返回值表达式的类型。4 .在个被调用函数中,关于return语句使用的描述, ()是错误的。A.被调用函数中可以不用return语句;B.被调用函数中可以使用多个return语句;C.被调用函数中,如果有返回值,就一定要有return 语句;D.被调用函数中,一个return语句可返回多个值给调 用函数。5 .下列()是引用调用A.形参是指针,实参是地址值;B.形参和实参都是变量;C.形参是数组名,实参是
32、数组名;D.形参是引用,实参是变量。6 .在传值调用中,要求()A.形参和实参类型任意,个数相等;B.形参和实参类型都完全一致,个数相等;C.形参和实参对应的类型一致,个数相等;D.形参和实参对应的类型一致,个数任意。7 .在C+中,关于下列设置参数默认的描述中,() 是正确的。A.不允许设置参数的默认值;8 .设置参数默认值只能在定义函数时设置;C.设置参数默认值时,应该是先设置右边的再设置左 边的;D.设置参数默认值时,应该全部参数都设置;8 .重载函数在调用时选择的依据中,()是错误的。A.参数个数;B.参数的类型;C.函数名字;D.函数的类 型;9 .下列的标识符中,()是文件级作用域
33、的。A.函数形参;B.语句标号;C .外部静态类标识符;D.自 动类标识符。10 .有一个int型变量,在程序中使用频度很高,最好 定义为()A.register; B.auto; C .extern; D.static;11 .下列标识符中,()不是局部变量。A.register 类;B.外部 static 类;C .auto 类;D.函数形参;12,下列存储类标识符中,()的可见性与存在性不 值。A.外部类;B.自动类;C.内部静态类;D.寄存器类。13. 下列存储类标识符中,要求通过函数来实现种不 太复杂的功能,并且要求加快执行速度,选用()合 适。A.内联函数;B.重载函数;C.递归调
34、用;D.嵌套调用。14. 采用函数重载的目的在于()A.实现共享;B.减少空间;C.提高速度;D.使用方 便,提高可读性。15. 在将两个字符串连接起来组成一个字符串时,选用()函数。B.A.strlen();B.strcpy();C .strcat();D.strcmp.二、判断下列描述的正确性,对者划,错者划X。1 .在C+中,定义函数时必须给出函数的类型2 .在C+中,说明函数时要用函数原型,即定义函数 时的函数头部分。V3 .在C+中,所有函数在调用前都要说明。X4567891111111如果一个函数没有返回值,定义时需用void说明。.在C+中,传址调用将被引用调用所代替。X.使用内
35、联函数是以牺牲增大空间开销为代价的。V,返回值类型、参数个数和类型都相同的函数也可以 重载。x,在设置了参数默认值后,调用函数的对应实参就必 须省略。X.计算函数参数顺序引起的二义性完全是由不同的编 译系统决定的。V0 . For循环中,循环变量的作用域是该循环的循环 体内。V1 .语句标号的作用域是定义该语句标号的文件内。 X2 .函数形参的作用域是该函数的函数体。V3 .定义外部变量时,不用存储类说明符extern,而说 明外部变量时用它。V4 .内部静态类变量与自动类变量作用域相同,但是 生存期不同。V5 .静态生存期的标识符的寿命是短的,而动态生存 期的标识符的寿命是长的。X6 .重新
36、定义的标识符在定义它的区域内是可见的,而与其同名的原标识符在此区域内是不可见的。但 是,它是存在的。J1 7.静态类标识符在它的作用域之外是不存在的。X2 8.所有的函数在定义它的程序中都是可见的。X3 9 .编译系统所提供的系统函数都被定义在他所对应 的头文件中。V4 0 .调用系统函数时,要先将该系统函数的原型说明 所在的头文件包含进去。V三、分析下列程序的输出结果。1 .#include#define N 5void fun();void main()(for (int i(l);iN;i+)fun();)void fun ()static int a;int b(2);cout(a+=
37、3,a+b)endl;1. 5811142. #include int add(int a,int b);void main()(extern int x,y;coutadd(x,y)endl; )int x(20),y(5);int add(int a,int b)(int s=a+b;return s;)253.#include void f(int j);void main()for(int i;iv=4;i+)f(i);)void f(int j)(static int a(10);int b(l);b+;couta,+,b,4-,j,=,a+b+jendl;a+=10;)2. 10+
38、2+1=1320+2+2=2430+2+3=3540+2+4=464.#includevoid f(int n)(int x(5);static int y(10);+x;+y;coutx,yendl;)void main()(int m(l);f(m);)6,115.#includeint fac(int a);void main()(int s(0);for(int i(l);iv=5;i+)s+=fac(i);coutvv5 !+4!+3!+2!+l!=,sendl;)int fac(int a)static int b=l;b二a;return b;5!+4!+3!+2!+l!=153
39、6.#includevoid fun(int ,int, int *);void main()(int x,y,z;fun(5,6,&x);fun(7,x,&y);fun(x,y,&z);coutx,y,zendl;)void fun(int a,int b,int *c)(b+=a;*c=b-a;6,6,67.#includeint add(int x, int y=8);void main()(int a(5);coutvv”sum 1 二vvadd(a)v vendl;coutsum2=add(a,add(a)endl;coutsum3=add(a,add(a,add(a)endl;)int add(int x,int y)(return x+y;)suml = 13sum2=18sum3=238.#include#define N 6int fl(int a);void main()int a(N);coutfl(a)endl;int fl (int a)(return(a= =O)?l:a*fl(a-l);)7209.#includevoid swap(int &,int &);void main()(int a(5),b(8);cout,a=,a,t,b=,bendl;swap(a,b);cout,a=,a,t4,b=,bendl;)voi
限制150内