C语言程序设计第3章.ppt

上传人:max****ui 文档编号:6333854 上传时间:2020-02-23 格式:PPT 页数:93 大小:1.28MB
返回 下载 相关 举报
C语言程序设计第3章.ppt_第1页
第1页 / 共93页
C语言程序设计第3章.ppt_第2页
第2页 / 共93页
C语言程序设计第3章.ppt_第3页
第3页 / 共93页
点击查看更多>>
资源描述
高级语言程序设计 肖洁大连工业大学管理学院 第三章C语言程序的流程控制 算法 1 关系运算符和关系表达式 2 选择结构程序设计 3 逻辑运算符和逻辑表达式 4 循环结构程序设计 5 3 1算法 一 算法的概念 二 算法的基本性质 三 结构化程序设计 四 算法的描述 一 算法的概念 算法 解决问题确定的方法和有限的步骤称作为算法 一个程序应包括两个方面的内容 对数据的描述 数据结构对操作的描述 算法 完整的程序设计应该是 程序设计 数据结构 算法 方法 工具 二 算法的基本性质 有穷性 算法必须在执行有限个操作后终止 确定性 算法中每一步的含义必须是确切的 不可出现任何二义性 有效性 算法中的每一步操作都应该能有效执行 一个不可执行的操作是无效的 有0个或多个输入 有1个或多个输出 三 结构化程序设计 结构化程序设计方法主要包括 只采用顺序 选择 循环三种基本的程序控制结构来编制程序 从而使程序具有良好的结构 程序设计自顶而下 用结构化程序设计流程图表示算法 四 算法的描述 1 流程图 2 N S图 3 伪代码 四 算法的描述 1 流程图 常用的流程图标准化符号 用流程图描述程序的三种基本结构 特点 一个入口 一个出口顺序执行 顺序结构 选择结构 if语句 功能 判断条件为真时执行语句 否则跳过语句 单选择双选择 用流程图描述程序的三种基本结构 循环结构 while循环 do while型循环 用流程图描述程序的三种基本结构 例 交换两个变量的值 a t b 1 2 3 例3 1用流程图描述从三个数中取最大数的算法 求最大值 最小值问题 常用算法 例如一种打擂台的方法 n个数中 先假设第一个数为最大值 成为擂主 依次同第2 3 n个数据逐一比较 一旦某个数大 马上替换擂主 所有值比较完 最大值也就获得 求最小值问题则先假设为最小值 四 算法的描述 2 N S图 N S图的每一种基本结构都是一个矩形框 c 当型重复结构 a 顺序结构 b 选择结构 四 算法的描述 3 伪代码 四 算法的描述 输入a b c if a b max a elsemax b if max c 输出max else输出c 初始化 max 0 i 1 当 i max max n 输出max 小结 算法概念算法特性结构化程序设计 顺序 选择 循环结构算法的描述 标准流程图 N S图 伪代码交换两个数算法求一系列数最大值的算法 3 2关系运算符和关系表达式 一 关系运算符关系运算是进行比较大小的运算 并产生运算结果1 真 或0 假 语言中的关系运算符有 种 优先次序 前 种同级 高于后 种 后 种同级 关系运算符的结合性为从左到右 如 3 22 a c 6c a b 算术运算符 高 关系运算符赋值运算符 低 注意 二 关系表达式关系表达式的值为逻辑值 真 或 假 注意 语言没有逻辑型数据 关系表达式的真 假是以数值 代表 真 以 代表 假 例 设a 3 b 2 c 1 求下列表达式的值 c b a b 1 b cb c 自左至右 3 2关系运算符和关系表达式 注意 避免对两个实数表达式作 相等 或 不相等 的判别 1 0 3 0 3 0 1 0 fabs 1 0 3 0 3 0 1 0 1e 5 3 2关系运算符和关系表达式 要表示x在区间 a b 中 a x b a x x b 练习 1 设有变量定义intz 分析z 2 0的值 如果z为偶数 则z 2 0的值为1 否则z为奇数 则z 2 0的值为0 因此 z 2 0是断言 z是偶数 的c语言判断式 2 x与y的个位数字相同x 10 y 10 如何判断十位数上数字相同 3 3逻辑运算与逻辑表达式 一 逻辑运算符和表达式C语言提供三种逻辑运算符 逻辑与 逻辑或 逻辑非 说明 1 和 是 双目 元 运算符 它要求有两个操作数 2 是 单目 元 运算符 只要求有一个操作数 3 优先级次序 高低 a ba b均为真 则a b为1 真 a ba b之一为真 则a b为1 真 a若a为真 则 a为假 非 高 算术运算符关系运算符逻辑运算符 和 赋值运算符 低 例 a bn 3 a b c c d a d m n 3 3 3逻辑运算与逻辑表达式 例 判别某一年year是否闰年 条件 能被 整除 但不能被100整除 或能被 整除 又能被400整除 判断闰年的逻辑表达式为 year 4 0 year 100 0 year 400 0 判断非闰年的逻辑表达式为 year 4 0 year 100 0 year 400 0 3 3逻辑运算与逻辑表达式 小结 关系运算符 优先级 结合性关系运算表达式结果是逻辑值 以数值 代表 真 以 代表 假 逻辑运算符 优先级 结合性逻辑运算表达式结果逻辑值可以用来表示选择或循环条件 3 4选择型程序设计 一 if结构 二 if elseif结构 三 switch结构 四 条件表达式 根据给定的条件判断决定要执行的操作 功能 判断条件为真时执行语句否则跳过语句 单选择 语句格式 if 条件 语句组 例 if a b x a 1 单选择if语句 条件可以是关系表达式或逻辑表达式 一 if语句 2 双选择if语句 语句格式 if 条件 语句组1 else 语句组2 双选择 功能 当条件为非零时执行语句组1否则执行语句组2 一 if语句 if a 60 printf 及格 n elseprintf 不及格 n main inta scanf d 输出不及格的成绩 例1 一 if语句 includemain inta b max printf Inputaandb scanf d d 求a和b两数中较大的一个 例2 一 if语句 说出下列程序的输出结果 includemain inta scanf d 例3 程序运行 输入58 输出 输入30 输出 一 if语句 3 有关if语句的说明 条件后面不加分号语句之后有分号else不是语句 不能单独使用当if后有多个执行语句时 必须用 将多个语句括起来 构成一个复合语句 而 之外不必有分号 if后面的表达式一般为逻辑表达式或关系表达式 也可以是任意数值类型表达式 一 if语句 该语句是合法的 if 3 printf ok 4 if语句的嵌套 格式 if 表达式 if 表达式1 语句11 else语句12 elseif 表达式2 语句21 else语句22 在if语句的 语句1 或 语句2 中又包含着if语句 判断表达式的值 若为非0 再判断表达式1的值 非0执行语句11 否则执行语句12若表达式的值为0 再判断表达式2的值 非0执行语句21 否则执行语句22 功能 一 if语句 下列程序段表示的数学式 y 1 if x 0 if x 0 y 2 sin x elsey 0 程序段表示的数学式1 0 x0 讨论 给第二个if行加 后表示的数学式 程序段表示的数学式2 1 x0 数学式1程序可表示为 y 1 if x 0 if x 0 y 2 sin x elsey 0 思考 强调 if和else可成对出现 也可不成对出现 每个else都与距其最近的if配对 一 if语句 写一程序 判断某一年是否闰年 其中 leap代表闰年的信息 leap 1闰年 leap 0非闰年main intyear leap scanf d 例4 输入 1989结果为 1989isnotaleapyear输入 2000结果为 2000isaleapyear 1 if语句的多重选择形式 if 表达式1 语句1elseif 表达式2 语句2elseif 表达式3 语句3 elseif 表达式m 语句melse语句n 仅执行表达式为真的后面内嵌语句 若所有的表达式值都为0 则执行最后一个else后的内嵌语句 二 if elseif结构 二 if elseif结构 根据百分制分数决定成绩的等级 80分以上为A级 70分及以上 80分以下 B级 60分及以上 70分以下 C级 60分以下 D级 二 if elseif结构 例5 includeintmain void floatscore printf Inputascore scanf f 2 缩排是源程序普遍使用的书写方法 它是语句相对于上一条语句退后若干个字符位置的书写方法 缩排的目的就是为了使源程序的层次清晰明了 增加源程序的可读性 includemain intx scanf d 二 if elseif结构 main inti 1 j 1 k 2 if j k 程序输出结果是 B A 2B 3C 4D 编译时有错 无结果 三 switch语句 1 一般格式 switch 表达式 case常量表达式1 语句序列1 break case常量表达式2 语句序列2 break case常量表达式n 语句序列n break default 语句序列n 1 表达式 语句序列1 语句序列2 语句序列n 语句序列n 1 常量表达式1 常量表达式2 常量表达式n default 2 流程图 语句序列1 常量表达式1 语句序列2 常量表达式2 语句序列i 常量表达式i 语句序列n 常量表达式n 语句序列n 1 default break break break break break 三 switch语句 3 switch语句说明 常量表达式 的值一般是整型 字符型或枚举类型 并且是互不相同的 default子句是switch中的可选项 其位置不一定要写在最后 多个case可以共用一组语句 break语句的作用是结束本层switch语句 case后的语句序列可以是一条语句 也可以是多条语句 此时多条语句不必用括号括起来 三 switch语句 switch结构允许嵌套 include stdio h main intscore chargrade printf pleaseinputastudent sscore n scanf d case6 grade D break case7 grade C break case8 grade B break case9 case10 grade A break default printf dataerror n grade printf score d grade c score grade 例6 includemain intscore chargrade printf pleaseinputastudent sscore n scanf d 书例3 9联想猜词游戏 例7 三 switch语句 运输公司对用户计算运费 距离 s 越远 每公里运费越低 折扣为d discount 每公里每吨货物的基本运费为p price 货物重w weight 总运费f freight f p w s 1 d 标准如下 例8 s 250后分界值分别为1 2 4 8 12 main intc s floatp w d f scanf f f d case4 case5 case6 case7 d 8 break case8 case9 case10 case11 d 10 break case12 d 15 f p w s 1 d 100 0 printf freight 15 4f f 运行 100 20 300结果 freight 588000 0000 格式 表达式 表达式 表达式 功能 判断表达式 的值 该值为 非0 则取表达式2的值 为 0 时 取表达式3的值 如 max a b a b若a 3 b 2 则max 说明 1 条件运算符优于赋值运算符 2 条件运算符的结合方向为 自右向左 如 当a 1 b 2 c 3 d 4时 表达式a b a c d c d 值为 如 若x 1 y 0 a 3 b 3表达式 y x a b a b值为 4 0 四 条件运算符 if y 0 x y elsex y y 0 x y x y 等价 等价 x y 0 y y 3 ifelse可以完成与条件运算符 完成相同的任务 并且可以进行相应的转换 四 条件运算符 4 条件表达式中的表达式 的类型可以与表达式 和表达式 的类型不同 条件表达式值的类型为二者中较高的类型 x y 1 2 6 当x y成立时条件表达式的值为1 2 否则为实型数据6 0 8bytes c x y 1 s 当x y成立时c 1 否则c s 4bytes 四 条件运算符 将输入的大写字母转换为小写字母 main charch scanf c 输入 输出a 例9 四 条件运算符 includeintmain void floata b printf input2relasplease scanf f f 书例3 11输入两数 输出大者 例10 四 条件运算符 小结 if语句实现单分支if else语句实现两个分支switch break语句实现多分支嵌套if语句可以实现复杂的分支结构 注意else与哪个if结合 条件表达式 3 5循环结构程序设计 一 迭代与穷举算法 二 while循环结构 三 do while结构 四 for结构 五 break与continue 一 迭代与穷举算法 1 迭代 是一个不断用新值取代变量的旧值 或由旧值递推出变量的新值的过程 例3 12人口增长问题 按年0 2 的增长速度 现有13亿人 10年后将有多少人 设现人口数为m 则第1年后人口变为 m m 1 0 2 迭代与下列因素有关 初值 迭代公式 迭代次数或迭代终止标志 一 迭代与穷举算法 例3 13兔子繁殖问题 设有一对新生兔子 从第三个月开始它们每个月都生一对兔子 按此规律 并假设没有兔子死亡 一年后共有多少对兔子 人们发现每月的兔子数组成如下数列 1 1 2 3 5 8 13 21 34 并把它称为Fibonacci数列 从第3个数开始 每一个数都是其前面两个相邻数之和 一 迭代与穷举算法 一 迭代与穷举算法 幼仔数 成兔数 总数 一 迭代与穷举算法 上述算法可以描述为fib1 fib2 1 1 fibn fibn 1 fibn 2 n 3 2 fib fib1 fib2 fib1 fib2 为下一次迭代作准备 fib2 fib 赋初值 迭代公式 一 迭代与穷举算法 对问题的所有可能状态一一测试 直到找到解或将全部可能状态都测试过为止 2 穷举 一 迭代与穷举算法 循环控制有两种办法 计数法与标志法 一 迭代与穷举算法 例3 15输入10个数 将最大的一个数打印出来 一 迭代与穷举算法 当不想或无条件使用计数法时 可以使用标志法 一 迭代与穷举算法 例3 16百钱买百鸡问题 鸡翁一值钱五 鸡母一值钱三 鸡雏三值钱一 百钱买百鸡 问鸡翁 母 雏各几何 1 基本解题思路 cocks hens chicks 1005 cocks 3 hens chicks 3 100 二 While循环结构 while 表达式 循环体语句 1 语法形式 例3 17人口问题 includeintmain void doublem 13 inti 1 while i 10 m m 1 0 002 i printf Populationafter10yersis f n m return0 Populationafter10yersis 13 262353 二 While循环结构 例3 18Fibonacci算法C语言的程序实现 includemain intfib1 1 fib2 1 fib i 3 while i 12 fib fib1 fib2 fib1 fib2 fib2 fib i printf TheFibonaccinumberafter1yeris d n fib 二 While循环结构 例3 22百钱买百鸡 main intcocks 0 while cocks 19 inthens 0 while hens 33 intchicks chicks 100 cocks hens if 5 cocks 3 hens chicks 3 0 100 printf 8d 8d 8d n cocks hens chicks hens cocks 三 do while结构 do循环体while 表达式 1 do while循环语句的形式 先执行语句 后判断条件 循环体至少执行一次 例 用do while型循环求 main inti 1 sum 0 do sum sum i i while i 100 printf d sum 例 输入10个数 将最大的一个数打印出来 include defineFLAG 32768main intmax n printf Inputanumber scanf d 四 for结构 1 for循环语句的形式for 表达式1 表达式2 表达式3 语句 2 执行过程 说明 1 基本的应用形式 for 循环变量赋初值 循环条件 循环变量增值 例 求级数12 22 32 前10项之和 main inti sum 0 for i 1 i 10 i sum sum i i printf d sum 2 三个表达式均可缺省 但起分割作用的两个分号不可省略 例如 for 相当于while 1 表达式1省略 应在for之前对循环变量赋初值 i 1 for i 10 i sum sum i 说明 例 输出100以内所有偶数的和与所有奇数的和 main inti s1 0 s2 0 for i 1 i 100 i if i 2 0 s2 s2 i elses1 s1 i printf s1 d s2 d n s1 s2 计算Fibonacci数 includeintmain void intfib1 1 fib2 1 fib i for i 3 i 12 i fib fib1 fib2 fib1 fib2 fib2 fib printf TheFibonaccinumberafter1yearis d n fib return0 当使用计数方式控制重复过程时 采用for结构比较方便 三种循环语句的比较 for语句和while语句先判断条件 后执行语句 故循环体有可能一次也不执行 而do while语句的循环体至少执行一次 必须在while语句和do while语句之前对循环体变量赋初值 而for语句可在表达式1中对循环变量赋初值 在循环次数已经确定的情况下 习惯用for语句 而对于循环次数不确定只给出循环结束条件的问题 习惯用while语句解决 循环语句的嵌套 for i 1 i 2 i for j 1 j 2 j printf 3d i j printf n for i 1 i 2 i for j 1 j 2 j printf 3d i j printf n 输出结果 2334 输出结果 2334 五 break与continue 1 break语句语法 break 功能 将流程转到该循环结构的后面 中途退出循环结构 main intn for n 100 n 200 n if n 3 0 break printf 6d n 2 continue语句语法 continue 功能 结束循环体的本次执行 提前结束一个重复周期 main intn for n 100 n 200 n if n 3 0 continue printf 6d n 100101 小结 算法 迭代和穷举While do while for循环循环嵌套循环转向控制break与continue 练习 1 输入一个整数n 判断是否为素数 在2 n 2中能否找到一个整数m能将n整除 若m存在 则n不是素数 若找不到m 则n为素数 for循环结构用下列表达式控制 初值 m 2 循环条件 m n 2 修正 m 设标志flag 初始值为1 默认是素数 includeintmain void intm n flag 1 printf 请输入要测试的整数 scanf d scanf n m n 2 m 2 n m 0 flag 1 printf 不是 printf 是 Y Y Y F F F flag 1 flag 0 m Y 练习 2 编写程序输出图形 算法 1 输入m 2 for k 1 k m k 打印k个 换新行 细化 1 输入m 2 for k 1 k m k for j 1 j k j printf printf n includemain intk m j scanf d 练习 main inti j k n for n 100 n 999 n i n 100 j n 10 10 k n 10 if n i i i j j j k k k printf d n n 3 找出100 999之间的所有 水仙花 数 例如 153 13 33 53所以 153是 水仙花 数 分析 设100 n 999 i j k分别代表数n百位 十位 个位上的数字 则 i n 100j n 10 10k n 10 include math h include stdio h main ints floatn t pi t 1 pi 0 n 1 0 s 1 while fabs t 1e 6 pi pi t n n 2 s s t s n pi pi 4 printf pi 10 6f n pi 练习 t 1 pi 0 n 1 s 1当 t 10 6pi pi tn n 2s st s npi pi 4输出pi 求 4 练习 5 从1月1日开始存钱 第一天存1分钱 第二天存2分钱 第三天4分 第四天是8 问一年后存多少钱 三个变量 天数 钱数 每天 总钱数 天数作循环变量 d 1 d 365 d 每天存的钱数 m 1 m m 2 一年存的总钱数 sum 0 sum sum m 练习 intmain void doublemoney 1 day sum 0 for day 1 day 365 day sum money money money 2 printf 20 2lf sum 100 return0
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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