C语言程序设计第三章C语言的基本控制结构.ppt

上传人:max****ui 文档编号:6333911 上传时间:2020-02-23 格式:PPT 页数:38 大小:2.50MB
返回 下载 相关 举报
C语言程序设计第三章C语言的基本控制结构.ppt_第1页
第1页 / 共38页
C语言程序设计第三章C语言的基本控制结构.ppt_第2页
第2页 / 共38页
C语言程序设计第三章C语言的基本控制结构.ppt_第3页
第3页 / 共38页
点击查看更多>>
资源描述
第三章C语言的基本控制结构 问题 include includevoidmain void floata b c x1 x2 scanf f f f b b 4ac 0 一元二次方程根求解算法描述 b2 4ac 0 yes 求等根 no b2 4ac 0 yes 求实根 no 求复根 问题 如何构造条件 如何根据条件实现不同算法 3 1程序的三种控制结构 结构化程序设计是软件设计的第三次革命 结构化程序设计的基础是采用三种程序的控制结构 1966年BOHM Jacopini证明 只要三种控制结构就能表达用一个入口和一个出口框图所能表达的任何程序逻辑 三种控制结构如下 顺序结构Sequence 算法描述 f g 框图 f g 入口 出口 选择结构Selection 算法描述 if e f elseg 框图 e yes f no g 入口 出口 循环结构Repetition 当型循环 whilecistruedof c f YES NO 直到循环 dofuntilcisfalse f c YES NO 三种控制结构有如下共同的特点 一个入口和一个出口 无死语句 无死循环 入口 出口 如何构造条件 复合语句 概念 C语言可以用 包括一系列的语句 一对 所包含的内容称为一个复合语句 其中可以包含0到多条C语言语句 includevoidmain void inta b scanf d d 复合语句 复合语句 复合语句可以嵌套 凡是可以出现单一语句的地方都可以使用复合语句 复合语句的作用 作为分支和循环的块 作为标识符的作用域 交换算法演示 3 2关系运算和逻辑运算 关系运算 关系运算是比较两个表达式值的数值相互关系的运算 关系运算规则 参加运算的表达式的从左到右按关系运算符提供的关系进行比较 满足关系得到整型值1 不满足关系得到整型值0 inta 1 b 3 c d c a b c的值为0 d a 2 b 3 d的值为1 逻辑运算 逻辑运算运算时判断对象真假的运算 运算对象非0代表逻辑真 是0代表逻辑假 也就是说任何类型的量都有逻辑值 逻辑运算得到整型值 运算结果为真时 得到整型值1 运算结果为假时 得到整型值0 其中 运算是单目运算 逻辑运算演示 复杂逻辑关系的表示 在实际应用中 经常会遇到描述复杂的关系 如 判断x是否大于等于5或小于3 此类关系的描述在程序设计中会大量使用 0 3 5 x 5 0 2 3 2 x 3 x 4 2 x x 3 表示数值关系的原则 开放区间用或 闭合区间用与 思考题 判断是否在一 三象限的表达式 判断是否在如图圆环内的表达式 sqrt x 代表对x开平方 ch为字符变量 判断ch是否为字母的表达式 ch a ch A ch Z 不是字母的表达式 运算的优先级 C语言允许所有基本类型的量参加同一表达式的运算 也允许所有类型的运算符出现在一个表达式中 因此 表达式值的类型如何确定 运算的先后顺序如何确定 必须通过一套规则解决 为了便于调整优先级 设置 为最高优先级 相同优先级存在一个顺序称为结合顺序 结合顺序有从右向左或从左向右 运算优先级 第一原则 单目运算的优先级高于双目运算 第二原则 算术运算 关系运算 逻辑运算 赋值运算 表达式优先级举例说明 a b c d a b 34 注意 在无法确定优先级时 加 区分 简化表达式 c b a 2 c b a 2 优先级总表 优先级特例 自加 自减运算优先级遵循原则 前置 先运算后引用 后置 先引用后运算 includevoidmain void inta 3 b b a a printf b d b b a a printf b d b chp3ex0 在逻辑运算中 如果逻辑值能确定 则不需在进行运算 inta 0 b 0 a b b的值 a 0 a b b的值 3 3分支结构 选择结构Selection if及if else的三种结构 由标准的分支结构可以演化成单分支 多分支结构 C语言的分支语句有if if else switch三种 if语句 格式 if expression statement 语句 表达式 非0为yes 0为no 语句 可以是复合语句 流程图 e statement yes no 举例 includevoidmain void charch ch getchar if ch a chp3exf if else结构 格式 if expression stat1 elsestat2 语句或复合语句 流程图 e yes stat1 stat2 no 入口 出口 举例 输出 x includemain intx scanf d if elseif结构 多分支 格式 if e1 stat1 elseif e2 stat2 elseif e3 stat3 elseif en 1 statn 1 elsestatn 框图 e1 y stat1 n e2 y stat2 出口 n en 1 y statn 1 n statn n 1个条件 满足某个条件 执行对应的语句 然后到出口 ifelseif结构举例 征税问题 1000以下税率为3 1000 2000税率为4 2000 3000税率为5 3000以上税率6 输入收入求应缴税款 includevoidmain void floatx rate scanf f 3 100 输入一个分数 将百分制转化为五分制 90分以下打印A80 90打印B70 80打印C60 70打印D60以下打印E includevoidmain void inta scanf d chp3ex1 if语句的嵌套 对于如下的结构 if e1 stat1 elsestat2 在stat1或stat2中又含有if结构 if e2 stat3 elsestat4 称为if结构的嵌套 各种if结构都可以嵌套 如求符号函数 1 x0 includevoidmain void intx y scanf d 外层 内层 在外层else语句中 含有一个if结构 说明 书写采取缩进形式 便于区分 内层缩进 else与最近的if相匹配 从内到外 y 1 if x 0 if x 0 y 1 elsey 0 结果 举例 求一元二次方程ax2 bx c 0的根 include includevoidmain void floata b c d e x1 x2 scanf f f f 外层 内层 求相等实根 求不等实根 求共扼复根 chp3ex2 switch语句 多分支结构 格式 switch expression case常量表达式1 statement1 case常量表达式2 statement2 case常量表达式n 1 statementn 1 default statementn 只能是整型或字符型表达式 整型字符型常量表达式 表达式的值不能相等 流程 先求expression的值 依次比较expression和各常量表达式的值 如果和第i个常量表达式相等 则执行第i条以后的语句 如果不相等 则执行default以后的语句 语句标号的概念 includevoidmain void chargrade grade getchar switch grade case A printf 90 100 n case B printf 80 89 n case C printf 70 79 n case D printf 60 69 n case E printf 60 n default printf error n chp3ex3 语句标号 break语句 格式 break 作用 中断switch流程 break break break break break chp3ex4 例 输出五分制对应的百分制范围 includevoidmain void charchGrad chGrad getchar switch chGrad case a case A printf 90 100 n break case b case B printf 80 89 n break case c case C printf 70 79 n break case d case D printf 60 69 n break case e case E printf 60 n default printf DataError n 多个标号可以共用相同的语句 default语句可以省略 分支结构小结 if构成的三种分支结构单分支 如果a b 则交换a b的值 if a b temp a a b b temp 标准二分支 求a和b的最大值 if a b iMax a elseiMax b 两种多分支 if elseif结构适用于连续不同区间的分支 if a 90 printf A elseif a 80 printf B elseif a 70 printf C elseif a 60 printf D elseprintf E switch结构适用于离散值产生的分支 3 4循环结构 程序经常会重复执行某些相同的操作 如 求 s 1 2 3 4 100 算法描述 s 0 i 1 s i i 判断i是否小于等于100如果i小于等于100 重复 否则 结束 此类根据某个条件重复执行相同算法的结构 称为循环 初始化部分 循环体 含有时条件趋假的语句 循环的条件 循环应在有限次完成 C语言提供了三类实现循环的语句 while dowhile for while循环 当型循环 格式 while expression statement 表达式 值非0 表示满足条件 值为0代表不满足条件 语句 复合语句 重复执行部分 循环体 流程 e yes statement no 含有使条件趋假的语句 举例 求s 1 2 3 4 100 includevoidmain void ints 0 i 1 while i 100 s s i s i i printf s d n s 初始化部分 循环体 条件测试 使条件趋假语句 chp3ex5 do while循环 直到型循环 格式 do statement while expression 流程 statement e yes no 含有使条件趋假的语句 while循环与do while循环的区别 while循环先判条件 后执行循环体 do while循环先执行循环体 后判条件 举例 求 30 includevoidmain void floats 1 0 inti 1 do s i i while i 30 printf 30 f s 初始化 循环体 测试条件 使条件趋假 chp3ex6 思考题 用do while实现s 1 2 100 用while实现30 for循环 格式 for e1 e2 e3 statement 流程 e1 e2 yes statement e3 no 举例 求 s 1 2 3 100 includevoidmain void ints i for s 0 i 1 i 100 i s s i printf s d s 使e2趋假 在for循环中 e1 e2 e3都可以省略 e1省略 s 0 i 1 e3省略 i 初值表达式 测试表达式 增值表达式 循环应用的几个问题 循环的嵌套 概念 在一个循环的循环体内又包含一个完整的循环称为循环的嵌套 打印9 9乘法表 includevoidmain void inti j for i 1 i 9 i for j 1 j 9 j printf 4d i j printf n 外层循环 内层循环 说明 内外层循环采用缩进形式 while和do while和for可以相互嵌套 执行次数为内层次数和外存次数的乘积 chp3ex7 如何打印乘法表的一半 循环的中断 break 和继续 continue 循环的中断 break语句 概念 循环体中可以加分支 判断是否继续执行循环 break语句可以提前结束循环 举例 求 r 1 10的圆的面积 如圆面积大于100则中断 for r 1 r100 break printf n f area 满足条件 则退出循环 继续循环 continue语句 continue语句的作用是跳过本次循环剩余的循环体内容 执行下次循环 举例 求1 100内的偶数和 s 0 for n 1 n 100 n if n 2 0 continue s n 满足条件 跳过循环体 继续循环 无限循环和空循环 条件为恒真的循环 无限循环 while 1 do while 1 for 靠条件控制的break语句退出循环 例 程序等待直到输入字母A for ch getchar if ch A break 循环体为空语句的循环 空循环 for i 1 i MAX t 作用 程序延时 空语句 goto语句 格式 gotoLabel Label 同一函数内语句前的标号 作用 转移到标号对应的语句上继续执行 loop if i 100 sum sum i i gotoloop 循环和分支相互嵌套 输入10个自然数统计其中偶数的个数及偶数值和 算法框图 start 定义变量 初始化 循环 yes 输入 偶数 yes 统计累加 no no 输出结果 end includevoidmain void inti ix iCount 0 iSum 0 for i 1 i 10 i scanf d n 循环结构 分支结构 输入负数 do if ix 0 printf dateerror while ix 0 算法的健壮性 注意 结构应完整的包含和被包含 举例 求100到200之间的所有素数 只能被1和自身整除的数 对于自然数n 判断其是否为素数有以下三种方法 判断n是否能被从2到n 1范围内的数整除 判断n是否能被从2到 int n 2 范围的数整除 判断n是否能被从2到 int sqrt n 范围的数整除 程序设计中标志技术的使用 在程序设计中 经常要记录一些状态 作为判断的条件 因此需要在程序中设置一些标志 通常标志是整型变量 如 设置变量iFlag用于记录是否世素数 iFlag 1是素数 iFlag 0不是素数 判断某自然数n是否是素数的算法 s sqrt n iFlag 1 i从2循环到s n i 0 yes iFlag 0 break no 继续循环直到退出 iFlag 0 程序如下 include includevoidmain void intn j s iFlag for n 101 n 200 n 2 s sqrt n iFlag 1 for j 2 j s j if n j 0 iFlag 0 break if iFlag printf n d n 0不是素数 1是素数 枚举所有数 构造 测试条件 假定n是素数 如果n能被2到s的任意数整除 设标志退出循环 如果n是素数 输出n chp3ex8 求水仙花数 条件 三位数的个 十 百位的方和等于该数 153 13 53 33 n为枚举变量 枚举初值100 枚举终值999 构造条件 取出n的个 十 百位数 测试是否满足条件 满足条件输出n includevoidmain void intn a b c for n 100 n 999 n a n 100 b n 100 10 c n 10 if a a a b b b c c c n printf n d n 枚举所有三位数 构造条件 测试条件 取n的百位a 十位b 个位c chp3ex9 思考题 36人一次搬36块砖 男搬4 女搬2 两个小孩抬一块 要一次搬完 问 男 女 小孩要多少 百鸡百钱 问题 鸡翁一 值钱五 鸡母一 值钱三 鸡雏三 值钱一 百钱买百鸡 问鸡翁 母 雏各几何 找出1000以内的完数 所谓完数是指该数的各因子之和等于该数 如6 1 2 3 证明6到200以内的数 符合哥德巴赫猜想 一个大于6的偶数 可以分解成两个质数之和
展开阅读全文
相关资源
相关搜索

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


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

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


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