




已阅读5页,还剩69页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章C 编程基础 第2章C 编程基础 2 1数据类型与表达式2 2程序的控制结构2 3函数2 4数组2 5指针2 6构造数据类型 C语言与面向对象的C C语言是七十年代初贝尔实验室的DennisRichie等人在B语言基础上开发出来的 C最初是作为UNIX操作系统的开发语言为人们所认识 七十年代末 随着微型计算机的发展 C语言开始移植到非UNIX环境中 并逐步脱离UNIX系统成为一种独立的程序设计语言 C语言版本很多 为了让开发出来的代码能够在多种平台上运行 1988年美国国家标准协会ANSI对C语言进行了标准化 产生了ANSIC C语言是一个面向过程的编程语言 C语言与面向对象的C C 包括C的全部特征 属性和优点 C 支持面向对象程序设计 通过类和对象的概念把数据和对数据的操作封装在一起 通过派生 继承 重载和多态性等特征实现了软件重用和程序自动生成 使得大型复杂软件的构造和维护变得更加有效和容易 C 与C完全兼容 但由于与C兼容 使得C 不是纯正的面向对象的语言 它既支持面向对象程序设计 也支持面向过程程序设计 C 编译环境有许多版本 国内较为流行的有VisualC 和C Builder 一个简单的C 程序 表示注释行 引导一个预处理语句 main表示主函数 void表示无返回值cin为输入流 类似C语言的scanf cout为输出流 类似C语言的printf 其对应的头文件为iostream hendl是换行函数 n为换行符 函数体用 括起来 注意与C的区别 它没有用到类的概念 include 包含头文件 称为编译预处理行voidmain main 函数 程序入口 程序体开始intx 定义变量cin x 由键盘输入值并赋值给变量xcout nx x endl 输出字符串内容和x的值并换行 程序体结束运行结果 x 6 2 1数据类型与表达式 程序设计主要包括数据结构 数据类型 和算法 操作步骤 的设计 运行程序 要先描述算法 而描述算法应先说明算法要用的数据 数据以变量或常量的形式来描述 每个变量或常量都有数据类型 C 语言的命名原则 C 语言的字符集由下述字符构成 英文字母 A Z a z 数字字符 0 9 特殊字符 空格 C 的命名原则 C 中的数据类型分为基本类型 C 编译系统内置 和非基本类型 用户自定义类型 说明 在不同的系统中 每个变量类型所占的字节数可能有所不同 这里列出的是在VC 编译环境中的情况 2 1 1常量 1 整型常量 2 实型常量浮点小数 只使用十进制表示两种表示形式一般形式 16 5 13 5 3 1415926F 0 1f 0 0 2 指数形式 3e11 0e 3默认为double型 如果后缀为F 或f 则为float型 20 十进制表示 0 x14 024 0若干0 7的数字 0 x若干0 9的数字及A F的字母 3 字符常量单引号括起来的一个字符如 A 2 非数字 空格 4 字符串常量简称字符串 用一对双引号括起来的字符序列例如 China 5 布尔常量两个 false 假 true 真 不可显示字符无法通过键盘输入 如响铃 换行 制表符 回车等C 预定义的转义序列 2 1 2变量 在程序的执行过程中值可变的量 变量在使用之前需要首先声明其类型和名称 声明形式 变量名1 变量名2 变量名n 命名规则 由字符 数字和下划线组成 且只能由字符和下划线开头 声明一个变量的同时 也可以给它赋初值 在组成变量名的元素中 大小写字母含义不同 作为保留字的单词不能再作为其他名字使用 C 中常用的保留字 2 1 3引用 引用是别名建立引用时 程序用另一个变量或对象 目标 的名字初始化它引用作为目标的别名而使用 对引用的改动实际是对目标的改动引用的声明形式为 引用名 目标名或 引用名 目标名 引用型变量的名字 必须遵循变量的命名规则 引用 例如 引用一个整型变量 intsomeInt int声明rInt是对整数的引用 初始化为引用someInt 注意 在这里 要求someInt已经声明或定义 引用不是值 不占存储空间 声明引用时 目标的存储状态不会改变 引用在声明时必须初始化 include 输入输出头文件voidmain intsomeInt 定义变量int someInt 6rInt 6someInt 7rInt 7 例2 1如何建立和使用引用 输出结果 引用与指针关系的分析 voidSwap int voidSwap int a int b 指针调用 intt t a a b b t voidSwap inta intb 传值调用 intt a a b b t 区别 1 引用是某一对象的别名 指针是某一变量的地址变量 2 引用在定义时必须初始化 即为一已定义对象的别名 指针可在使用时初始化 可以重新赋值 引用的作用 1 引用可象地址一样完成对所代表的对象的操作 2 对引用的操作不同于对指针的操作 它可直接作用于变量 所以更方便 更易于理解 引用的缺点 引用不能为空 即必须代表某一对象 指针灵活性较好 但使用较不方便 2 1 4表达式 表达式由运算符 运算对象和括号组成 1 运算符C 语言定义了丰富的运算符 如算术运算符 关系运算符 逻辑运算符等分为单目运算符和双目运算符使用形式为运算符 运算符优先级 算术运算符 关系运算符 运算结果 1 真 0 假 常用复合赋值运算符 与单目 同级 与 同级 2 52 6 例 inti 1 j 5 cout i j endl cout i j endl 输出结果 2 表达式表达式是程序最基本的组成部分由运算符 如 运算对象 也称操作数 可以是常量 变量等等 和括号组成执行表达式所规定的运算 所得到的结果值是表达式的值 表达式的类型转换 当表达式中出现了多种类型数据的混合运算时 首先需要进行类型转换 再计算表达式的值 表达式中的类型转换分为两种隐含转换强制转换 隐含转换 若参加运算的操作数类型不一致 则系统自动对数据进行转换具体规则如下 算术运算和关系运算转换 将低类型数据转换为高类型数据 charshortintunsignedlongunsigned longfloatdouble低高逻辑运算符 要求必须为bool型 系统自动将其转换为bool型 转换方法是 非0数据转换为true 0转换为false 位运算 要求必须是整数 若是不同类型的整数时 编译系统会自动进行类型转换 赋值运算 要求左值 赋值运算符左边的值 与右值 赋值运算符右边的值 的类型相同 强制类型转换 又称为显式转换 是通过类型标识符和括号来实现的 其语法形式有两种 表达式 或 类型标识符 2 2程序的控制结构 2 2 1选择结构 C 语言支持下列基本的条件语句 if语句 if else语句 if elseif语句 条件语句可简化条件表达式的表达形式 语法为 expression1 Expression2 expression3 if expression1 statement1 else statement2 2 2 2switch语句 多次判断选择判断的是同一个表达式的值 switch 表达式 case常量表达式1 语句1case常量表达式2 语句2case常量表达式n 语句ndefault 语句n 1 只能是整型 字符型和枚举型 值不能相同 且次序不影响执行结果 每个case分支可以有多条语句 但不用 while循环 特别适合处理字符串和其他指针类型 do while循环for循环 通常用于具有固定长度的数据结构 do statement while expression for expression1 expression2 expression3 statement 注意 对于while语句或for语句 循环体中的语句只有在while或for语句中的条件为真时 才会被执行 而do while语句则总能保证循环体被执行一次 while expression statement 2 2 3循环结构 2 2 4其他控制语句 1 break语句只用于switch语句或循环体中 作用是使程序从switch语句内跳出或结束循环 继续执行逻辑上的下一条语句 2 continue语句仅用于循环体中 作用是结束本次循环 接着开始判断循环条件 决定是否继续执行下一次循环 2 3函数 2 3 1函数定义 由两部分组成 函数头与函数体 函数定义的一般语法形式为 形式参数表 说明性语句序列 实现函数功能的语句系列 类型标识符 返回值类型 返回值是返回给主调函数的处理结果 由函数体部分的return语句带回 形式参数表 简称形参表 内容如下 类型l形参名1 类型2形参名2 类型n形参名n 2 3 2调用函数 调用函数先定义后调用 否则 需要在调用函数之前在主调函数中声明函数原型 函数原型声明形式 含类型说明的形参表 函数调用形式 实参1 实参2 实参n 2 3 3默认参数的函数 在函数定义中通过赋值运算指定默认参数值 程序调用该函数时 若给出实参 则用实参初始化形参 若没有给出实参 则C 编译系统自动以预先赋值的默认参数值作为传入数值 注意 默认形参值必须按从右向左的顺序定义 在有默认值的形参右面 不能出现无默认值的形参 原因 函数调用时 实参初始化形参按从左向右的顺序 voidtry intj 3 intk voidtry intj intk 2 intm voidtry intj intk 7 voidtry intj intk 2 intm 3 voidtry intj 3 intk 2 intm 3 非法 非法 合法 合法 合法 2 3 4内联函数 内联函数与一般函数不同 不是在调用时发生转移 而是在编译时将函数体嵌入在每一个调用语句处 优势 节省了参数传递 系统栈的保护与恢复等开销 内联函数的定义形式 含类型说明的形参表 函数体 例2 2 include includeinlineintmax inta intb if a b returna elsereturnb voidmain inta b c d a 210 b 150 c 20 d max a b d max d c cout Thebiggestof setw 5 a setw 5 b setw 5 c is d endl 运行结果 Thebiggestof21015020is210 内联函数 注意 内联函数体内一般不能有循环语句和switch语句 内联函数不能实现递归操作 内联函数的定义必须出现在第一次被调用之前 一般 简单且使用频率很高的函数才说明为内联函数 2 3 5系统函数的使用 系统函数的原型声明已经全部由系统提供 并且已分类存于不同的头文件中 使用系统函数 用include指令嵌入相应的头文件 再使用 如 include常用的函数库有 C语言 math h 数学运算 如sqrt x sin x stdio h 输入输出函数stdlib h 类型转换 存储分配等time h 时间和日期string h 字符串处理assert h 用于调试程序 2 4数组 数组是一种构造数据类型 是具有一定顺序关系的若干相同类型变量的集合体 它占用连续内存单元进行存储 组成数组的变量称为该数组的元素 如 intc 7 引用数组中的特定位置或元素 要指定数组中的特定位置或元素的位置号数组名是数组首元素的内存地址 数组名是一个常量 不能被赋值 2 4 1一维数组 数组使用前必须先声明 声明一维数组的形式 数组长度 数组中的每个元素可以当成普通的变量使用 访问一维数组元素的形式 下标 引用只能逐个引用数组元素 而不能一次引用整个数组例如 a 0 a 5 a 7 a 2 3 常量表达式 下标值从0开始 不能超过该维的长度减1 形式1 在声明数组时对数组元素赋以初值 数组长度 第0个元素值 第1个元素值 第n 1个元素值 例如 inta 10 0 1 2 3 4 5 6 7 8 9 可以只给一部分元素赋初值 例如 inta 10 0 1 2 3 4 形式2 在对全部数组元素赋初值时 可以不指定数组长度 第0个元素值 第1个元素值 第n个元素值 例如 inta 1 2 3 4 5 未指定长度 由初始化的个数决定数组长度 一维数组的初始化 2 4 2多维数组 多维数组的声明形式 长度1 长度2 长度n 访问多维数组中的元素 第1维下标 第2维下标 第n维下标 二维数组的初始化 形式1 分行给二维数组赋初值 第1维长度 第2维长度 第0个第2维数据组 第1个第2维数据组 第n 1个第2维数据组 其中 n等于第1维长度 例如 inta 3 4 1 2 3 4 5 6 7 8 9 10 11 12 形式2 将所有数据写在一个 内 按顺序赋值 第1维长度 第2维长度 第0个元素值 第1个元素值 第m个元素值 其中 m小于或等于第1维长度 第2维长度 例如 inta 3 4 1 2 3 4 5 6 7 8 9 10 11 12 二维数组的存储顺序 如 floata 3 4 存储顺序 按行存放 上例中数组a的存储顺序为 列 includevoidmain inta 6 1 7 3 22 9 5 inti j t flag for i 0 i 6 i 冒泡次数 flag 0 每一次循环将最大值移动数组中的最后一个元素for j 0 j 6 i 1 j if a j a j 1 t a j a j a j 1 a j 1 t flag 1 if flag 0 break cout 排序后的数组为 n for i 0 i 6 i cout a i n 2 4 3数组应用 例2 3已知一个一维数组中的元素为1 7 3 22 9 5 现要求以递增顺序对这个数组中的元素进行排列 结果为1 3 5 7 9 22 下面给出冒泡排序法的程序代码 2 4 4数组作为函数的参数 数组名作参数 形参 实参都应是数组名 类型一致 传送的是数组首地址 对形参数组的改变会直接影响到实参数组 定义形式 形式1 类型标识符数组名 int长度 形式2 类型标识符数组名 长度 处理固定长度的数组 2 4 5数组与字符串 1 字符数组的初始化字符型数组通常有两种特殊的初始化方法 形式如下 形式1 char 字符串 形式2 char 字符串 2 字符串的基本运算1 求字符串的长度2 字符串的复制3 字符串的连接 2 5指针 2 5 1指针变量的概念 指针 一个变量的地址 用于间接访问变量指针变量 用于存放另一个变量的地址的变量声明 例 inti int i pointer 指向整型变量的指针 指针变量的初始化 形式 数据类型 指针名 初始地址 例 int p 注意事项用变量地址作为初值时 该变量必须在指针初始化之前已说明 且变量类型应与指针类型一致 可以用一个已赋初值的指针去初始化另一个指针变量 指针变量的赋值运算 指针名 地址 地址 中存放的数据类型与指针类型必须相符 向指针变量赋的值必须是地址常量或变量 不能是普通整数 指针的类型是它所指向变量的类型 而不是指针本身数据值的类型 任何一个指针本身的数据值都是unsignedlongint型 与地址相关的运算 和 指针运算符 一元操作符 表示指针所指向的变量的值 取地址运算符 一元操作符 得到一个对象的 地址 注意 inta b int p 输出指针P所指向的内容 指针变量的算术运算 指针与整数的加减运算指针p加上或减去n 其意义是指针当前指向位置的前方或后方第n个数据的地址 运算的结果值取决于指针指向的数据类型 指针加一 减一运算指向下一个或前一个数据 例如 y px 相当于y px 和 优先级相同 自右向左运算 指向数组元素的指针 声明与赋值例 inta 10 pa pa 通过指针引用数组元素经过上述声明及赋值后 pa i a i a i 都是a i 的地址 pa就是a 0 pa 1 就是a 1 pa i 就是a i a i pa i pa i a i 都是等效的 不能写a 因为a是数组首地址是常量 以指针作为函数参数 传址 以地址方式传递数据 可以用来返回函数处理结果 实参是数组名时形参可以是指针 例 读入三个浮点数 将整数部分和小数部分分别输出 includevoidsplitfloat floatx int intpart float fracpart 形参intpart fracpart是指针 intpart int x 取x的整数部分 fracpart x intpart 取x的小数部分 voidmain inti n floatx f cout x splitfloat x 运行结果 Enterthree 3 floatingpointnumbers4 7IntegerPartis4FractionPartis0 78 913IntegerPartis8FractionPartis0 913 4 7518IntegerPartis 4FractionPartis 0 7518 2 5 2指针与字符串 使用字符数组的形式 charpString IloveChina 直接用字符型指针的形式 char cString IloveChina 注意 char 型指针变量可以在定义时进行初始化 其形式为char 指针变量名 字符串 2 char 型的指针变量 或函数参数 既可以用于接收字符串常量 也可以接收字符型数组 例如 charpString IloveChina char myString Thisisastring myString pString 例2 6使用char 型指针变量重写字符串的复制 includevoidcopy string char from char to for from 0 from to to from to 0 赋值字符串结束标识 voidmain charpSource Iamateacher charpDestination youareastudent pDestination字符串长度 pSource字符串长度copy string pSource pDestination cout pSource endl cout pDestination endl 运行结果 Iamateacher Iamateacher C 提供了许多操作字符串数据的标准库函数 如比较字符串strcmp字符串连接strcat确定字符串长度等strlen使用操作字符串数据的库函数前 必须在应用程序的开头添加 include string h include C 字符串处理库 标准库 中常用的字符串操作函数 2 6构造数据类型 结构体类型struct共用体类型union枚举类型enum类型自定义语句typedef 2 6 1结构体 将某些相关的具有不同类型的数据组织到一个数据类型中的复合数据类型称为结构体 结构体为处理复杂的数据结构提供了手段 定义的一般形式为 struct结构体名 数据类型成员名1 数据类型成员名2 数据类型成员名n 结构体变量 必须定义结构体类型的变量 才能使用该结构体 变量说明形式 定义结构体类型的同时定义变量定义结构体类型后定义变量struct结构名结构变量名 structstudent intNo 学生学号charName 20 学生姓名intAge 学生年龄 结构体变量 注意 结构变量的存储类型概念 寿命 可见性及使用范围与普通变量 数组等完全一致 结构变量占内存大小可用sizeof运算求出 sizeof 运算量 例 cout sizeof int sizeof stu1 sizeof structstudent 结果 4 28 28结构体成员可以嵌套 即结构体的成员可以是另一个结构体 结构体变量的初始化在定义结构体变量的同时 对其每个成员赋初值 与数组相似变量名 表达式1 表达式2 表达式n structstudentstu1 10 Computer 26 stu2 结构体变量的引用 stu2 No 110011 strcpy stu2 Name Television 不能用赋值语句stu2 Name Televsion 若一个结构体中包含另一个结构体作为成员 则访问该成员中的成员时 要使用如下形式 2 6 2共用体 uniondata inti charch u1 u2 共用体和结构体的区别 结构体变量所占内存长度是各成员所占内存长度之和 每个成员分别占有其自己的内存单元 共用体变量所占的内存长度等于最长的成员的长度 使几种不同类型的数据类型的变量共占同一段内存单元的结构 也称为联合体 其定义形式为 union联合名 数据类型成员名1 数据类型成员名2 数据类型成员名n 例 unionuarea charc data shorts data longl data sizeof unionuarea 的结果为 声明共用体变量的形式 变量名注意 共用体变量不允许给其赋初值 共用体变量中成员的访问形式 2 6 3枚举类型 一种构造类型 允许用符号代表数据的数据类型是一系列有标识名的整型常量的集合 其主要功能是增加程序代码的可读性 定义形式 1 先定义枚举类型标识符 再定义变量 enum枚举类型标识符变量列表 enumperson Man Woman enumpersonx enumweekday Sun Mon Tue Wed Thu Fri Sat enumweekdayworkday weekend 2 6 3枚举类型 定义形式 2 直接定义枚举变量 enum枚举类型标识符 枚举元素1 枚举元素2 枚举元素n 变量列表 enumperson Man Woman x enumweekday Sun Mon Tue Wed Thu Fri Sat workda
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO 30414:2025 EN Human resource management - Requirements and recommendations for human capital reporting and disclosure
- 去年初二数学试卷
- 围网灯光施工方案(3篇)
- 亲子小程序活动策划方案(3篇)
- 防冻水管施工方案(3篇)
- 沃尔沃卡车施工方案(3篇)
- 卫浴知识考试题库及答案
- 山东应急考试题库及答案
- 农村现代农业技术服务外包合同
- 企业员工薪酬福利外包服务合同书
- 《慢阻肺健康大课堂》课件
- 三年级 人教版 数学 第六单元《两位数乘一位数(不进位)口算》课件
- 民爆信息系统网络服务平台
- 2024人教版英语七年级下册《Unit 3 Keep Fit How do we keep fit》大单元整体教学设计2022课标
- 2025年度智慧企业ERP系统集成与运维服务合同模板2篇
- 中国高血压防治指南(2024年修订版)
- 2024年优居房产全国加盟手册3篇
- 中广核人才测评题库
- 污水处理工程施工工程组织设计
- 氨基酸作为药物靶点
- 护理深静脉血栓科普
评论
0/150
提交评论