C语言程序习题解析.doc_第1页
C语言程序习题解析.doc_第2页
C语言程序习题解析.doc_第3页
C语言程序习题解析.doc_第4页
C语言程序习题解析.doc_第5页
已阅读5页,还剩156页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章C+语言概述2第3章 控制结构15第4章 数组40第5章 函数52第六章 指针61第七章 结构体77第八章? 类与对象97第九章 继承与派生类113第十章 多态性125第十一章 C+的IO系统142第一章C+语言概述1.1知识要点1C+语言的特点(1)C+语言支持数据封装 封装是指把对象属性和操作结合在一起,构成独立的单元,它的内部信息对外界是隐蔽的,不允许外界直接存取对象的属性,只能通过有限的接口与对象发生联系。类是数据封装的工具,对象是封装的实现。(2)C+类中包含私有、公有和保护成员 类的访问控制机制体现在类的成员中可以有公有成员、私有成员和保护成员。对于外界而言,只需要知道对象所表现的外部行为,而不必了解内部实现细节。封装体现了面向对象方法的“信息隐蔽和局部化原则”。(3)C+语言中通过发送消息来处理对象 消息指对象之间在交互通讯中所传送的信息。消息由三部分构成:消息名、接收消息的对象标识和参数。一个对象向另一个对象发送消息请求某项服务,接收消息的对象响应该消息,进行所要求的服务,并把操作的结果返回给请求服务的对象。(4)C+语言中允许友元破坏封装性 (5)C+语言允许函数名和运算符重载 (6)C+语言支持继承性 继承指子类(派生类)可以自动拥有父类(基类)的全部属性和服务。父类和子类是一般与特殊的关系。在定义一个子类时,可以把父类所定义的内容做为自己的内容,并加入若干新的内容(7)C+语言支持动态联编 多态性是指在基类中定义的属性和服务被子类继承后,可以具有不同的数据类型和表现出不同的行为。当一个对象接收到一个请求进行某项服务的消息时,将根据对象所属的类,动态地选用该类中定义的操作。2C+程序的组成注释部分(两种风格)、编译预处理部分(宏定义,文件包含和条件编译、)、程序正文部分(类型定义、常变量定义、函数定义)。最终,程序源代码由ASCII码组成类似单词或词组的单元(词法单元),可以用任意的文本编辑器编辑,源代码中的空白(空格、Tab、回车换行)用来表示词法单元的开始和结束,除这一功能外其余空白将被忽略,但如果是字符串内部的空白(不含回车换行,或者说字符串内不能直接回车换行,需要使用转义符)将作为字符串的一部分输出,不会忽略。注释: 1)一对符号“/ *”与“* /”之间的内容称为注释。它可以占多行,是从C语言中继承来的一种注释形式。 2)一行中符号“/”之后的内容也称为注释。它只能占一行,是C+语言特有的一种注释形式。编译预处理命令: C+的编译预处理命令以“#”开头。C+提供了三类编译预处理命令:宏定义、文件包含和条件编译。 程序主体:用函数组织过程,每个相对独立的过程都要组织成一个函数;不同的程序由不同的函数按层次结构组织而成。一个C+程序至少且仅包含一个main()函数,也可以包含一个main()函数和若干个其他函数。其他函数可以是系统提供的库函数(例如printf()和scanf()函数),也可以是用户根据需要自己编制设计的函数3函数?C+的程序由若干个文件组成,文件名的后缀为.cpp(c?plus?plus)。每个文件又是由函数组成,函数之间可以调用。在这些函数中只有一个函数是主函数main()。程序执行时,操作系统先调用主函数,主函数再依次调用其它函数完成设计任务。 4程序的编辑、编译、连接和运行(1)编辑 编辑是将编写好的C+源程序输入到计算机中,生成磁盘文件的过程。(2)编译和连接过程编译器的功能是将程序的源代码转换成为机器代码的形式,称为目标代码,然后,再将目标代码进行连接,生成可执行文件。编译过程又可分为三个子过程。(1)预处理过程:对源程序编译时,先进行预处理,如果源程序中有预处理命令,则先执行这些预处理命令,执行后再进行下面的编译过程。(2)编译过程:编译过程主要是进行词法分析和语法分析的过程,又称源程序分析。1)词法分析。2)语法分析。3)符号表。4)错误处理程序。5)生成目标代码。连接过程:这是编译的最后一个过程,将用户程序生成的多个目标代码文件和系统提供的库文件中的某些代码连接在一起由连接器生成一个可执行文件,存储这个可执行文件的扩展名为.exe。(3)运行 一个C+的源程序经过编译和连接后生成了可执行文件。运行可执行文件可在编译系统下选择相关菜单项来实现,也可以采用其他方法。1.2 典型例题分析与解答例题1:显示“I am a student”字符串,并通过简单的程序了解和熟悉运用VC+开发环境进行编写、编译、调试、显示结果的过程。解答:该程序非常简单,如下代码所示,运用了cout输出流对象代表标准输出显示器,代表后边的字符串向显示器输出的方向。#include void main()cout”I am a student”=60的,显示“合格”,60的显示“不合格”。程序:#include /输入输出流对象的头文件void main() int score; /声明成绩变量,用来保存分数 coutscore; /从键盘上输入分数传递给score if( score=60) /判断该条件是否真或假 cout”合格”=60是真的时候,运行该语句 else cout”不合格”=60是假的时候,运行该语句分析:(1)? 首先该题目要求输入一个分数,则事先声明一个整型变量score。(2)? 其次从键盘上输入该分数,应有输入语句cin,并由上面定义的变量来保存分数。(3)? 然后根据分数来判断等级,有两种情况应该用if语句。(4)? 输出的信息是根据不同条件显示字符串,用到cout输出流对象。(5)? 用到标准输入输出流对象,所以在程序前加相应头文件。?例题3:面向对象的( )是一种信息隐蔽技术,目的在于将对象的使用者与设计者分开。不允许使用者直接存取对象的属性,只能通过有限的接口与对象发生联系。A多态性 B封装性 C继承性 D重用性答案B分析:封装性是指把对象属性和操作结合在一起,构成独立的单元,其内部信息对外界是隐蔽的,不允许外界直接存取对象的属性,只能通过有限的接口与对象发生联系。若不清楚多态性的定义,误选答案A。多态性是指当一个对象接收到一个请求进行某项服务的消息时,将根据对象所属的类,动态地选用该类中定义的操作。若不清楚继承性的定义,误选答案C。继承是指派生类可以自动拥有基类的全部属性和服务。若不清楚重用性的定义,误选答案D。重用性是多态性的一种表现形式。?例题4:C+源文件的扩展名为( )。Acpp Bc Ctxt Dexe答案A 分析:C+源程序的扩展名为cpp。C程序的扩展名为c。文本文件的扩展名为txt。源程序编译后可执行文件的扩展名为exe。若不清楚C+源程序扩展名和C源程序扩展名的区别,误选答案B。C+兼容C,当文件名保存为c时,调用C编译器;当文件名保存为cpp时调用C+编译器。若不清楚C+源程序扩展名和文本文件扩展名的区别,误选答案C。C+源程序可以在文本编辑器里编辑,但一定注意将其扩展名保存cpp,不能为txt。若不清楚C+源程序和C+可执行文件的扩展名的区别,误选答案D。C+源程序经过编译、连接后得到可执行文件的扩展名为exe。?例题5:C+的合法注释是( )。A/*This is a C program/* B/ This is a C programC “This is a C program” D/This is a C program/答案:B分析:单行注释常采用“/”,多行注释采用“/*”和“*/”。单行注释也可采用“/*”和“*/”,但答案A书写格式错误,不能选答案A。注释和字符串的区别,双引号内的字符为字符串。不能选答案C。单行注释不需要结束符“/”,如果有,只能作为注释的一部分存在。也不能选答案D。?例题6:下面标识符中正确的是( )。A_abc B3ab C int D+ab答案:A分析:C+的标识符由字母、下划线和数字组成,而且第一个字符不能为数字。答案B第一个字符为数字不能选B。标识符不能为关键字,不能选答案C。答案D第一个字符不是字母或下划线,也不能选。例题7:分析下列该程序的错误。输入数据格式为:2,5(回车)。main() int sum=0; int a,b; coutab; sum=a+b; coutsumendl;本程序把输入的两个数据进行累加并输出结果。输入数据格式为:2 5。#include / 编译预处理命令,以“#”开头。把系统已经定义好的输入/输出功能包含到本程序中。void main() / 程序的主函数 / 主函数开始int sum=0; / 定义一个变量sum存放累加结果,并且赋初值为0 int a,b; / 定义两个变量,保存输入值coutab; / 使用基本输入设备cin输入两个变量值 sum=a+b; / 进行累加,结果保存到sum变量coutsum”要求输入的多个数据用空格分隔。?1.3 教材习题分析与解答1参照例题,编写一个能输出以下信息的程序。How are you.Fine,thank you.程序:#includeVoid main() Cout”How are you.”endl; /输出字符串并换行。 Cout”Fine,thank you.”endl;2参照例题,编写一个求两个数78、45之和的程序。程序:#include void main() int sum=0;sum=78+45; /求和 cout78+45= sumendl;?3参照例题,编写一个求三个数14、25、16之和的程序。#include void main() int a,b,c,sum; /定义变量 coutabc; /从键盘输入三个数给变量a和b、c sum=a+b+c; /求和 coutsum is sum;?4上机运行本章的三个例题,熟悉所用系统的上机方法与步骤。略5上机运行本章习题1、2和3。略? 1.4 补充习题1.下面的( )不是C+所包含的要素。A重载 B对象 C类 D继承2.下列标识符中,( )是合法的。Agoto BStudent C 123 Dkld3.在C+语言中,( )的陈述是正确的。A能使用关键字并区分大小写 B能使用关键字并不区分大小写C 不能使用关键字并区分大小写 D不能使用关键字并不区分大小写 4.C+语言中语句的结束符是( )。A , B ; C 。 D 、5.下面对于类的描述,( )是错误的。A类是抽象数据类型的实现 B类是具有共同行为的若干对象的统一描述体C 类是创建对象的模板 D类就是C语言中的结构类型6.写一个程序输出 Hello,C+!。7.编译下列程序,改正错误信息,分析输出结果。#include void main() int x,y;coutinput x:x;y=x*x;couty=yn;8.下列程序有何错误?#include void main()coutHelloendl;9.关于C+和C语言的描述中,( )是错误的?AC是C+的一个子集 B C程序在C+环境可以运行C C+程序在C环境可以运行 D C+是面向对象的而C是面向过程的10.给出下列程序的运行结果。#include void main()int a(2),b(3),c(4);coutc1=cendl;c=a+b;coutc2=c=中,优先级最高的运算符是( )。A+ B= C* D=答案:C分析:根据C+语言对运算符优先级的规则,以上运算符优先级从低到高的次序为=、=、+、*。?例题2:下列说法正确的是( )。Acouta+&cd)?+d:a=y&chB&!y)的值是( )。A0 B语法错 C1 D“假”分析:根据C+语言中运算符优先级的高低,“!”运算符最高,关系运算符高于逻辑运算符。则上面的表达式转换为:1&1&1,结果为1。答案:C。? 填空题例题8:如果s是int型变量,且s=6,则下面s%2+(s+1)%2表达式的值为_。答案:1分析:%运算符是求余运算,得到的结果是相除后的余数。表达式转换为6%2+(6+1)%2=0+7%2=1。?例题9:如果定义int a=2,b=3;float x=5.5,y=3.5;则表达式(float)(a+b)/2+(int)x%(int)y的值为_。答案:4.5分析:不同类型的数据混合运算时,可以使用强制类型转换符,强制将一种数据类型转换为另一种数据类型后再进行运算。对表达式,先求表达式的值,再转换值的类型,本题的运算结果为4.5。?例题10:设所有变量均为整型,则表达式(e=2,f=5,e+,f+,e+f)的值为_。答案:9分析:逗号运算符是是将两个或多个表达式组合成一个表达式的运算符。求解时从左至右依次计算每个表达式的值,整个表达式的值就是最右边的表达式的值。本题的答案为9。?例题11:已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=a+8-4的值为_。答案:e分析:C+语言中,对字符数据进行算术运算,实际上就是对字符的ASCII码进行运算。以字符形式输出时,再将ASCII码转换为相应的字符输出。本题表达式为ch=97+8-4=101,101相应的ASCII为字符e。? 编程题例题12:编写一个程序,从键盘输入半径和高,输出圆柱体的底面积和体积。解:程序如下:#includevoid main() double r, h, area, volume; coutr; couth; area=3.14*r*r; volume=area*h; cout”底面积是: ”areaendl; cout”体积是: ”volumeendl;2.3 教材习题分析与解答1.? C+语言中有哪些数据类型?分别说明它们的类型关键字、取值范围、类型长度。答:C+语言中的数据类型有:整型(短整型,整型,长整型);字符型;逻辑型;枚举型;实型(单精度,双精度,长双精度);引用型(指针,引用);复合型(结构,联合);空类型。2.? 字符常量与字符串常量的区别是什么?答:字符常量与字符串常量的主要区别在于:(1)定界符不同。字符常量使用单引号,而字符串常量使用双引号。(2)长度不同。字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数。(3)存储要求不同。字符常量存储的是字符的ASCII码值,而字符串常量除了要存储有效的字符外,还要存储一个结束标志0。3.说明下面的每个数据各属于哪一种(数值常量、字符常量、字符串、标识符、保留字、运算符、标点、非法数据)? 25 18 -3.67 12.8 “4” 4 x1 “x2” “1949.10” cin K_name 3ab “float x ,y “ ; if +“n” ? ; “sy1.cpp” 32 答:数值常量有:25,18,-3.67, 12.8字符常量有:4,32字符串有:“4”,“x2”, “1949.10”, “sy1.cpp”, “n”保留字:cin ,int,endl,if运算符:+标点:?非法数据:“float x ,y “ ; , 3ab变量:x1,K_name?4.选择题(1)下列数据类型不是C+语言基本数据类型的是( )。 A.字符型 B.整型 C.实型 D.数组答案:D?(2)在C+语言中,080是( )。A.八进制数 B.十进制数 C.十六进制数 D.非法数答案:B?(3)下列字符列中,可作为C+语言程序自定义标识符是( )。 A.switch B.file C.break D.do 答案:B? (4) 运算符 +、=、=、% 中,优先级最低的运算符是( )。A. + B.= C.= D.% 答案:C? (5) 下列字符列中,可以作为“字符串常量”的是( )。 A. ABC B.xyz C.uvw D. a 答案:B? (6) 设变量m,n,a,b,c,d均为0,执行(m = a=b)|(n=c=d)后,m,n的值是( )。 A.0,0 B. 0,1 C. 1,0 D. 1,1答案:C? (7) 字符串”vmx43np102q”的长度是( )。A. 8 B. 10 C. 17 D. 16 答案:A (8) 在C+语言中,自定义的标识符( )。A.能使用关键字并且不区分大小写 B.不能使用关键字并且不区分大小写C.能使用关键字并且区分大小写 D.不能使用关键字并且区分大小写答案:D?(9)设有代码“int a = 5;”,则执行了语句“a + = a - = a*a;”后,变量a的值是( )。A.3 B. 0 C. -40 D. 12答案:C?(10)设a为5,执行下列代码后,b的值不为2的是( )。A. b = a/2 B. b = 6-(-a) C. b = a%2 D. b = a 3 ? 3: 2答案:C?(11)下面的( )均是C语言的整型常量。A.0xffff 和 611 B.01b 和 0xa1 C.986.012 和 0667 D.2e4 和 0x答案:A(12)数学公式写成C表达式,下面的( )是正确的。A.sqrt (abs(pow(x, y) + exp(y) B.sqrt (abs(pow(y, x) + exp(y) C.sqrt (fabs(pow(x, y) + exp(y) D.sqrt (fabs(pow(y, x) + exp(y)答案:D?5.x为int类型,y为double类型,指出下列各表达式值的类型。(1)1/3 int (2) 48L long(3) 5 % 3 int (4) x*3/y double (5) x+20 int (6) (int )y int(7) y != 10 bool (8) x10 bool(9) x10 ? x : sqrt (x) int或float (10) x & y bool(11) true bool (12) (char) (x+10) char(13) 1.0 /3 float (14) sizeof (float) int(15) x,y,x+y, double说明:(9)题,如果x10成立,表达式值的类型为int,如果x10不成立,表达式值的类型为float。(15)题,为逗号表达式,x+y的值即为整个表达式的值,因而值的类型为double。bool型在C+用int代替,true值为1,false值为0。?6. 写出下列算术表达式的值:(1) x+a%3*(int)(x+y)%2/4 x=2.5,a=7,y=4.7 答:上述表达式=2.5+1*(int)7.2%2/4 = 2.5+1*7%2/4 = 2.5?(2) (float)(a+b)/2+(int)x%(int)y a=2,b=3,x=3.5,y=2.5答:上述表达式=(float)5/2+3%2 = 2.5+1 = 3.5?7.设程序中有说明语句int a=20; double x=4.7; char r= a; 试求出下列每个表达式的值(假定各表达式互不影响)。 答案 答案(1)a+ 20(2) +r 98(3) 1+a/3%4 3(4) 10*sizeof( int ) 40(5) char (a+20) (6)a= =r | a= =floor(x) 0(7) a/9.0 2.222222(8)x=pow(3,5) 273.000000(9) x=(a+,r+) 97.000000(10) ceil(x-0.5) 5.000000(11) a=abs(a)%8-10 -6(12)x=fabs(-27.2)+6 33.200000(13)floor(x+0.5) 5.000000(14) ceil(x-=0.5)-0.5) 4.000000(15)floor(x*1000+0.5)/1000 4.700000(16)floor(x+0.5) 5.000000(17)floor(x*1000)/1000 4.700000(18)a+rand()%40 某一个随机整数(19) a % =n % = 2),n=5 5 此题运行时要给n赋初值, n必须是整型奇数,n为整型偶数出错。(20) a + = a - = a * = a 0说明:函数ceil(x),返回大于等于x的最小整数;floor(x),返回小于等于x的最大整数;rand(),返回032767之间的整数。?8.设程序中有说明语句int x=20; float y=4.7; char ch = k; 试求出下列每个表达式的值(假定各表达式互不影响) 答案 答案(1) x=0 0(2) x!=y 1(3) x+ 21 0(4) a = A 0(5) ch != 0 1(6) x0 & y0 1(7) x0 & 1 1(8) y0 & 0 0(9) !(x|y)=!x&!y 0(10) x+ !=20 | y 1(11) ! ch=ch 0(12) !(x&y)=!x|!y 1说明:C+语言提供了三种逻辑运算符:!,&,|,其中!逻辑非的优先级最高,&逻辑与次之,|逻辑或最低。!逻辑非是右结合性,&逻辑与和|逻辑或是左结合性。2.4 补充习题? 选择题(1)C+语言中的标识符只能右字母、数字和下划线三种字符组成,且第一个字符( )。 A必须为字母 B必须为下划线 C必须为字母或下划线 D可以是字母、数字和下划线中任一中字符?(2)下面正确的字符常量是( )。 A“C” B CW D?(3)如果说明语句:char c=72;则变量c( )。 A包含1个字符 B包含2 个字符C包含3个字符 D说明不合法,c 的值不确定?(4)表达式18/4*sqrt(4.0)/8值的数据类型为( )。 Aint Bfloat Cdouble D不确定?(5)关于逻辑运算符的说法正确的是( )。 A它们都是双目运算符,优先级相同B语句“int a=0,c=1,b;b=a&c+;” 执行后,c 的值为2C语句“int a=0,c=1,b;b=a|c+;” 执行后,c 的值为2D语句“int a=1,c=1,b;b=a&c+;” 执行后,c 的值为2?(6)设 int m=7,n=12;则表达式为3的是( )。 An%=(m%=5) Bn%=(m-m%5)Cn%=m-m%5 D(n%=m)-(m%=5)?(7)数学公式yx+lny,正确的C+语言的表达式是( )。 Asqrt(fabs(pow(y,x)+log(y) Bsqrt(fabs(pow(x,y)+log(y)Csqrt(abs(pow(y,x)+log(y) Dsqrt(abs(pow(x,y)+log(y)?(8)有如下程序段: int a=14,b=15,x; char c=A; x=(a&b)&(cb)&(n=cd)后n的值为( )。 A1 B2 C3 D4(18)用C+的语言表达式表示 |x3+log10x|的正确是( )。 Afabs(x*3+log(x) Babs(pow(x,3)+log(x)Cf abs(pow(x,3.0)+log(x) Dabs(pow(x,3.0)+log(x)?(19)设int k=7,x=12;则能使值为3的表达式是_。 Ax%=(k%=5) Bx%=(k-k%5)Cx%=k-k%5 D(x%=k)-(k%=5)?(20)设有语句:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是( )。 A2.500000 B2.750000 C3.500000 D0.000000?(21)设有语句int x=3,y=4,z=5;则下面表达式中值为0的是( )。 Ax&y Bx=y Cx|y+z&y-z D!(xy)& !z | | 1)?(22)表达式18/4*sqrt(4.0)/8值的数据类型为( )。 Aint Bfloat Cdouble D不确定?(23)判断char型变量n是否为小写字母的正确表达式为( )。 Aa= n =a)&(n=n)| |(z=a)&(nabmn;则下列输入数据的方式中不正确的是( )。 A10,20,X,Y B1020 XYC10 20 X Y D10、20、X、Y答案:C分析:C+语言没有专门的输入/输出语句,其输入/输出是通过输入/输出流来实现的。用cin输入时,空格和回车键均可作为输入字符之间的分隔符,逗号不能作为分隔符。字符型变量只能容纳一个字符。?例题2:以下不正确的语句是( )。 Aif(xy); Bif(x=y)&(x!=0) x+=y;Cif(x!=y)cinx;else ciny;Dif(xy) x+;y+;答案:B 分析:if语句后面

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论