第2章 C程序的设计.ppt_第1页
第2章 C程序的设计.ppt_第2页
第2章 C程序的设计.ppt_第3页
第2章 C程序的设计.ppt_第4页
第2章 C程序的设计.ppt_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

第二章C程序的设计 一 程序是什么 人机能够对话 是因为计算机可以执行程序 人机进行对话所使用的语言 就是程序设计语言 在计算机中 可以连续执行的一条条指令的集合就是程序 二 程序设计 用程序设计语言来描述问题的求解过程 以及对其中参与运算的数据进行合理的组织和安排 就叫做程序设计 基本步骤 分析问题 确定算法 编写程序 运行调试 程序设计的三种基本结构 顺序结构 自顶向下 无分支 无转移选择结构 有分支 需条件判断循环结构 有转移 某些语句可重复执行当型循环直到型循环 三 C程序介绍 C语言是一种结构化语言 所谓结构化语言就是不允许交叉程序的存在 结构化语言的基本元素是模块 在C语言中也称为函数 它是程序的一部分 只有一个出口和一个入口 不允许中途插入 也不允许以模块的其它路径退出 四 C语言程序的基本结构 C语言程序的基本结构可以分成三部分 即 主程序 主函数 函数和头文件 1 主程序C语言的主程序是C语言开始执行的程序 是不可缺少的部分 它是用main为函数命名的 例2 1 如图2 1所示的电路 试写出一段程序 运行后 使P1口上连接的8个LED发光二极管全亮 程序如下 main chara a 0 P1 a 程序分析 在主程序中 首先定义一个字符型变量chara 再给变量a赋值为0 最后从P1口输出变量a的值0 P1口为低电平 LED上有电流通过 所以8个LED发光二极管都亮 main 函数头部main 表示 主函数 每一个c程序都必须有main函数函数体由 括起来 函数体开始标志 chara a 0 C语句 每个语句最后要有一个分号 P1 a 函数体结束标志 2 函数函数也称子程序 一个程序只有一个主程序 而函数可以有多个 例2 2 下面函数可以用来判断从主程序传递来的参数是否大于0 程序如下 charloge chari if i 0 return1 elsereturn0 程序分析 在括号中的chari 说明调用函数时需要传送一个参数 数据类型为字符型的 程序最前面的char说明函数结束时 要返回一个参数 数据类型也是字符型的 3 头文件头文件是以x h文件名存储的 主要是用来定义各硬件的I O地址 常数 也可以是函数的声明 主程序使用include指令将它加载 对于单片机的编程来说 头文件的定义是非常重要的 例2 3 下面的程序是根据P0口的工作状态决定P1口输出高电平还是低电平 程序如下 include includemain if P0 0 P1 0 x00 elseP1 0 xff 程序分析 include是函数库的函数 stdio h就是指 standardinput语句就会出错 include是用户自定义的函数 可以根据用户的需要把一常用程序段存入函数庠 以便能够随时调用 从main函数开始进入了主程序 在主程序中 用到了输入 输出语句 if P0 0 是一个输入语句 一方面把P0口中的数据输入CPU 另一方而判断P0是否大于0 如果P0 0 则P1口输出低电平 否则P1口输出高电平 五 顺序结构 顺序结构是一种简单的编程结构 在这种结构中 程序由低地址向高地址顺序执行指令 如图所示 程序先执行语句1操作 再执行语句2操作 两者是顺序执行的关系 例2 4 编写一个程序 将两个变量的数据相 与 后 通过P1口输出 程序编写 main chara b c a 240 b 15c a 程序分析 程序中定义了三个变量 a b和c 再a赋值为240 是二进制的11110000B 给b赋值为15 是二进制的00001111B 执行语句c a两数相 与 后 c 00000000B 通过P1口输出P1 0 x00 六 选择结构计算机的基本特性之一是具有重复执行一系列指令的能力 而计算机的另一个基本特性是具有选择能力 可以想象 如果计算机不具备这种选择能力 它在执行各种条件语句时 就不能按照人们的意志 完成人们交给计算机的任务 如图是选择结构流程图 例2 5 如图2 4所示的电路 试写出一段程序 如果开关k闭合 P1口上的8个LED发光二极管全亮 如果开关k断开 P1口上的8个LED发光二极管全灭 程序编写 main chara while 1 a P3 a a 1 选择语句ifC语言的一个基本判定语句 条件选择语句 是if语句 它的基本结构是 if 表达式 语句 在这种结构中 如果括号中的表达式成立 为真 则程序执行花括号中的语句 否则程序将跳过花括号中的语句部分 执行下面其他语句 C语言提供了三种形式的if语句形式一 if 表达式 语句 例 if P3 0 P1 0 x20 形式二 if 表达式 语句1 else 语句2 例 if P3 0 P1 0 xff elseP1 0 x00 形式三 if 表达式l 语句1 elseif 表达式2 语句2 elseif 表达式3 语句3 elseif 表达式m 语句n else 语句m 例2 6 如图所示的电路 下面的程序是根据P1口的工作状态决定P3口输出的数据 程序编写 main if P1 0 P3 0 x00 elseif P1 0 x01 P3 0 x01 elseif P1 0 x02 P3 0 x02 elseif P1 0 x04 P3 0 x04 elseP3 0 x00 例2 7 下面的程序是比较a b和d三个变量的大小 确定变量c的值 程序编写 main chara 10 b 1 c d 2 if a b if a d c 1 elsec 0 书P11 一 选择题 一个c程序的执行是从 A 本程序的main函数开始到main函数结束B 本程序的第一个函数开始到本程序的最后一个函数结束C 本程序的main函数开始到本程序的最后一个函数结束D 本程序的第一个函数开始到main函数结束 以下叙述正确的是 A 在c程序中 main函数必须位于程序的最前头B C程序的每行中只能写一条语句C C语言本身没有输入输出语句D 在对一个c程序进行编译的过程中 可发现注释中的拼写错误 3 以下叙述不正确的是 A 一个c源程序可由一个或者多个函数组成B 一个c源程序必须包含一个main函数C C程序的基本组成单位是函数D 在c程序中 注释说明只能位于一条语句的后面4 c语言规定 在一个源程序中 main函数的位置 A 必须在最开始B 必须在系统调用的库函数的后面C 可以任意D 必须在最后 5 一个c语言程序是由 A 一个主程序和若干子程序组成B 函数组成C 若干过程组成D 若干子程序组成二 填空题1 C源程序的基本单位是 2 一个c程序中至少包含一个 3 在一个c源程序中 注释部分两侧的分界符分别为 和 2 串行多分支结构及其流程图在串行多分支结构中 以单选择结构中的某一分支方向作为串行多分支方向继续进行选择结构的操作 一般来说 以条件为真作为串行方向 若条件为假 则执行另外的操作 最终程序在若干种选择之中选出一种操作来执行 并从一个共用的出口退出 串行多分支结构流程图 例2 9 如图所示的电路 当开关k0闭合时 发光二极管LED0亮 开关k1闭合时 发光二极管LED1亮 以此类推 开关k7闭合时 发光二极管LED7亮 其它情况下 8个发光二极管全灭 任一时刻只能有一个发光二极管亮 即用8个开关控制8个发光二极管 main while 1 if P1 0 x01 P3 0 x01 elseif P1 0 x02 P3 0 x02 elseif P1 0 x04 P3 0 x04 elseif P1 0 x08 P3 0 x08 elseif P1 0 x10 P3 0 x10 elseif P1 0 x20 P3 0 x20 elseif P1 0 x40 P3 0 x40 elseif P1 0 x80 P3 0 x80 elseP3 0 x00 2 2 3并行多分支结构及其流程图 在实际应用中 常常会遇到多分支选择问题 例如以一个变量的值作为判断条件 将此变量的值域分成几段 每一段对应着一种选择或操作 这样当变量的值处在某一个段中时 程序就会在它所面临的几种选择中选择相应的操作 这显然是一个典型的并行多分支选择问题 虽然可以用前面已掌握的if语句来解决这个问题 但由于一个if语句只有两个分支可供选择 因此必须用嵌套的if语句结构来处理 如果分支较多 则嵌套的if语句层数多 程序冗长 从而导致可读性降低 为此 C语言提供了一个switch语句 用于直接处理并行多分支选择问题 switch语句的一般形式如下 switch 表达式 case常量表达式1 语句l break case常量表达式2 语句2 break case常量表达式n 语句n breakdefault 语句n l 1 当switch括号中表达式的值与某一case后面常量表达式的值相等时 就执行该case后面的语句 然后因遇到break而退出switch语句 当所有的case中的常量表达式的值都没有与表达式的值相匹配时 就执行default后面的语句 2 每一个case的常量表达式必须是互不相同的 否则将出现混乱局面 3 各个case和default出现的次序 不影响程序执行的结果 例如可以先出现 case常量表达式n 再出现 default 然后才是 case常量表达式1 4 如果在case语句后忘记加break语句 则程序在执行了本行case选择之后 不会按规定退出switch语句 而是将执行后续的case语句 例2 10 下面的程序是根据P0口的工作状态确定P1口输出 main chark k P0 switch k case1 P1 0 x01 break case2 P1 0 x02 break case3 P1 0 x03 break delfault break 例2 11 如图所示的电路 当开关k0闭合时 发光二极管LED0亮 开关k1闭合时 发光二极管LED1亮 以此类推 开关k7闭合时 发光二极管LED7亮 其它情况下 8个发光二极管全灭 任一时刻只能有一个发光二极管亮 要求用switch case语句完成同样的操作 main 128 127unsignedchark 0 255while 1 k P1 case0 xef P3 0 x10 break case0 xdf P3 0 x20 break case0 xbf P3 0 x40 break case0 x7f P3 0 x80 break default P0 0 break 2 3循环结构及其流程图 所有的分支结构都使程序流程一直向前执行 而使用循环结构则可使分支流程重复地进行 循环结构又分成 当 while 型循环结构和 直到 dowhile 型循环结构两种 当 while 型循环结构及其流程图 如图所示 在 while 型循环结构中 当判断条件P成立 为真 时 反复执行操作A 直到P条件不成立 为假 时 才停止循环 while 型循环结构流程图 while循环结构的特点 while循环结构的最大特点在于 其循环条件测试处于循环体的开头 要想执行重复操作 首先必须进行循环条件测试 若条件不成立 则循环体内的重复操作一次也不能执行 例2 12 如图所示的电路 当开关k闭合时 P20为低电平 发光二极管LED0 LED3亮 开关k断开时 P20为高电平 发光二极管LED4 LED7亮 main while 1 while P2 4 7号灯亮 号与 号的区别 注意 号与 号的区别 是赋值运算符 而 是测试相等运算符 只是对该符号两边的表达式进行测试和比较 而不进行赋值 例2 13 编写一段程序从P1口输出数据0 255 main chara while 1 for a 0 a 255 a P1 a for b 0 b 50000 b 程序分析 程序中定义了一个宁符型变量a 执行 while l 语句后 程序进入死循环 在循环体内给变量a赋初值为0 然后测试a的值是否等于255 再将变量a的数据增1 通过P1口输出 为了能够看到输出结果 使用了一个延时语句 for b 0 b 50000 b P1口的输出结果是00H FFH之间变化 例2 14试分析条件语句 P1 程序分析 在本例中 表达式所列出的测试条件由两个分测试条件相 与 构成的 第一个分测试条件 Pl 0 xl0H 0 其作用是对P1口的第五引脚 P1 4 进行测试 如果它等于1 则条件为真 1 否则为假 0 在本句中使用 而不是 来进行测试较为安全 因为使用 进行测试 会将屏蔽数值和相等测试混淆 从而潜伏某种隐患 第二个分测试条件是 y 5 其含义是当y 5叫条件为真 1 否则为假 0 y 5 中先测试y 5 然后再执行y自加1的运算 把上面两个分测试条件相 与 while循环的功能是 只有当Pl 4电平为高 并持续一段时间 由 y 5 来控制 时 执行花括号 中语句 x P1 否则退出此while循环体 执行下一条语句 注意 1 在while循环体内若有多条语句 应使用花括号 括起来 表示这是一个语句块 当循环体内只有一条语句时 可以不使用花括号 特别是在进行while循环的多重嵌套时 使用花括号来分隔循环体将提高程序的可读性和可靠性 注意 2 在while循环体中 应有使循环趋向于结束的语句 在本例中 当P1 4 0或y 5时 while循环体结束 若无此种语句 别循环将无休止地继续下去 死循环 例2 15 试用 while 型循环结构编写一段延时程序 main unsignedinta int2个字节 16位 32768 32767 unsignedint0 65535 a 50000 while a 0 a 程序分析 语句 unsignedinta 定义了一个无符号数 最大值为65535 这里a 50000 如果使用晶振为12MHz 延时时间为1s While语句中的条件是a 0 而在循环体中使用了a 循环50000次时退出循环 注 晶振 晶体谐振器 一种石英晶体 若通电 会产生一定频率的机械震荡 直到 dowhile 型循环结构 dowhile 型循环结构在这种结构中 先执行操作A 再判断条件P 若P成立 为真 则再执行操作A 此时反复执行操作A 直到P为假为止 dowhile的程序流程图 说明 在while循环语句中 执行循环体之前要先检测循环结束的条件 如果条件不成立 则该循环不会被执行 dowhile循环语句把while循环语句作了移位 即把循环条件测试的位置从起始处移至循环的结尾处 该语句大多用于执行至少一次以上循环的情况 dowhile循环语句的执行过程 首先执行循环体语句 然后执行圆括号中的表达式 如果表达式的结果为真 1 则循环继续 并再一次执行循环语句 只有当表达式的结果为假 0 时 循环才会终止 并以正常方式执行程序后面的语句 例2 16 试用 do while 型循环结构编写一段程序 计算1 2 3 10 main intsum 0 a 0 do sum a a while a 10 程序运行结果 变量sum值为55 程序分析 此程序首先定义了两个变量sum和a 并且对sum和a变量赋值 然后执行循环体内语句 sum a 相当于 sum sum a 每循环一次 a的值加1 然后再进行循环条件测试 while a 10 在当a 10时 退出循环 例2 17 如图所示的电路 试用 do while 型循环结构编写一段程序 当P30闭合时 P1口的8个发光二极管LED0 LED7闪烁 当P30断开时 P1口的8个发光二极管LED0 LED7全灭 main unsignedinta for do P1 0 xff for a 0 a 50000 a x P3 while x 程序分析 此程序先执行循环体内语句 让P1口输出高电平 8个LED全灭 延时1s 再通过x变量采集P3口的数据 然后再进行循环条件测试 while x 语句的作用下 程序再次进入循环体 在循环体内再次关闭LED 依次循环下去 LED就会出现 闪烁 的效果 例2 18 试用 do while 型循环结构编写一段延时程序 main unsignedinta a 50000 do a while a 0 程序分析 程序中首先定义了一个无符号数的变量a 其最大值为65535 这里给a赋值 a 50000 进入循环体后执行a 语句后 变量a的值减1 再次进入循环体 直到a的值减为0 退出循环体 由于整个过程没做任何事 只是消耗了单片机的运行时问 所以这是一个延时程序 2 3 3for型循环结构 for循环语句是循环语句中最为灵活也是最为复杂的一种 它不仅可以用于循环次数已经确定的情况 而且可以用于循环次数不确定但已经给出循环条件的情况 它既可以包含一个索引计数变量 也可以包含任何一种表达式 除了被重复的循环指令体外 表达式模块由三个部分组成 表达式模块由三个部分组成 第一部分是初始化表达式 第二部分是对结束循环进行测试 对C语言而言 可以是任何一种测试 一旦测试为假 就会结束循环 第三部分是尺度增量 for循环语句的一般形式 for 表达式1 表达式2 表达式3 语句 循环体 for循环的语句执行过程 先对表达式1赋初值 进行初始化 判断表达式2是否满足给定的循环条件 若满足循环条件 则执行循环体内语句 然后执行第 步 若不满足循环条件 则结束循环 转到第 步 若表达式2为真 则在执行指定的循环语句后 求解表达式3 回到第 步继续执行 退出for循环 执行下面一条语句 例2 19 试用 for 型循环结构编写一段程序 计算1 2 3 10 main inta sum sum 0 for a 0 a10时 表达式2为假 则终止循环 例2 20 电路如图所示 试用 for 型循环结构编写一段程序 从P1口输出数据 依次点亮LED0 LED7 程序运行时只有一个发光二极管亮 应用程序 main unsignedinta charb c for c 0 x80 for b 0 b 1 程序分析 程序中用到了 for 语句 在小括号

温馨提示

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

评论

0/150

提交评论