《c程序设计基础》PPT课件.ppt

上传人:sh****n 文档编号:7427315 上传时间:2020-03-21 格式:PPT 页数:52 大小:230KB
返回 下载 相关 举报
《c程序设计基础》PPT课件.ppt_第1页
第1页 / 共52页
《c程序设计基础》PPT课件.ppt_第2页
第2页 / 共52页
《c程序设计基础》PPT课件.ppt_第3页
第3页 / 共52页
点击查看更多>>
资源描述
第2章c 程序设计基础 2 1基本结构与控制语句 1 程序设计的三种基本结构分别为 顺序结构 选择结构 循环结构 这三种基本结构是程序设计的基础 2 if语句 1 简单if语句的语法格式为 if 条件表达式 语句序列1 else 语句序列2 含义 如果条件表达式为真 则执行语句序列1 否则执行语句序列2 2 if语句的嵌套if语句内还可以使用if语句 这样就构成了if语句的嵌套 注意 如果没有大括号对 else与最近的第一个没有配对的且为可见的if配对 例如 if a 0 p 0 如果a等于0时 p的值为0if a 0 如果a小于0时 p的值为 1p 1 elsep 1 由于else和if配对 因此当a大于或等于0时 p的值为1 3 条件运算符与条件表达式语法格式为 条件表达式 表达式1 表达式2 例如 cout A ch ch Z a ch A ch结果是输出一个小写字母 4 switch语句switch 表达式 case常量表达式1 语句组1 case常量表达式2 语句组2 case常量表达式n 语句组n default 语句组n 1 说明 switch后面的表达式一般只能是整型 字符型或枚举类型 case后面的常量必须与常量表达式类型匹配 当表达式的值与某一个case后面的常量表达式相等时 就执行此case后面的语句 若没有匹配的常量表达式 就执行default后面的语句 每一个常量表达式的值都是惟一的 即常量表达式不能重复出现 case后面的语句结束时 会执行下一个case后面的语句 即多个case可以共用一组执行语句 因此 若要跳到switch语句外面 必须借助break语句 5 While语句while语句是一个循环控制语句 用来控制程序段的重复执行 while语句的语法格式为 while 条件表达式 循环体 while语句的四个要素 循环变量初始化 继续条件 循环体 改变循环变量的表达式 5 do while语句do while语句也是一个循环控制语句 do while语句的语法格式为 do循环体 while 条件表达式 说明 循环体至少执行一次 当循环体有多个语句时必须加花括号 6 for语句for语句的语法格式为 for 表达式1 表达式2 表达式3 循环体 执行过程如下 先求解表达式1 表达式1只执行一次 一般是赋值语句 用于初始化变量 求解表达式2 若为假 0 则结束循环 执行循环体 执行表达式3 转回 7 转向控制语句转向语句有三个 分别是 break continue和goto语句 1 break语句break语句可以用在循环语句和switch语句中 在循环语句中用来结束内部循环 在switch语句中用来跳出switch语句 例2 9 break用在循环语句中 includevoidmain inti 1 sum 0 while i20 break cout i 2 continue语句continue语句的作用是结束本次循环 忽略continue后面的语句 进行下一次循环判定 例2 10 编程从键盘上输入10个数 计算所有正数之和 includevoidmain intnum sum 0 cout num if num 0 continue sum num cout sum sum endl 3 goto语句 2 2函数 函数也称子程序 例程或过程 它是把一些相关的语句组织在一起 用于解决某一特定问题的语句块 函数分为系统函数和自定义函数两种 系统函数是C 标准函数库中提供的可以在任何程序中使用的公共函数 使用系统函数必须指定函数所在的包含文件 1 函数的定义定义函数的语法格式为 类型函数名 形式参数表 函数体 说明 类型是指函数的返回值类型 如果函数没有返回值 只是一个过程调用 则函数类型为void 函数的返回值只能有一个 使用return语句 如returnm或return m 无返回值的函数不必写return语句 形参表是指函数调用时需要传递的参数 通常将函数所处理的数据 影响函数功能的因素或者函数处理的结果作为形参 函数在没有被调用的时候是静止的 函数在被调用时才执行 也是在被调用时才由主调函数将实际参数 简称实参 赋予形参 2 函数的调用 1 函数调用的一般形式函数名 实际参数表 实参表中的参数可以是常数 变量或其它构造类型数据及表达式等 如果实参表中包含多个实参 则各个实参间用逗号隔开 实参和形参的个数应相等 类型应一致 调用函数时 将按照对应关系将实参传递给形参 3 函数的声明和函数定义函数声明是指在主调函数中调用某函数之前应对该被调函数进行说明 函数声明放在源程序的开头 函数声明的格式对被调函数声明的语法格式为 类型标识符被调函数名 类型 类型 或为 类型标识符被调函数名 类型形参 类型形参 注意 对函数的 定义 和 声明 是不同的 定义 是指对函数功能的确立 包括指定函数名 函数值类型 形参及其类型 函数体等 它是一个完整的 独立的函数单位 而 声明 的作用则是把函数的名字 函数类型以及形参的类型 个数和顺序通知编译系统 以便在调用函数时系统按此进行对照检查 2 3数组 2 3 1一维数组 1 一维数组的定义定义一维数组的语法格式为 类型标识符数组名 常量表达式 例如 inta 10 定义一个数组 数组名为a 有10个元素 每个元素的类型均为int 这10个元素分别是 a 0 a 1 a 2 a 3 a 4 a 8 a 9 注意 下标从0开始 不能使用数组元素a 10 Matlab中下标从1开始 数组名表示数组第一个单元a 0 的地址 也就是数组的首地址 2 3数组 2 3 2二维数组 1 定义二维数组定义二维数组的语法格式为 类型标识符数组名 常量表达式 常量表达式 例如 inta 3 4 定义了一个整型二维数组a 共有3 4 12个元素 可以称为3行4列的数组 说明 二维数组中每一个元素必须有两个下标 可以将二维数组元素排列成一个矩阵 用二维数组的第1个下标表示数组元素所在的行 第2个下标表示所在的列 C 语言中 二维数组中元素排列的顺序是 按行存放 即在内存中先顺序存放第一行的元素 再存放第二行的元素 例如数组a 3 4 的存放顺序是 a 0 0 a 0 1 a 0 2 a 0 3 a 1 0 a 1 1 a 1 2 a 1 3 a 2 0 a 2 1 a 2 2 a 2 3 二维数组可看成一个一维数组 其中的每一个元素又是一个一维数组 例如数组a 3 4 可以看成是一个一维数组 它有3个元素 a 0 a 1 a 2 每一个元素又是一个包括4个元素的一维数组 如元素a 0 有4个元素a 0 0 a 0 1 a 0 2 a 0 3 即 a 0 a 0 0 a 0 1 a 0 2 a 0 3 a 1 a 1 0 a 1 1 a 1 2 a 1 3 a 2 a 2 0 a 2 1 a 2 2 a 2 3 数组名a表示数组第一个单元a 0 0 的地址 也就是数组的首地址 a 0 也表示地址 表示第0行的首地址 即a 0 0 的地址 a 1 表示第1行的首地址 即a 1 0 的地址 a 2 表示第2行的首地址 即a 2 0 的地址 因此可以得到下面的关系 a a 0 2 二维数组的引用C 语言规定 不能引用整个数组 只能逐个引用元素 元素引用方式为 数组名 下标 下标 下标可以是整型常量或整型表达式 二维数组的引用和一维数组的引用类似 要注意下标不要超过范围 2 3数组 2 3 3字符数组 字符数组是指数组的元素类型是字符型 字符数组中的一个元素存放一个字符 1 字符数组的定义定义字符数组的语法格式为 char数组名 常量表达式 例如 charch 12 2 字符数组的引用可以引用字符数组中的一个元素 得到一个字符 3 字符数组的初始化对字符数组初始化时有下面两种情况 可以对数组元素逐个元素初始化 例如 staticcharc 10 I a m h a p p y 注意 初值个数可以少于数组长度 多余元素自动为 0 0 是二进制0 指定初值时 若未指定数组长度 则长度等于初值个数 用字符串常量对数组初始化例如 charc Iamhappy 注意 字符串在存储时 系统自动在其后加上结束标志 0 占一字节 其值为二进制0 但字符数组并不要求其最后一个元素是 0 注意 字符数组可以在变量定义时整体赋初值 但不能在赋值语句中整体赋值 补充 4 字符数组的输入输出有两种方法 1 逐个字符输入输出 2 将整个字符串一次输入或输出 例如 staticcharstr1 5 str2 5 str3 5 cin str1 str2 str3 运行时输入数据 Howareyou 再如 staticcharc China cout c 2 4指针 2 4 1指针变量 指针也是一种数据类型 具有指针类型的变量称为指针变量 但该变量中存放的不是普通的数据 而是地址 即指针变量是用于存放内存单元地址的 如果一个指针变量中存放的是某一个变量的地址 那么指针变量就指向那个变量 1 定义一个指针变量 1 指针变量的定义定义指针变量的语法格式是 数据类型 指针变量名 例如 int ptr 说明 表示这里声明的是一个指针类型的变量 指针变量名是ptr 数据类型指的是指针所指向的对象 包括变量和类的对象 的类型 这说明了指针所指的内存单元可以用于存放什么类型的数据 我们称之为指针的类型 在定义指针变量时必须指定类型 这是因为类型的指定与指针的移动和指针的运算 加 减 相关 例如 使指针移动1个位置 或 使指针值加1 这个 1 代表什么呢 如果指针是指向一个整型变量的 那么 使指针移动1个位置 意味着移动2个字节 使指针值加1 意味着使地址值加2个字节 如果指针是指向一个实型变量的 则增加的不是2而是4 2 指针变量的赋值 在声明指针的同时进行初始化赋值 语法形式为 数据类型 指针名 初始地址 在声明之后 单独使用赋值语句 语法形式为 指针名 地址 例如 floata 3 0 float ptr1 2 关于指针的运算符在C中有两个关于指针的运算符 取地址运算符 指针运算符 1 取地址运算符 用来得到一个对象的地址 可以加在变量和数组元素的前面 其意义是取出变量或数组元素的地址 指针变量也是变量 取地址运算符也可以加在指针变量的前面 其含义是取出指针变量的地址 通过例2 13来说明 例2 13 用取地址运算符 输出指针变量pa的地址 程序运行结果是 addressofa FFD0pa FFD0addressofpa FFD2 2 指针运算符 可以加在指针或指针变量的前面 其意义是指针变量所指向的内存单元 注意 和 声明一个int型的引用rf 3 指针变量的引用指针变量 提供了一种对变量的间接访问形式 对指针变量的引用格式为 指针变量 例2 14 定义指针变量 使用指针运算符 进行指针变量的引用 注意字符指针的使用 include iostream h voidmain inta pa 定义整型变量a和指针变量papa 输出pa所指向的内存单元的数据 补充 字符指针变量 1 定义与赋值 如 char str Ilovechina 这里没有定义字符数组 但c语言对字符串常量是按字符数组处理的 实际上在内存开辟了一个字符数组用来存放字符串常量 此语句定义了一个字符指针变量str 并把字符串首地址 即存放字符串的字符数组的首地址 赋给它 即字符指针变量中存放的是地址 字符串的首地址 不是将字符串放到字符指针变量中 上述语句等价于 char str str Ilovechina 注意不是 str 2 输出 cout str endl 注意不是 str说明 系统先输出它所指向的一个字符数据 然后str加1 使之指向下一个字符 然后再输出一个字符 如此直到遇到字符串结束标志 0 为止 2 5引用 引用就是为某个变量或隐含的临时变量起个别名 对别名的操作等同于对目标变量的操作 引用的声明声明一个引用时需要在其名称前加符号 其中的变量就是目标对象的引用 引用的类型为 类型 例如 inti 5 j 10 int rp是 p的引用 类型为int 说明 引用是一种特殊类型的变量 它是某个对象的别名 其本身不占存储空间 定义引用时必须指出目标对象 目标对象必须是单个对象且已定义或已声明 引用的特点为 引用声明后 对引用的操作等同于对目标对象的操作 引用一旦初始化 它就维系在一个固定的目标上 再也不分开 2 用引用传递函数参数引用的最大用处是将其作为函数参数 用引用传递与按地址传递在功能上很相像 可以在被调函数中通过改变形参来改变主调函数中的实参 但引用传递比按地址传递更简洁直观 好理解 采用引用传递方式 只需在函数定义时使用引用做为形参 而在函数调用时直接使用一般变量作为实参 例2 15 用引用传递函数参数 include iostream h voidswap int 程序运行结果是 12345543215432112345由于引用是 别名 实参与形参之间不是值传递 而是一种 映射 所以对形参的改变 实际上就是对实参的改变 用引用返回值 例2 16用引用返回值 includefloattemp floatfn1 floatr temp r r 3 14 returntemp float voidmain floata fn1 5 0 float 例2 16将temp设为局部变量 include floattemp floatfn1 floatr floattemp temp r r 3 14 returntemp float voidmain floata fn1 5 0 float C 编译器会在返回局部变量的引用代码时发出警告 原因是 一旦函数返回 局部变量temp占用的内存块就会从栈内释放 而返回的类型是 引用 那么引用的对象的内存已经释放 相应内存地址存放的内容不能再保证是变量temp了 如果这时候其他设备或者任务中断使用了栈内存 那就会产生不可估计的错误 C的虚实结合 单向的值传递函数定义函数调用swap inta intb inta 3 b 4 intt swap a b a为3 b为4t a a b b t 问题 如何简单地表示返回多个值 C支持的策略 全局变量inta 3 b 4 swap swap a为4 b为3intt swap a为3 b为4t a a b b t 将形参定义为指针类型swap int pa int pb intt t pa pa pb pb t 将返回值定义为指针类型 C 的另一种处理 引用参数类型说明符 a1为4 b1为3 2 6编译预处理 编译预处理是指在对源程序进行通常的编译之前 先对这些命令进行预处理 然后将预处理的结果和源程序一起再进行通常的编译处理 C 提供的编译预处理命令有 宏命令 文件包含命令 条件编译命令等 这些命令均以 开头 以区别于语句 2 6 1宏定义 在 语言源程序中允许用一个标识符来表示一个字符串 称为 宏 被定义为 宏 的标识符称为 宏名 在编译预处理时 对程序中所有出现的 宏名 都用宏定义中的字符串去代换 这称为 宏代换 或 宏展开 在 中 宏 分为有参数和无参数两种 1 不带参数的宏无参宏的宏名后不带参数 其定义的一般形式为 define标识符字符串 标识符 为所定义的宏名 字符串 可以是常数 表达式 格式串等 例如 defineFX x x 2 x 1 2 带参数的宏带参宏定义的一般形式为 define宏名 形参表 字符串带参宏调用的一般形式为 宏名 实参表 例如 defineMAX a b a b a b 宏定义m MAX 3 4 宏调用 2 6 2文件包含 文件包含命令行的一般形式为 include按标准方式搜索 即在C 系统目录的include子目录下搜索 或是 include 文件名 首先在当前目录下搜索 然后按标准方式搜索 例如 file1 c include file2 h main file2 h 文件包含命令的功能是把指定的文件和当前的源程序文件连成一个源文件 2 6 3条件编译 有时我们在写程序时要求根据具体情况编译不同的程序代码 C 语言中提供了条件编译 可以按不同的条件去编译不同的程序部分 因而产生不同的目标代码文件 这对于程序的移植和调试是很有用的 条件编译有三种形式 下面分别介绍 1 第一种形式 ifdef标识符程序段1 else程序段2 endif如果标识符已被 define命令定义过 则对程序段1进行编译 否则对程序段2进行编译 2 第二种形式 ifndef标识符程序段1 else程序段2 endif如果标识符未被 define命令定义过 则对程序段1进行编译 否则对程序段2进行编译 3 第三种形式 if常量表达式程序段1 else程序段2 endif如常量表达式的值为真 非0 则对程序段1进行编译 否则对程序段2进行编译 因此可以使程序在不同条件下 完成不同的功能 例2 17 条件编译 if的使用 include defineR1voidmain doublec r s cout c ifRr 3 14159 c c 如果R为非0的数据 则编译此行和下一行代码cout areaofroundis r elses c c 如果R为0的数据 则编译此行和下一行代码cout areaofsquareis s endif 2 7作业 书面作业 P4515编写程序 调用传递引用的参数 实现两个字符串的交换 例如开始 char pa hello char pb howareyou 交换的结果使得pa和pb指向的内容互换 2 编写一个程序 要求使用带参数的宏定义计算圆的面积 上机 上机调试作业及本章例题
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!