C++程序设计教程.ppt_第1页
C++程序设计教程.ppt_第2页
C++程序设计教程.ppt_第3页
C++程序设计教程.ppt_第4页
C++程序设计教程.ppt_第5页
已阅读5页,还剩355页未读 继续免费阅读

下载本文档

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

文档简介

1 面向对象的程序设计语言 C WelcometolearnC 讲授 刘韶涛副教授E mail shaotaol 2 第一部分C 语言基础 本部分是学习C 语言的基础 包括以下几个方面 1 C 概述2 结构化程序设计方法与面向对象程序设计方法的各自特点 区别和相互联系 3 面向对象的程序设计方法中的有关概念 如类 对象 封装 继承 消息和多态性等 4 C 程序的基本组成和框架结构 5 掌握C 语言中的基本数据类型 各种运算符 表达式 6 C 数据输入流对象cin和输出流对象cout的使用 7 程序的3种基本结构8 构造数据类型 如数组 结构体 指针等的定义方法 特点和使用方法 9 函数的定义 调用及函数调用过程中的参数传递的机理和程序执行流程 10 引用的概念及其定义和使用方法 3 1 1C 概述 1 1 1计算机系统的层次结构应用软件通处理工用作具软言系系软件语操裸机统统件计算机系统的层次结构图 4 1 1C 概述 1 1 1计算机系统的层次结构任何计算机系统都必须包含硬件和在其上运行的软件 计算机硬件必须有软件的支持才能有效地运转并为人们所利用 计算机硬件系统一般由处理器 控制器和运算器 存储器 输入设备和输出设备等部分组成 一般来讲 人们认为软件系统由系统软件和应用软件两部分组成 我们从系统层次的角度 可以把软件分为 1 操作系统 OS OperatingSystem 它是计算机软件的核心 是硬件的第一级扩充 在它的控制下 计算机的全部资源 如CPU 内存 外部设备 CRT 打印机 扫描仪 光盘机等 和各种软件资源可以协调一致地工作 它可以有条不紊 高效率地管理和调度计算机地硬件设备和各种软件资源 使它们最大限度地发挥作用 操作系统还要协调控制许多可能 并发 执行的程序段 按照预先确定的控制策略合理地组织系统的工作流程 提高系统的执行效率 保护系统和用户的信息安全 常用的操作系统 MS DOS Windows Unix等 5 1 1C 概述 2 语言处理系统其主要的核心部分是程序设计语言的编译系统 程序设计语言是从事计算机的技术人员 特别是软件编写者不可缺少的编程工具 是 驾驶 计算机运行的 方向盘 目前世界上经设计和实现的程序设计语言有上千种之多 大致可分为两大类 一类是因计算机中央处理器 CPU 不同而异的汇编语言 另一类是通用的程序设计语言 前者称为低级语言 后者称为高级语言 说汇编语言是一种低级语言 是因为计算机硬件是最低层的 而隶属于语言处理系统的汇编语言最接近于硬件 它是在机器码语言的基础上直接发展起来的一种面向机器的低级语言 它的每一条指令与机器码语言的指令保持着一一对应的关系 可方便地对硬件实现控制和操作 能充分发挥硬件的潜力 且用汇编语言编写的程序与高级语言相比执行速度最快 6 1 1C 概述 从计算机的根本原理来说 计算机只能理解和执行一系列二进制指令码 即由数字0和1的不同排列组合而成的二进制码对应不同操作的指令 这就是通常所说的 机器码指令 用上述各种语言 包括汇编语言在内 编写的程序称为 源程序 SourceProgram 源程序不能直接在计算机上运行 而必须经过语言处理系统进行 翻译 加工 转换成机器码指令后才能执行 常用的语言有 古典语言 Fortran Pascal Cobol Basic等 人工智能语言 LISP PROLOG等 以及现代的语言 C C JAVA Delphi Powerbuilder C 等 7 1 1C 概述 关于C和C C是最靠近机器的通用程序设计语言 在最初设计时是作为一种面向系统软件 操作系统和语言处理系统 的开发语言 即用来代替汇编语言的 但是由于它具有强大的生命力 因而在事务处理 科学计算 工业控制和数据库技术等各个方面都得到了广泛的应用 即使进入到以计算机网络为核心的信息时代 C语言仍然是作为通用的汇编语言使用 用于开发软 件 硬 件 结合的程序 如实时监控程序 系统控制程序和设备驱动程序等 C 是C的面向对象扩展 是面向对象程序设计语言的一个大众化版本 是当前学习面向对象程序设计方法的首选语言 C 是C的超集 它保留了C的所有组成部分并与其完全兼容 既可以做传统的结构化程序设计 又能进行面向对象程序设计 是当今世界最为流行的面向对象程序设计语言 大大型应用软件开发上 以Windows开发环境为操作平台的C 类库和组件正在迅猛发展 C 即将取代C已是不可抗拒的事实 它的触角几乎已触及到计算机研究和应用的各个领域 完全遵循美国国家标准化组织制定的ANSIC 标准 目前广泛流行在微型计算机上使用的C 产品 有美国Microsoft公司推出的 以Windows开发环境为操作系统平台的VisualC 还有美国Borland公司开发的C Builder等 8 1 1C 概述 3 通用软件通用软件可分为如下几组 a 数据处理类软件 进行数值计算 行列式 矩阵 复变函数等计算 统计分析 数学表达式分析计算以及模拟处理的程序等 b 进行声音 图形 图像和动画等多媒体信息处理的程序 c 有关自然语言处理 模式识别 神经网络和专家系统等人工智能方面的应用程序 d 计算机辅助设计与制造 CAD CAM 计算机辅助教学 CAI 计算机辅助分析以及决策支持系统等方面的通用程序 4 应用软件除通用软件以外的各种应用程序统称为应用软件 当前从事应用软件的开发是各类计算机应用专业技术人员的大舞台 这些技术人员既具有扎实的本专业知识 又掌握了计算机的应用知识 很善于把计算机当作工具来完成本应用领域中的各种任务 应用领域大致可划分为 科学计算 如天文 气象等大型计算任务 办公自动化 OA OfficeAutomation 如Office2000 数据库技术领域 如FoxPro Sybase和Oracle等 工业控制领域 产品如Intouch等 9 1 1C 概述 5 工具软件是为协助用户更方便地使用计算机完成开发任务而研制 并集多种功能于一体地支程序软件包 如PCTools FrontPage2000 Cutftp等等 10 1 2从面向过程的程序设计到面向对象的程序设计 1 2 1传统的结构化程序设计 StructuredProgramming SP 方法1 使用SP方法设计程序的步骤在数据处理过程中 采用的是自顶向下 分而治之的方法 将整个程序按功能划分为几个可独立编程的子过程模块 每一子模块完成指定的子任务 并且提供一个清晰 严格的调用界面 主过程通过调用各子过程完来成全部处理工作 11 2 SP方法的特点优点 1 这种程序设计方法力求算法描述准确 2 对每一子过程模块容易进行程序正确性证明 缺点 1 这种程序设计方法本质上是面向 过程 的 而 过程 和 操作 又是不稳定和多变的 因此不能直接反映人类求解问题的思路 2 程序代码可重用性差 程序中除少数标准库函数外 每设计一个程序时 程序员几乎从零做起 即使重用代码 通常也是通过拷贝或编辑重新生成一份 3 维护程序的一致性困难 该种方法将数据与对数据进行处理的程序代码分离 1 2从面向过程的程序设计到面向对象的程序设计 12 1 2 2面向对象的程序设计 Object OrientedProgramming OOP 方法1 面向对象的有关概念面向对象的程序设计方法强调直接以问题域 现实世界 中的事物为中心来思考和认识问题 并按照这些事物的本质特征把它们抽象为对象 以作为构成软件系统的基础 1 对象 Object 每个对象都具有属性 Attribute 和方法 Method 这两方面的特征 对象的属性描述了对象的状态和特征 对象的方法说明了对象的行为和功能 并且对象的属性值只应由这个对象的方法来读取和修改 两者结合在一起就构成了对象的完整描述 1 2从面向过程的程序设计到面向对象的程序设计 13 2 类 Class 具有相似属性和行为的一组对象 就称为类 可见 有了类的概念以后 就可以对具有共同特征的事物进行统一描述 3 封装 Encapsulation 封装把对象的属性和方法看成了一个密不可分的整体 从而使对象能够完整地描述并对应于一个具体事物 4 继承 Inheritance 将客观事物进行归类是一个逐步抽象的过程 反之 将类进行层层分类便是一个概念逐渐细化的过程 在面向对象的程序设计中 允许在已有类的基础上通过增加新特征而派生出新的类 这称为继承 其原有的类称为基类 baseclass 而新建立的类称为派生类 derivedclass 1 2从面向过程的程序设计到面向对象的程序设计 14 5 消息 Message 在面向对象的程序设计中 由于对象描述了客观实体 它们之间的联系通过对象间的联系来反映 当一个对象需要另外一个对象提供服务时 它向对方发出一个服务请求 而收到请求的对象会响应这个请求并完成指定的服务 这种向对象发出的服务请求就称为消息 6 多态性 Polymorphism 多态性是面向对象的另一重要特征 在通过继承而派生出的一系列类中 可能存在一些名称相同 但实现过程和功能不同的方法 Method 所谓多态性是指当程序中的其他部分发出同样的消息时 按照接收消息对象的不同能够自动执行类中相应的方法 其好处是 用户不必知道某个对象所属的类就可以执行多态行为 从而为程序设计带来更大方便 1 2从面向过程的程序设计到面向对象的程序设计 15 2 面向对象的程序设计方法 OOP方法 这种方法将设计目标从模拟现实世界的行为转向了模拟现实世界中存在的对象及其各自的行为 在OOP中 将 对象 作为系统中最基本的运行实体 整个程序即由各种不同类型的对象组成 各对象既是一个独立的实体 又可通过消息相互作用 对象中的方法决定要向哪个对象发消息 发什么消息以及收到消息时如何进行处理等 1 2从面向过程的程序设计到面向对象的程序设计 16 3 OOP方法的特点 1 OOP以 对象 或 数据 为中心 由于对象自然地反映了应用领域的模块性 因此具有相对稳定性 可以被用作一个组件去构成更复杂的应用 又由于对象一般封装的是某一实际需求的各种成分 因此 某一对象的改变对整个系统几乎没有影响 2 引入了 类 class 的概念 类与类以层次结构组织 属于某个类的对象除具有该类所描述的特性外 还具有层次结构中该类上层所有类描述的全部性质 OOP中称这种机制为继承 3 OOP方法的模块性与继承性 保证了新的应用程序设计可在原有对象的数据类型和功能的基础上通过重用 扩展和细化来进行 而不必从头做起或复制原有代码 这样 大大减少了重新编写新代码的工作量 同时降低了程序设计过程中出错的可能性 达到了事半功倍的效果 1 2从面向过程的程序设计到面向对象的程序设计 17 1 2 3面向对象的程序设计方法与结构化程序设计方法的比较 1 传统的结构化程序设计方法以过程为中心构造应用程序 数据和处理数据的过程代码是分离的 相互独立的实体 设计出的程序可重用代码少 且当代码量增加时维护数据和代码的一致性困难 2 面向对象程序设计方法中 对象所具有的封装性和继承性使得代码重用成为可能 并大大减少了程序出错的可能性 3 面向对象方法吸收了结构化程序设计方法的优点 同时引入了新概念 新机制并建立了比传统方法更高层次的抽象 1 2从面向过程的程序设计到面向对象的程序设计 18 1 3 1从C语言到C 语言C语言以其如下独有的特点风靡了全世界 1 语言简洁 紧凑 使用方便 灵活 C语言只有32个关键字 程序书写形式自由 2 丰富的运算符和数据类型 3 可以直接访问内存地址 能进行位操作 使其能够胜任开发操作系统的工作 4 生成的目标代码质量高 程序运行效率高 5 可移植性好 1 3C 程序的基本组成 19 1 3C 程序的基本组成 局限性 1 数据类型检查机制相对较弱 这使得程序中的一些错误不能在编译阶段被发现 2 C本身几乎没有支持代码重用的语言结构 因此一个程序员精心设计的程序 很难为其它程序所用 3 当程序的规模达到一定程度时 程序员很难控制程序的复杂性 20 1 3C 程序的基本组成 C 包含了整个C C是建立C 的基础 C 包括C的全部特征和优点 同时添加了对面向对象编程 OOP 的完全支持 1980年 贝尔实验室的BjarneStroustrup开始对C进行改进和扩充 1983年正式命名为C 在经历了3次C 修订后 1994年制定了ANSIC 标准的草案 以后又经过不断完善 成为目前的C C 仍在不断发展中 美国微软公司现已推出C CSharp 语言 来代替C 语言 21 1 3 2C 程序的结构与基本组成一个简单的C 程序 是由若干个函数构成的 其中有且仅有一个名称为main的函数存在 下图说明了C 程序的基本框架结构 1 3C 程序的基本组成 22 1 声明区声明区处在程序文件的所有函数的外部 1 包含头文件 如 include iostream h 2 宏定义 如 definePI3 1415926 3 类定义 如classname 也可以在函数体内 4 结构体定义 如structrecord 5 函数声明 如voidprint 6 全局变量声明 如floatH 2 58 7 条件编译 如 ifdef 等 1 3C 程序的基本组成 23 2 主程序区主程序以main 函数开始 是整个程序运行的入口 该函数中可能包含的内容主要有 1 局部变量的声明 如 inti 1 2 函数调用 如 y sin x 3 一般运算 如 a b c d 3 4 结构控制 如 if a b c a 5 对象与结构的处理 6 文件的处理等 1 3C 程序的基本组成 24 图2 3C 函数的组成4 程序举例 1 3C 程序的基本组成 3 函数定义区程序中除了main函数之外 还可以包含其它的函数 每个函数是由函数说明和函数体两部分构成的 如图2 3所示 25 1 3C 程序的基本组成 26 上例程序结构可写为如下程序 例2 1 一个简单的C 程序 ThisisthefirstC program C语言的某些特征仍可沿用 include iostream h voidprint 函数声明voidmain inti chars 80 1 3C 程序的基本组成 27 print cout s cout i 验证结果cout s is i yearsold voidprint printf printfisalsocanbeused n 1 3C 程序的基本组成 28 从上例可以看出 1 C语言中原有的规则和语句在C 中仍可继续使用 但C 又增添了很多新的风格 2 一个C 的程序是由一到若干个函数构成的 但其中必须有且仅有一个名称为main的函数存在 3 不管一个程序中有多个函数 只有main函数整个程序运行时的入口 程序运行时从此函数开始执行 但在程序中 main函数所处的位置可以任意 4 一个C 的函数是由两部分构成的 即函数的说明部分和函数体 函数的说明部分包括了函数的返回值的类型 函数的名称 圆括号 形参及形参的类型说明 函数体由一对大括号 括起来 其内容是由若干条语句 1 3C 程序的基本组成 29 构成 函数体的内容决定了该函数的功能 5 C 对程序中的名称是大小写 敏感 的 除特殊情况下 应一律小写 6 程序中的注释 可以用 或 单行注释 对程序中的内容进行注释 二者的区别在于 采用 方法时 注释可以写成多行 而采用 方法时 注释只能写成一行 它可单独占一行 也可写在某行程序代码的末尾 7 数据输出 除了使用printf 函数 还可使用功能更强大 更方便的cout对象进行输出数据 格式如下 cout 数据1 数据2 数据n如 上例中的语句cout s is i yearsold 表示同时输出了变量s的值 字符串 is 变量i的值和字符 1 3C 程序的基本组成 30 串 yearsold 8 数据输入 除了使用scanf 函数 还可使用功能更强大 更方便的cin对象进行数据输入 格式如下 cin 变量1 变量2 变量n如 上例中的语句cin s 表示给变量s输入一个值 9 在分别使用cout和cin进行数据的输出和输入时 需要在程序的开头嵌入 iostream h 文件 在该头文件中定义了输入输出流对象cout和cin等 10 一个C 的源程序文件在存盘时 要以 CPP为文件名后缀 而不是 C 11 C 程序的开发过程 1 3C 程序的基本组成 31 串 yearsold 2 2C 程序的基本组成 C 程序的开发过程 32 1 4C 数据类型 运算符和表达式 2 3 1数据类型 1 预定义数据类型 基本数据类型 包括布尔型 bool 字符型 整型 浮点型 无值型四种 其中浮点型又分为单精度浮点型和双精度浮点型两种 2 构造数据类型 包括数组 结构体 共用体 联合 枚举 类等 本节重点介绍C 的基本数据类型 有关构造数据类型将在后面章节进行介绍 33 2 3 1 1基本数据类型 1 3C 数据类型 运算符和表达式 34 2 3 1 2类型修饰符C 还允许在基本数据类型 除void类型外 前加上类型修饰符 来更具体地表示数据类型 C 的类型修饰符包括 signed有符号unsigned无符号short短型long长型 1 3C 数据类型 运算符和表达式 35 表2 2C 的基本数据类型 36 表2 2C 的基本数据类型 37 说明 1 表中带 的部分表示是可以省略的 如short int 可以写为shortint或简写为short 二者的含义是相同的 2 四种修饰符都可以用来修饰整型和字符型 用signed修饰的类型的值可以为正数或负数 用unsigned修饰的类型的值只能为正数 3 ANSIC和ANSIC 标准中并没有具体规定各种数据类型的 数据长度 只要求long型的数据长度不短于int型 short型不长于int型 只要遵循标准所给出的这些原则 具体如何实现由各种语言系统自行决定 1 3C 数据类型 运算符和表达式 38 1 3C 数据类型 运算符和表达式 2 3 1 3常量在C 语言中 数据分为常量和变量两大类 由于程序中的数据是有类型的 所以常量和变量都是有类型之分的 常量按照不同的数据类型可以分为 字符型常量 整型常量 浮点型常量 以及字符串常量等 程序是根据程序中常量的书写格式来区分它是哪种类型常量的 39 1 整型常量在程序中书写整型常量时 没有小数部分 用户可根据需要分别可以用十进制 八进制和十六进制的形式书写 十进制格式 由数字0至9和正 负号组成 书写时直接写出数字 如 123 516 1000等 八进制格式 以数字0开头的数字 0至7 序列 0111 010007 0177777等 十六进制格式 以0 x或0X开头的数字 数字0至9 字母a至z 序列 如0 x78AC 0 xFFFF等 1 3C 数据类型 运算符和表达式 40 2 浮点型常量只能用十进制来表示 可以用小数或指数形式表示 缺省为double 如 34 5f 345 1 5e 33 字符型常量 1 用一对单引号括起来的一个字符 单引号只是字符与其他部分的分割符 不是字符的一部分 并且 不能用双引号代替单引号 在单引号中的字符不能是单引号或反斜杠 如 a A 合法的字符常量 非法的字符常量 可以 A 不代表字符常量 为字符串常量 2 另一种表示字符常量的方法是使用转义字符 C 规定 采用反斜杠后跟一个字母来代表一个控制字符 具有新的含义 1 3C 数据类型 运算符和表达式 41 C 中常用的转义字符 例转义字符例 cpp 1 3C 数据类型 运算符和表达式 42 4 字符串常量用一对双引号括起来的一个或多个字符的序列称为字符串常量或字符串 字符串以双引号为定界符 双引号不作为字符串的一部分 如 Hello GoodMorning Isay Goodbye 字符串中的字符数称为该字符串的长度 在存储时 系统自动在字符串的末尾加以字符串结束标志 即转义字符 0 可以 hello 0 串比较的错误方式 cpp5 符号常量常量也可用一个标识符来代表 称为符号常量 如 definePRICE30voidmain void 1 3C 数据类型 运算符和表达式 43 使用符号常量应注意以下几个方面 1 它不同于变量 在作用域内其值不能改变和赋值 如 在上例中如再用PRICE 40 这一语句进行赋值则是错误的 2 符号常量名一般用大写 而变量名用小写 以示区别 6 程序中常量的表示方法在程序中的常量有以下三种表示方法 1 在程序中直接写入常量如 200 3 4E 10 A 1 0 x120 045 5 35 1000linti chars floatf i 20 s a f 2 0F 1 3C 数据类型 运算符和表达式 44 2 利用 define定义宏常量一般格式 define宏名常数如 definePI3 14 s 2 PI r 3 利用const定义正规常数一般格式 const数据类型标识符常数名 常量值 说明 const必须放在被修饰类型符和类型名前面 数据类型是一个可选项 用来指定常数值的数据类型 如果省略了该数据类型 那么编译程序认为它是int类型 1 3C 数据类型 运算符和表达式 45 如 constinta 10 表示定义了一个初始值为10的整型常量 它在程序中不可改变 但可用于表达式的计算中 const面试题1 cppconst面试题2 cpp2 3 1 4变量1 变量的概念及特点每一变量就相当于一个容器 对应着计算机内存中的某一块存储单元 用于存储程序中的数据 变量的值具有以下两个特点 1 一充即无 即将一个新数据存放到一个变量中时 该变量中原来的值消失 变量的值变成了新值 如 执行完语句inti i 10 i 20 后i的值为20 而不是10 1 3C 数据类型 运算符和表达式 46 2 取之不尽 可将某个变量的值与程序中的其它数据进行各种运算 在运算过程中 如果没有改变该变量的值时 那么 不管用该变量的值进行多少次运算 其值始终保持不变 如 语句inti j k i 10 j i 10 k i j 5 其中 i的值可无限制地多次使用 但它的值始终保持值10 因为在程序中没有改变变量i的值 2 定义变量程序中的每一变量 都要先定义 后使用 定义变量的一般有以下三种格式 数据类型标识符变量名 数据类型标识符变量名 初始化值 1 3C 数据类型 运算符和表达式 47 数据类型标识符变量名1 初始值1 变量名2 初始值2 如 chara 定义字符型变量ainti 1000 定义整型变量i i的初始值为1000 floata 2 0 b 3 0 c 定义浮点型变量a b c 且a b的初始值分别为2 3 变量名是每个变量的名称 其命名遵循以下规则 1 由字母 数字和下划线 三类符号排列组合形成 且开头字符必须是字母或下划线 2 名称中字符的最大个数是31个 3 C 中区分变量名的大小写 1 3C 数据类型 运算符和表达式 48 4 变量名不能和C 中的关键字同名 也不能和用户编制的函数或C 库函数同名 如 int double或static都不能作为变量名 5 变量名尽量做到 见名知意 3 定义变量的位置在程序中的不同位置采用不同的变量定义方式 决定了该变量具有不同的特点 变量的定义一般可有以下三种位置 1 在函数体内部在函数体内部定义的变量称为局部变量 这种局部变量只在进入定义它的函数体时起作用 离开该函数体后该变量就消失 被释放 即不再起作用 因此 不同函数体内部可以定义相同名称的变量 而互不干扰 如 1 3C 数据类型 运算符和表达式 49 voidfunc1 void inty y 2 voidfunc2 void inty y 100 在本例中 函数func1和func2的函数体内部都分别定义了变量y 但它们都只能在各自的函数体内起作用 都是局部变量 1 3C 数据类型 运算符和表达式 50 2 形式参数当定义一个有参函数时 函数名后面括号内的变量 统称为形式参数 如 intis in char a charb while a if a b return1 elsea return0 本例中 函数名is in后面括号内的变量a和b是该函数的形式参数 它们都只能在该函数体内起作用 是该函数的局部变量 1 3C 数据类型 运算符和表达式 51 3 全局变量 在所有函数体外部定义的变量 其作用范围是整个程序 并在整个程序运行期间有效 如 include stdio h intcount 定义count变量是全局变量voidfunc1 void voidfunc2 void intmain count 10 func1 return0 1 3C 数据类型 运算符和表达式 52 voidfunc1 void inttemp temp count func2 printf countis d count 输出10 voidfunc2 void intcount for count 1 count 10 count putchar 赋值语句面试题2 cpp 1 3C 数据类型 运算符和表达式 53 1 3 2运算符和表达式程序中对数据进行的各种运算是由运算符来决定的 不同运算符的运算方法和特点是不同的 从此可以看出 一个运算式子中要涉及到数据及运算符 而运算符是对数据进行指定操作 并产生新值的特殊符号 2 3 2 1算术运算符和算术表达式算术运算符就是对数据进行算术运算 如 加 减 乘 除等 是在程序中使用最多的一种运算符 C 的算术运算符如表2 4所示 1 3C 数据类型 运算符和表达式 54 表2 4C 的算术运算符 算术表达式是指由算术运算符 括号将常量 变量 函数 圆括号等连接形成的一个有意义的式子 如 55 1 x 3 x 2 x 3 x 2 x 53 14 sqrt r b b 4 0 a c注意 1 表达式中的括号不管有多少层 一律使用圆括号 2 在将一个数学上的运算式子写成对应的C 的表达式时 要注意进行必要的转换 乘号不能省略 数学表达式中出现的数学运算函数要用C 提供的对应的数学运算库函数来代替 1 3C 数据类型 运算符和表达式 56 要特别注意表达式中两个整型数相除的情况 如 有一数学表达式为2 3 f 32 要写成对应的C 的表达式时 正确地写法应写2 0 3 0 f 32 而不是2 3 f 32 5 2得到结果2 5 0 2 0得到结果2 5 2 3 2 2赋值运算符和赋值表达式赋值运算符的功能将某个数据的值赋给某个变量 赋值运算符的用法格式 变量名赋值运算符常量 变量或表达式说明 1 被赋值的目标 即赋值运算符左边的量必须是变量 而不能是常量或表达式 1 3C 数据类型 运算符和表达式 57 2 C 中的赋值运算符如表2 5所示 3 要注意区分赋值运算符 与数学上的 等号 间的区别 如 intx y 定义变量x y为int类型变量x 10 将变量x赋成值10 1 3C 数据类型 运算符和表达式 58 x x 20 将x的值在原值 10 的基础上再加上值20后 结果为30 赋给变量xy x 5 等价于y y x 5 x y 10 等价于x x y 10 4 前增 减运算是变量的值先自增1或自减1 然后以该变量自增或自减后的值参加其它运算 后增 减运算是该变量先以原来的值参加其它运算 然后再自增1或自减1 增减量运算符只能用于变量 不能用于常量和表达式 如 7 i j error 1 3C 数据类型 运算符和表达式 59 5 对表达式x y的理解 是 x y还是x y C 规定 处理时从左至右取尽可能多的 或 号字符组成一个运算符 将解释为 x y 编程者最好采用便于阅读和理解的写法 写成 x y的形式 i 面试题2 cppi 面试题3 cppi 面试题4 cpp 6 在ANSIC中 增量运算符 和减量运算符 只能用于整型量 而在ANSIC 中 这两个运算符对整型和浮点型均可使用 2 3 2 3sizeof运算符sizeof运算符功能是求某一数据类型或某一变量在内存中所占空间的字节数 其使用的一般形式 sizeof 变量名或数据类型 或sizeof变量名或数据类型如 1 3C 数据类型 运算符和表达式 60 includevoidmain shortintaShort intanInt longaLong charaChar floataReal cout datatype tmemoryused bytes cout nshortint t sizeof aShort cout ninteger t sizeof anInt cout nLonginteger t sizeof aLong cout ncharachar t sizeof aChar cout nfloat t sizeof aReal 1 3C 数据类型 运算符和表达式 61 其输出结果为 datatypememoryused bytes shortint2integer4Longinteger4charachar1float4 sizeof面试题1 cpp2 3 2 4关系运算符和关系表达式关系运算符就是对两个量之间进行比较的运算符 如表2 6所示 1 3C 数据类型 运算符和表达式 62 由关系运算符将两个表达式连接形成的运算式子是关系表达式 一个关系表达式的值是一个逻辑值 当为真时 值为1 为假时 值为0 如 假设a 1 b 20 c 3 则a b表达式成立 其值为1b c表达式不成立 其值为0 a b c表达式成立 其值为1 1 3C 数据类型 运算符和表达式 63 注意 在对两个表达式的值进行是否相等的比较时 要用运算符 而不能写成 2 3 2 5逻辑运算符和逻辑表达式逻辑运算符是对两个逻辑量间进行运算的运算符 如表2 7所示 1 3C 数据类型 运算符和表达式 64 由逻辑运算符将两个表达式连接形成的式子叫逻辑表达式 各种逻辑运算的 真值表 如表2 8所示 对于参加逻辑运算的操作数 系统认为 非0 为真 0 为假 而逻辑表达式的结果只能为逻辑真 1 或逻辑假 0 表2 8逻辑运算真值表 1 3C 数据类型 运算符和表达式 65 注意 1 C或C 中在给出一个逻辑表达式的最终计算结果值时 用1表示真 用0表示假 但在进行逻辑运算的过程中 凡是遇到非零值时就当真值参加运算 遇到0值时就当假值参加运算 如 inta 10 b 15 c 14 则 a 6 则表达式i i 0 i 的值为0 假 该表达式运算结束后 变量i的值为0 而不是1 i 面试题5 cpp 1 3C 数据类型 运算符和表达式 66 a b c只要a为真 就不必须判断b和c 只有a为假 才判别b a和b都为假才判别c 如 inti 1 j 则表达式i i i 的值为1 真 运算结束后 变量i的值为2 而不是4 对于数学上的表示多个数据间进行比较的表达式 在C或C 中要拆写成多个条件并用逻辑运算符连接形成一个逻辑表达式 如 在数学上 要表示一个变量a的值处于 1和 9之间时 可以用 9 9 a 9 a 1的形式 1 3C 数据类型 运算符和表达式 67 2 3 2 6条件运算符在C 中只提供了一个三目运算符 即条件运算符 其一般形式为 表达式1 表达式2 表达式3条件运算的规则是 首先判断表达式1的值 若其值为真 非0 则取表达式2的值为整个表达式的值 若其值为假 0 则取表达式3的值为整个表达式的值 如 若a 3 b 4 则条件表达式a b a b的值为4 i 面试题1 cpp2 3 2 7位运算符1 位运算符及其运算规则所谓位运算符是指能进行二进制位运算的运算符 C 提供的位运算符如表2 9所示 1 3C 数据类型 运算符和表达式 68 位运算的运算规则为 1 按位与 两个运算量相应的位都是1 则该位的结果值为1 否则为0 2 按位或 两个运算量相应的位只要有一个是1 则该位的结果值为1 否则为0 1 3C 数据类型 运算符和表达式 69 3 按位异或 两个运算量相应的位不同 则该位的结果值为1 否则为0 4 按位取反 将运算量的每一位取反 5 按位左移 将操作数中的每一位向右移动指定的位数 移出的位被舍弃 空出的位补0或补符号位 如 a 5 b 6 则 a000001010000010100000101b 00000110 00000110 00000110 0000011000000100000001110000001111111001即 a b 4 a b 7 a b 3 b 7 7的补码是11111001 1 3C 数据类型 运算符和表达式 70 2 复合位运算符位运算符与赋值运算符结合可以形成复合位运算符 如表2 10所示 赋值语句面试题1 cpp2 3 2 8强制类型转换运算符该运算符的功能是将某一数据从一种数据类型向另一 1 3C 数据类型 运算符和表达式 71 种数据类型进行转换 其使用的一般形式 数据类型标识符 表达式 数据类型标识符 表达式如 inti 2 floata b a float i 将变量i的类型强制转换为浮点型 并将 其值赋给变量a C不允许这样写 编译错误 b float i 将变量i的类型强制转换为浮点型 并将 其值赋给变量b 但变量i的值没变 关于自动 隐式 implicit 类型 类型转换 这种类型的转换是在执行表达式中的运算符操作时 自动进行的一种转换 1 3C 数据类型 运算符和表达式 72 低 高longdouble高 int unsigned long unsignedlong double short charfloat低数据类型的转换方向说明 水平方向的箭头表示运算的变量为不同的数据类型时的转换的方向 如一个int型和一个float型数据进行运算时 由于float型首先转换成double型 因此把int的数据也转换成double型 然后再运算 计算结果也是double型 这里的箭头只表示数据类型级别的高低 不是指数据实际转换的步骤 不能把int型转换成double型理解为int型先转换成unsigned 再转换为long型 再转换成unsignedlong型 最后才转换成double型 实际上是把int型数据直接转换成double型 1 3C 数据类型 运算符和表达式 73 纵向箭头表示必定的类型转换 如字符型必定先转换成整数型 short型也必定转换为int型 如两个float型数据进行算术运算时 为了提高运算精度 先都转换成double型后再进行运算 当不同数据类型的变量同时出现在一个表达式时 将实现 隐式类型转换 它是在数据运算过程中自动进行的类型转换 即把它们转变成同一类型的变量再进行运算 在赋值语句中 当左值和右值的数据类型不同时 首先将右值类型自动转换成左值的类型 向左看齐 然后再赋值给左值 类型转换面试题 cpp 1 3C 数据类型 运算符和表达式 74 2 3 2 9逗号运算符逗号运算符的运算优先级是最低的 一般形式为 表达式1 表达式2 表达式N在计算逗号表达式的值时 按从左至右的顺序依次分别计算各个表达式的值 而整个逗号表达式的值和类型是由最右边的表达式决定 如 有语句inta 3 b 4 则表达式a b a b的值为9 再如 设有inti 则表达式i 1 i 2 i 1 i 4的值为6 2 3 2 10运算符的优先级与结合性每个运算符都有自己优先级和结合性 当一个表达式中包含多个运算符时 要确定运算的结果 必须首先确定运算的先后顺序 即运算符的优先级和结合性 C 中运算符的优先级和结合性如表2 11所示 1 3C 数据类型 运算符和表达式 75 表2 11C 中运算符的优先级和结合性 76 1 4数据的输入与输出 在C 语言中 数据的输入和结果的输出是分别使用系统所提供的输入流对象cin和输出流对象cout来完成的 在使用过程中 只要在程序的开头嵌入相应的头文件 iostream h 即可 1 4 1数据的输出cout输出流对象输出数据的语句格式为 cout 数据1 数据2 数据n 说明 1 cout是系统预定义的一个标准输出设备 一般代表显示器 是输出操作符 插入符 用于向cout输出流中插入数据 2 cout的作用是向标准输出设备上输出数据 被输出的数据可以是常量 已有值的变量或是一个表达式 77 如 include includevoidmain floata 3 b 4 cout Theresultis cout sqrt a a b b 该程序的输出结果为 Theresultis 5 3 可以在cout输出流中插入C 中的转义字符 如 cout thevalueofa n cout a 2 4数据的输入与输出 78 表示输出完字符串Inputthevalueofa 后 在下一行输出变量a的值 4 可以将多个被输出的数据写在一个cout中 各输出项间用 操作符隔开即可 但要注意cout首先按从右向左的顺序计算出各输出项的值 然后再输出各项的值 如 cout valueofa a valueofb b Theresultis sqrt a a b b 再如 设变量i的值为10 则cout i i i 的输出结果为 12 11 10 5 一个cout语句也可拆成若干行书写 但注意语句结束符 只能写在最后一行上 如 对于上面的语句也可写成如下形式 2 4数据的输入与输出 79 cout valueofa 注意行末无分号 a valueofb b Theresultis sqrt a a b b 在此处书写分号 6 在cout中 实现输出数据换行功能的方法 既可使用转义字符 n 也可使用表示行结束的流操作子endl 如 cout ThisisfirstLine n Thisissecondline 上面语句可等价地写为 cout ThisisfirstLine endl Thisissecondline 2 4数据的输入与输出 80 7 在cout中还可以使用流控制符控制数据的输出格式 但使用这些流控制符时 要在程序的头上嵌入头文件 include 常用的流控制符及其功能如表2 12所示 表2 12I O流的常用控制符 2 4数据的输入与输出 81 2 4数据的输入与输出 82 2 4数据的输入与输出 设置域宽 所谓域宽就是被输出数据所占的输出宽度 单位是字符数 设置域宽可以使用流控制符setw n 和cout的方法cout width n 其中n为正整数 表示域宽 但是 cout width n 和setw n 二者都只对下一个被输出的数据有作用 若一个输出语句内有多个被输出的数据 而要保持一定格式域宽时 需要在每一输出数据前加上cout width n 或setw n 此外 当参数n的值比实际被输出数据的宽度大时 则在给定的域宽内 数据靠右输出 不足部分自动填充空格符 若被输出数据的实际宽度比n值大时 则数据所占的实际位数输出数据 设置域宽的参数n不再起作用 83 例2 2 cout流控制符setw的使用 include includevoidmain inta 21 b 999 cout setw 3 a setw 4 a setw 5 a endl cout setw 3 b setw 4 b setw 5 b endl cout setw 3 a b setw 4 a b setw 5 a b endl 其输出结果是 21 21 21 程序中第一个cout的输出结果999 999 999 程序中第二个cout的输出结果10201020 1020 程序中第三个cout的输出结果 2 4数据的输入与输出 84 设置域内填充字符 在默认情况下 当被输出的数据未占满域宽时 会自动在域内靠左边填充相应个数的空格符 但我们也可以设置在域内填充其他的字符 方法是利用cout的fill方法cout fill c 或setfill c cout fill c 和setfill c 可以对所有被输出的数据起作用 例2 3 在例2 2的基础上增加域内填充字符的功能 include iostream h include iomanip h voidmain inta 21 b 999 cout fill 设置域内填充字符为 字符cout setw 3 a setw 4 a setw 5 a endl 2 4数据的输入与输出 85 cout setw 3 b setw 4 b setw 5 b endl cout fill 将域内填充字符改为 字符cout setw 3 a b setw 4 a b setw 5 a b endl 其输出结果是 21 21 21 程序中第一个cout的输出结果 未占满域宽的部分填充 字符 999 999 999 程序中第二个cout的输出结果10201020 1020 程序中第三个cout的输出结果 未占满域宽的部分填充 字符 2 4数据的输入与输出 86 当采用流控制符设置填充字符时 上面程序代码也可等价地改为 include includevoidmain inta 21 b 999 cout setw 3 setfill a setw 4 a setw 5 a endl cout setw 3 b setw 4 b setw 5 b endl cout setw 3 setfill a b setw 4 a b setw 5 a b endl 2 4数据的输入与输出 87 设置输出数据的进位计数制 在默认情况下 被输出的数据按十进制格式输出 但可以使用流控制符hex和oct控制数据的输出格式为十六进制和八进制 一旦设置成某种进位计数制后 数据的输出就以该种数制为主 可利用流控制符dec将数制重新成十进制 例2 4 在例2 2的基础上增加域内填充字符的功能 include includevoidmain inta 21 b 999 设置以十六制格式输出数据 2 4数据的输入与输出 88 cout setw 3 setfill hex a setw 4 a setw 5 a endl cout setw 3 b setw 4 b setw 5 b endl cout setw 3 setfill a b setw 4 a b setw 5 a b endl 设置以八制格式输出数据cout setw 3 setfill oct a setw 4 a setw 5 a endl cout setw 3 b setw 4 b setw 5 b endl cout setw 3 setfill a b setw 4 a b setw 5 a b endl 设置以十制格式输出数据cout setw 3 setfill dec a setw 4 a setw 5 a endl cout setw 3 b setw 4 b setw 5 b endl cout setw 3 setfill a b setw 4 a b setw 5 a b endl 2 4数据的输入与输出 89 程序的输出结果为 15 15 15 以十六进制格式输出数据3e7 3e7 3e73fc 3fc 3fc 25 25 25 以八进制格式输出数据17471747 174

温馨提示

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

评论

0/150

提交评论