




已阅读5页,还剩63页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 第二章C 语言初步 本章主要内容1 C 语言的字符集 词汇2 基本数据类型 运算符与表达式3 C 中的常量与变量4 C 中的I O5 基本控制结构6 数组 结构体 共用体与枚举类型7 指针 引用与动态内存分配8 函数与函数重载 2 1C 语言的字符集与词汇 1 字符集 1 字母ABCD Zabcd z 2 数字0123456789 3 特殊符号空格 3 2 词汇 五类 1 关键字 保留字 系统预定义且有专门含义的单词 不允许另作它用 C 的关键字包含了C语言的几乎所有关键字 C 的关键字随C 的发展而不断增加 2 标识符 由程序员为程序中的各种成份定义的名字 以字母或 开头 由字母 数字组成 不能是关键字 C 中的标识符区分大小写 见名知义的原则 C 系统对标识符的长度有一定限制 3 直接常量 4 运算符 5 分隔符 用来分隔不同的语法成份的单词空格 C 的两种注释 注释到行尾 4 2基本数据类型 运算符与表达式 一 数据类型每一项数据都唯一的属于某种类型每一数据类型都有一个明确定义的值的集合每一类型的数据占用相同大小的存储空间同一类型的数据可以进行相同类型的运算 1 C 的数据类型 基本类型是由系统定义 各种语言都具备的类型 复合类型与指针类型都属于用户定义类型 5 2 基本类型 int型 整型VC中占4字节float型 浮点型4字节char型 字符型1字节void型 空类型bool型 布尔型1字节值为true或false 修饰说明符long与short signed与unsignedlong和short修改整型具有的最大值和最小值signed和unsigned告诉编译器如何处理整型和字符型数据的最高位 float型可用double和longdouble修饰 修改实型数据的表数范围和精度 6 C 中的全部基本类型 7 二 运算符与表达式 1 运算符 算术运算符 关系运算符 赋值运算符 条件运算符 逗号运算符 指针运算符 求字节运算符 sizeof函数调用运算符 强制类型转换运算符 分量运算符 数组下标运算符 作用范围分解运算符 动态内存分配符 new delete插入提取运算符 8 运算符的优先级与结合性 9 运算符的优先级与结合性 续表 10 C 中的类型转换 转换运算符 两种强制类型转换的方法 目标类型名 表达式 floatx 2 5 inty y int x 目标类型名 表达式 floatx 2 5 inty y int x C 中的显式转换 使用方式转换用关键字 待转换的表达式 11 例 static cast voidfunc int voidmain inti 0 x7fff longl floatf l i f i 更好的方法是使用static castl static cast i f static cast i i l i f 以上两条语句会出Warning 可使用如下方式消除i static cast l i static cast f charc static cast i void vp 更好的方法 12 例 const cast voidmain constinti 0 int j 错误 不允许同时进行const nonConst 和nonConst long 两项转换 13 例 reinterpret cast includeusingnamespacestd constintsz 100 structX inta sz voidprint X x for inti 0 ia i 14 2 表达式 由运算符连接操作数构成的式子 算术表达式关系表达式逻辑表达式赋值表达式条件表达式逗号表达式 15 3常量与变量 一 C 中的常量 1 直接常量 字面常量 10 10 5 A string int型 float型 char型 字符串常量 bool型 true false 2 符号常量 C 中有两种符号常量 define定义的常量例 definepi3 1415926关键字const定义的常量例 constintsz 100 define定义的常量 在预处理时只是字符串的替换 对编译器而言 不带有任何类型信息 不便于查错 而const定义的常量带有类型信息 故优于 define定义的常量C 推荐使用const定义的常量 16 const常量 定义语法 const类型名常量名 常量值 或类型名const常量名 常量值 例 constfloatpi 3 14 floatconstpi 3 14 constintmin 50 intconstmin 50 constintmax 2 min intconstmax 2 min const定义的常量 相当于定义了一个相应类型的变量 但其值不能发生改变例 constintmin 50 min 40 错误 不能改变min的值 所以 定义const常量的同时必须初始化 且一旦初始化后 就不会 因不能故不会 再发生变化 因此在作用范围内若某变量的值不会发生改变 则定义该变量时应用const进行限定 以免无意中改变该变量的值 const常量是编译时的常量例 constintsz 100 intarr sz 17 const与指针 1 指向常量的指针 限定指针所指的对象 变量定义形式 const类型 指针变量 地址表达式 或类型const 指针变量 地址表达式 例 intvar 35 constintmax 100 int p constint p1 const constint p2 const p1 const p1 const和p2 const var不是常量 p1 const和 p2 const max是常量 18 指向常量的指针 19 2 指针常量 指针变量本身的值初始化后不能再改变 定义方式 类型 const指针变量 地址表达式 例 intvar1 100 var2 200 constintmax 1000 int constcst p1 只说明了指针变量如cst p1本身是常量 但并没有说不能改变 cst p1的值 必须要赋初值 20 3 指向常量的指针常量 指针变量本身和所指对象的值都为常量 不能改变 定义方式 const类型 const指针变量 地址表达式 或类型const const指针变量 地址表达式 例 intvar1 128 var2 256 constintmax 1000 constint constdoubleCst p1 21 二 C 中的变量 变量必须先定义 声明 再使用变量的定义存储类型数据类型名变量名列表 C 中几乎随处可以定义变量例 for inti 0 i 100 i if i 100 intx 0 x 100 inty 10 变量的分类 根据定义变量的位置 分为两类 全局变量 外部变量 局部变量 内部变量 22 变量的存储类型 存储方式 动态存储方式和静态存储方式静态存储方式 程序运行过程中给此类变量分配固定的存储空间动态存储方式 程序运行过程中根据需要 给此类变量动态分配存储空间 程序的存储组织 23 变量的存储类型 auto register static extern和默认五种auto 自动类型普通的局部变量都属于此类 分配在动态存储区中register 寄存器类型static 静态变量静态局部变量 在静态区中 只初始化一次 多次调用函数时能保留前一次函数调用结束时的值 延长了该变量的生存期静态全局变量 在静态区中 限制了该变量的作用域extern 外部变量定义全局变量声明外部变量 扩展了全局变量的作用域 24 例 static includeusingnamespacestd intfactor intn staticintresult 1 result n returnresult voidmain for inti 1 i 8 i cout factor i cout endl 25 例 extern main cpp includeusingnamespacestd externintnTestVar voidmain nTestVar 100 cout nTestVar endl test cppintnTestVar 同一个工程的两个文件 26 变量的生存期与作用域 生存期 变量a的生存期指从a被说明且分配了内存开始 直到该变量占用的内存被释放为止 是时间概念作用域 变量a的作用域指标识符a可以代表该变量的范围 是空间概念 全局变量 生存期从程序开始运行到程序运行结束 而作用域则从定义该变量的地方开始 直到本文件末尾普通局部变量 生存期从程序执行到包含该变量定义的复合语句时开始到该复合语句执行结束 而作用域则从该变量的定义处开始到包含该变量的程序块末尾静态局部变量 生存期从为该变量分配了内存起直到程序结束 但作用域则与局部变量的作用域相同 例 生存期与作用域 27 变量的初始化 定义变量的同时给变量赋以初值 两种方法 例 inta 3 例 inta 3 28 4C 中的输入 输出 一 输入 输出方式1 C语言的方式 使用scanf printf 等输入 输出库函数2 使用流对象的方式把数据从一个对象向另一个对象的流动抽象成流流好比管道 从一端放入什么从另一端就能取出什么C 中的流对象一般与一个文件相关联 用流对象进行输出操作相当于把要输出的数据写入文件中 进行输入操作相当于从文件中读出数据存于变量或对象中从流中获取数据的操作称为提取操作 流对象 变量向流中添加数据的操作称为插入操作 流对象 提取运算符cin和cout是C 预定义的流对象cout 用于进行输出操作 与显示器相关联cin 用于进行输入操作 与键盘相关联 29 用法 cout 变量1 变量2 变量n 同样也可以串联多个 给多个变量输入数据 输入时多个数据项之间用空格 Tab或回车分隔 具有智能 能够自动判断其后的数据项的类型 并采用相应的类型进行输出或输入 使用流对象时 必须 include相应的头文件 如iostream 并使用语句 usingnamespacestd 打开名称空间stdcin与cout在iostream中的std名称空间中定义 30 二 简单的输入 输出格式控制 使用操纵符 manipulator I O流类库中提供了若干个操纵符 可以直接嵌入到输入 输出语句中实现I O格式控制 常用的I O操纵符 31 说明 不带参数的I O操纵符定义在iostream中使用带参数的I O操纵符 需包含iomanipsetw 只对其后紧跟着的一个真正的数据项起作用 例 cout A ends B endl cout hex 255 ends 32 endl cout dec setw 5 setfill 0 32 endl cout setw 5 setprecision 4 7 5612 endl 屏幕输出 32 5基本控制结构 顺序 选择 分支 和循环结构对应的控制语句 33 6数组 结构体 共用体和枚举类型 一 数组 需要处理相同类型的一批相关数据时使用 数组分为一维数组与多维数组定义 一维数组 类型数组变量名 数组长度 二维数组 类型数组变量名 第一维长度 第二维长度 例 intnArr 10 intnArr2d 10 5 说明 数组长度必须是常量表达式 编译时求值C意义上的字符串采用字符数组作为其存储形式 在最后添加一个ASCII码为0的字符作为字符串的结束标志 34 string类 字符串类 string类封装了字符串的基本特性和对字符串的典型操作 其对象可用于保存几乎任意长的字符串 对处理输入文件中一行上字符数不定的情况特别有用string类是STL中的类 使用时需要包含头文件string并打开名称空间std string类的操作 成员函数 求串长 size length 例 include includeusingnamespacestd voidPrintAttribute conststring 35 intmain strings1 s2 PrintAttribute s1 s1 Mystringobject PrintAttribute s1 s2 AnotherStringObject PrintAttribute s2 return0 36 赋值 assign s1 assign s2 s1 s2 连接 append s1 append s2 s1 s2 s1 s1 s2 下标 s1 0 include includeusingnamespacestd intmain strings1 cat s2 s3 s2 s1 s3 assign jump cout s2 s3 endl s1 s3 cout s1 endl s1 append andyell cout s1 endl s1 0 h cout s1 endl return0 37 比较string pare s2 比较字符串s1与s2 当s1等于s2时 返回0 当s1大于s2时返回正值 否则返回负值 字符串的部分比较pare beg1 len1 s2 beg2 len2 beg1和len1指示s1参与比较的开始字符的下标与长度 beg2和len2指示s2参与比较的开始字符的下标与长度 运算符 38 例 string的比较 字符串的排序 include includeusingnamespacestd intmain stringnames LiHua HeXiaoMing ZhangLi SunFei ChenBao strings inti j k nmb nmb sizeof names sizeof names 0 for i 0 inames j k j if k i s names k names k names i names i s for i 0 i nmb i cout name i names i endl return0 39 子串 substr s substr beg len beg指定子串的开始下标 len指定读取的字符数 strings C programdesign cout s substr 4 7 endl 查找 find s find substring s find substring beginning 替换 replace s replace beg num str 40 例 把字母表中的逗号 全部替换为分号 include includeusingnamespacestd intmain stringalphabet A B C D E F G H I J K L M N O P Q R S T U V W X Y Z intx alphabet find while x 0 alphabet replace x 1 x alphabet find x 1 cout alphabet endl return0 41 插入 insert s1 insert n s2 例 strings1 catjump strings2 dog s1 insert 4 s2 s1 insert 4 and cout s1 endl 42 转换成C语言式的char 型字符串 data c str copy char ptr s data char ptr s c str s copy buffer n begin include includeusingnamespacestd intmain strings StringObject constchar ptr1 ptr1 s data intlen s length char ptr2 newchar len 1 s copy ptr2 len 0 ptr2 len 0 cout s endl cout ptr1 endl cout ptr2 endl delete ptr2 return0 43 从文件中输入一行字符 getline getline in str ch 其中 in为输入流对象str为string类对象ch为结束输入的字符 默认为 n 例 strings getline cin s n 从键盘输入一行字符 以回车结束 存入s中 44 例 从文件中输入一行数据 include include includeusingnamespacestd intmain stringline ifstreaminput input txt ios in while 1 getline input line if input eof break 一行数据已存入line中 可对其处理 此处只将其输出cout line endl input close return0 45 二 结构体 struct 三 共用体 union structin addr union struct unsignedchars b1 s b2 s b3 s b4 S un b struct unsignedshorts w1 s w2 S un w unsignedlongS addr S un 四 枚举类型 enum 与C中几乎一样 自定义的数据类型可以象C 的基本数据类型一样使用例 in addrIP Address 46 7指针 动态内存分配与引用 程序访问内存中数据的两种方式 直接访问 间接访问 指针就是地址 存放地址的变量就是指针变量 指针变量的定义 数据类型名 指针变量名 或数据类型名 指针变量名 初始地址值 例 float ptr floatx 200 0 float px 指针变量的三种状态 指向某一变量 被赋予空值NULL 未指向任何变量 未赋值 处于 悬空 随机 状态 一 指针 47 与地址有关的运算符 和 取地址运算 与 互为逆运算 48 指针的运算 算术运算指针可以和整数进行 运算 指针变量本身也可以进行 运算指针的算术运算一般和数组的使用相联系 关系运算 在指向相同类型数据的指针之间进行比较 指针可以进行相等和不等的比较 指向同一变量 地址 时相等 否则不相等 任一指针可以和指针常量NULL进行相等和不等的比较 指针指向数组元素时 指针之间可以进行大小比较 49 指针变量的使用 指向一个变量 间接访问该变量 指针变量与数组关联使用 指向数组元素例 intarr 10 int ptr ptr pa指向a 1 则pa a 1 使用时必须确保指向一个确定的有意义的空间 50 指针数组 数组中的每个元素都相当于一个指针变量 定义形式 类型名 数组名 数组长度 例 inta b c int parr 3 parr 0 C字符串指针 可以把字符串当作一个整体进行操作 51 指针变量与函数关联使用 指针变量作函数参数 可改变实参指针所指变量的值voidswap int px int py intt t px px py py t 则inta 3 b 5 int pa 调用后a和b的值各是多少 voidswap intx inty intt t x x y y t 则inta 3 b 5 swap a b 调用后a与b的值各为多少 52 函数返回指针 例 char menu error File Edit Search Help char menuItem intm return m4 menu 0 menu m 注意 返回的指针必须是有意义的 不能是一个指向函数内的局部变量或参数变量的指针或处于 悬空 状态的指针 函数指针 函数名代表函数的入口地址 也称做函数的指针 可定义一指针变量 将函数的入口地址存入该指针变量中 通过该指针变量调用函数 一般做函数的参数 53 二 动态分配内存 两个运算符 new与delete new用来动态生成一个指定类型的无名变量 并返回该变量的地址 只能通过该地址 指针 访问动态生成的变量 动态生成变量 int pi pi newint pi 100 生成变量并初始化 int pi newint 5 动态生成一个数组 intn 通过某种运算得到n的值int pi newint n 此时数组长度可以是变量 delete释放new动态生成的变量 释放动态生成的变量 deletepi 释放动态生成的数组 delete pi 例 动态内存分配 注意 new动态生成的变量不会自己撤消 所以该变量不用时 必须及时用delete将其释放 new与delete比C中的函数malloc和free完善 所以C 中不建议使用malloc和free动态申请与释放内存 54 三 引用 引用即变量的别名 对引用的操作就是对目标变量的操作 声明引用的一般形式 类型名 引用不是变量 不占存储空间 故只能声明 没有定义 由于引用不是变量 故不能声明引用的引用和指向引用的指针 引用不做函数形参时 声明引用的同时必须对其初始化 引用一旦初始化 就维系在其目标变量上 再也不分开 对该引用的任何操作 都是对引用维系的目标变量的操作 因此对引用的赋值就是对目标变量的赋值 而不是重新引用例 intnSomeVar 0 intnOther 10 int 等价于nSomeVar nOther 而不 是让ref成为nOther的引用 55 引用的作用 给变量一个别名 通过别名实现对目标变量的操作 做函数形参 此时形参是实参的引用例 voidswap int调用后a和b的值分别是多少 引用做函数参数的特点 引用做函数形参 实参一般使用变量而不使用常量或表达式 可改变实参的值 若不需改变实参的值时可在形参引用前加上关键字const 则由编译器保证不会无意中修改实参值 可以使函数带回多个值 可以减少函数调用过程中的开销 比指针简洁方便 易使用 好理解 56 8函数与函数重载 函数的定义与声明定义 属性说明返回值类型函数名 形参列表 函数体 其中的属性说明可以是以下几个关键字之一 inline static virtual friend extern C 中函数的缺省属性就是extern函数的声明 使用函数原型进行声明属性说明返回值类型函数名 形参列表 注意 程序中对函数的调用出现在函数的定义之前时 调用之前必须进行声明函数进行声明时形参只出现类型即可 可以不使用形参名函数的声明与定义中返回值的类型必须一致 参数的类型 数目必须相符 一 函数 57 函数的使用 对函数进行调用 形式 函数名 实参列表 例 swap a b 函数调用过程中的参数传递 值传递 指针传递 仍为值传递 传递的是地址值 引用传递 形参是实参的别名 完全代表了实参 58 函数的属性 extern 外部 函数 C 中函数缺省的属性就是外部的例 externintfunc 则函数func 的作用范围不仅仅局限于定义它的文件中 在其它文件中可以通过使用 externintfunc 对其进行声明 从而在第二个文件中可以调用在第一个文件中定义的func 函数 因C 中函数的缺省属性就是extern的 所以定义和声明函数时通常省略关键字extern static 静态 函数 例 staticintfunc static关键字限制函数func 的作用范围仅在定义它的文件中 其它文件中不可能通过声明的方式对该函数进行调用 即使进行了声明也无济于事 59 inline 内联 函数 定义或声明函数时 在返回值类型前使用关键字inline进行修饰的函数例 inlineintadd intx inty returnx y 内联函数不被编译为单独一段可执行代码 而是把函数的可执行代码直接插入到对该函数的每一次调用处 所以没有函数调用过程中的开销 可以提高程序的效率 与带参的宏相似 但因为函数的参数带有类型信息 所以比宏安全 例 inlineintmax intx inty returnx y x y voidmain inta b cin a b cout max a b endl 60 例 内联函数 注意 若inline不在函数名第一次出现时指定 则编译器把该函数做为普通函数对待 内联函数的函数体应尽可能简洁 否则会增加程序的体积 内联函数中不能包含复杂的流程控制语句 否则inline关键字将不会起作用 该函数将成为普通函数 inline函数不能递归 也不能包含静态变量 inlineintisnumber char voidmain charc intn n 0 while c getchar n if isnumber c n cout n n endl intisnumber charch return ch 0 61 带缺省实参值的函数声明或定义函数的同时 可对函数的某些参数进行初始化 该初始化的值称做缺省实参值 调用该函数时 可传递少于形参数目的参数 对缺少实参值的参数 函数使用缺省的实参值 声明或定义形式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 书店阅读活动对儿童认知发展的影响研究考核试卷
- 体育产业市场营销环境分析考核试卷
- 软件敏捷开发规范考核试卷
- 金属加工机械制造行业发展趋势考核试卷
- 跨文化背景下的金融AI产品推广策略考核试卷
- 印刷工艺水墨平衡控制考核试卷
- 计划生育证明承诺书
- 企业年终工作总结12篇
- 化工公司风险分级管控与隐患排查治理体系建设实施方案
- 正道新风活动方案
- 员工不能胜任工作解除劳动合同范本
- 农村院子转让合同范本
- 中小学学校内部控制手册
- 乳腺结节疾病的专业知识课件
- 2025年国元农业保险股份有限公司招聘笔试参考题库含答案解析
- 中煤平朔2025笔试题库
- 中秋国庆慰问品采购组织机构与人员配备
- 2025年高一下学期班主任工作计划(5篇)
- 常用消毒剂的使用方法课件
- 污水管线抢修应急方案
- 路口道路执勤保安服务方案
评论
0/150
提交评论