c__第一讲2010_11_第1页
c__第一讲2010_11_第2页
c__第一讲2010_11_第3页
c__第一讲2010_11_第4页
c__第一讲2010_11_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

C 语言程序设计 总学时 40周学时 2 目录 第1章绪论第2章数据类型 运算符和表达式第3章逻辑运算和判断选取控制第4章数组第5章函数第6章编译预处理第7章指针第8章结构体 共用体和枚举类型第9章位运算 第10章C 的新特点第11章定义C 类第12章派生C 类第13章虚函数与多态性第14章重载 复制和转换第15章C 输入 输出流第16章C 模板第17章C 异常处理 第1章C 语言概述 1 1面向过程 OP 与面向对象 OO 软件工程追求的目标之一就是可维护性 可维护性主要表现在3个方面 可理解性 可测试性和可修改性 面向对象的主要好处就是显著的改善了软件的可维护性 为了完成计算 必须设计出一个计算方法或解决问题的过程 因此 软件设计的主要工作就是设计求解问题的过程以OO为例 对应于软件开发的过程 OO衍生出3个概念 OOA OOD和OOP 采用面向对象进行分析的方式称为OOA 采用面向对象进行设计的方式称为OOD 采用面向对象进行编码的方式称为OOP 面向过程 OP 和面向对象 OO 本质的区别在于分析方式的不同 最终导致了编码方式的不同 蛋炒饭盖浇饭 4 面向对象的软件工程 面向对象的软件工程是面向对象方法在软件工程领域的全面应用 它包括 面向对象的分析 OOA 面向对象的设计 OOD 面向对象的编程 OOP 面向对象的测试 OOT 面向对象的软件维护 OOSM 面向过程编程 OPP 和面向对象编程 OOP 面向过程的编程 OPP 产生在前 面向对象的编程 OOP 产生在后 所以面向对象的编程 OOP 一定会继承前者的一些优点 并摒弃前者存在的一些缺点 它们的出发点就完全是两种截然不同的思维方式OOP在局部上一定是OP的 OPP在整体上应该借鉴OO的思想 象C C Java等都是面向对象的语言 c php都是面向过程的语言OPP已经存在了几十年了 现在依然有很多人在使用 它的优点就是逻辑不复杂的情况下很容易理解 而且运行效率远高于OO编写的程序 所以 系统级的应用或准实时系统中 依然采用OPP 面向过程的编程 OPP 以功能为中心 采用函数来描述 动词 在面向对象出现之前 我们采用的开发方法都是面向过程的编程 OPP 面向过程的编程中最常用的一个分析方法是 功能分解 我们会把用户需求先分解成模块 然后把模块分解成大的功能 再把大的功能分解成小的功能 整个需求就是按照这样的方式 最终分解成一个一个的函数 这种解决问题的方式称为 自顶向下 逐步求精 原则是 先整体后局部 先大后小 也有人喜欢使用 自下向上 的分析方式 先解决局部难点 逐步扩大开来 最后组合出来整个程序 其实 这两种方式殊路同归 最终都能解决问题 但一般情况下采用 自顶向下 的方式还是较为常见 因为这种方式最容易看清问题的本质 例如用户需求 老板让我写个通用计算器 加法和减法 乘法和除法 乘方和立方 用户的需求越来越不稳定 OPP就是将用户需求进行 功能分解 把用户需求先分解成模块 h c 再把模块 h c 分解成大的功能 function 然后把大的功能 function 分解成小的功能 function 如此类推 OPP优点是程序顺序执行 流程清晰明了 缺点是主控程序承担了太多的任务 各个模块都需要主控程序进行控制和调度 主控和模块之间的承担的任务不均衡 也可以说它把数据和处理数据的过程分离为相对独立的实体 当数据结构改变时 所有相关的处理过程都要进行相应的修改 程序的可重用性差 数据安全性差 难以开发大型软件和图形界面的应用软件面向过程定义为 程序 算法 数据结构 面向对象的编程 OOP 面向对象对应的英文是Object Oriented 把Object Oriented翻译成 面向对象 也有把它翻译成了 物件导向 物件导向 比较准确地反映了面向对象认识和解决问题都是要围绕对象展开的 面向对象的思维方式认为 软件系统是一组交互的对象的集合 一组相关的对象组合为一个子系统 一组子系统继续组合为更复杂的子系统 直至组合成整个系统 面向对象方式的出发点是尽可能模拟人类习惯的思维方式 将 问题域 中涉及的内容抽象为 对象 使软件开发的方法与过程尽可能接近人类认识世界解决问题的方法与过程 面向对象编程 将数据及对数据的操作方法放在一起 作为一个相互依存 不可分离的整体 对象 对同类型对象抽象出其共性 形成类 类中的大多数数据 只能用本类的方法处理 类通过有限的接口与外界发生关系 对象与对象之间通过消息进行通信 程序 对象 对象 对象 对象 对象 数据 方法 优点 程序模块间的关系更为简单 程序模块的独立性 数据的安全性就有了良好的保障 通过继承与多态性 可以大大提高程序的可重用性 使得软件的开发和维护都更为方便 1 2面向对象程序设计 OOP 概述 基本概念 ObjectOrientedProgramming 对象 现实世界的实体 每个对象都有所属的类类 对一组对象共同具有的属性和行为的抽象 具有封装和隐藏性 还具有继承性 消息 向某对象请求服务的一种表达方式 是对象与外界 对象与其它对象之间联系的工具方法 对某对象接受消息后所采取的操作的描述 面向对象程序设计方法认为 客观世界是由各种各样的实体组成的 这些实体就是面向对象方法中的对象 对象的两个要素 静态特征 属性 动态特征 行为 班级作为一个对象班级所属系 专业 学生人数 所在的教室等 学习 开会 体育比赛等 如果想从外部控制班级中学生的活动 可以从外界向班级发一个信息 如听到广播声就去上早操 听到打铃就下课等 称为消息 对象之间通过发送和接收消息互相联系 消息包括 目标对象 请求的方法 参数 对象1 对象2 对象3 对象4 对象 数据 操作代码 函数 类是对自然界的某一事物其共同特点的抽象描述 类就是抽象 对象是事物的具体实现 对象就是类的实例 面向对象的特征 1 抽象 abstraction 抽象是面向对象方法中使用最为广泛的原则 例如系统中的对象是对现实世界中事物的抽象 类是对象的抽象 数据成员是事物静态特征的抽象 成员函数是事物动态特征的抽象等 2 封装封装就是将数据成员和成员函数结合为一个不可分的系统单位 并尽可能地隐蔽对象的内部细节封装的信息隐蔽作用反映了事物的相对独立性 它实际上也是抽象原则的一种具体应用 它既体现了过程抽象 也体现了数据抽象 3 继承通过对已有的类进行修改而生成新的类 新类共享已有类的行为 连接类与类的层次模型 利用现有类派生出新类的过程称为类继承 支持代码重用 提供了无限重复利用程序资源的途径 节省程序开发的时间和资源 多态性发出同样的消息被不同类型的对象接收时导致完全不同的行为 它包括参数多态性和包含多态性 如函数重载 虚函数 如果新类是从已有类继承过来的 则新类称做派生类 原来的类称做基类 继承 利用继承可以简化程序设计的步骤 马 白马 矩形 实心矩形 圆角矩形 基类 基类 派生类 派生类 面向过程 面向对象 工厂厂长 工厂厂长1车间2车间3车间 厂长不必过问车间内运作的细节 对厂长来说 车间如同一个 黑箱 只要给它命令或通知 它能完成任务就可以了 工人1工人2工人3 程序设计者的任务 设计所需的各种类和对象 考虑怎样向有关对象发送消息 以完成所需任务 对一个大型任务来说 面向对象程序设计方法是十分有效的 能大大降低程序设计人员的工作难度 减少出错机会 程序 算法 数据结构程序 对象S 消息 1 3C与C C 语言是对C语言的扩展 是C语言的超集 它是一门混合型的语言 既支持传统的结构化程序设计 又支持面向对象的程序设计它是一门混合型的语言 既支持传统的结构化程序设计 又支持面向对象的程序设计 C Bell实验室的BjarneStroustrup C Simula67 带类的C 类 基础 1979年Cpre预处理器 C 1 0 1985年 C 程序设计语言 C 2 0 1989年 C 3 0 1993年 类及派生类公有和私有构造函数 析构函数友元内联函数赋值运算符的重载 虚函数函数和运算符的重载引用常量Const 多重要继承保护成员对象的初始化与赋值的机制抽象类静态成员函数CONST成员函数 模板 C语言 Bell实验室的D M Ritchie 1972年 为了编写UNIX设计的 两个重要的标准 老标准 1978年 TheCProgrammingLanguage B W Kernighan和D M Ritchie合著新标准 1983年 ANSI制定 称为ANSIC C 的组成 C语言 面向对象设计 OOP VisualC 环境 C 程序设计 C语言程序 MFC 应用程序向导 MFCAppWizard C语言与C 语言的关系 C 是C语言的扩展 有很大改进 1 增加了注释 2 增加了标准输入输出流cout cin3 允许对变量的声明放在程序的任何位置4 允许函数重载 允许设置默认参数 引进内联函数5 引进了引用的概念6 增加了一些运算符newdelete 1 4C 语言对面向对象方法的支持 C 支持数据封装C 的类中包含私有 共有和保护成员C 中通过发送消息来处理对象C 中允许友元破坏数据的封装性C 支持多态性C 支持继承性C 支持动态联编 1 5C 语言的词法和规则 字符集同C语言标识符定义函数名 类名 对象名 变量名 常量名等 以字母和下划线开头的字符集合 大小写有区别 关键字运算符分隔符空格 逗号 分号 冒号 花括号注释符 基本语法成分 1 基本符号 1 字母 52个A Za z 2 数字字符 10个0 9 3 下划线 4 特殊符号 一般作运算符 如 2 关键字有特定含义的 专用的单词 如int char break for define等 不能作变量名 符号常量名 函数名 类名等 3 标识符 由字母 数字和下划线三种字符组成必须以字母或下划线开头合法标识符 A2studentarea of circlenum ddInt不合法标识符2AA BareaofcircleM Dint 大小写字母不等价习惯上 变量名小写 符号常量大写 关键字不能作标识符用 例如 int define等关键字不能作为标识符用 定义标识符时最好能简洁且 见名知义 以提高程序的可读性 如min表示最小值 average表示平均值 day表示日期 在VisualC 中 标识符中不能有汉字但是字符串和注释中可以有汉字 1 6C 程序结构的特点 include 预处理命令 intadd intx inty 函数说明语句 voidmain 主函数 inta b cin a b 流提取运算符 intc add a b cout a b c endl 流插入运算符 intadd intx inty 函数 函数体 returnx y include 预处理命令classStudent 声明一个类 类名为Student private 以下为类中的私有部分intnum 私有变量numintscore 私有变量scorepublic 以下为类中的公有部分voidsetdata 定义公用函数setdata cin num 输入numcin score 输入score voiddisplay 定义公用函数display cout num num endl 输出numcout score score endl 输出score 类的声明结束 包含类的C 程序 Studentstud1 stud2 定义stud1和stud2为Student类的变量 称为对象intmain 主函数首部 stud1 setdata 调用对象stud1的setdata函数stud2 setdata 调用对象stud2的setdata函数stud1 display 调用对象stud1的display函数stud2 display 调用对象stud2的display函数return0 多文件的C 程序 file1 cpp include 预处理命令 intadd intx inty 函数说明语句 voidmain 主函数 inta b cin a b 流提取运算符 intc add a b cout a b c endl 流插入运算符 file2 cppintadd intx inty 函数 函数体 returnx y C 程序结构的特点 一个C 程序可以由一个程序单位或多个程序单位构成 每一个程序单位作为一个文件 每个文件由若干函数组成 一个程序单位中 包括几个部分 预处理命令 全局声明部分 函数 一个函数包括 函数首部 函数体 函数体包括 局部声明部分 执行部分 语句包括 声明语句 执行语句 一个C 程序总是从main函数开始执行 类是C 新增加的重要数据类型 类可以实现面向对象程序设计方法中的封装 信息隐蔽 继承 派生 多态等功能 书写格式自由 一个好的 有使用价值的源程序都应加上必要的注释 以增加程序的可读性 行注释 多行注释 1 7输入和输出 C C 语言本身并不带输入和输出 即I O 功能 而是提供了输入输出库 也称为I O库 大多数C程序使用一种称为stdio 标准I O 的I O库 该库也能够在C 中使用 但是 在C 程序中 一种称为iostream I O流库 的I O库用得更多 在C 中 I O使用了流的概念 字符 或字节 流 每一个I O设备传送和接收一系列的字节 称之为流 输入操作可以看成是字节从一个设备流入内存 而输出操作可以看成是字节从内存流出到一个设备 流是输入输出设备的另一个名字 一个文件 屏幕 键盘等 要使用C 标准的I O流库的功能 必须包括两个头文件 include include iostream h文件提供基本的输入输出功能iomanip h文件提供格式化的功能 通过包含iostream流库 内存中就创建了一些用于处理输入和输出操作的对象 标准的输出流 通常是屏幕 称为cout标准的输入流 通常是键盘 称为cin 一 标准输出输出变量d的值到标准输出设备的语法形式如下 cout d 输出dcout d endl 输出d并换行cout Thisisthevalueofd d endl 输出字符串 d并换行一个语句中多次使用 等价于 单独使用多次 即最后一个语句等价于 cout Thisisthevalueofd cout d cout endl 符号endl的功能是换行 并清除输出缓冲区 变量的值以缺省的格式打印 34 cout 表达式1 表达式2 表达式n 说明 数据的输出格式由系统自动决定 各表达式可以是任意类型的 include iostream h voidmain inta 2 doubleb 3 32 charc A cout a b endl cout c abcd endl 35 格式控制符 自学 使用格式控制符输出数据 使用示例 include iostream h include iomanip h voidmain intx 65 doublef 123 456 cout 123456789012345 endl cout dec x hex x oct x endl cout x ends x endl cout f endl cout setprecision 4 f endl cout setw 12 f endl cout setw 12 setfill f endl 二 标准输入标准输入的用法与标准输出类似 使用 运算符和cin输入流 语句 cin d 是从标准输入读 或抽取 一个值到变量d 并与语句中的数据类型匹配 例如 如果d是整型数 上面的命令读数字 直至没有遇到数字为止 如果d是浮点数 该命令读数字 小数点 指数 直至没有遇到合适的字符为止 假如把输入和输出语句结合在一起使用 可能会发生问题 我们编写程序时 常常先用一个输出语句打印提示 然后要求用户输入数据 对于一些C 编译器 在输入语句抽取数据前 应先输出一个换行符 38 cin 变量 变量2 变量n 说明 数据之间用空格 TAB键或回车分隔 include iostream h voidmain inta floatb cout a b cout a b a b endl 1 8编译预处理 1 8 1文件包含头文件 h如stdio h iostream h函数说明 常量定义作用 头文件的内容插入到源文件 CPP 文件中 1 include从系统指定的文件夹中找 2 include 文件名 从当前文件夹中找 现到系统指定的文件夹中找注意 一条文件包含命令只能包含一个文件 编写源程序 预处理 编译 连接 执行 预处理程序 编译程序 1 8 2宏定义主要用来定义符号常数 define标识符常量例如 defineFALSE0 defineTRUE1 definePI3 1415926 defineEPS1 0e 6注意 符号常量一般大写行末一般不加分号不能对符号常量进行赋值 1 9C 程序的实现 编辑用C 编译器编辑 形成 CPP文件编译 连接 先预处理 再编译 形成目标代码 OBJ文件 再连接处理 形成可执行文件 EXE运行 三个阶段 创建一个工程 向工程中添加文件 创建C 源文件 输入源程序 进行编译 连接 运行 VisualC 6 0集成开发环境 1 VisualC 6 0菜单栏主要有 文件用于创建 打开 保存工程以及其他文件 编辑用于文件的编辑 复制 粘贴 查找 恢复等 视图用于激活所需要的各种窗口 工作区窗口 输出窗口 属性窗口等 插入用于插入新建类 资源等 工程用于向工程添加文件 设置活动工程 工程属性等 编译用于程序的编译 构建 调试 运行等 工具用于选择和定制集成开发环境中的一些工具 调用VisualC 提供的实用工具 窗口用于排列 隐藏或显示窗口等 帮助帮助用户系统地学习掌握VisualC 的使用方法和程序设计方法 2 工具栏3 项目工作区ClassViewResourceViewFileView扩展名 dsw 含有工作区的定义和项目中所包含文件的所有信息 4 输出区有多个选项卡 常用的是 编译 简单C 程序的编写和运行过程 1 创建空工程文件 新建 选择 工程 选项卡 Win32ConsoleApplication 输入工程名如 test 输入工程位置如 d test 选择 Anemptyproject 选择 完成 选择 确定 2 创建C 源文件文件 新建 选择 文件 选项卡 C Sourcefile 输入源文件名如 test 输入 编辑源文件3 编译 连接和运行编译 执行或编译 构建 执行 TEST dspTEST dswTEST cpp工程TEST的文件 工程文件 保存了所建工程的有关信息 源文件 工作区文件 保存了工作区中工程的数量 工程名称等 TEST exe TEST obj 说明 在VisualC 中 仅有 cpp文件是不能直接编译 连接的 需要先用 构建 命令让系统自动创建一个工程并将 cpp文件加入到该工程中 然后才能执行各种操作另外 若保存文件到其他地方 只需拷贝 cpp和 h文件 注意事项 双击 cpp程序可以打开文件 但是不要老是创建新工作区正确的打开方法 先启动vc 再打开工作区 最后为 cpp文件 在VisualC 6 0中 项目中所有的源文件都是采用文件夹的方式进行管理的 它将项目名作为文件夹名 在此文件夹下包含以下一些文件类型 1 cpp h源程序代码文件 cpp实现文件 h头文件 2 dsp DeveloperStudioProject 项目文件 3 dsw项目工作区文件 4 opt关于开发环境的参数文件 如工具条位置等信息 5 plg编译信息文件 6 aps AppStudioFile 资源辅助文件 二进制格式 7 bsc用于浏览项目信息 8 clw类向导ClassWizard信息文件 9 hpj HelpProject 帮助文件项目 10 map执行文件的映像信息记录文件 11 mdp MicrosoftDevStudioProject 旧版本的项目文件 12 pch Pre CompiledFile 预编译文件 可以加快编译速度 但是文件非常大 13 pdb ProgramDatabase 记录程序有关的一些数据和调试信息 14 exp记录DLL文件中的一些信息 只有在编译DLL才会生成 15 ncb无编译浏览文件 nocompilebrowser 16 Debug调试文件夹 17 Relcase发行文件夹 18 Res资源文件夹 文件类型 1 10在vc 中编写windows应用程序的方法 直接调用windows环境提供的win32 应用程序编程接口 函数 使用MFC类库和活动模板库 ATL 在VC 系统的集成开发环境 既使用MFC类库和ATL 也使用向导Wizards 框架文件编辑器 下编写 WINDOWS编程的基本思想 传统程序设计方法面向过程式的编程方式OS只是简单的执行程序程序的控制流程按开发者预先确定的路径执行事件驱动程序设计方法Windows编程方式面向用户的程序设计方法OS不仅执行程序 而且与应用程序进行对话程序的控制流程是由实际运行时各种事件的实际发生来触发 没有预定的顺序 允许用户用各种合理的顺序来安排程序的流程 WINDOWS编程的基本思想 事件驱动原理 Windows编程与其他类型编程的最大不同之处在于使用消息机制消息机制是Windows应用程序的核心 WINDOWS编程的基本思想 事件驱动与消息在事件驱动的程序结构中 程序的控制流程不再由事件的预定发生顺序来决定 而是由实际运行时各种事件的实际发生来触发 而事件的发生可能是随机的 不确定的 并没有预定的顺序 事件驱动程序设计也是一种 被动 式的程序设计方法 程序开始运行时 处于等待消息状态 然后取得消息并对其作出相应反应 处理完毕后又返回处于等待消息的状态 事件驱动是靠消息循环机制实现 事件驱动围绕着消息的产生与处理展开 消息是一种报告有关事件发生的通知 例1 3 1用C语言编写显示学生信息程序 include includestructstudent 定义结构体类型student longnum 学号charname 20 年龄charsex 10 性别

温馨提示

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

评论

0/150

提交评论