九州书源—中国重庆(1).ppt_第1页
九州书源—中国重庆(1).ppt_第2页
九州书源—中国重庆(1).ppt_第3页
九州书源—中国重庆(1).ppt_第4页
九州书源—中国重庆(1).ppt_第5页
已阅读5页,还剩207页未读 继续免费阅读

下载本文档

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

文档简介

第2章C 程序设计基础知识 学习目标本章要点上机练习习题 学习目标 C 语言是在C语言的基础上增加了面向对象程序设计而发展起来的 而VisualC 6 0又是以C 为基础的 因此 学习VisualC 6 0语言 首先要掌握C 程序设计的基础知识 学习目标 本章将介绍编码基础 数据类型 变量和表达式 基本控制结构 数组 函数和指针等C 程序设计的基础知识 使读者具有阅读与编写C 程序的能力 本章要点 C 语言的编码基础C 语言的数据类型常量 变量 运算符及表达式基本结构与控制语句构造类型函数 函数及指针 C 语言的编码基础 在C 语言的学习过程中 首先需要对C 的基本组成 基本符号 保留字和标识符有一定的了解 它们是阅读和编写程序的基础 基本组成基本符号保留字标识符 基本组成 一个C 程序通常由预处理命令 函数 语句 变量 输入输出及注释等几个部分组成 预处理命令函数 基本组成 语句变量输入和输出注释 预处理命令 在C 程序中 预处理命令以 开始 C 提供三种预处理命令 宏定义命令 文件包含命令及条件编译命令 函数 一个C 程序通常由若干个函数组成 这些函数可以是C 系统提供的库函数 也可以是用户根据需要编写的自定义函数 在这些函数中 必须有且仅有一个主函数main 不论主函数位于什么位置 该程序都是从主函数开始执行的 语句 语句是组成程序的基本单元 它包括顺序语句 选择语句 循环语句等 所有的语句以分号结束 最简单的语句是空语句 它仅包括一个分号 变量 在C 程序中 需要将数据存放于内存单元中 而变量就是用来存储和访问内存单元中数据的标识符 变量有整型 字符型 浮点型等基本数据类型 输入和输出 在C 程序中常有输入和输出语句 如前一章在上机练习时就要求用户通过键盘输入数据的输入语句 以及要求将计算结果显示在屏幕上的输出语句 注释 注释可以帮助读者阅读源程序 但并不参与程序的运行 基本符号 C 程序中的基本符号有以下3类 字母数字特殊字符 字母 大小写英文字母 A Z a z共52个符号 数字 数字字符 0 9共10个符号 特殊字符 空格 保留字 在C 程序中 保留字又称为关键字 是有特定含义的单词 对于保留字 在编程时不能用于其他用途 下面仅列出常用的保留字 其含义和用法在相关的章节中再加以介绍 C 常用的保留字 标识符 标识符是编程人员特别声明的单词 它命名程序正文中的一些实体 如变量 常量 函数和其他用户的自定义对象等 在C 语言中命名标识符的规则如下 必须以字母或下划线 开头 由字母 数字或下划线组成 而且标识符中间不允许有空格 标识符 不能使用C 语言中的保留字 如if for int等都不能用作标识符 标识符中字母区分大小写 如Abc和abc认为是不同的标识符 标识符的有效长度为32 也就是说前32个字符相同的两个不同标识符认为是同一个标识符 C 语言的数据类型 在不同的程序设计语言中 数据类型的规定和处理方法是各不相同的 C 语言的数据类型分为基本数据类型和自定义数据类型两种 基本数据类型自定义数据类型 基本数据类型 基本数据类型由系统定义和提供 常用的有int 整型 float 单精度浮点型 double 双精度浮点型 char 字符型 void 无值型 bool 逻辑型 等 在基本类型前面加上类型修饰符就形成了基本类型的派生类型 类型修饰符有signed 有符号的 unsigned 无符号的 short 短型的 long 长型的 4种 C 语言的基本数据类型 C 语言的基本数据类型 自定义数据类型 自定义数据类型是由用户根据需要构造的数据类型 包括数组 指针 结构 枚举及类等 以下介绍枚举类型 其他类型将在后面章节中陆续介绍 枚举是将变量的值一一列举出来 使变量的值限于列举的范围内 自定义数据类型 枚举说明语句的一般形式为 enum 每个枚举值均有一个固定的整数值 如果没有显式赋值 则第一个枚举值为0 后续枚举值依次递增1 如果显式赋值 则可以设置1个或多个特定值 其未赋值的后续枚举值依次递增1 常量与变量 C 程序中的数据可分为常量与变量两大类 常量是在程序运行过程中不变的量 变量是在程序运行过程中可发生变化的值 在编程时 常量和变量必须遵循 先声明 后使用 的原则 即所有常量和变量必须在使用前用说明语句进行说明 否则编译时将会产生错误 常量与变量 常量变量 常量 根据书写形式区分 常量可分为有名常量和字面常量 字面常量如 123 3 14 a 有名常量如 constfloatpi 3 1415926 Pi就是一个有名常量 在程序中用pi代替3 1415926 提高了程序的可读性和可维护性 常量 根据定义方法区分 常量可分为const常量和宏常量 const常量宏常量 const常量 用const定义的常量 即正规常量 其说明语句的一般形式为 const 其具体使用规则如下 必须以const开头 const常量 类型名为基本类型及其派生类型 可以省略 常量名为标识符 表达式应与常量类型一致 宏常量 用 define定义的常量 即宏常量 其说明语句的一般形式是 define其具体使用规则如下 宏名可以是简单的字符名 也可以是带有参数的函数名 常量可以是数值 字符串和函数等 变量 变量可以用来存储程序中需要处理的数据 在使用变量前 需要说明语句对变量进行说明 变量说明变量作用范围 变量说明 变量说明语句的一般形式是 其中各部分的功能及使用规则如下 1 存储类auto属于一次性存储 其存储空间可被若干变量多次覆盖使用 变量说明 register存放在通用寄存器中 extern在所有函数和程序段中都可引用 static在内存中是以固定地址存放的 在整个程序运行期间都有效 其中 的方括号表示可以缺省 作为auto变量 变量说明 2 类型名或类型定义在任何变量说明语句中 数据类型定义不可缺省 3 变量名表其格式为以下几种 变量说明 其中表达式就是变量的初始化值 变量作用范围 在C 语言中 变量说明语句主要分为全局变量和局部变量 它可以出现在程序的任何位置 在不同的位置声明 其作用域不同 全局变量 其说明语句不在任何一个类定义 函数定义或复合语句 程序块 中的变量 全局变量所占用的空间在内存的数据区 在程序运行的整个过程中位置保持不变 变量作用范围 局部变量 其说明语句在某一个类定义 函数定义或复合语句 程序块 中的变量 局部变量所占用的空间在为程序运行时所设置的临时工作区中 以堆栈的形式允许反复占用和释放 变量作用范围 例2 1 通过变量的位置认识全局变量和局部变量的作用域 光盘 第2章 例2 1 运算符和表达式 C 语言中运算符是表示实现某种运算的符号 表达式是运算符和操作数的组合 通过运算符和表达式可实现程序编制中所需的大量操作 下面将介绍C 的运算符的类型 优先级 结合规则及表达式等基本内容 算术运算符 运算符和表达式 赋值运算符关系运算符逻辑运算符条件运算符逗号运算符sizeof运算符位运算符 算术运算符 C 的算术运算符包含单目运算符和双目运算符 其中单目运算符有减 增量 减量运算符 双目运算符有加 减 乘 除和模运算符 C 的算术运算符 算术运算符 单目运算符双目运算符优先级和结合性 单目运算符 单目运算符有单目减 增量运算 减量运算三种 单目减 单目减相当于运算分量取负号运算 增量运算 增量运算有前缀增量和后缀增量两种形式 其中前缀增量的一般形式为 使用运算分量前其值加1 后缀增量的一般形式为 使用运算分量后其值加1 单目运算符 减量运算 减量运算除了将加法改为减法外 其他和增量运算完全相同 双目运算符 双目运算符与一般的数学运算符相同 优先级和结合性 优先级是指多种运算之间的先后关系 在算术运算符中 单目运算的优先级最高 其次是 乘 除 和 求余 最后是 加 减 优先级和结合性 运算符的结合性是指运算符和操作数的结合方式 它有 从左到右 和 从右到左 两种 对于优先级相同的运算符 按照它们的结合性进行处理 在算术运算符中 除单目运算符外 其余双目运算符的结合性都是从左到右的 赋值运算符 赋值运算符是C 程序设计中最基本的运算符之一 利用赋值运算符可以给一个变量赋值 其说明语句的一般形式为 赋值运算符 其中 各部分的作用如下 表达式的类型需与变量的类型一致 为赋值运算符 它不同于数学上的等号 赋值运算的运算规则是先计算右边表达式的值 然后将值赋给左边的变量 赋值运算符 在程序中经常出现类似于s s n这样的赋值语句 C 允许采用更为简洁的形式写为s n 于是形成了复合赋值运算符 C 的复合赋值运算符 赋值运算符 下面的例子可以说明上表中逐位与 逐位或及逐位异或的含义 在赋值运算符中 复合赋值运算符和赋值运算符的优先级是相同的 赋值运算符的优先级仅高于后面要讲到的逗号运算符 另外 赋值运算符的结合性是从右到左的 关系运算符 关系运算符是双目运算符 其作用是将两个运算分量进行大小比较 其运算结果类型为bool 若关系成立 则值为true 否则为false C 的关系运算符 关系运算符 上表中的前4种即 大于 大于等于 优先级相同 高于后面的两种 即 等于 和 不等于 关系运算符的优先级低于算术运算符 它的结合性是从左到右的 逻辑运算符 C 提供了3种逻辑运算符 单目运算符有逻辑非 双目运算符有逻辑与和逻辑或 其运算结果类型为bool 其值为true或false C 的逻辑运算符 逻辑运算符 上表中的 逻辑非 逻辑与 逻辑或 优先级依次从高到低 逻辑非 的优先级比算术运算符和关系运算符高 而 逻辑与 逻辑或 的优先级低于关系运算符 逻辑运算符的结合性是从左到右的 条件运算符 条件运算符是三目运算符 其说明语句的一般形式为 该表达式的使用规则如下 表达式1必须是bool类型 条件运算符 表达式的执行顺序是 先求解表达式1 若表达式1的值为true 则求解表达式2 表达式2的值为最终结果 若表达式1的值为false 则求解表达式3 表达式3的值为最终结果 条件运算符优先级高于赋值运算符 低于逻辑运算符 其结合性为从右到左 逗号运算符 逗号运算符可以使多个表达式写在一行上 从而大大简化了程序 其一般形式为 逗号运算符 该表达式的使用规则如下 表达式的执行顺序是 先求解表达式1 再求解表达式2 其最终结果为表达式2的值 逗号运算符是优先级最低的运算符 其结合性为从左到右的 sizeof运算符 字长提取符sizeof运算符实际上是系统提供的一个函数 其说明语句的一般形式为 sizeof 该表达式的使用规则如下 运算分量可以是类型名 也可以是表达式 结果值为 类型名 所指定的类型或 表达式 的结果类型所占的字节数 位运算符 C 提供了对数据进行位运算的功能 位运算符 其中 左移运算 指右移后 低位舍弃 高位无符号数补0 有符号数补符号位 位运算符的优先级低于算术运算符 高于逻辑运算符 逻辑与 逻辑或 位运算符的结合性除单目运算符按位取反是从右到左 其余双目位运算符都为从左到右 基本结构与控制语句 和传统的程序设计语言一样 C 也具有结构化程序设计的4种结构 顺序结构选择结构循环结构转向结构 顺序结构 顺序结构是指按照所有语句出现的顺序先后执行 表达式语句空语句复合语句基本输入和输出语句 表达式语句 表达式语句是最简单的语句 任何一个表达式加上分号就是一个表达式语句 其一般形式为 表达式 表达式语句与表达式的区别 表达式可包含在其他表达式中 而语句则不能 空语句 空语句就是只有一个分号的语句 相当于一个空表达式 其一般形式为 复合语句 复合语句是由两条以上的语句组成 并用一对大括号 括起来 它又称为块语句或块程序 其一般形式为 基本输入和输出语句 在前面的章节中 用到cin和cout分别实现从键盘输入和在显示器上输出的功能 绝大多数C 程序都使用了系统提供的I O流 以实现基本的输入和输出操作 在I O流类的定义中 把C 语言中的左 右移位运算符 通过运算符重载的方法定义为插入 输出 和提取 输入 运算符 基本输入和输出语句 cin和cout是预先定义的流对象 分别为标准输入流和标准输出流 一般代表标准输入设备 键盘 和标准输出设备 显示器 为了更好地调整输入输出格式 C 提供了格式控制函数和格式控制符 基本输入和输出语句 1 flagsflags函数一般有以下两种形式 longflags long1Flags longflags 第一种形式是通过参数1Flags重新设置标志字并返回原来的标志字 另一种形式是通过无参数的flags函数返回当前的标志字 基本输入和输出语句 2 setfsetf函数一般有以下两种形式 longsetf long1Flags longsetf long1Flags long1Mask 第一种形式是通过参数1Flags来设置指定的格式控制标志位 第二种形式是用来设置指定的格式控制标志位的值 基本输入和输出语句 3 unsetfunsetf函数的一般形式为 longunsetf long1Flags 这种形式是通过参数1Flags来清除指定的格式控制标志位 使那些位的值为 0 基本输入和输出语句 4 fillfill函数一般有以下两种形式 charfill charcFill charfill 第一种形式是将填充字符设置为cFill 并返回原填充字符 第二种形式是通过无参数的fill函数返回当前的填充字符 基本输入和输出语句 5 precisionprecision函数形式一般有以下两种 intprecision intnp intprecision 第一种形式是设置浮点数精度为np 并返回原精度 第二种形式是通过无参数的precision函数返回当前的浮点数精度 基本输入和输出语句 6 widthwidth函数的形式一般有以下两种 intwidth intnw intwidth 第一种形式设置当前显示数据的域宽nw 并返回原域宽 第二种形式是通过无参数的width函数返回当前显示数据的域宽 基本输入和输出语句 定义在iostream h文件中的无参I O控制符有 endl 输出时插入换行符并刷新流 ends 输出时在字符串后插入NULL作为结束符 flush 刷新流 将缓冲区中的当前信息立即输出到目标设备 基本输入和输出语句 ws 输入时略去前导的空白字符 空格 Tab键 换行 dec 令I O数据为十进制格式 默认进制 hex 令I O数据为十六进制格式 oct 令I O数据为八进制格式 基本输入和输出语句 例2 2 使用格式控制函数和格式控制符显示不同输出格式的数据 光盘 第2章 例2 2 选择结构 选择结构是用来判断所给定的语句是否满足条件 根据判断结果 选择执行不同的分支语句 常用的语句有 if语句 if else语句 多重if else语句和switch语句 选择结构 if语句if else语句多重if else语句switch语句 if语句 if语句为单分支条件语句 其说明语句的一般形式为 if 表达式可以是int型 long型 char型和enum型 其值有0和非0两种 0为false 非0为true 语句可以是任何类型的语句 也可以是块语句 该语句的作用是 如果表达式的值为true 则执行If后面的语句 否则跳过执行后面的语句 if语句 例2 3 已知两个变量x和y 比较它们的大小 当x小于y时 交换这两个变量的值 使x的值大于y 光盘 第2章 例2 3 if else语句 if else语句为双分支条件语句 其说明语句的一般形式为 if else 该语句的作用是 如果表达式的值为true 则执行语句1 否则执行语句2 if else语句 例2 4 输入学生的百分制成绩 判断该学生是否及格 光盘 第2章 例2 4 多重if else语句 多重if else语句为多分支条件语句 其说明语句的一般形式为 if elseif elseif else 多重if else语句 该语句为if语句的嵌套 在嵌套时 C 语言规定每个else只与其前面最近的未配对的if配对 也可以用 确定层次关系 例2 5 输入学生的百分制成绩 判断该学生的等级 光盘 第2章 例2 5a和例2 5b 其中例2 5a是程序代码 例2 5b是 或者程序也可以写成 的代码 多重if else语句 等级评定条件为 优score 90良80 score 90等级 中70 score 80及格60 score 70不及格score 60 判断学生成绩等级的运行结果 switch语句 switch语句也称情况语句 它是一种多分支语句 其说明语句的一般形式为 switch case break switch语句 case break case break default break switch语句 该语句的执行顺序是 首先计算switch表达式后的值 然后将其结果与case后面的各常量表达式进行比较 若匹配 则执行该分支后的语句 执行完后 遇到break语句 则退出switch语句 若其结果与case后面的各常量表达式都不匹配 则执行default后面的语句 switch语句 在使用switch语句时应注意以下几点 若case后面没有break语句 则程序顺序执行后续的语句 直到switch语句结束 这样就不能实现多分支选择 switch语句 switch语句只能对表达式的结果是否为固定的值进行判断 而不能对其结果是否在某区域进行判断 这与多重if else语句有所不同 每个常量表达式的值不能相同 case语句的排列顺序不影响执行结果 switch语句 例2 6 输入0 6的整数 转换成星期输出 光盘 第2章 例2 6 循环结构 循环结构是用来在指定的条件下多次重复执行同一组语句 常用的语句形式有for语句 while语句和do while语句 for语句while语句do while语句 for语句 for语句是最常见的 功能最强的循环语句 它既可用于循环次数确定的情况 也可用于循环次数不确定而只给出循环结束条件的情况 其说明语句的一般形式为 for for语句 其中 表达式1是对循环控制变量进行初始化 表达式2是循环条件 表达式3是对循环控制变量进行递增或递减 这3个表达式都可以缺省 但分号不能省略 for语句可以是单条语句 也可以是块语句 它是要被循环重复执行的程序段 故又称为循环体 for语句 例2 7 计算1 2 3 4 100的和 光盘 第2章 例2 7 while语句 while语句是最简单的循环语句 它实际上是for语句的表达式1和表达式3为空的特殊情形 其说明语句的一般形式为 while while语句 其中 表达式用来判定循环是否继续 当表达式条件成立时 执行循环体 while语句要求能够在循环体内含改变物质循环条件表达式的值 以使表达式条件不成立时退出循环体 while语句 例2 8 输入一个整数 将各位数字逆序输出 如从键盘输入123 则输出为321 光盘 第2章 例2 8 do while语句 do while语句是while语句的一种变化形式 其说明语句的一般形式为 dowhile do while语句与while语句的主要区别是 do while语句的循环体至少被执行一次 而while语句先判断条件 有可能一次也不执行 do while语句 例2 9 输入一个正整数 求出它的所有因子并输出 光盘 第2章 例2 9 转向语句 转向语句是用来实现无条件转移的语句 常用的语句有 break语句 continue语句 goto语句和return语句 break语句continue语句goto语句return语句 break语句 break语句又称跳出语句 用来结束循环结构 然后执行循环体后面的语句 其说明语句的一般形式为 break break语句也可以作为switch语句的出口 用于退出case语句 break语句 例2 10 输出100以内所有的素数 光盘 第2章 例2 10 continue语句 continue语句又称继续语句 可用来跳出本次循环而进入下一次循环 其说明语句的一般形式为 continue continue语句 continue语句与break语句的主要区别是 continue语句是根据条件判断只结束本次循环 不结束整个循环结构 而break语句不进行判断 而结束整个循环结构 然后执行循环体后面的语句 continue语句 例2 11 输出100以内所有能被5或者7整除的数 光盘 第2章 例2 11 goto语句 goto语句又称转向语句 用来将程序无条件跳转到指定的标号语句处 其说明语句的一般形式为 goto 其中标号是一个标识符 放在语句的最前面 其说明语句的一般形式为 goto语句 例2 12 通过键盘输入一个数 如果该数不是两位数 即小于10或大于99就用goto语句转到标号位置 要求重新输入 光盘 第2章 例2 12 return语句 return语句又称返回语句 可用来停止执行当前函数 转而执行调用该函数后面的语句 其说明语句的一般形式为 return 表达式可以是任何类型的变量 也可以是void型 需要注意的是所返回表达式的类型必须与函数的类型一致 return语句 例2 13 编写一函数返回两个数的最大值 光盘 第2章 例2 13 构造类型 在前面讲到C 语言还包括由用户构造的自定义数据类型 其中对枚举类型已经作了相应介绍 本节就对属于构造类型的数组 结构 联合及typedef等类型进行介绍 构造类型 数组结构联合typedef 数组 数组并不是一种数据类型 而是一组相同类型的变量的集合 在程序中使用数组的好处是可以用一个统一的数组名代表逻辑上相关的一组数据 并用下标表示各元素在数组中的位置 数组 数组的声明数组元素的引用数组的赋值字符数组 维数组的声明 一维数组的声明 其说明语句的一般形式为 多维数组的声明 其说明语句的一般形式为 维数组的声明 其中各部分的含义如下 类型名 可以是基本类型名 也可以是基本类型的派生类型名 类名 枚举类型名 结构 联合类型名 数组名 是标识符 表示数组元素在内存中的起始位置 是个常量 不能赋值 维数组的声明 下标表达式 是一个正整数 表示数组的大小 数组元素的排列次序和在数组中的位置 下标表达式要用方括号 括起来 方括号不可缺省 下标表达式可缺省 但必须对数组赋初值 系统会根据所赋的初值个数来确定数组的大小 初值表 是可缺省的 用大括号 括起来 并用逗号 分开每个初值 数组元素的引用 定义数组时用数组名表示该数组的整体 但C 语言没有提供对数组进行整体操作的运算符和运算 而针对每个数组元素进行操作时 数组元素是通过下标变量来区分的 数组元素引用的一般形式为 数组元素的引用 下标表达式的个数应与维数相同 注意下标表达式的值从0开始 并且不允许改变 所以数组的有效下标为从0到下标表达式的值 元素个数 减1 表示共有5个数组元素 分别为a 0 a 1 a 2 a 3 a 4 数组元素的引用 数组定义后 系统会根据数组的大小开辟相应的内存 并依次存放 其存放次序为 b 0 0 b 0 1 b 0 2 b 0 3 b 1 0 b 1 1 b 1 2 b 1 3 b 2 0 b 2 1 b 2 2 b 2 3 数组的赋值 给数组元素赋值时 可以使用初始化 赋值语句 输入语句3种方式 例2 14 矩阵的转置 光盘 第2章 例2 14 数组的赋值 例如a矩阵为 转置后的矩阵b为 数组的赋值 矩阵转置的方法是将a数组第i行第j列的元素赋值给b数组第j行第i列 字符数组 从表面上看 一个字符串是一个字符数组 但在C 语言中 它们是不完全相同的 字符串是一个以空字符 0 作为结束符的字符型数组 结构 结构是由若干个不同类型数据组合而成的一个整体 组成结构的各个分量称为结构体的数据成员 结构语句的一般形式为 struct 结构 定义了结构以后 就可以使用这个结构来声明变量 结构类型变量声明的一般形式是 struct 例2 15 使用结构类型记录学生的学号 姓名 性别 年龄 光盘 第2章 例2 15 结构体举例的运行结果 联合 在C 语言中 联合是一种特殊的结构 联合和结构的区别在于 联合在任一时刻只有一个成员处于活动状态 联合中的各成员共用同一内存空间 因此联合所占用的内存长度等于各个成员中最长的成员的长度 而结构所占用的长度等于各个成员的长度之和 联合 使用联合 能有效地降低程序所占用的内存空间 其说明语句的一般形式为 union 联合的使用方法和结构相同 例2 16 使用一个联合变量分别保存3个不同类型的数据 3个数据占用同一内存空间 光盘 第2章 例2 16 使用联合变量的运行结果 typedef 在C 语言中 可使用typedef将已有的类型名用新的类型名来代替 其说明语句的一般形式为 typedef 函数 在结构化程序设计中 通常把一个大的程序分成若干个模块 每一个模块完成一个或多个特定功能 每一个模块是相对独立的 却又具有通用性 可供本程序和其他程序调用 这种模块化的设计思想有利于多人协作共同开发程序 函数就是这种设计思想的产物 函数 在程序设计中 引入函数的目的有两个 一是有利于阅读 调试和维护程序 二是对于某些相同的功能 可通过函数的调用完成该功能的多次实现 大大缩短程序的长度 函数的定义与调用函数的参数传递 函数 函数中的局部变量与静态变量函数的嵌套和递归函数的重载系统函数 函数的定义与调用 C 有两种不同的函数 库函数和自定义函数 库函数是C 系统提供的标准函数 用户一般不必自己定义 需要时直接调用即可 在调用库函数时 一般在文件的开头通过 include宏命令引用库函数对应的原型声明头文件 自定义函数则是根据程序的需要由用户自行定义 一般使用符号来调用库函数 使用 符号来调用自定义函数 函数的定义与调用 函数的定义函数的调用 函数的定义 函数原型声明用来指出函数的名称 类型和参数 其说明语句的一般形式为 其中各部分的含义如下 属性说明 可以缺省 一般为以下几个关键词之一 inline 内联函数 static 静态函数 virtual 虚函数 friend 友元函数 等 函数的定义 函数类型 是指函数返回值的类型 函数名 是一个标识符 参数 也称形式参数 形参 要求形参在函数原型声明 定义和调用时数据类型 个数 顺序一致 各形参名可以不同 函数的定义 函数原型声明一般出现在程序中函数的调用之前 其目的是使编译器知道该函数的各种属性 包括返回值类型 形参的个数和类型等 以便于检查函数调用的合法性 函数的定义 函数定义包括函数原型声明以及函数体 它是由大括号 括起来的复合语句 也就是程序块 其说明语句的一般形式为 函数的调用 在函数原型声明中的参数称为形式参数 形参 而在函数调用中的参数称为实际参数 实参 实参是实际调用函数时所给定的常量 变量或表达式 它必须有具体的值 在主调程序和被调用的函数之间数据的传递是通过参数表来实现的 函数的调用 函数调用的一般形式为 通常C 程序都是从主函数main 开始执行 当执行到函数调用语句时 就会转去执行调用函数 执行后仍然返回到主函数 直至程序结束 函数的调用 例2 17 编写一个函数判断通过键盘输入的3个数是否可以构成三角形 并调用 光盘 第2章 例2 17 函数的参数传递 在函数调用时 主调程序和被调用的函数之间有数据传递 可以通过实参与形参的结合来实现 C 语言中函数的参数传递有两种方式 一种是按值传递 另一种是引用传递 函数的参数传递 按值传递引用传递地址传递数组参数的传递 按值传递 按值传递是指当一个函数被调用时 C 根据实参和形参的对应关系将实参的值一一复制给形参 即实参的值单向传递给形参 函数本身不对实参进行任何操作 即使形参的值在函数中改变 实参的值也不会受到影响 为使程序可靠和便于调试 在程序中一般不改变实参的值 这时可采用按值传递的方式 按值传递 例2 18 采用按值传递的方式将实参的值传递给形参 光盘 第2章 例2 18 引用传递 引用传递是指在函数定义时在形参前加上引用运算符 在函数被调用时 参数传递的内容不是实参的值 而是实参的地址 即将实参的地址放到C 为形参分配的内存空间中 因此形参的任何操作都会改变相应实参的值 引用传递 由于传递的是地址 在调用函数时不创建新的参数变量 开辟新的内存空间 因此在程序中对于占有内存较多的数据参数 为了节省内存 可采用引用传递的方式 例2 19 采用引用传递的方式将实参的地址传递给形参 使实参和形参对应 光盘 第2章 例2 19 引用传递举例的运行结果 地址传递 引用传递还可以借助于指针 指针的概念将在2 8节中介绍 即在函数定义时 将形参说明成指针 而调用函数时就需要指定地址值形式的实参 这种参数传递方式也称地址传递 地址传递 例2 20 采用地址传递的方式 将形参说明成指针 并指定地址值形式的实参 实现实参和形参的对应 光盘 第2章 例2 20 数组参数的传递 在C 语言中 数组也可作为函数的参数进行传递 由于一般数组占用的空间较大 为了节省内存及数据传输时间 规定对于数组参数在调用时传递的是数组的地址 这种数据的传递也是双向 数组参数的传递 例2 21 有一个数组 随机产生10个整数 编写求最大值 最小值和平均值的函数 并调用 光盘 第2章 例2 21 数组参数的传递 本程序为了产生伪随机数 通过以下两个函数来实现 rand函数原型 intrand void 所需头文件 功能和返回值 求出并返回一个伪随机数 数组参数的传递 srand函数原型 voidsrand unsignedintseed 参数 seed产生随机数的种子 所需头文件 功能 为使rand 产生一序列伪随机整数而设置起始点 使用1作为seed参数 可以重新初始化rand 函数中的局部变量与静态变量 在函数内部声明的变量称为局部变量 它只在本模块中有效 不会受到其他模块的影响 同时也保护程序不会对外部变量产生不必要的影响 增加了程序的独立性和通用性 如果为其增加static关键字则变为静态变量 能够固定存放 下面分别举例说明 函数中的局部变量与静态变量 局部变量静态变量 局部变量 局部变量只能在本模块中使用 别的模块不能访问 局部模块随函数的调用而分配存储空间 并进行变量的初始化 在此模块内进行数据的存取 一旦退出该模块 变量的内容就会自动消失 所占用的内存空间被释放 所以在不同的模块中可以有同名的局部变量 彼此互不影响 局部变量 例2 22 运用局部变量编写求1 2 3 4 100的和 要求在两个函数中分别使用同名变量 光盘 第2章 例2 22 静态变量 在数据类型前增加static关键字可以将变量声明为静态变量 由于静态变量在程序运行过程中可以保留变量的值 因此静态变量通常要进行初始化 但其只能执行一次 静态变量 例2 23 运用静态变量多次调用累加函数 光盘 第2章 例2 23 函数的嵌套和递归 在C 中允许在调用函数过程中出现嵌套和递归调用 函数的嵌套函数的递归 函数的嵌套 一个函数的函数体中包含一个或多个函数调用语句 即称为函数的嵌套 嵌套是指如果函数A要调用函数B 也就是说函数A的定义要依赖于函数B的定义 因此函数B的定义或函数B原型的声明必须出现在函数A的定义语句之前 另一方面 函数A调用函数B 在执行函数A的过程中调用函数B 也就是说中途程序转向执行函数B 在执行完函数B后再返回执行函数A 函数的嵌套 例2 24 运用函数的嵌套实现求两个数的平方和 光盘 第2章 例2 24 函数调用的执行过程 以上面的程序为例 其程序的执行过程 函数的递归 在C 中允许函数在内部调用自己 这样的函数称为递归函数 在调用函数的过程中出现直接或间接地调用函数本身则称为递归调用 函数的递归 例2 25 用递归函数计算n的阶乘n 光盘 第2章 例2 25 根据求n 的定义n n n 1 n 2 2 1 或n n n 1 也可以写成如下形式 运用递归函数求阶乘的运行结果 函数的递归 由此可知 构成递归的条件有以下两点 递归调用是无终止的自身调用 如果要求递归过程不是无限制进行下去 必须具有一个结束递归过程的条件及结束的值 能用递归的形式表示 并且递归向终止条件发展 函数的重载 函数的重载是C 语言的重要特性之一 它实际上是函数名的重载 即允许功能相近的函数在相同的作用域内以相同函数名声明 函数名的重载并不是为了节省标识符 而是为了方便使用 便于记忆 函数的重载 实现函数的重载至少应满足以下其中一个条件 函数的参数个数不同 函数的参数类型不同 函数中不同类型的参数次序不同 函数的重载 例2 26 用函数的重载进行求和 光盘 第2章 例2 26 函数的重载 函数的重载中 形参名不同则不能区分函数 下面举例说明 例2 27 用函数的重载 不以形参名区分函数出现的错误 光盘 第2章 例2 27 由于编译器不以形参名来区分函数 所以出现错误 不以形参名区分函数时出现的错误 函数的重载 函数的重载中 返回类型不同则不能区分函数 下面举例说明 例2 28 用函数的重载 不以返回值类型区分函数出现的错误 光盘 第2章 例2 28 由于编译器不以返回值来区分函数 所以出现错误信息 不以返回值类型区分函数出现的错误 函数的重载 在编写程序时不能将不同功能的函数声明为重载函数 以免出现调用混淆 下面举例说明 例2 29 将不同功能的函数声明为重载函数出现的错误 光盘 第2章 例2 29 系统函数 C 语言不仅允许编程人员根据需要自定义函数 而且C 的系统库中提供了几百个系统函数可供使用 如求平方根函数 sprt 求绝对值函数 abs 返回一个伪随机数等 使用这些系统函数时要包含相应的头文件 系统函数 例2 30 利用系统函数求一个角度值的正弦值 余弦值和正切值 光盘 第2章 例2 30 指针 指针是C 语言中的一个重要概念 由于使用指针可使程序简洁 紧凑和高效 所以对于每一个使用C 语言的人 都应该掌握指针的使用 指针的概念指针的定义与引用指针与动态内存分配 指针的概念 如果在程序中定义了一个变量 在编译时就会给这个变量分配内存单元 系统根据程序中定义的变量类型 分配一定长度的内存空间 每个内存单元中存放着变量的值 指针的定义与引用 指针变量是存放内存地址的变量 C 要求使用指针前必须进行说明 说明指针变量的一般形式为 指针的定义与引

温馨提示

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

评论

0/150

提交评论