版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++面向对象程序设计(第二版)
C++面向对象程序设计(第二版)
第一章面向对象程序设计概述08二月2023C++面向对象程序设计第一章面向对象程序设计概述1.1面向对象的基本概念1.2C++面向对象程序设计1.3C++程序的基本组成1.4VisualC++6.0开发环境08二月2023C++面向对象程序设计1.1面向对象的基本概念面向对象程序设计的本质是把数据及对数据的操作方法放在一起,作为一个相互依存、不可分离的整体——对象。对同类型对象抽象出其共性,形成类。08二月2023C++面向对象程序设计1.1面向对象的基本概念面向对象程序设计方法具有4个基本特征:抽象、封装、继承和多态性。抽象(abstract)就是忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,把具有共同性质的事物划分为一类,得出一个抽象的概念。面向对象方法中的“类”将具有相同属性和行为的一组对象提供了抽象的描述,一个属于某类的对象称为该类的一个实例。
08二月2023C++面向对象程序设计1.1面向对象的基本概念封装(encapsulation)就是把每个对象的数据(属性)和操作(行为)包装在一个类中,并尽可能隐藏对象的内部细节。一般限制直接访问对象的属性,而应通过操作接口访问,这样使程序中模块之间关系更简单、数据更安全。对程序的修改也仅限于类的内部,使得由于修改程序所带来的影响局部化。
08二月2023C++面向对象程序设计1.1面向对象的基本概念多态性(polymorphism)是指允许不同类的对象对同一消息作出的响应不相同。一般类中定义的属性或行为,被特殊类继承后,可以具有不同的数据类型或者是表现出不同的行为。这使得同一个属性或行为在一般类及其各个特殊类中具有不同的语义08二月2023C++面向对象程序设计1.1面向对象的基本概念通过使用面向对象程序设计的抽象、封装、继承和多态性等机制,程序更易于维护、更新和升级。利用代码可重用性,程序员可以在程序中大量使用成熟的类库,从而缩短程序的开发时间,提高程序员的工作效率和程序的可靠性。08二月2023C++面向对象程序设计1.2C++面向对象程序设计本书介绍的主要就是使用最为广泛的C++语言和使用C++语言进行面向对象程序设计的方法。在学习编程之前,我们首先来简单了解以下C++程序的开发过程。08二月2023C++面向对象程序设计1.2C++面向对象程序设计程序的开发通常要经过编辑、编译、连接、运行调试这几个步骤。编辑是将源程序输入到计算机中,生成后缀为.cpp的磁盘文件。编译(compile)是将程序的源代码转换成机器语言代码。程序员编制的源程序被编译后,会生成一个目标文件,这个文件通常以.obj作为文件扩展名,该目标文件为源程序的目标代码。08二月2023C++面向对象程序设计1.2C++面向对象程序设计但是编译后的程序还不能由计算机执行,因为目标代码只是一个个的程序块,需要相互衔接成为一个适应一定操作系统环境的程序整体。为了把它转换成可执行程序,必须进行连接(link)。C++程序通常是通过同时连接一个或多个目标文件以及一个或几个库而创建的。08二月2023C++面向对象程序设计1.2C++面向对象程序设计库(.lib)是一组由机器指令构成的程序代码,是可连接文件。库有标准库和用户生成的库。标准库是由C++提供的,用户生成的库是由软件开发商或程序员提供的。文件与库连接的结果,即生成一个后缀为.exe的计算机可执行程序。08二月2023C++面向对象程序设计1.3C++程序的基本组成我们就从最简单的例子来分析C++程序的构成:#include<iostream>usingnamespacestd;voidmain(){cout<<"Hello,World!\n";cout<<"I'mastudent.\n";}08二月2023C++面向对象程序设计1.3C++程序的基本组成程序运行结果为:Hello,World!I’mastudent.08二月2023C++面向对象程序设计1.3C++程序的基本组成一个C++程序是由三部分组成的,分别是:注释部分、编译预处理和程序主体。程序的注释部分是程序员为读者作的说明,是提高程序可读性的一种方法。每个以符号“#”开头的行,称为编译预处理行。如本例中“#include”称为编译指令。
08二月2023C++面向对象程序设计1.3C++程序的基本组成在程序的主体部分中,main是主函数名,函数是C++程序中最小的功能单位,每一个C++程序都必须有一个main()函数,并且main()表明了程序执行的开始点。08二月2023C++面向对象程序设计1.3C++程序的基本组成每一种编程语言都使用一组字符来构造成编程语句。用C++语言编写程序时,除了字符型数据以外,其它所有成分都只能由字符集中的字符构成。C++语言的字符集由下列字符构成:08二月2023C++面向对象程序设计1.3C++程序的基本组成26个大写英文字母:ABCDEFGHIJKLMNOPQRSTUVWXYZ26个小写英文字母:abcdefghijklmnopqrstuvwxyz10个数字字符:0123456789特殊字符:
+-*/=,._:;?\"'~︱!#%&()[]{}^<>空格08二月2023C++面向对象程序设计1.3C++程序的基本组成词法记号是最小的词法单元,接下来介绍C++的关键字、标识符、文字、运算符、分隔符、空白符。关键字
C++中,关键字又称保留字,它是预先定义好的标识符,这些标识符对C++编译程序有着特殊的含义。
08二月2023C++面向对象程序设计1.3C++程序的基本组成标识符
标识符是程序员声明的单词,它命名程序正文中的一些实体,如函数名、变量名、类名、对象名等。
文字
文字是在程序中直接使用符号表示的数据,包括数字、字符、字符串和布尔文字。操作符(运算符)
操作符是用于实现各种运算的符号。08二月2023C++面向对象程序设计1.3C++程序的基本组成分隔符
分隔符用于分隔各个词法记号或程序正文,这些分隔符不表示任何实际的操作,仅用于构造程序
。
空白
在程序编译时的词法分析阶段将程序正文分解为词法记号和空白。空白是空格、制表符、换行符和注释的总称。08二月2023C++面向对象程序设计1.4VisualC++6.0开发环境VisualC++6.0是微软公司推出的一个功能强大的可视化软件开发工具。VisualC++6.0不仅是一个C++编译器,它还有一个非常好的集成开发环境——DeveloperStudio,包括编辑器编译器、调试器以及程序向导等组件,用它可以在编写C++程序时对程序的结构进行可视化的管理。08二月2023C++面向对象程序设计1.4VisualC++6.0开发环境本节简单介绍VisualC++6.0集成开发环境的特点、界面风格和简单工具的使用。安装完VisualC++6.0后,从Windows的“开始|程序”菜单中选择MicrosoftVisualStudio6.0菜单中的MicrosoftVisualC++6.0菜单项,就启动了VisualC++集成开发环境,出现集成开发环境的主窗口DeveloperStudio。08二月2023C++面向对象程序设计1.4VisualC++6.0开发环境下面通过实例说明如何利用VisualC++6.0创建一个C++程序。启动VisualC++6.0,打开File菜单,执行New菜单命令,出现New对话框,如图1-1所示。在Project页面窗口中选择Win32ConsoleApplication选项,创建一个Win32控制台应用程序。在Projectname编辑框中输入项目名称Hello,在Location编辑框中输入保存项目的路径。
08二月2023C++面向对象程序设计1.4VisualC++6.0开发环境图1-1创建一个Win32控制台应用程序08二月2023C++面向对象程序设计1.4VisualC++6.0开发环境在Win32ConsoleApplication-Step1of1对话框中设置控制台应用程序的类型,如图1-2所示。这里我们要创建一个空项目程序,因此选择第一项Anemptyproject,单击Finish按钮,出现NewProjectInformation对话框,单击OK按钮,将生成一个空项目。
08二月2023C++面向对象程序设计1.4VisualC++6.0开发环境图1-2设置控制台应用程序的类型08二月2023C++面向对象程序设计1.4VisualC++6.0开发环境向项目Hello中添加源程序文件。打开Project菜单,选择AddtoProject|New,出现如图1-3所示的添加项目文件对话框。在的Files页面窗口中选择C++SourceFile,在右边的File编辑框中输入C++源程序文件名称Hello,在Location编辑框中输入保存该文件的路径。单击OK按钮,在主窗口DeveloperStudio左边的项目工作区窗口的SouceFiles文件夹目录下出现Hello.cpp文件,双击该文件,在右边的编辑窗口中输入例1-1的源程序代码。08二月2023C++面向对象程序设计1.4VisualC++6.0开发环境图1-3添加项目文件C++面向对象程序设计1.4VisualC++6.0开发环境编译运行源程序Hello.cpp。打开Build菜单,选择BuildHello.exe命令项或按快捷键F7,系统开始对项目Hello进行编译、连接,同时在输出窗口中显示出编译的内容,当出现Hello.exe–0error(s),0warning(s)字样时,表示Hello.exe可执行文件已经正确无误地生成了,如图1-4所示。在Build菜单中选取ExecuteHello.exe命令项或按快捷键Ctrl+F5,就可以运行刚刚生成的Hello.exe
。
08二月2023C++面向对象程序设计1.4VisualC++6.0开发环境图1-4Hello项目DeveloperStudio窗口C++面向对象程序设计1.4VisualC++6.0开发环境用户通过选择Help菜单下的Contents命令或Search工具栏按钮就可以进入MSDN帮助系统,也可单击F1键快速获取相关内容的帮助。图1-5是MSDNLibrary是一般界面
。
08二月2023C++面向对象程序设计1.4VisualC++6.0开发环境图1-5MSDN帮助系统C++面向对象程序设计(第二版)
C++面向对象程序设计(第二版)
第二章
C++语言基础08二月2023C++面向对象程序设计第二章
C++语言基础2.1数据类型和基本输入输出2.2运算符和表达式2.3基本控制结构2.4函数2.5构造类型2.6指针项目设计1控制台程序的人机界面设计08二月2023C++面向对象程序设计2.1数据类型和基本输入输出2.1.1基本数据类型2.1.2常量2.1.3变量2.1.4基本输入、输出08二月2023C++面向对象程序设计2.1.1基本数据类型基本数据类型是C++系统的内部数据类型,包括bool(布尔型)、int(整型)、char(字符型)、float(单精度浮点型)、double(双精度浮点型)以及基本数据类型中short(短型)和long(长型)、signed(有符号)和unsigned(无符号)之分。C++的数据类型如下图所示:08二月2023C++面向对象程序设计2.1.1基本数据类型
C++面向对象程序设计2.1.1基本数据类型使用基本数据类型要注意两点:无符号(unsigned)和有符号(signed)的区别在于数值最高位的含义。int型在16位系统中和在32位系统中,所占用字节数是不一样的。08二月2023C++面向对象程序设计2.1.2常量所谓常量是指在程序运行的整个过程中其值始终不可改变的量,也就是直接使用符号(文字)表示的值。例如10,-6,2.3,-5.7,‘A’,‘b’都是常量。整型常量整型常量就是整型常数。整型常量可以用以下三种形式表示:十进制整数:十进制整数没有前缀。例如:237、-568、65535、162708二月2023C++面向对象程序设计2.1.2常量八进制整数:八进制整数要以数字0开头,即以0作为八进制数的前缀。例如:015(十进制为13)、0101(十进制为65)、0177777(十进制为65535)十六进制整常数:十六进制整数要以数字0x或0X开头,即以0x作为十六进制数的前缀。例如:0X2A(十进制为42)、0XA0(十进制为160)、0XFFFF(十进制为65535)实型常量实型常量也称为实数或者浮点数。实数只采用十进制,它有二种形式:小数形式和指数形式。08二月2023C++面向对象程序设计2.1.2常量十进制数的形式:由数码0~9和小数点组成。例如:0.0、25.0、5.789、0.13、300.、-267.8230等均为合法的实数。注意,实型常量中必须含有小数点。指数形式:由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。例如:2.1E5(等于2.1×105)、3.7E-2(等于3.7×10-2)、-2.8E-2(等于-2.8×10-2)实型常量默认都按双精度double型处理。但可以添加后缀“f”或“F”即表示该数为单精度浮点数。08二月2023C++面向对象程序设计2.1.2常量字符常量字符常量是用单引号括起来的一个字符。例如:‘a’、‘b’、‘=’、‘+’、‘?’。有以下特点:字符常量只能用单引号括起来,不能用双引号或其它括号。字符常量只能是单个字符,不能是字符串。字符可以是字符集中任意字符。但数字被定义为字符型其含义就发生了变化。如‘5’和5是不同的。08二月2023C++面向对象程序设计2.1.2常量转义字符是一种特殊的字符常量。转义字符以反斜线“\”开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,“\n”就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。广义地讲,字符集中的任何一个字符均可用转义字符来表示。字符串常量08二月2023C++面向对象程序设计2.1.2常量字符串常量是由一对双引号括起的字符序列。例如:“CHINA”,“Cprogram”,“$12.5”等都是合法的字符串常量。字符串常量和字符常量是不同的量。它们之间主要有以下区别字符常量由单引号括起来,字符串常量由双引号括起来字符常量只能是单个字符,字符串常量则可以含一个或多个字符字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符“\0”(ASCII码为0)。这是字符串结束的标志。08二月2023C++面向对象程序设计2.1.2常量布尔常量布尔型常量只有两个:true(真)和false(假)。符号常量除了前面讲过的直接用文字表示常量外,也可以为常量命名,这种代替常量本身的标识符称为符号常量。C++中用const定义符号常量。符号常量在使用之前一定要首先声明,常量声明语句的形式为:const数据类型说明符常量名=常量值;08二月2023C++面向对象程序设计2.1.2常量符号常量在声明时一定要赋初值,而在程序中间不能改变其值。08二月2023C++面向对象程序设计2.1.3变量在程序的执行过程中其值可以变化的量称为变量,变量是需要用名字来标识的。变量的定义就像常量具有各种类型一样,变量也具有相应的类型。变量在使用之前需要首先声明其类型和名称。变量名应是合法的标识符。变量声明语句的形式如下:<数据类型><变量名表>;08二月2023C++面向对象程序设计2.1.3变量变量的初始化在声明一个变量的同时,也可以给它赋以初值,而这实质上就是给对应的内存单元赋值,这一过程称为初始化。例如:inta=3,b=5;//指定a,b为整型变量,a的初值为3,b的初//值为5C++中变量的初始化还有另一种形式,例如:inta(3),b(5);需要注意的是,一个未初始化的变量不是没有数值,而是取决于变量所在系统中的存储形式,它可能是系统的默认值或无效值。08二月2023C++面向对象程序设计2.1.4基本输入、输出C++中使用标准输入流cin和标准输出流cout来实现数据的输入与输出。输出流(cout)通过cout可以输出一个整数、实数、字符及字符串,cout中的插入符“<<”可以连续写多个,每个后面可以跟一个要输出的常量、变量、转义字符以及表达式等。输入流(cin)cin可以获得多个键盘的输入值,cin中的插入符“>>”可以连续写多个,每个后面可以跟一个表达式,该表达式通常是获得输入值的变量或对象。08二月2023C++面向对象程序设计2.2运算符和表达式2.2.1算术运算符和算术表达式2.2.2赋值运算符和赋值表达式2.2.3逗号运算符和逗号表达式2.2.4关系运算符和关系表达式2.2.5逻辑运算符和逻辑表达式2.2.6++、--与sizeof运算符2.2.7位运算符2.2.8三目运算符08二月2023C++面向对象程序设计2.2运算符和表达式2.2.9运算符的优先顺序2.2.10运算式中的类型转换08二月2023C++面向对象程序设计2.2.1算术运算符和算术表达式C++中由算术运算符、操作数和括号构成的表达式称为算术表达式。C++中基本算术运算符有:+(加法),–(减法或负号),*(乘法),/(除法),%(求余)。这些算术运算符和数学运算的概念及运算方法是一致的,但有几点需要说明:“–”减法运算,即是双目运算符又是单目运算符,作单目运算符时,是求负运算,例如:-5,-x等。08二月2023C++面向对象程序设计2.2.1算术运算符和算术表达式“/”除法运算,当参与相除运算的两个操作数均为整型时,其结果也为整型,取商的整数部分,舍去小数,因此表达式1/2的结果为0。如果两个操作数中有一个是实型,则结果为双精度实型。“%”求余运算,要求参与运算的操作数均为整型。例如:表达式a%b,其值等于两数相除后的余数,即a被b除的余数,符号与a相同。优先级和结合性。在一个包含多种算术运算的混合运算中,先乘除、后加减的运算规则是由运算符的优先级来保证的;在算术运算符中,除单目运算符外,其余运算符的结合性都是自左向右。08二月2023C++面向对象程序设计2.2.2赋值运算符和赋值表达式C++中赋值运算符“=”是一个双目运算符,运算的结合性为自右向左。带有赋值运算符的表达式被称为赋值表达式,其作用就是将赋值符右边表达式的值赋给左边的操作数。例如,x=a+b就是一个赋值表达式。在赋值符“=”之前加上其它双目运算符可构成复合赋值符。C++提供了10种复合赋值运算符:+=,–=,*=,/=,%=,<<=,>=,&=,^=,|=。例如:a+=5等价于a=a+508二月2023C++面向对象程序设计2.2.3逗号运算符和逗号表达式在C语言中逗号“,”也是一种运算符,称为逗号运算符。逗号运算符是优先级最低的运算符。其形式为:表达式1,表达式2,…表达式n在计算时,C++将自左向右逐个计算每个表达式,最终整个表达式的结果是最后计算的那个表达式的类型和值。例如:j=(i=12,i+8)//表达式值为2008二月2023C++面向对象程序设计2.2.4关系运算符和关系表达式比较两个量的运算符称为关系运算符。关系运算符将两个数据进行比较,判定两个数据是否符合给定的关系。例如,“x>y”中的“>”表示一个大于关系运算。C++提供了6种关系运算符:<(小于),<=(小于等于),>(大于),>=(大于等于),==(等于),!=(不等于)。08二月2023C++面向对象程序设计2.2.4关系运算符和关系表达式有几点需要注意“等于”关系运算符是两个等号“==”,而不是一个等号“=”(赋值运算符)。在6个关系运算符中,前4个优先级相同,后2个也相同,且前4个高于后2个。关系运算符的优先级,低于算术运算符,但高于赋值运算符。用关系运算符将两个表达式连接起来,进行关系运算的式子就是关系表达式。08二月2023C++面向对象程序设计2.2.4关系运算符和关系表达式关系表达式的值为逻辑值即“真”或“假”。在C++编译系统中,往往将“真”表示为“true”或1,将“假”表示为“false”或0。而任何不为0的数被认为是“真”,0被认为是“假”。例如设x1=1,x2=2,x3=3,则:
(x1>x2)!=x3//表达式为1。08二月2023C++面向对象程序设计2.2.5逻辑运算符和逻辑表达式逻辑运算符用于将多个关系表达式或逻辑量(“真”或“假”)组成一个逻辑表达式。C++提供了下列三种逻辑运算符:
&& 逻辑与
|| 逻辑或
! 逻辑非例如,下面的表达式都是逻辑表达式:(x>=1&&(x<2),(x<1)||(x>5),!(x==0)08二月2023C++面向对象程序设计2.2.5逻辑运算符和逻辑表达式逻辑运算符的运算规则如下:&&:双目运算符,当且仅当两个操作数的值都为“真”时,运算结果为“真”,否则为“假”。等价于“同时”的含义。
||:双目运算符,当且仅当两个操作数的值都为“假”时,运算结果为“假”,否则为“真”。等价于“或者”的含义。
!:单目运算符,当操作数的值为“真”时,运算结果为“假”;当操作数的值为“假”时,运算结果为“真”。等价于“否定”的含义。例如,设x=5,则(x>=0)&&(x<25)的值为“真”,(x<-5)||(x>5)的值为“假”。08二月2023C++面向对象程序设计2.2.5逻辑运算符和逻辑表达式逻辑运算符的优先级如下:逻辑非的优先级最高,逻辑与次之,逻辑或最低,即:!(非)→&&(与)→||(或)与其它种类运算符的优先关系:!→算术运算→关系运算→&&→||→赋值运算08二月2023C++面向对象程序设计2.2.6++、--与sizeof运算符自增、自减运算符单目运算符自增(++)和自减(––)的作用是使整型变量的值增1或减1。这两个运算符都有前置和后置两种使用形式。例如:++i与i++的作用相当于i=i+1;––i与i––的作用相当于i=i–1。这里需要注意的是:自增(++)和自减(––)运算符只能用于变量,而不能用于常量或表达式,如3++或(a+b)++都是不合法的。08二月2023C++面向对象程序设计2.2.6++、--与sizeof运算符++和––的结合性是“自右至左”。若自增(++)和自减(––)仅用于某个变量的增1和减1,则前置和后置两种使用形式是等价的,但如果将自增(++)和自减(––)和其他运算符组合在一起,则前置和后置两种使用形式在求值次序上就会产生不同:
++i,––i(在使用i参与其他运算之前,先使i的值加(减)1)i++,i––(在使用i参与其他运算之后,再使i的值加(减)1)08二月2023C++面向对象程序设计2.2.6++、--与sizeof运算符sizeof运算符sizeof运算符用于计算操作数在内存中所占的字节数。它使用的语法形式为:sizeof(<数据类型>)sizeof(<表达式>)运算结果返回值为“数据类型”所指定的类型或“表达式”的结果类型所占的字节数。例如:sizeof(int)//计算整型int所占内参的字节数sizeof("hello")//计算字符串常量的实际长度08二月2023C++面向对象程序设计2.2.7位运算符位运算符是对操作数按其在计算机内表示的二进制数逐位地进行逻辑运算或移位运算。C++语言提供了6种位运算:位逻辑运算符“按位与”运算符&运算规则:参加运算的两个操作数,如果两个数相应位的值都是1,则该位的结果值为1,否则为0。例如:如果要保留整数a的低字节,屏蔽掉其高字节,只需要将a和b进行按位与运算即可,其中b的高字节每位置为0,低字节每位置为1,即0010101001010010&0000000011111111=000000000101001008二月2023C++面向对象程序设计2.2.7位运算符“按位或”运算符|运算规则:参加运算的两个操作数,如果两个数相应位的值都是0,则该位的结果值为0,否则为1.例如:如果把a的第10位置为1,而且不要破坏其它位,可以对a和b进行“按位或”运算,其中b的第10位置为1,其它位置为0,即0010000001010010|0000001000000000=0010001001010010“按位异或”运算符^运算规则:参加运算的两个操作数,如果两个数的相应位的值不同,则该位的结果值为1,否则为0。例如:如要把a的奇数位翻转,可以对a和b进行“按位异或”运算,其中b的奇数位置为1,偶数位置为0,即0000000001010010^0101010101010101=010101010000011108二月2023C++面向对象程序设计2.2.7位运算符“按位取反”运算符~运算规则:对一个操作数的每一位都取反,即将1变为0,0变为1。移位运算符左移运算符<<运算规则:对运算符<<左边的操作数的每一位全部左移右边运算量表示的位数,右边空出的位补0。左移1位相当于该数乘以2,左移n位相当于该数乘以2n。例如:chara=0x21;则a<<2的过程00100001<<2=10000100即a<<2的值为0x84。08二月2023C++面向对象程序设计2.2.7位运算符右移运算符>>运算规则:对运算符>>左边的运算量的每一位全部右移右边运算量表示的位数,右边低位被移出去舍弃掉,空出的高位补0还是补1,分两种情况对无符号数进行右移时,空出的高位补0。这种右移称为逻辑右移。例如:unsignedchara=0x8a;a:10001010等于十进制数138a>>1:010001010等于十进制数69
补0舍弃对带符号数进行右移时,空出的高位全部以符号位填补。即正数补0,负数补1。这种右移称为算术右移。08二月2023C++面向对象程序设计2.2.7位运算符例如chara=0x8a;a:10001010等于十进制数-118a>>1:110001010等于十进制数-59
补1舍弃位赋值运算符位运算符与赋值运算符结合可以组成位赋值运算符。08二月2023C++面向对象程序设计2.2.8三目运算符C++中唯一的三目运算符是条件运算符语法格式为:
<条件表达式>?<表达式1>:<表达式2>“条件表达式”是C++中可以产生“真”和“假”结果的任何表达式,如果条件表达式的结果为“真”,则执行表达式1,否则执行表达式2。例如:n=(a>b)?1:0;//如果a>b成立,则n的 //值为1,否则为008二月2023C++面向对象程序设计2.2.9运算符的优先顺序运算符优先顺序如下表:08二月2023C++面向对象程序设计2.2.9运算符的优先顺序08二月2023C++面向对象程序设计2.2.10运算式中的类型转换当表达式中出现了多种类型数据的混合运算时,往往需要进行类型转换。表达式中的类型转换分为两种:自动转换和强制转换。自动转换自动转换的基本原则是将数据类型按照从低到高的顺序进行转换。类型越高,数据的表示范围越大,精度也越高,各种类型的高低顺序如下:char、short、int、unsigned、long、unsignedlong、float、double08二月2023C++面向对象程序设计2.2.10运算式中的类型转换自动转换遵循以下规则若参与运算量的类型不同,则先转换成同一类型,然后进行运算。转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。char型和short型参与运算时,必须先转换成int型。在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边量的数据类型长度长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。08二月2023C++面向对象程序设计2.2.10运算式中的类型转换强制转换强制类型转换是通过类型说明符和括号来实现的,其一般形式为:(<类型说明符>)<表达式>或<类型说明符>(<表达式>)例如:(float)a//把a转换为实型
(int)(x+y)//把x+y的结果转换为整型08二月2023C++面向对象程序设计2.3基本控制结构2.3.1表达式语句、空语句和复合语句2.3.2选择控制语句2.3.3循环控制语句2.3.4break和continue语句实训2程序控制结构的应用08二月2023C++面向对象程序设计2.3.1表达式语句、空语句和复合语句顺序结构程序就是由顺序执行语句组成的,程序运行是按照书写的顺序进行,不发生控制转移,所以它是最简单的。表达式语句表达式语句由表达式后加一个分号构成。例如:a+b;num=3;空语句空语句仅由一个分号构成。例如:;就是一个空语句复合语句复合语句是由一对大括号{}括起来的两条或两条以上的语句构成的。08二月2023C++面向对象程序设计2.3.1表达式语句、空语句和复合语句例如:需要注意的是,在复合语句中定义的变量只作用于该复合语句的范围,而在复合语句外,这些变量却不能被调用。voidmain(){……{t=x;
x=y;
y=t;}//复合语句……}08二月2023C++面向对象程序设计2.3.2选择控制语句选择结构是用来判断所给定的条件是否满足,并根据判定的结果(真或假)决定哪些语句被执行。用if语句实现选择结构if语句是专门用来实现选择结构的语句。它根据给定的条件进行判断,以决定执行某个分支程序段。其语法形式为:if(<表达式>)<语句1>[else<语句2>]08二月2023C++面向对象程序设计2.3.2选择控制语句例如:if(x>y)max=x;elsemax=y;if语句中的语句2可以为空。当语句2为空时,else可以省略。if语句的嵌套处理多分支的情况时,C++语言允许在if或if–else中的〈语句1〉或〈语句2〉部分中再使用if或if–else语句,这种设计方法称为嵌套。if语句的嵌套中,else部分总是与前面最靠近的、还没有配对的if配对。08二月2023C++面向对象程序设计2.3.2选择控制语句例如:比较两个数的大小#include<iostream>usingnamespacestd;voidmain(){ intx,y; cout<<"Enterxandy:"; cin>>x>>y; if(x!=y) if(x>y) cout<<"x>y"<<endl; else cout<<"x<y"<<endl; else cout<<"x=y"<<endl;}08二月2023C++面向对象程序设计2.3.2选择控制语句如果if语句的嵌套都是发生在else分支中,就可以应用if…elseif语句。语法形式为:if(<表达式1>)<语句1>;elseif(<表达式2>)<语句2>;
......elseif(<表达式n>)<语句n>;例如:求分段函数y=f(x)的值,f(x)的表达式如下:
x2―1(x<–1)y=x2(–1≤x≤1)x2+1(x>1)08二月2023C++面向对象程序设计2.3.2选择控制语句#include<iostream>usingnamespacestd;voidmain(){ floatx,y; cout<<"Enterx:"; cin>>x; if(x<-1) y=x*x-1; elseif(x>=-1&&x<=1) y=x*x; elsey=x*x+1; cout<<"f(x)="<<y<<endl;}08二月2023C++面向对象程序设计2.3.2选择控制语句switch语句C++语言提供了直接实现多分支选择结构的语句:switch语句,称为多分支语句,也叫开关语句。switch语句的语法形式如下:switch(<表达式>){case<常量表达式1>:语句1;[break;]case<常量表达式2>:语句2;[break;]......case<常量表达式n>:语句n;[break;][default:语句n+1;[break;]] }08二月2023C++面向对象程序设计2.3.2选择控制语句使用switch语句需要注意的是:switch后面的表达式可以是整型、字符型、枚举型,而case后面的常量表达式的类型必须与其匹配。每个case后面常量表达式的值必须各不相同,各case及default子句的先后次序不影响程序执行结果。每个case分支可以有多条语句,但不必用{}。case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句,否则会从入口点开始一直执行到switch结构的结束点。当若干分支需要执行相同操作时,可以使多个case分支共用一组语句。08二月2023C++面向对象程序设计2.3.2选择控制语句例如:用switch语句实现计算器的简单功能。#include<iostream>usingnamespacestd;voidmain(){ floatx,y;//运算数
charoper;//运算符
cout<<"Enterx,oper,y:"; cin>>x>>oper>>y;
08二月2023C++面向对象程序设计2.3.2选择控制语句
switch(oper) { case'+':cout<<"x+y="<<x+y<<endl;break; case'-':cout<<"x-y="<<x-y<<endl;break; case'*':cout<<"x*y="<<x*y<<endl;break; case'/':if(y==0) { cout<<"divisoriszero!\n"; break; } cout<<"x/y="<<x/y<<endl;break; default:cout<<"operatorhasnoeffect!\n"; }}08二月2023C++面向对象程序设计2.3.3循环控制语句C++中提供了三种循环控制语句:while语句、do-while语句和for语句。
while语句while语句的语法形式如下:while(<表达式>)<语句>其中表达式是循环条件,语句为循环体。执行顺序是:先判断表达式的值,当表达式为真时便开始执行while循环体中的语句,然后反复执行,每次执行都会判断表达式是否为真,直到有一次执行循环体后条件表达式的值为假时终止。08二月2023C++面向对象程序设计2.3.3循环控制语句例如:用while语句求100以内的奇数之和。#include<iostream>usingnamespacestd;voidmain(){ inti=1,sum=0; while(i<=100) { sum+=i; i+=2; } cout<<"sum="<<sum<<endl;}08二月2023C++面向对象程序设计2.3.3循环控制语句使用while语句需要注意的有:如果循环体有多个语句时,要用大括号{}把它们括起来,以复合语句形式出现。循环体中必须有修改条件表达式的语句,可以使条件由成立转为不成立,从而结束循环。否则如果开始时条件为真,就会永远为真,使循环体永远重复执行下去,称为“死循环”。do-while语句do-while语句的语法形式如下:do<语句>while(<表达式>);执行顺序是:先执行循环中的语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。08二月2023C++面向对象程序设计2.3.3循环控制语句例如:用do-while语句求100以内的奇数之和。#include<iostream>usingnamespacestd;voidmain(){ inti=1,sum=0; do { sum+=i; i+=2; }while(i<=100); cout<<"sum="<<sum<<endl;}08二月2023C++面向对象程序设计2.3.3循环控制语句for语句for语句的语法形式如下:for([表达式1];[表达式2];[表达式3])<语句>其中,表达式1:给循环控制变量赋初值;表达式2:循环条件,是一个逻辑表达式,它决定什么时候退出循环;表达式3:循环变量增值,规定循环控制变量每循环一次后按什么方式变化。for语句的执行流程是:首先计算一次表达式1的值,再计算表达式2(循环控制条件)的值,并根据表达式2的值判断是否执行循环体。08二月2023C++面向对象程序设计2.3.3循环控制语句例如:用for语句求100以内的奇数之和。#include<iostream>usingnamespacestd;voidmain(){ inti,sum; sum=0; for(i=1;i<=100;i+=2) sum+=i; cout<<"sum="<<sum<<endl;}08二月2023C++面向对象程序设计2.3.3循环控制语句使用for语句需要注意的是:表达式1、表达式2、表达式3都可以省略,但分号“;”不能省略。若表达式1省略或者是与循环条件无关的其他表达式,则应该在for语句之前给循环控制条件赋初值。若表达式2省略,则循环将无终止地进行下去。若表达式3省略或者是与循环条件无关的其他表达式,则应该在循环体中另有语句改变循环条件,以保证循环能正常结束。表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,既可以是给循环变量赋初值,也可以是与循环变量无关的其它表达式。例如:for(i=1,sum=0;i<=100;sum+=i,i+=2);08二月2023C++面向对象程序设计2.3.3循环控制语句循环结构与选择结构的嵌套循环结构与选择结构可以互相嵌套,以实现复杂算法。例如:输入一个整数,求出它的所有因子。#include<iostream>usingnamespacestd;voidmain(){ intn,k; cout<<"Enterapositiveinteger:"; cin>>n; cout<<"Number"<<n<<"Factors"; for(k=1;k<=n;k++) if(n%k==0) cout<<k<<""; cout<<endl;}08二月2023C++面向对象程序设计2.3.3循环控制语句例如:编写程序打印以下图案:*************************08二月2023C++面向对象程序设计2.3.3循环控制语句#include<iostream>usingnamespacestd;voidmain(){ inti,j,n=4; for(i=1;i<=n;i++)//输出前4行图案
{//在图案左侧空30列 for(j=1;j<=30;j++) cout<<‘’;
for(j=1;j<=8-2*i;j++) cout<<''; for(j=1;j<=2*i-1;j++) cout<<'*'; cout<<endl; }08二月2023C++面向对象程序设计2.3.3循环控制语句
for(i=1;i<=n-1;i++)//输出后3行图案
{ //在图案左侧空30列 for(j=1;j<=30;j++) cout<<‘’;
for(j=1;j<=7-2*i;j++) cout<<'*'; cout<<endl; }}08二月2023C++面向对象程序设计2.3.4break和continue语句C++转移语句包括break、continue、goto和return语句。转移语句的作用是改变程序的顺序执行流程,将程序执行流程转移到程序其他地方。break语句break语句可用在switch多分支结构和循环结构中。在switch结构中,break语句用于跳出switch结构。在循环结构中,break语句用于跳出循环,即程序遇到break语句时提前结束循环,执行循环外的下一条语句。08二月2023C++面向对象程序设计2.3.4break和continue语句例如:用穷举法找出1~10之间的质数并显示出来。代码见教材P29~P30continue语句continue语句只用于循环结构。当遇到continue语句时,程序只跳过continue语句后的其余语句,即仅结束本次循环,并直接进入下一次循环。例如:输出100以内能被3整除且个位数为6的所有整数。代码见教材[例2-18]08二月2023C++面向对象程序设计实训2程序控制结构的应用实训说明在实训中,我们要实现的功能是验证哥德巴赫猜想,即任一充分大的偶数可以用两个素数之和表示。程序分析先不考虑怎样判断一个数是否为素数,而从整体上对这个问题进行考虑。我们可以这样做:读入一个偶数num,将它分成p和q两部分,使得num=p+q。那么怎样分呢?可以令p从2开始,每次增加1,而令q=num-p,如果p、q均为素数,则正为所求,否则令p=p+1再试。08二月2023C++面向对象程序设计实训2程序控制结构的应用算法如下:读入大于3的偶数num。p=1do{
p=p+1;q=num-p;判断p是否素数?判断q是否素数?}while(p、q有一个不是素数)输出num=p+q。接下来分析第5、6步,怎样判断一个数是否为素数要判断一个数i是否为素数,方法是用小于等于i的平方根的数依次去除i,看能否除尽,若都除不尽则i必为素数,反之则不是。程序员代码见教材实训208二月2023C++面向对象程序设计2.4函数2.4.1函数的定义和调用2.4.2函数的参数传递2.4.3函数参数的引用传递2.4.4带默认形参值的函数2.4.5函数的嵌套与递归调用2.4.6内联函数2.4.7函数的重载实训3函数的应用08二月2023C++面向对象程序设计2.4.1函数的定义和调用函数的定义函数定义的一般形式如下:<函数类型>
<函数名>(<形式参数表>){
<函数体>}
函数类型规定了所定义函数返回值的类型。函数名是一个有效的C++标识符,同一个文件中的函数不能同名。函数体是一个语句序列,用于实现函数的具体功能。
08二月2023C++面向对象程序设计2.4.1函数的定义和调用例如:定义一个函数,求二个数中最大者intmax(intx,inty)//定义函数max{intz;if(x>y)z=x;elsez=y;returnz;}08二月2023C++面向对象程序设计2.4.2函数的参数传递C++中函数的参数传递有两种方式,一种是按值传递,另一种是地址传递或引用传递。这里先来说明按值传递的参数传递方法。按值传递方法是把实参的值拷贝给形参,即调用函数向被调用函数传递的参数是变量本身值。在内存中,由于形参与实参占用不同的存储单元,这时形参值的变化将不影响实参的值。08二月2023C++面向对象程序设计2.4.2函数的参数传递例如:交换函数的两个参数的值#include<iostream>usingnamespacestd;//交换函数swap(),用于交换x和y的值voidswap(intx,inty){ inttemp; temp=x; x=y; y=temp; cout<<"x="<<x<<",y="<<y<<endl;}08二月2023C++面向对象程序设计2.4.2函数的参数传递值传递的最大好处是保持函数的独立性。在值传递的情况下,函数只有通过return来返回某个类型的值。voidmain(){ inta=10,b=20; cout<<"a="<<a<<",b="<<b<<endl; swap(a,b); cout<<"a="<<a<<",b="<<b<<endl;}
08二月2023C++面向对象程序设计2.4.3函数参数的引用传递引用引用是C++提供的一种特殊类型的变量,定义引用类型变量实质上是给一个已定义的变量起一个别名,系统不会为引用类型变量分配内存空间,只是使引用类型变量与其相关联的变量使用同一个内存空间。定义引用类型变量的一般格式为:<数据类型>&<引用名>=<变量名>;例如:inta=3;int&ra=a;//ra就是一个引用,它是变量a的别名08二月2023C++面向对象程序设计2.4.3函数参数的引用传递例如:为变量i声明一个引用r,在程序中分别对r和i进行计算。#include<iostream>usingnamespacestd;voidmain(){ inti=10; int&r=i;//r是变量i的引用
r++;//同时执行i++ cout<<"i="<<i<<",r="<<r<<endl; i=22;//同时执行r=22 cout<<"i="<<i<<",r="<<r<<endl;}08二月2023C++面向对象程序设计2.4.3函数参数的引用传递在使用引用时,需要注意的是:定义引用类型变量时,必须将其初始化。而且引用变量类型必须与为它初始化的变量类型相同。一旦一个引用被初始化后,就不能改为指向其他变量。当引用类型变量的初始化值是常量时,则必须将该引用类型定义成const类型。08二月2023C++面向对象程序设计2.4.3函数参数的引用传递函数的引用传递引用也可作为形参,如果将引用作为形参,则在函数中对形参所做的更改对主函数中的实参有效。例如:引用作为函数参数的调用方式,使两数成功地进行交换。#include<iostream>usingnamespacestd;08二月2023C++面向对象程序设计2.4.3函数参数的引用传递voidswap(int&x,int&y)//引用作为函数形参{ inttemp; temp=x; x=y; y=temp;}voidmain(){ inta=10,b=20; cout<<"a="<<a<<",b="<<b<<endl; swap(a,b); cout<<"a="<<a<<",b="<<b<<endl;}08二月2023C++面向对象程序设计2.4.4带默认形参值的函数C++允许在函数声明或定义中给一个或多个参数指定默认值。例如,下面声明一个带默认值参数的函数fun():voidfun(intval=10);则如下的函数调用把实参值20传递给形参:fun(20);而如果函数调用用省略实参,则把默认值10传递给形参,如下所示:fun();//等同于fun(10)08二月2023C++面向对象程序设计2.4.4带默认形参值的函数在设置函数的默认参数值时要注意:当函数既有声明又有定义后,不能在函数定义中指定默认参数。如果函数有多个形参,在声明和定义函数时,必须将带默认值的形参放在参数表的右部,即默认参数应按从右到左的顺序定义,在带默认值的形参右边不能有未指定默认值的形参。在函数调用时,系统按从左到右的顺序将实参与形参结合。当实参的数目不足时,系统将按照同样的顺序用声明或定义中的默认值来补齐所缺少的参数。08二月2023C++面向对象程序设计2.4.5函数的嵌套与递归调用嵌套调用函数允许嵌套调用。所谓嵌套调用就是在调用一个函数并执行该函数中,又调用另一个函数的情况。例如:编写一个计算组合数的程序。计算组合数的公式如下:
08二月2023C++面向对象程序设计2.4.5函数的嵌套与递归调用在本例中,组合数的计算用函数functionA()进行,而它需要的阶乘计算由函数functionB()进行。主函数main()调用函数functionA(),而函数functionA()三次调用函数functionB(),计算m!,n!,(m-n)!。计算结果返回给主函数进行输出。m和n由键盘输入。源程序代码见教材:[例2-23]08二月2023C++面向对象程序设计2.4.5函数的嵌套与递归调用例子中函数的调用如下图所示:08二月2023C++面向对象程序设计2.4.5函数的嵌套与递归调用递归调用函数可以直接或间接地调用自身,称为递归调用。递归调用分两个阶段:第一阶段:递推。将原问题不断分解为新的子问题,逐渐从未知向已知推进,最终达到已知条件,即递归结束的条件,这时递推阶段结束。例如求4!可以这样分解:4!=4×3!→3!=3×2!→2!=2×1!→1!=1×0!→0!=108二月2023C++面向对象程序设计2.4.5函数的嵌套与递归调用第二阶段:回归。从已知条件出发,按照递推的逆过程,逐一求值回归,最后达到递归的开始处,结束回归阶段,完成递归调用。例如求4!的回归阶段如下:4!=4×3!=24←3!=3×2!=6←2!=2×1!=2←1!=1×0!=1←0!=1递归部分实例及代码见教材:[例2-24]和
[例2-25]08二月2023C++面向对象程序设计2.4.6内联函数当函数被调用时。若把函数体直接嵌入函数调用处,则可消除附加的现场处理的时间开销,提高程序的运行效率。当然,这样将会加大代码占用内存的空间开销。C++提供了实现上述嵌入功能的函数,这种函数称为内联(inline)函数。内联函数一般适用于代码较短的函数。定义一个内联函数只需在函数头前加入关键字inline。08二月2023C++面向对象程序设计2.4.6内联函数例如:用内联函数计算圆的面积。#include<iostream>usingnamespacestd;inlinedoubleCalArea(doubleradius)//内联函数,计算圆的面积{ return3.14*radius*radius;}voidmain(){ doublearea,r(2.0);//r是圆的半径
area=CalArea(r); //调用内联函数求圆的面积,编译时此处被替换为 //CalArea函数体语句
cout<<area<<endl;}08二月2023C++面向对象程序设计2.4.7函数的重载C++中允许功能相近的函数在相同的作用范围内以相同函数名定义,从而形成重载。函数的重载指的是两个以上的函数,取相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数。函数重载例子及代码见教材:[例2-27]08二月2023C++面向对象程序设计2.4.7函数的重载函数重载要注意的是:重载函数必须具有不同的参数个数或不同的参数类型,若只有返回值的类型不同是不行的。例如:①intadd(intx,inty);intadd(inta,intb);//错误!编译器不以形 //参名来区分函数②intadd(intx,inty);voidadd(intx,inty);//错误!编译器不以 //返回值来区分函数不要将不同功能的函数定义为重载函数,以免出现对调用结果的误解、混淆。例如避免出现下述重载函数定义:intadd(intx,inty){returnx+y;}floatadd(floatx,floaty){returnx-y;}
08二月2023C++面向对象程序设计实训3函数的应用实训说明在实训中,我们要实现的是古典的数学问题----Hanoi(汉诺)塔问题。问题的描述是:古代有一个梵塔,塔内有3个座A、B、C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图2-4)。有一个老和尚想把这64个盘子从A座移到C座,但每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在下,小盘在上,移动过程中可以利用B座。现在有N个按大小顺序摆放的盘子放在A座上,请利用B座,按照汉诺塔问题限定的要求(每次移动小盘始终都在最上面),将A座上的N个盘子移到C座上。程序要求用函数实现盘子的移动操作,并能打印出每次盘子的移动步骤。08二月2023C++面向对象程序设计实训3函数的应用程序分析为了解决N个圆盘的汉诺塔,可以按下面方式进行操作:将A杆上面的N-1个盘子,借助B杆,移到C杆上;将A杆上剩余的N号盘子移到B杆上;将C杆上的N-1个盘子,借助A杆,移到B杆上。根据以上分析,设计移动N个盘子的递归函数:voidhanoi(intn,charone,chartwo,charthree);设计打印输出移动步骤函数:voidmove(chargetone,charputone);设计主函数,输入盘子数n,调用以上函数,输出结果。程序源代码见教材实训308二月2023C++面向对象程序设计2.5构造类型2.5.1数组与字符串2.5.2结构体2.5.3共用体2.5.4枚举类型2.5.5用typedef定义类型08二月2023C++面向对象程序设计2.5.1数组与字符串数组是一组具有相同类型数据的有序集合,其中每个数据称为数组的元素。数组的定义定义数组的一般形式为:<数据类型><数组名>[<常量表达式1>][<常量表达式2>]…;其中,数据类型是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度。例如:
int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中政治 第一单元 公民的政治生活 1.1 人民民主专政:本质是人民当家作主教学实录3 新人教版必修2
- 第9课《路灯巧设计》(教学实录)-2023-2024学年六年级下册综合实践活动沪科黔科版
- 编码(教学实录)-2024-2025学年四年级上册数学北师大版
- 大学供应商诚信管理办法
- 第八章第三节 撒哈拉以南非洲 教学实录2023-2024学年人教版七年级地理下册
- Poly-bis-4-phenyl-2-4-6-trimethylphenyl-amine-生命科学试剂-MCE
- Picamilon-sodium-Nicotinoyl-GABA-sodium-生命科学试剂-MCE
- 测试技术知到智慧树章节测试课后答案2024年秋济南大学
- 学生迟到反省检讨书
- 唐山科技职业技术学院《生物制品生产与检验技术》2023-2024学年第一学期期末试卷
- 太阳能光伏发电系统最大功率点跟踪技术研究
- 规章制度教案样本
- 云南保山电力股份有限公司招聘笔试题库
- 福维克直销奖金制度完整版
- JCT 2789-2023 涂料用长石粉 (正式版)
- DB11-T 1832.22-2023 建筑工程施工工艺规程 第22部分:装配式装修工程
- 四川省成都市成华区2023-2024学年七年级上学期期末语文试题
- 医疗陪护行业前景分析报告
- 个体诊所药品清单模板
- 有机更新工作总结
- eviews操作说明课件
评论
0/150
提交评论