(C程序结构及控制语句-9课时).ppt

上传人:max****ui 文档编号:10958482 上传时间:2020-04-16 格式:PPT 页数:101 大小:1.70MB
返回 下载 相关 举报
(C程序结构及控制语句-9课时).ppt_第1页
第1页 / 共101页
(C程序结构及控制语句-9课时).ppt_第2页
第2页 / 共101页
(C程序结构及控制语句-9课时).ppt_第3页
第3页 / 共101页
点击查看更多>>
资源描述
1 第5章C程序结构及控制语句 2 学习目标 理解并熟练运用C语言的顺序 选择 循环控制语句进行编程 培养良好的编程风格 3 学习内容 4 顺序结构 概念 程序中的语句是按照编写时的顺序自上而下 一条接一条地执行的 这一过程称为顺序执行 顺序结构程序三步曲是输入 计算 输出 5 顺序结构 例5 1 要求 输入三角形的三边长 求三角形面积 海伦公式 s a b c 2 include includevoidmain floata b c s area scanf f f f 6 顺序结构 例5 3 交换数据 对输入的两个变量a b 交换它们的值并输出 请思考一个问题 现有两个500ML的瓶子 一个里面装着醋 一个里面装着酱油 请问如何交换两个瓶子的液体 7 顺序结构 例5 3 醋 酱油 1 醋 酱油 醋 酱油 2 醋 酱油 A B C D 8 顺序结构 例5 3 醋 酱油 3 醋 酱油 醋 酱油 醋 酱油 E F G H 9 顺序结构 例5 3 引入第三个瓶子 两个变量的交换亦是如此 10 顺序结构 例5 3 交换数据 对输入的两个变量a b 交换它们的值并输出 includevoidmain inta b c printf Pleaseinputtwointegers scanf d d 11 选择结构 选择结构又称分支结构或者选取结构 if语句switch语句 12 选择结构 if语句格式一 格式1 if 表达式 语句功能 如果表达式为真 则执行其后的语句 否则不执行语句 例如 if a b max a 13 选择结构 if语句格式二 格式2 if 表达式 语句1else语句2功能 如果表达式为真 则执行语句1 否则执行语句2 例如 if a b max a elsemax b 14 选择结构 if语句格式三 格式3 if 表达式1 语句1elseif 表达式2 语句2elseif 表达式3 语句3 elseif 表达式n 语句nelse语句n 1 功能 依次判断表达式的值 当出现某个值为真时 则执行对应语句 然后跳到整个if语句之外继续执行程序 如果所有的表达式均为假 则执行语句n 1 然后继续执行后续程序 15 选择结构 if语句格式三 根据用户购物的总价Cost 选择不同的折扣率Rate Cost 1000七折800 Cost 1000八折500 Cost 800九折Cost 500无折扣 16 选择结构 if语句格式三 if Cost 1000 Rate 0 7 elseif Cost 800 Rate 0 8 elseif Cost 500 Rate 0 9 elseRate 1 0 if Cost 1000 Rate 0 7 if Cost800 Rate 0 8 if Cost500 Rate 0 9 if Cost 500 Rate 1 0 17 选择结构 if语句说明 if关键字之后均为表达式 该表达式可以是逻辑表达式 关系表达式以及其它表达式 在if语句中的条件判断表达式必须用圆括号括起来 每个语句之后必须加分号 else子句不能作为语句单独使用 须与if配对使用 18 选择结构 if语句说明 如果在满足条件时执行一组 多个 语句 则必须把这一组语句用 括起来组成一个复合语句 之后不加分号 if a b a b else a 0 b 1 19 选择结构 if语句说明 在if语句的表达式中 一定要避免判断实数与零值的等值比较 因为无论是float还是double变量 都有精度限制 应使用 来替代 floatx if x 0 改为 defineEPS1E 7floatx if fabs x EPS 表达式的含义为x的值为0 20 选择结构 if语句举例 例 输入两个实数 输出两个数的最大值 includevoidmain floata b scanf f f 运行情况如下 3 6 3 2 3 60 21 选择结构 if语句的嵌套 如果if语句中的执行语句又是一个if语句 就构成了if语句嵌套的情形 格式 if 表达式 if语句或者 if 表达式 if语句elseif语句 if a b if b 0 printf a b 0 n elseprintf a b b0 printf b a 0 n elseif a 0 printf b a 0 n elseprintf b a a 0 n 在多重嵌套时 else总是与在它之前出现的 尚未匹配的且离它最近的if匹配 22 选择结构 if语句的嵌套 注意 在多重嵌套时 else总是与在它之前出现的 尚未匹配的且离它最近的if匹配 可能会更改配对的原则 一般情况下 较少使用if语句的嵌套结构 以使程序更便于阅读理解 23 选择结构 if语句的嵌套例 例 有一函数 1 x0 编一程序 输入一个x值 输出y值 24 选择结构 if语句的嵌套例 有以下几个程序 请判断哪个是正确的 哪个是错误的 程序1 voidmain intx y scanf d x if x 0 y 1 elseif x 0 y 0 elsey 1 printf x d y d n x y 正确 25 选择结构 if语句的嵌套例 程序2 voidmain intx y y 1 scanf d x if x 0 if x 0 y 1 elsey 0 else与第二个if配对printf x d y d n x y 错误请思考 错误的原因是什么 26 选择结构 if语句的嵌套例 程序2修改如下 voidmain intx y y 1 scanf d x if x 0 if x 0 y 1 elsey 0 else与第一个if配对printf x d y d n x y 说明 更改了配对的原则 27 选择结构 switch语句 格式 switch 表达式 case常量表达式1 语句1case常量表达式2 语句2 case常量表达式n 语句ndefault 语句n 1 28 选择结构 switch语句 N S图 功能 将表达式的值逐个与其后的常量表达式进行比较 当表达式的值与某个常量表达式的值相等时 即执行其后的语句 然后不再进行判断 继续执行后面所有case后的语句 如表达式的值与所有case后的常量表达式均不相同时 则执行default后的语句 29 选择结构 switch语句 includevoidmain inta scanf d 运行情况如下 5FridaySaturdaySundayerror 30 选择结构 switch语句 includevoidmain inta scanf d 加break 运行情况如下 5Friday 31 选择结构 switch语句 includevoidmain inta scanf d 运行情况如下 7Sunday 运行情况如下 8Sunday 多个case可以共用一组执行语句 32 选择结构 switch语句 includevoidmain inta scanf d 运行情况如下 5Friday case分支顺序改变 33 选择结构 switch语句 includevoidmain inta scanf d 运行情况如下 1Monday case分支语句用 括起来 34 选择结构 switch语句 说明 多个case可以共用一组执行语句 case常量表达式 只相当于一个语句标号 表达式的值和某标号相等则转向该标号执行 但不能在执行完该标号的语句后自动跳出整个switch语句 为了避免上述情况 C提供了break语句 在case后的各个常量表达式的值不能相同 否则会出现错误 在case后 允许有多个语句 可以不用 括起来 各个case和default子句的先后顺序可以变动 不影响程序的执行结果 default子句可以省略不用 此时当表达式的值与所有case后的常量表达式的值不同时 退出switch语句 继续执行后续程序 switch后面括号中的表达式只能是整型 字符型 枚举类型 case后的常量表达式的类型必须与之匹配 各个case之后是常量表达式 一定不要试图使用条件表达式或者逻辑表达式 includevoidmain intscore scanf d 35 错误 该如何实现该程序 if score 60 printf 及格 n elseprintf 不及格 n 36 switch score 10 case0 case1 case2 case3 case4 case5 printf 不及格 n break 37 case6 case7 case8 case9 case10 printf 不及格 n break 38 选择结构 switch语句例5 6 计算器程序 从键盘接收两个运算数和四则运算符 计算并输出结果 includevoidmain floata b charc printf inputexpression a b n scanf f c f P93 例5 8请大家课后阅读 一题多解方法 39 40 循环结构 在给定条件成立时 反复执行某程序段 直到条件不成立为止 这就是循环结构 给定的条件称为循环条件反复执行的程序段称为循环体在循环变量中用于控制循环执行次数的变量称为循环变量 C语言提供了三种循环控制语句 while语句do while语句for语句 41 循环结构 while语句 格式 while 表达式 语句功能 计算表达式的值 当值为真时 执行循环体 说明 1 while语句中的表达式一般是关系表达式或者逻辑表达式 只要值为真就可以继续执行循环体 2 如果循环体包含一个以上的语句 必须用 括起来构成复合语句 例 求1 100之间所有偶数的和 42 循环结构 while语句例5 9 求1 100之间所有偶数的和 includevoidmain intsum 0 n n 0 循环变量初始化while n 100 循环执行条件 sum n 循环体n 2 改变循环变量的值 printf d n sum 分析 intn 0 n为每一项intsum 0 sum为求得的和while 循环执行条件 循环体 输出sum的值所以程序的关键是要确定 1 循环执行条件2 循环体 43 循环结构 do while语句 格式 do 语句 while 表达式 功能 先执行一次循环体 再判别表达式的值 如果为真则继续执行循环 否则终止循环 说明 1 do while语句的表达式后必须加分号 2 如果循环体由多个语句组成 也必须由 括起来 组成一个复合语句 44 循环结构 do while语句例5 10 求1 100之间所有偶数的和 includevoidmain intsum 0 n 0 do sum n n 2 while n 100 printf d n sum 45 while和do while循环的比较 1 voidmain intsum 0 i scanf d 2 voidmain intsum 0 i scanf d 输入1 结果如何 输入3 结果又如何 46 while和do while循环的比较 运行情况如下 运行情况如下 1 1 sum 3sum 3再运行一次 再运行一次 3 3 sum 0sum 3 计算n 1 2 3 n 问题分析 这是一个循环次数已知的累乘问题 n n 1 n 47 算法 step1 输入n值 step2 累乘求积变量赋初值 p 1 step3 累乘次数计数器i置初值 i 1 step4 若循环次数i未超过n 则反复执行step5和step6 否则转去执行step7 step5 进行累乘运算 p p i step6 累乘次数计数器i加1 i i 1 且转step4 step7 打印累乘结果 即n的阶乘值p 48 49 while 计算n 1 2 3 n includevoidmain inti 1 n longp 1 printf Pleaseentern scanf d 分析 inti 1 n longp 1 p为求得的乘积printf Pleaseentern scanf d while 循环执行条件 循环体 输出p的值 50 do while 计算n 1 2 3 n includevoidmain inti 1 n longp 1 printf Pleaseentern scanf d 51 循环结构 for语句 格式 for 表达式1 表达式2 表达式3 语句功能 1 首先计算表达式1的值 2 再计算表达式2的值 若值为真 则执行一次循环体 否则跳出循环 3 计算表达式3的值 转回第 2 步重复执行 改写为while语句 表达式1 while 表达式2 语句 表达式3 52 循环结构 for语句例5 11 例如 求1 100之间所有偶数的和 includevoidmain intsum 0 i for i 0 i 100 i 2 sum i printf d n sum 53 for 计算n 1 2 3 n includevoidmain inti 1 n longp 1 printf Pleaseentern scanf d 思考 若要打印出1 n之间的所有数的阶乘值 程序如何修改呢 54 循环结构 for语句 for语句最易理解的如下形式 for 循环变量赋初值 循环条件 循环变量增值 语句例如 for i 1 i 100 i 2 sum sum i 可以看到它相当于以下语句 i 1 while i 100 sum sum i i 2 55 循环结构 for语句 for语句改写为while循环 说明 1 for语句的一般形式中的 表达式1 可以省略 注意省略表达式1时 其后的分号不能省略 如 i 1 for i 100 i sum sum i for 表达式1 表达式2 表达式3 语句 表达式1 while 表达式2 语句表达式3 56 循环结构 for语句 2 如果省略表达式2 即不判断循环条件 循环无终止地进行下去 如 for i 1 i sum sum i 相当于 i 1 while 1 sum sum 1 i 57 循环结构 for语句 3 表达式3也可以省略 但此时程序设计者应另外设法保证循环能正常结束 如 for i 1 i 100 sum sum 1 i 58 循环结构 for语句 4 可以省略表达式1和表达式3 只有表达式2 即只给循环条件如 for i 100 while i 100 sum sum i 相当于sum sum i i i 5 三个表达式都可省略如 for 相当于while 1 59 循环结构 for语句 6 表达式1也可以是与循环变量无关的其他表达式 如 for sum 0 i 100 i sum sum i 表达式3也可以是与循环控制无关的任意表达式 表达式1和表达式3也可以是逗号表达式 如 for sum 0 i 1 i 100 i sum sum i 或for i 1 i 100 i i sum sum i 相当于for i 1 i 100 i i 2 sum sum i 60 循环结构 for语句 可以把循环体和一些与循环控制无关的操作也作为表达式1或表达式3出现 这样程序可以短小简洁 但过分地利用这一特点会使for语句显得杂乱 可读性降低 建议不要把与循环控制无关的内容放到for语句中 61 循环结构 跳转语句 goto语句称为无条件转向语句 格式 goto语句标号 功能 无条件转移到语句标号指定的代码行执行 例如 gotolabel 说明 1 语句标号用标识符表示 命名规则与变量名的命名规则相同 2 由于goto语句可以灵活跳转 如不加限制 会破坏结构化程序设计风格 经常带来错误或隐患 所以要限制使用goto语句 3 一般而言 goto语句有两种用途 与if语句一起构成循环 这是goto语句最常用的用途 从多层循环中跳出 62 循环结构 跳转语句 break语句格式 break 功能 用于跳出switch结构 和从循环体内中途跳出循环体 即提前结束循环 执行循环下面的语句 说明 1 在循环语句中 break语句一般与if语句一起使用 2 break语句不能用于循环语句和switch语句之外的其它任何语句之中 举例 63 循环结构 跳转语句 例5 12计算半径r 1到r 10的圆面积 直到圆面积大于20为止 definePI3 1415926 includevoidmain floatarea intr for r 1 r20 break printf f n area 运行结果 3 14159312 566370 64 循环结构 跳转语句 continue语句格式 continue 功能 跳过循环体中剩余的语句而强制执行下一次循环 即结束本次循环 跳过循环体中下面尚未执行的语句 接着进行下一次是否执行循环的判定 说明 continue语句只能用在循环语句中 且一般都是与if语句一起使用 举例 65 循环结构 跳转语句 例5 13把10 15之间的不能被3整除的数输出 includevoidmain intn for n 10 n 15 n if n 3 0 continue printf d n printf n 运行结果 10111314 66 循环结构 跳转语句 includevoidmain intn for n 10 n 15 n if n 3 0 break printf d n printf n 运行结果 1011 67 循环结构 跳转语句 例5 12计算半径r 1到r 10的圆面积 直到圆面积大于20为止 definePI3 1415926 includevoidmain floatarea intr for r 1 r20 continue printf f n area 运行结果 3 14159312 566370 68 循环结构 跳转语句 continue语句和break语句的区别是 continue语句只结束本次循环 而不是终止整个循环的执行 break语句则是结束整个循环过程 不再判断执行循环的条件是否成立 69 循环结构 循环嵌套 当一个循环体内又包含另一个完整的循环体时 称为循环嵌套 while do while和for这三种循环均可以相互嵌套 嵌套的循环常用于解决矩阵运算 报表打印这类问题 70 循环结构 循环嵌套例5 14 输出如下图形 分析 要输出5行 第i行由i个 组成 i 1 2 3 4 5 使用外层循环来控制输出的行数 使用内层循环控制每行输出的星号个数 内层循环的循环次数等于外层循环的循环变量的值 第1行 1个 第2行 2个 第3行 3个 第4行 4个 第5行 5个 第i行 i个 71 循环结构 循环嵌套例5 14 includevoidmain inti j for i 1 i 5 i 外层循环控制行 for j 1 j i j 内层循环控制列printf printf n 控制换行 72 与该题解法相关的课堂练习 P109 5 7 2 下面程序的功能是输出以下形式的金字塔图案 请补充完整 第1行 3个空格 1个 第2行 2个空格 3个 第3行 1个空格 5个 第4行 0个空格 7个 第i行 4 i个空格 2 i 1个 includevoidmain inti j for i 1 i 4 i 外层循环控制行 for j 1 j j 内层循环控制每行打印空格的个数printf for j 1 j j 内层循环控制每行打印 的个数printf printf n 2 i 1 4 i 74 例 输出下列图形 112123123412345123456123456712345678123456789 循环嵌套结构举例 第1行 1第2行 1 2第3行 1 3第4行 1 4第5行 1 5 第9行 1 9第i行 1 i 75 includevoidmain inti j for i 1 i 9 i 外层循环控制行 for j 1 j i j 内层循环控制列printf 4d j printf n 控制换行 循环嵌套结构举例 76 与该题解法相关的课后练习 P110 5 11P110 5 14请各位同学课后练习 循环嵌套 提示 在嵌套的各层循环体中 应使用复合语句保证逻辑上得正确性 嵌套循环的内层和外层的循环控制变量不应同名 以免造成混乱 嵌套循环最好采用右缩进格式书写 以保证层次的清晰性 循环嵌套不能交叉 一个循环体内必须完整地包含另一个循环 78 循环结构 百钱买百鸡问题 百钱买百鸡 是我国古代的著名数学题 问题是这样描述的 3文钱可以买1只公鸡 2文钱可以买一只母鸡 1文钱可以买3只小鸡 用100文钱买100只鸡 那么各有公鸡 母鸡 小鸡多少只 79 循环结构 百钱买百鸡问题 解法1 假设i j k分别代表公鸡 母鸡和小鸡的数目 注意到一百文钱最多可以买33只公鸡 50只母鸡和300只小鸡 所以0 i 33 0 j 50 0 k 300 includevoidmain inti j k for i 0 i 33 i for j 0 j 50 j for k 0 k 300 k if 3 i 2 j k 3 100 80 循环结构 百钱买百鸡问题 解法2 在第一种实现方法里面 i j k构成了三重循环 if语句总共需要被判断34 51 301 521934次 上个程序完全可以变为二重循环 因为i j k都是整数 当i j的值被确定后 k 100 i j includevoidmain inti j k for i 0 i 33 i for j 0 j 50 j k 100 i j if 3 i 2 j k 3 100 81 C程序语句编程风格 编写规范的程序代码 使自己的程序结构清晰 规范易读是一个程序员必备的基本素质 一般而言 一个优秀的程序代码应该满足 正确性 指程序代码要实现软件设计所要求的功能 可靠性 指程序代码最后编译的程序要能够稳定 可靠 安全的运行 规范化 指程序代码书写的风格 命名规则等符合规范 可读性 指程序代码要便于查看和理解 灵活性 指程序代码的设计和编写应该易于维护和改动 82 C程序语句编程风格 1 代码行一行代码只包含一条语句 if for while do等语句独自占一行 执行语句不要紧跟其后 代码行不易过长 一般在70 80个字符以内 如果代码行过长 使用如下规则分开 逗号后面分开 低优先级操作符后面分开 拆分后的新行应适当缩进 83 C程序语句编程风格 2 注释边写代码边加注释 注释应当用于说明代码做什么 而不是怎么做 注释应与被描述的代码相邻 可以在代码的上方 右方 84 C程序语句编程风格 3 对齐 之内的代码块在 右边数格处左对齐 即采用缩进格式 85 C程序语句编程风格 4 命名系统标识符应当直观且可以拼读 可以望文知意 尽量避免在名字中出现数字编号 86 应用举例 猴子吃桃问题 一只猴子原有若干个桃子 第一天吃掉总数的一半多一个 第二天又将剩下的桃子吃掉一半多一个 以后每天吃掉前一天剩下的一半多一个 到第十天准备吃的时候发现只剩下一个桃子 求这只猴子原有多少个桃子 87 应用举例 猴子吃桃问题 假设第n天吃之前剩下的桃子个数为Xn n 10 9 8 1 则 X10 1X9 2 X10 1 X1 2 X2 1 从而可得到递推公式 Xn 2 Xn 1 1 88 应用举例 includevoidmain intday x1 x2 day 9 x2 1 while day 0 第1天的桃子数是第2天桃子数加1后的2倍 x1 x2 1 2 x2 x1 day printf total d n x1 89 应用举例 利用公式 求的近似值 直到最后一项的绝对值小于10 5为止 解这类问题的关键是找出项与项之间的变化规律 并化简成便于计算机处理的形式 程序中用一个循环语句求各项的累加和即可 在该公式中 还需要考虑每项的符号变换 可以设置一个变量交替赋值为1和 1 90 应用举例 longdoubleElement Element表示每一项longdoublePI PI为求和的变量intSign Sign为符号的取值intTemp Temp为每一项分母的值 Element PI Sign Temp 91 应用举例 include includevoidmain longdoubleElement PI intSign Temp Sign 1 Temp 1 Element 1 0 PI 0 初始化各个变量while fabs Element 1E 5 循环求解PI PI Element Sign Sign 改变符号Temp 2 更改分母Element 1 0 Temp Sign 求每项的值 printf PI lf n PI 4 92 应用举例 对于分段函数 设计一个程序对于输入的x值求f x 要求程序中要使用switch语句实现 include includevoidmain intk doublex y printf inputx scanf lf 93 应用举例 例 从键盘任意输入一个正整数 编程判断它是否是素数 若是素数 输出 Yes 否则输出 No 问题分析 素数是指除了能被1和它本身整除外 不能被其他任何整数整除的数 1不是素数 算法 step1 从键盘输入一个正整数m step2 计算k step3 i从2变化到k 依次检查m i是否为0 step4 若m i为0 则判定m不是素数 并终止对其余i值的检验 否则 令i i 1并继续对其余i值进行检验 直到全部检验完毕为止 这时判定m是素数 m 94 include includevoidmain intm i k printf Pleaseenteranumber scanf d 95 应用举例 例 译密码 为使电文保密 往往按一定规律将其转换成密码 收报人再按约定的规律将其译回原文 例如 可以按以下规律将电文变成密码 将字母A变成字母E a变成e 即变成其后的第4个字母 W变成A X变成B Y变成C Z变成D 见图 字母按上述规律转换 非字母字符不变 如 China 转换为 Glmre 输入一行字符 要求输出其相应的密码 96 97 应用举例 includevoidmain charc while c getchar n if c a 98 应用举例 注意 内嵌的if语句不能写成if c Z c z c c 26 请考虑 为什么对小写字母不按此处理 即写成c z c z 即可 99 应用举例 例 求Fibonacci数列 1 1 2 3 5 8 的前40个数 即F1 1 n 1 F2 1 n 2 Fn Fn 1 Fn 2 n 3 includevoidmain longintf1 1 f2 1 inti for i 1 i 20 i printf 12ld 12ld f1 f2 if i 2 0 printf n f1 f1 f2 f2 f2 f1 总结 理解 选择结构的概念 循环结构的概念 掌握 if语句 switch语句 while语句 do while语句 for语句的格式和执行机制以及灵活运用 掌握 各种循环语句之间的嵌套使用和循环的退出方法以及灵活运用循环结构来解决实际问题 培养良好的编程风格 100 101 作业 5 6 5 7 5 10 5 11 5 12 5 14 5 15 5 18
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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