第3章_程序控制结构(Zhp) - 副本_第1页
第3章_程序控制结构(Zhp) - 副本_第2页
第3章_程序控制结构(Zhp) - 副本_第3页
第3章_程序控制结构(Zhp) - 副本_第4页
第3章_程序控制结构(Zhp) - 副本_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

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

文档简介

2020 4 7 1 第3章程序控制结构 2020 4 7 2 内容 关系运算和逻辑运算条件控制语句及条件表达式多分支控制语句循环语句while do while for自增 自减运算逗号运算符和逗号表达式break和continue语句 重点 选择结构程序设计循环结构程序设计 2020 4 7 3 解决步骤图示 需要选择结构描述 示例1 A B两个整数 如果A大于B 则输出A 否则输出B 2020 4 7 4 选择结构需要解决的两个问题 控制选择结构执行方向的条件表示一般用关系表达式 逻辑表达式来描述条件控制结构的结构描述 N Y 2020 4 7 5 关系运算符优先级 用关系运算符将两个表达式 可以是算术表达式 关系表达式 赋值表达式或逻辑表达式 连接起来的式子 称为关系表达式 其值为0或1 关系运算符和关系表达式 从左向右 结合性 2020 4 7 6 示例 8 4其值为 假 表达式的值为0 5 0其值为 真 表达式的值为1 思考 x 1与x 1意义相同吗 注意 关系表达式的值为逻辑值 真 或 假 以1代表 真 以0代表 假 2020 4 7 7 逻辑运算符和逻辑表达式 逻辑运算符优先级 2020 4 7 8 真真假假真真真假假真假真假真真假假真假假真真假假 ab a ba ba b 逻辑运算符和逻辑表达式 续 2020 4 7 9 逻辑表达式的值是一个逻辑量 真 或 假 C语言编译系统在给出逻辑结果时 以数值1代表 真 以0代表 假 在判断一个量是否为 真 时 以非0代表 真 以0代表 假 例如 若x 10 则 x的值为0 若a 3 b 2 则a b的值为1 5 0 8的值为1 逻辑运算符和逻辑表达式 续 2020 4 7 10 结合性 从左向右 例如 5 3 4 8 4的结果为1 2020 4 7 11 特点在逻辑表达式的求解中并不是所有的运算符都被执行 只是在必须执行下一个逻辑运算符才能求出表达式的解时 才执行下一个运算符 例如 已知a 3 b 0 c 2 则执行下列表达式后a b c分别是多少 a b c 4 2020 4 7 12 非 算术运算符关系运算符 赋值运算符 各种运算符优先级 例如 xc等效于 a b c 2020 4 7 13 练习1 能正确表示x大于等于10或x小于等于0的逻辑表达式是 能正确表示x大于等于0且小于等于10的逻辑表达式是 X 10 X 0 X 0 X 10 2020 4 7 14 能正确判断变量x中的字符是英文字母的表达式是 X a X A X Z 2020 4 7 15 if选择结构 必要时 注意使用复合语句 2020 4 7 16 includeintmain void inta b max scanf d d 示例 求两个整数中较大的数 inta b max 键盘输入a b值 a max max b 1 0 b max 输出max值 if 表达式 语句 2020 4 7 17 includeintmain void inta b max scanf d d 示例 求两个整数中较大的数 inta b max 键盘输入a b值 a b 1 0 a max 输出max值 if 表达式 语句1else语句2 b max 2020 4 7 18 if else形式的执行流程 if else形式结构 if 表达式 语句1 else语句2 2020 4 7 19 includeintmain void inta b max scanf d d 示例 求两个整数中较大的数 可以通过条件表达式来完成赋值 max a b a b 2020 4 7 20 条件运算符 条件表达式的形式 表达式1 表达式2 表达式3计算过程 先计算表达式1 若其值为非零 则结果为表达式2的值 否则就是表达式3的值 条件运算符和条件表达式 2020 4 7 21 示例2 根据如下描述的算法 编程 includeintmain void floata b scanf f f 必须用复合语句 定义变量 键盘输入两个实数 a b 1 0 a b互换 依次输出a b的值 t 2020 4 7 22 练习 阅读下列源程序 写出运行结果 includeintmain void inta 4 b 3 c 3 t 0 if a c t a a c c t printf d d d n a b c return0 结果 303 2020 4 7 23 示例3 求ax2 bx c 0的实根 要求 a b c的值从键盘输入 a不等于0 include includevoidmain inta b c floatd x1 x2 scanf d d d 思考 若改为求两个根 应如何修改源程序 2020 4 7 24 1 x0 请编写程序 输入一个x值 输出对应的y值 if x 0 y 1 elseif x 0 y 0 elsey 1 变量定义 由键盘输入x值 X 0 1 0 y 1 X 0 1 0 y 0 y 1 输出x y值 2020 4 7 25 else if形式结构 if 表达式1 语句1 elseif 表达式2 语句2 else语句n 1 else if形式的执行流程 2020 4 7 26 p633 1输入三角形的三边a b c 判断a b c 能否构成三角形 何种类型的三角形 等腰 等边 直角 等腰直角 一般 include includevoidmain floata b c printf 请输入三角形边长 n scanf f f f if a b c b c a c a b printf 不能够成三角形 n elseif a a b b c c b b c c a a c c a a b b if a b b c c a printf 等腰直角三角形 n elseprintf 直角三角形 n elseif a b 2020 4 7 27 示例5 请仔细检查下列程序 includevoidmain intx y scanf d x ifx 1y x else 1 x 10 y 2x 1 y 3x 11 printf d y 2020 4 7 28 在一个if语句中又包含了另一个if语句 称为if语句的嵌套 一般形式为 if if 语句1 else语句2 elseif 语句3 else语句4 C语言规定 else总是和它上面离它最近的if配对 if语句的嵌套 2020 4 7 29 程序段1 程序段2 在if子句中嵌套 在else子句中嵌套 if x 0 if x 0 y 1 elsey 0 elsey 1 if x 0 y 1 elseif x 0 y 0 elsey 1 1 x0 请编写程序 输入一个x值 输出对应的y值 2020 4 7 30 include includevoidmain 已知三角形的三边 计算其面积 inta b c floats doublere scanf d d d 示例7 2020 4 7 31 复习小结 关系运算符和关系表达式 逻辑运算符和逻辑表达式 条件表达式 if语句 if else形式 if 表达式 语句1 else语句2 if形式 if 表达式 语句 else if形式if 表达式1 语句1 elseif 表达式2 语句2 else语句n 2020 4 7 32 示例8 从键盘输入一个整数放在a中 当输入的值为1时 显示A 输入2时显示B 输入3时显示C 当输入其他整数时显示D 2020 4 7 33 多分支控制语句 switch语句 switch语句是实现多分支选择结构的另一个语句 switch 表达式 case常量表达式1 语句1 break case常量表达式n 语句n break default 语句n 1 switch语句的基本格式 各常量表达式的值必须互不相同 且必须是整型或字符型 2020 4 7 34 示例 阅读下列源程序 请写出运行结果 includevoidmain intj scanf d 输入1结果111输入2结果 输入3结果 2020 4 7 35 示例 源程序 includevoidmain inta scanf d 2020 4 7 36 示例 将1至7中的任意一个数字转化成对应的英文星期几的前三个字母 如1转化为Mon 7转化为Sun等 includevoidmain inta printf 请输入整数 scanf d 输入的不是0至7的整数时执行 2020 4 7 37 示例7 用公式f p w s 1 d 计算运输费 吨公里运价 运输距离 折扣 货重 s 250 公里 d 0250 s 500d 0 02500 s 1000d 0 051000 s 2000d 0 082000 s 3000d 0 103000 sd 0 15 switch 表达式 case常量表达式1 语句1 break case常量表达式n 语句n break default 语句n 1 示例 2020 4 7 38 用if语句 else if语句完成上述例题 并做对比 要根据运输距离计算折扣d 关键是要构造switch后的表达式 根据题目 选择c s 250来求c的值 if s 3000 c 12 elsec s 250 程序中当c的值为2 3时 d的值都是0 05 则这两个case语句可以共同使用一个语句 分析 说明 2020 4 7 39 源程序 includevoidmain intc s floatf p w d scanf f f d case4 case5 case6 case7 d 0 08 break case8 case9 case10 case11 d 0 01 break case12 d 0 15 f p w s 1 d printf 运费 2f n f 2020 4 7 40 思考 如果将全部的break语句去掉会有什么结果 2020 4 7 41 选择结构应用举例 输入三个整数 输出最大数和最小数 定义变量a b c max min 输入a b c的值 a b 1 0 max amin b max bmin a max c 1 0 max c min c 1 min c 0 输出max和min的值 includevoidmain inta b c max min scanf d d d 2020 4 7 42 编写简单的计算器程序 用户输入运算数和四则运算符 输出计算结果 floata b charc 输入一个运算符 输入参与运算的两个运算数 c 其他 计算和并输出结果 计算差并输出结果 计算积并输出结果 计算商并输出结果 输出错误信息 includevoidmain floata b charc printf 输入一个运算符 scanf c 2020 4 7 43 循环结构程序设计 示例9 编写满足1 2 3 n 500中最大的n并求其和的程序 本题是一个累加求和的问题 当累加和sum 500时反复执行循环体 sum n n n 1 否则结束循环 0 1 2020 4 7 44 循环结构需要解决的两个问题 控制循环执行的条件表示可以使用c中的任意表达式 一般是关系表达式或逻辑表达式循环结构的结构描述 2020 4 7 45 格式 while 表达式 语句 0 真 非0 表达式 循环体外语句 语句 执行流程 while语句 注意使用复合语句 2020 4 7 46 示例9 编写满足1 2 3 n 500中最大的n并求其和的程序 includevoidmain intn 1 sum 0 while sum 500 sum n n n 1 n n 1 sum sum n printf n d sum d n n 1 sum 可使用自增运算符描述来提高编译效率 n 2020 4 7 47 自增和自减运算符 运算符的作用是使变量的值增1 运算符的作用是使变量的值减1 常见的用法有 i i在使用i前 先使i的值加 减 1i i 在使用i后 先使i的值加 减 1 2020 4 7 48 示例 已知i 5j i j i j i j i 5 6 6 6 i 1不等同于i 2020 4 7 49 注意 1自增和自减运算符只能用于变量 表达式 x y 是不合法的 2自增和自减运算符的结合方向是 自右向左 如表达式 i 等价于 i 3具有一定的二义性 使用时请慎重 如 设i原值是3 则 i i i 的值可能是9 也可能是12 2020 4 7 50 练习 已知a 3 b 0 c 2 则执行下列表达式后a b c分别是多少 1 a b c 2 a b c 3 1 2 3 0 2 2020 4 7 51 逗号运算符和逗号表达式逗号运算符 逗号表达式 表达式1 表达式2求解过程 先求解表达式1 再求表达式2 整个逗号表达式的值是表达式2的值 2020 4 7 52 逗号运算符和逗号表达式 续 例如a 3a 4 6 a 5 整个逗号表达式的值为29 注意一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式 例如 a 4 6 a 5 a 6 整个表达式的值为30 逗号运算符是所有运算符中级别最低的 2020 4 7 53 练习 下面程序段的输出结果 inta b c a b c 5 b b c printf a d b d c d n a b c 下面程序段的输出结果 inta 10 b 10 c d c a b a b d a b a b printf a d b d c d d d n a b c d a 11 b 6 c 6 a 10 b 10 c 12 d 11 考虑 号和 的优先级别 2020 4 7 54 格式 do语句while 表达式 真 非0 表达式 语句 循环体外语句 执行流程 do while语句 假 0 2020 4 7 55 示例 includevoidmain intk 100 while k 0 k k 1 printf d k includevoidmain intk 100 dok k 1 while k 0 printf d k 结果 100 结果 99 2020 4 7 56 示例9 编写满足1 2 3 n 500中最大的n并求其和的程序 第二种解法 0 1 includevoidmain intn 1 sum 0 do sum n n while sum 500 n sum sum n printf n d sum d n 1 sum 2020 4 7 57 程序 示例10 求两个数m和n的最大公约数 当mm r nm n r直到r 0时 输出n的值 当r 0时 输出n值 2020 4 7 58 includevoidmain intm n r scanf d d 2020 4 7 59 复习小结 1 多分支选择结构语句 2 自增 自减及逗号表达式的正确计算 3 循环结构及while do while语句 switch 表达式 case常量表达式1 语句1 break case常量表达式n 语句n break default 语句n 1 2020 4 7 60 复习小结 续 格式 while 表达式 语句 while语句 格式 do语句while 表达式 do while语句 2020 4 7 61 includevoidmain longa 1 b 1 j 1 while j 15 printf 8ld 8ld a b a a b b b a j 示例11 请编程输出一数列 已知第一 第二个数都是1 从第三个数开始 每个数都是与其相邻的前两个数之和 求这一数列的前30个数 请编程 2020 4 7 62 思考 若将示例10 改为求这一数列 直到其数不小于105 应该如何编程 变量定义 a 1 b 1 输出a值 当b 105时 输出b值 a a b a b值互换 includevoidmain longa 1 b 1 c printf n 8ld a while b 1e 5 printf 8ld b a a b c a a b b c 2020 4 7 63 格式 for 表达式1 表达式2 表达式3 语句 0 真 非0 表达式2 语句计算表达式3 循环体外语句 表达式1 执行流程 for语句 表达式1 2 3可以是任何类型的表达式 甚至可以省略 2020 4 7 64 示例9 编写满足1 2 3 n 500中最大的n并求其和的程序 第三种解法 includevoidmain intn sum 0 for n 1 sum 500 n sum sum n n sum sum n printf d d n 1 sum includevoidmain intn sum for n 0 sum 0 sum 500 sum n n n sum sum n printf d d n 1 sum 2020 4 7 65 includevoidmain inti sum for i 1 sum 0 i 10 i sum sum i printf d sum 练习 用for语句编程 计算1 2 10 思考 1 若改用while或do while语句编程 应如何修改源程序 2 求若干个整数的累加和 应如何编程 2020 4 7 66 参考算法 2020 4 7 67 示例12 在3 100之间所有3的倍数中 找出个位数为2的数 定义变量i for i 3 i 100 i 3 i 10 2 输出i值 includevoidmain inti i从3开始 每循环一次增加3 for i 3 i 100 i 3 if i 10 2 i 10的值就是i的个位数 printf 4d i printf n 2020 4 7 68 includevoidmain intj find x scanf d 示例13 对任意不小于3的正整数 判断其是否是素数 请编程 for j 2 find 1 j x 1j find 0 x是素数 x不是素数 通过设置标志位 来控制循环 2020 4 7 69 示例14 对任意n个不小于3的正整数 求出素数的累加和 请编程 for i 1 i n i 输入x的值 for j 2 find 1 j x 1j find 0 0 1 s x 输出s的值 2020 4 7 70 一个循环体内又包含另一个完整的循环结构 称为循环的嵌套 内嵌的循环中还可以嵌套循环 这就是多重循环 循环的嵌套 2020 4 7 71 for while Do for while while for for for 注意 以下四种均为合法的嵌套循环结构 2020 4 7 72 示例14 对任意n个不小于3的正整数 求出素数的累加和 请编程 includevoidmain inti find x n j s 0 scanf d 2020 4 7 73 练习 阅读下列源程序 写出运行结果 includevoidmain inti j for i 1 i 9 i for j 1 j i j printf 3d i j printf n 2020 4 7 74 输出结果 12436948121651015202561218243036714212835424981624324048566491827364554637281 2020 4 7 75 阅读下列源程序 写出运行结果 includevoidmain inti j for i 1 i 4 i for j 1 j 5 i j printf for j 1 j 2 i 1 j printf printf n 2020 4 7 76 阅读下列源程序 写出运行结果 includevoidmain floatsum 1 0 t s 1 0 inti for i 1 i 100 i t s i sum sum t s s printf sum 5 4f n sum 1 1 2 1 3 1 4 1 99 1 100 2020 4 7 77 break语句用于循环语句和switch语句 作用 跳出循环语句和switch语句 while if break 示例 includevoidmain inti s 0 for i 1 i5 break printf s d n s break语句 1361015 2020 4 7 78 示例13 对任意不小于3的正整数 判断其是否是素数 请编程 includevoidmain intj find x scanf d 通过break语句提前结束循环 2020 4 7 79 示例12 解法2 对任意不小于3的正整数 判断其是否是素数 请编程 include includevoidmain intx i j scanf d 2020 4 7 80 continue语句类似于break语句 但不是退出循环 而是跳过循环体下面未执行的语句 接着执行循环下一次迭代 如 while if continue continue语句 includevoidmain intn for n 100 n 200 n if n 3 0 continue printf 5d n 功能 2020 4 7 81 复习小结 1 顺序结构程序设计 2 选择结构程序设计 3 循环结构程序设计 注意 break和continue语句的应用 库函数调用语句 赋值等表达式语句 if语句 Switch语句 条件表达式 while循环 do循环 for循环 case后的表达式中不能出现变量 并且数据类型必须是整型 字符型或枚举型 各常量表达式必须互不相同 2020 4 7 82 本次实验内容 实验教程中实验地点 2020 4 7 83 循环结构应用举例 示例15 用近似公式求e 1 1 1 1 2 1 n 分析 设t分别代表求和公式中的每一项 则第i项总可以用第i 1项推算出来 即t t i includevoidmain floate 1 0 t 1 0 inti n scanf d 2020 4 7 84 实验2 3的参考源程序 includevoidmain doublea ra tax pr intb scanf lf case4 case5 case6 case7 case8 case9 ra 0 10 break case10 ra 0 15 tax a ra pr a tax printf na 1f n a printf rate 2ftax 2fprofit 2f n ra tax pr 2020 4 7 85 includevoidmain inti doublea rate tax profit printf 输入奖金数目a scanf lf switch i case0 rate 0 0 tax 0 0 profit a break case1 tax a 500 0 05 profit a tax rate tax a break case2 case3 tax a 1000 0 08 500 0 05 profit a tax rate tax a break 2020 4 7 86 case4 case5 case6 case7 case8 case9 tax a 2000 0 10 1000 0 08 500 0 05 profit a tax rate tax a break case10 default tax a 5000 0 15 2000 0 10 1000 0 08 500 0 05 profit a tax rate tax a printf nrate 4f tax 4f profit 4f n rate tax profit 2020 4 7 87 示例16 百钱买百鸡问题 公鸡每只5元 母鸡每只3元 小鸡3只一元 问一百元买一百只鸡有几种解法 includevoidmain intx y z for x 0 x 19 x for y 0 y 33 x y z 100 x y if z 3 0 枚举法 2020 4 7 88 示例17 猴子吃桃 第一天摘下若干个桃子 当天吃了一半后又多吃了一个 从第二天起 猴子每天都是吃了前一天剩下的一半多1个桃子 到第10天 猴子想吃桃子时发现只剩下了1个桃子 请编程计算猴子第一天共摘下多少个桃子 分析 根据题意 可以依次从第10天推出第九天的桃子数 从第九天推出第8天的桃子数 用循环的算法来解决 循环变量控制天数 从10至1 循环体 n1 n2 1 2和n2 n1其中n2为当天的桃子数 n1为前一天的桃子数 递推法 2020 4 7 89 参考源程序 includevoidmain inti n1 n2 n2为当天的桃子数 n1为前一天的桃子数 for i 10 n2 1 i 1 i n1 n2 1 2 依次求出前一天的桃子数 n2 n1 printf 第1天摘的桃子数为 d n n1 2020 4 7 90 补充 字符输入 输出函数 格式 getchar 功能 从标准设备 一般是键盘 输入一个字符 getchar函数没有参数 函数值就是从设备输入的字符 头文件为stdio h 2020 4 7 91 补充 字符输入 输出函数 格式 putchar c 功能 将c值所对应的字符输出到标准输出设备上 输出设备一般为显示器 c可以是整型或字符型 一次只能输出一个字符 头文件为stdio h 2020 4 7 92 示例18 编程 对键盘输入的任何一个大写英文字符输出与此对应的小写字符 输入Cc c 32输出c 转换的算法 2020 4 7 93 includevoidmain charc c getchar c c 32 putchar c 输入c 转换 输出 2020 4 7 94 示例19 阅读下列源程序 总结其功能 includevoidmain ints

温馨提示

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

评论

0/150

提交评论