C++练习指导.docx
- 文档编号:4042429
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:237
- 大小:180.47KB
C++练习指导.docx
《C++练习指导.docx》由会员分享,可在线阅读,更多相关《C++练习指导.docx(237页珍藏版)》请在冰豆网上搜索。
C++练习指导
第一章C++语言概述1
第2章基本数据类型与数值表达式6
第3章控制结构13
第4章数组37
第5章函数47
第六章指针56
第七章结构体72
第八章 类与对象91
第九章继承与派生类106
第十章多态性117
第十一章C++的IO系统133
第一章C++语言概述
1.1 知识要点
1.C++语言的特点
(1)C++语言支持数据封装封装是指把对象属性和操作结合在一起,构成独立的单元,它的内部信息对外界是隐蔽的,不允许外界直接存取对象的属性,只能通过有限的接口与对象发生联系。
类是数据封装的工具,对象是封装的实现。
(2)C++类中包含私有、公有和保护成员类的访问控制机制体现在类的成员中可以有公有成员、私有成员和保护成员。
对于外界而言,只需要知道对象所表现的外部行为,而不必了解内部实现细节。
封装体现了面向对象方法的“信息隐蔽和局部化原则”。
(3)C++语言中通过发送消息来处理对象消息指对象之间在交互通讯中所传送的信息。
消息由三部分构成:
消息名、接收消息的对象标识和参数。
一个对象向另一个对象发送消息请求某项服务,接收消息的对象响应该消息,进行所要求的服务,并把操作的结果返回给请求服务的对象。
(4)C++语言中允许友元破坏封装性
(5)C++语言允许函数名和运算符重载
(6)C++语言支持继承性继承指子类(派生类)可以自动拥有父类(基类)的全部属性和服务。
父类和子类是一般与特殊的关系。
在定义一个子类时,可以把父类所定义的内容做为自己的内容,并加入若干新的内容
(7)C++语言支持动态联编多态性是指在基类中定义的属性和服务被子类继承后,可以具有不同的数据类型和表现出不同的行为。
当一个对象接收到一个请求进行某项服务的消息时,将根据对象所属的类,动态地选用该类中定义的操作。
2.C++程序的组成
注释部分(两种风格)、编译预处理部分(宏定义,文件包含和条件编译、)、程序正文部分(类型定义、常变量定义、函数定义)。
最终,程序源代码由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:
显示“Iamastudent”字符串,并通过简单的程序了解和熟悉运用VC++开发环境进行编写、编译、调试、显示结果的过程。
解答:
该程序非常简单,如下代码所示,运用了cout输出流对象代表标准输出显示器,<<代表后边的字符串向显示器输出的方向。
#include
voidmain()
{cout<<”Iamastudent”< 编辑过程: ①编辑 编辑是将C++源程序输入计算机的过程。 在Visual C++6.0主界面下,点击File菜单,选择New菜单项,即可出现New对话框,如图1-1所示。 在弹出窗口中的Files标签页下,选择C++ Source File。 在选项卡右面的文件编辑框里输入文件名如“Exa”,在目录编辑框里输入文件路径,如“d: \test”。 点击确认按钮。 ②编译 编译是使用系统提供的编译器将文本文件Exa.cpp生成机器语言的过程,结果为Exa.obj,由于没有得到系统分配的绝对地址,还不能直接运行,。 选择编译菜单下的编译 Exa.cpp,计算机将完成对当前源程序的编译。 按提示建立默认工程空间。 编译无错时,将源程序Exa.cpp编译为目标文件Exa.obj。 ③连接 连接是将目标文件Exa.obj转换为可执行文件Exa.exe的过程。 如图1-4所示选择编译菜单下的构件 Exa.exe。 连接无错时,将目标文件Exa.obj连接为Exa.exe。 ④运行 运行是执行可执行文件Exa.exe,屏幕输出运行结果。 选择编译菜单下的执行 Exa.exe。 例题2: 输入一名学生的成绩,判断该成绩的等级。 如>=60的,显示“合格”,<60的显示“不合格”。 程序: #include voidmain() {intscore;//声明成绩变量,用来保存分数 cout<<”输入成绩: ”;//提示用户的信息 cin>>score;//从键盘上输入分数传递给score if(score>=60)//判断该条件是否真或假 cout<<”合格”< else cout<<”不合格”< } 分析: (1) 首先该题目要求输入一个分数,则事先声明一个整型变量score。 (2) 其次从键盘上输入该分数,应有输入语句cin,并由上面定义的变量来保存分数。 (3) 然后根据分数来判断等级,有两种情况应该用if语句。 (4) 输出的信息是根据不同条件显示字符串,用到cout输出流对象。 (5) 用到标准输入输出流对象,所以在程序前加相应头文件。 例题3: 面向对象的()是一种信息隐蔽技术,目的在于将对象的使用者与设计者分开。 不允许使用者直接存取对象的属性,只能通过有限的接口与对象发生联系。 A.多态性B.封装性C.继承性D.重用性 答案B 分析: 封装性是指把对象属性和操作结合在一起,构成独立的单元,其内部信息对外界是隐蔽的,不允许外界直接存取对象的属性,只能通过有限的接口与对象发生联系。 若不清楚多态性的定义,误选答案A。 多态性是指当一个对象接收到一个请求进行某项服务的消息时,将根据对象所属的类,动态地选用该类中定义的操作。 若不清楚继承性的定义,误选答案C。 继承是指派生类可以自动拥有基类的全部属性和服务。 若不清楚重用性的定义,误选答案D。 重用性是多态性的一种表现形式。 例题4: C++源文件的扩展名为()。 A.cppB.cC.txtD.exe 答案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./*ThisisaCprogram/* B.//ThisisaCprogram C.“ThisisaCprogram”D.//ThisisaCprogram// 答案: B 分析: 单行注释常采用“//”,多行注释采用“/*”和“*/”。 单行注释也可采用“/*”和“*/”,但答案A书写格式错误,不能选答案A。 注释和字符串的区别,双引号内的字符为字符串。 不能选答案C。 单行注释不需要结束符“//”,如果有,只能作为注释的一部分存在。 也不能选答案D。 例题6: 下面标识符中正确的是()。 A._abcB.3abC.intD.+ab 答案: A 分析: C++的标识符由字母、下划线和数字组成,而且第一个字符不能为数字。 答案B第一个字符为数字不能选B。 标识符不能为关键字,不能选答案C。 答案D第一个字符不是字母或下划线,也不能选。 例题7: 分析下列该程序的错误。 输入数据格式为: 2,5(回车)。 main() {intsum=0; inta,b; cout<<"inputa,b: "; cin>>a>>b; sum=a+b; cout< } 本程序把输入的两个数据进行累加并输出结果。 输入数据格式为: 25。 #include 把系统已经定义好的输入 //输出功能包含到本程序中。 voidmain()//程序的主函数 {//主函数开始 intsum=0;//定义一个变量sum存放累加结果,并且赋初值为0 inta,b;//定义两个变量,保存输入值 cout<<"inputa,b: ";//提示输入 cin>>a>>b;//使用基本输入设备cin输入两个变量值 sum=a+b;//进行累加,结果保存到sum变量 cout< } 分析: (1)没有使用编译预处理命令: #include。 iostream.h是系统定义的一个头文件(h-head),设置了C++的I/O环境。 cin、cout为基本输入、输出设备,定义在iostream.h头文件中。 (2)没有main()函数的返回类型,系统提示警告。 main()函数的返回类型常标注为void。 (3)输入数据时没有使用空格分隔。 输入运算符“>>”要求输入的多个数据用空格分隔。 1.3教材习题分析与解答 1.参照例题,编写一个能输出以下信息的程序。 Howareyou. Fine,thankyou. 程序: #include Voidmain() {Cout<<”Howareyou.”< Cout<<”Fine,thankyou.”< } 2.参照例题,编写一个求两个数78、45之差的程序。 程序: #include voidmain() {intsum=0; sum=78+45;//求和 cout<<"78+45="< } 3.参照例题,编写一个求三个数14、25、16之和的程序。 #include voidmain() {inta,b,c,sum;//定义变量 cout<<"inputthreenumber: \n"; cin>>a>>b>>c;//从键盘输入三个数给变量a和b、c sum=a+b+c;//求和 cout<<"sumis"< } 4.上机运行本章的三个例题,熟悉所用系统的上机方法与步骤。 略 5.上机运行本章习题1、2和3。 略 1.4 补充习题 1.下面的()不是C++所包含的要素。 A.重载B.对象C.类D.继承 2.下列标识符中,()是合法的。 A.gotoB.StudentC.123D.k-ld 3.在C++语言中,()的陈述是正确的。 A.能使用关键字并区分大小写B.能使用关键字并不区分大小写 C.不能使用关键字并区分大小写D.不能使用关键字并不区分大小写 4.C++语言中语句的结束符是()。 A.,B.;C.。 D.、 5.下面对于类的描述,()是错误的。 A.类是抽象数据类型的实现B.类是具有共同行为的若干对象的统一描述体 C.类是创建对象的模板D.类就是C语言中的结构类型 6.写一个程序输出Hello,C++! 。 7.编译下列程序,改正错误信息,分析输出结果。 #include voidmain() {intx,y; cout<<"inputx: "< cin>>x; y=x*x; cout<<"y=< } 8.下列程序有何错误? #include voidmain() {cout>>"Hello">>endl;} 9.关于C++和C语言的描述中,()是错误的? A.C是C++的一个子集B.C程序在C++环境可以运行 C.C++程序在C环境可以运行D.C++是面向对象的而C是面向过程的 10.给出下列程序的运行结果。 #include voidmain() { inta (2),b(3),c(4); cout<<"c1="< c=a+b; cout<<"c2="< } 第2章基本数据类型与数值表达式 2.1知识要点 计算机的基本功能是进行数据处理。 在C++语言中,数据处理的基本对象是常量和变量。 运算是对各种形式的数据进行处理。 数据在内存中存放的情况由数据类型所决定。 数据的操作要通过运算符实现,而数据和运算符共同组成了表达式。 本章是对C++语言中的数据类型、运算符、表达式等内容的全面介绍,要正确理解其特点,并灵活运用,主要掌握以下的知识要点: 1.掌握常量和变量的概念。 2.掌握整型数据和实型数据、字符型数据和字符串型数据的概念和区别。 3.掌握各种类型的变量说明及其初始化。 4.掌握算术运算、关系运算、逻辑运算、赋值运算、逗号运算、条件运算等概念。 5.掌握运算符的优先级、左结合和右结合规则。 6.掌握表达式求值时的自动转换和强制类型转换。 7.掌握自加、自减运算的规则。 8.掌握常用数学函数的功能。 2.2典型例题分析与解答 1.1. 选择题 例题1: 运算符+、=、*、>=中,优先级最高的运算符是()。 A.+B.=C.*D.>= 答案: C 分析: 根据C++语言对运算符优先级的规则,以上运算符优先级从低到高的次序为=、>=、+、*。 例题2: 下列说法正确的是()。 A.cout<<”\n”是一个语句,它能在屏幕上显示”\n” B.\68代表的是字符D。 C.1E+5的写法正确,它表示余割整型常量。 D.0x10相当于020。 答案: D 分析: 分号是语句的已部分,且\n是转义字符;\68代表了八进制的6、8,而八进制中没有数字8;1E+5是实型常量;十六进制的10相当于十进制的16,相当于八进制的20。 例题3: 下列不合法的变量名为()。 A.intB.int1C.name_1D.name0 答案: A 分析: 根据变量名命名要求,变量名只能由大小写字母、数字、下划线组成,且系统关键字不能作为变量名。 例题4: 下面正确的为()。 A.4.1/2B.3.2%3 C.3/2==1结果为1D.7/2结果为3.5 答案: A 分析: %运算符要求式整型;关系运算值为0;两个整数相除,商为为相除后的整数部分。 例题5: 已知a=4,b=6,c=8,d=9,则“(a++,b>a++&&c>d)? ++d: a A.9B.6C.8D.0 答案: D 分析: 此题是考察“++”运算符、逗号运算符、条件运算符及它们运算优先级的综合题,根据这些运算符的运算规则,得出表达式的运算结果。 例题6: 已知i=5,j=0,下列各式中运算结果为j=6的表达式是()。 A.j=i+(++j)B.j=j+i++C.j=++i+jD.j=j+++i 答案: C 分析: 自增++、自减运算符在变量的前面或后面,其运算结果是不同的。 若++或—在变量前,则先将变量的值加1(或减1)后,再将变量的值参与运算;反之则先将变量的值参加运算,再将变量的值加1(或减1)。 自增++、自减运算符优先级高于算术运算符。 例题7: 已知x=43,ch=‘A’,y=0;则表达式(x>=y&&ch<’B’&&! y)的值是()。 A.0B.语法错C.1D.“假” 分析: 根据C++语言中运算符优先级的高低,“! ”运算符最高,关系运算符高于逻辑运算符。 则上面的表达式转换为: 1&&1&&1,结果为1。 答案: C。 2. 填空题 例题8: 如果s是int型变量,且s=6,则下面s%2+(s+1)%2表达式的值为____。 答案: 1 分析: %运算符是求余运算,得到的结果是相除后的余数。 表达式转换为6%2+(6+1)%2=0+7%2=1。 例题9: 如果定义inta=2,b=3;floatx=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。 3. 编程题 例题12: 编写一个程序,从键盘输入半径和高,输出圆柱体的底面积和体积。 解: 程序如下: #include voidmain() { doubler,h,area,volume; cout<<”请输入半径: ”; cin>>r; cout<<”请输入高: ”; cin>>h; area=3.14*r*r; volume=area*h; cout<<”底面积是: ”< cout<<”体积是: ”< } 2.3教材习题分析与解答 1. C++语言中有哪些数据类型? 分别说明它们的类型关键字、取值范围、类型长度。 答: C++语言中的数据类型有: 整型(短整型,整型,长整型);字符型;逻辑型;枚举型;实型(单精度,双精度,长双精度);引用型(指针,引用);复合型(结构,联合);空类型。 2. 字符常量与字符串常量的区别是什么? 答: 字符常量与字符串常量的主要区别在于: (1)定界符不同。 字符常量使用单引号,而字符串常量使用双引号。 (2)长度不同。 字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数。 (3)存储要求不同。 字符常量存储的是字符的ASCII码值,而字符串常量除了要存储有效的字符外,还要存储一个结束标志’\0’。 3.说明下面的每个数据各属于哪一种(数值常量、字符常量、字符串、标识符、保留字、运算符、标点、非法数据)? 2518-3.6712.8“4”‘4’ x1“x2”“1949.10”cinK_name 3ab“floatx,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 运算符: + 标点: ? 非法数据: “floatx,y“;,3ab 变量: x1,K_name 4.选择题 (1)下列数据类型不是C++语言基本数据类型的是()。 A.字符型B.整型C.实型D.数组 答案: D (2)在C++语言中,080是()。 A.八进制数B.十进制数C.十六进制数D.非法数 答案: B (3)下列字符列中,可作为C++语言程序自定义标识符是()。 A.switchB.fileC.breakD.do 答案: B (4)运算符+、<=、=、%中,优先级最低的运算符是()。 A.+B.<=C.=D.% 答案: C (5)下列字符列中,可以作为“字符串常量”的是()。 A.ABCB.″xyz″C.′uvw′D.′a′ 答案: B (6)设变量m,n,a,b,c,d均为0,执行(m=a==b)||(n=c==d)后,m,n的值是()。 A.0,0B.0,1C.1,0D.1,1 答案: C (7)字符串”vm\x43\\\np\102q”的长度是()。 A.8B.10C.17D.16 答案: A (8)在C++语言中,自定义的标识符()。 A.能使用关键字并且不区分大小写B.不能使用关键字并且不区分大小写 C.能使用关键字并且区分大小写D.不能使用关键字并且区分大小写 答案: D (9)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 练习 指导
![提示](https://static.bdocx.com/images/bang_tan.gif)