控制结构和数据文件.ppt_第1页
控制结构和数据文件.ppt_第2页
控制结构和数据文件.ppt_第3页
控制结构和数据文件.ppt_第4页
控制结构和数据文件.ppt_第5页
已阅读5页,还剩244页未读 继续免费阅读

下载本文档

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

文档简介

第3章学习构造复杂程序 控制结构和数据文件 C语言程序设计ProgramminginC 2020 3 26 第3章控制结构和数据文件 2 工作流程描述工作活动的流向顺序 帮助管理者了解实际工作活动 消除工作过程中多余的工作环节 合并同类活动 使工作流程更为经济 合理和简便 从而提高工作效率 2020 3 26 第3章控制结构和数据文件 3 本章概要 顺序 选择和循环是结构化程序的三大结构 体现了结构化程序设计的特点 本章着重介绍选择和循环结构程序设计 重点 难点 重点 1 分支语句和循环语句 3 选择及循环结构程序设计难点 1 多分支语句 2 循环嵌套 2020 3 26 第3章控制结构和数据文件 4 1 理解自顶向下和结构化程序设计思想2 理解并能构造关系表达式和逻辑表达式3 应用选择结构解决问题 编制程序4 应用循环结构编制程序5 掌握几种常用算法6 应用结构化程序设计方法解决实际问题7 理解并会简单使用从信息文件中读取数据和向信息文件中写入数据的方法 本章教学目标 2020 3 26 第3章控制结构和数据文件 5 关键词语双语化 1 在for 语句里 infor statement 2 在条件里 incondition 3 默认 default 4 关系运算符 relationoperator 5 循环机制 loopingmechanisms 6 if else语句 if elsestatement 2020 3 26 第3章控制结构和数据文件 6 本章内容 3 1流程控制概念3 2流程控制的条件设计3 3选择结构程序设计3 4软件开发与项目案例设计3 5循环结构程序设计3 6数据文件 2020 3 26 第3章控制结构和数据文件 7 本章项目任务 软件界面的进一步优化和简单数据输入输出功能的实现 2020 3 26 第3章控制结构和数据文件 8 3 1流程控制概念 实际工作流程 反映在完成工作的过程中 不同事件之间的因果和时间关系 工作过程进行中仅有一个事件发生 则没有控制意义 分析和描述工作流程常有五个步骤 目的分析 做什么 为什么做 有必要做 应该做什么 地点分析 合并相关工作活动 在什么地方做某项活动 为何在该处做 可否在别处做 应当在何处做 顺序分析 何时做某事 为何此时做 可否在其它时间做 应当何时做 人员分析 分析人员匹配的合理性 谁做 为何由此人做 可否用其他人做 应当由谁来做 方法分析 目的在于简化操作 如何做 为何这样做 可否用其他方法做 应当用什么方法来做 2020 3 26 第3章控制结构和数据文件 9 实际工作流程设计与控制对应程序设计中的六步法程序流程控制 flowcontrol 反映程序语句执行的流程顺序 流程控制是程序设计的基本工作 常用三种不同的控制结构构造程序语句的执行流程 顺序选择循环流程控制结构主要讲述 条件判断循环控制转移 2020 3 26 第3章控制结构和数据文件 10 3 2流程控制中的条件 Condition 设计 3 2 1关系运算符与关系表达式3 2 2逻辑运算符和逻辑表达式3 2 3控制条件的描述与表示 流程控制是程序的灵魂 流程控制中需要测试控制条件 选择 循环程序结构中常用 关系或逻辑运算 表达式做条件控制条件是能够计算出 真 或 假 的表达式 叫条件表达式条件表达式由关系运算符 逻辑运算符 其它运算符和运算对象构成 2020 3 26 第3章控制结构和数据文件 11 3 2 1关系运算符与关系表达式 TheOperatorandExpressionsofRelations 程序中经常需要比较两个量的大小关系 以决定程序下一步的工作 比较两个量的运算符称为关系运算符由关系运算符将操作数连起来的表达式称为关系表达式 C语言提供了6个关系运算符 2020 3 26 第3章控制结构和数据文件 12 2020 3 26 第3章控制结构和数据文件 13 关系运算符 Therelationaloperatorsare 这四个运算符优先级是6级 优先级7级 双目运算符 结合方向 自左向右优先级 precedence 关系运算符 赋值 逗号运算符 关系表达式的值为逻辑值 也称布尔值 逻辑值只有两个 指定关系式成立时 逻辑结果为真 以1表示 指定关系不成立时 逻辑结果为假 以0表示 例运算符优先级c a b c a b a b c a b c a bc a b c 例inta 3 b 2 c 1 d f a b a b cb cbf a b c 表达式值1 表达式值1 表达式值0 表达式值0 f 0 2020 3 26 第3章控制结构和数据文件 14 例 5 2 7 8在C中是允许的 值为0k j i 5 根据运算符的左结合性 先计算k j 如果该式不成立 其值为0 再计算0 i 5 如果也不成立 则表达式值为0 关系运算的注意事项 例 includevoidmain floatd 123 45 if 123 45 d printf 1 n elseprintf 0 n 1 字符变量以对应的ASCII码参与运算 2 对于含多个关系运算符的表达式 根据运算符的左结合性计算 3 注意 和 的区别 例 include includevoidmain floatd 123 45 if fabs 123 45 d 1e 5 printf 1 n elseprintf 0 n fabs 是数学库函数 功能 求浮点数x的绝对值 原型为 externfloatfabs floatx 包含在math h头文件中 4 应避免对实数作相等或不等的判断 数学概念 a b 其中 为很小的正数 表示a和b之间的误差 可以根据要求进行调节 越小 a和b之间的差就越小 若该式成立 则认为a与b之间误差不超过 近似相等 否则认为a和b不相等 2020 3 26 第3章控制结构和数据文件 15 3 2 2逻辑运算符与逻辑表达式 TheOperatorandExpressionsofLogic C语言中有3个逻辑运算符 逻辑与 并且 逻辑或 或者 逻辑非 取反 为单目运算符 和 为双目运算符 优先级顺序 的优先级高于算术运算符 右结合性 和 的优先级低于关系运算符 左结合性 2020 3 26 第3章控制结构和数据文件 16 逻辑运算结果也为逻辑值 例 若 a 4 b 5 则 1 a 2 a b 3 a b 4 a b 5 4 0 2 6 5 3 2 8 4 0 7 c d 值为1 值为1 值为1 值为1 值为0 5 3 2 8 4 0 值为1 值为1 2020 3 26 第3章控制结构和数据文件 17 例ab x ya b x ya b a a x x b a b x y a b x y a a b 只提倡用关系运算符和逻辑运算符构成的表达式表示逻辑值 不提倡使用赋值语句以及算术运算符组成的表达式 2020 3 26 第3章控制结构和数据文件 18 短路特性 逻辑表达式求解时 并非所有的逻辑运算符都被执行 只是在必须执行下一个逻辑运算符才能求出表达式的解时 才执行该运算符 例 intx 3 y 0 z 6 x y 1 z 2 解答 表达式 x的值为0 整个表达式即为假 则表达式y 1和z 2不再计算 这样z值没有被修改 2020 3 26 第3章控制结构和数据文件 19 例 判断变量a的值是否在12到30之间 数学表达式写为 12 a 30 若把这样的表达式放在程序里 编译通过 但在运行时会出问题 首先进行12 a的判断 无论结果为真 1 或假 0 1 30或0 30永远成立 由此看来这种写法在程序中肯定是错的 正确的写法应该是 12 a a 30 如果变量a的值大于12并且小于30 注意区分C语言的关系表达式与数学上的比较运算表达式 并将数学上的比较运算转化为合法的C关系表达式 2020 3 26 第3章控制结构和数据文件 20 例如 x 1 x 1 x 100 判断x值是否小于1或大于等于100 位于数轴的两端 x 0 y 0 判断x和y值是否都大于等于0 或位于第一象限含数轴 x y z x z y y z x 可用于判断三个数是否满足构成三角形的条件 ch A ch Z 用于判断变量ch是否为大写字母 2020 3 26 第3章控制结构和数据文件 21 3 2 3控制条件的描述与表示 常见的控制条件有如下几种形式 1 关系表达式 例 a ba 0a 0等expression 0等价于expressionexpression 0等价于 expression 2 逻辑表达式 例 a b c d等 3 算术表达式 例 a1等 1 对于简单的表示比较的条件 利用关系运算符就可以轻松构造 例如 表示 学生的语文成绩在90分以上 这样一个条件使用关系表达式 chinese 90表示 数学在95分以下 使用表达式 math 95一个数为奇数的条件表达式为n 2 0 2 如果要表示比较复杂的条件 则可以使用逻辑运算符将多个关系表达式组合起来 从而构成复杂的条件 例如 表示 学生的语文成绩在90分以上并且数学在95分以下 使用表达式 chinese 90 math A ch Z 3 对于更复杂的条件 可以使用 和逻辑 关系运算符构造条件表达式 常见的构造条件表达式的方法 2020 3 26 第3章控制结构和数据文件 22 分析 根据数学知识 闰年年份满足的条件为 如果年份能被4整除但不能被100整除 是闰年 年份能被400整除 也是闰年 例 设整型变量year表示年份 构造一个条件表达式 当year值为闰年时该条件表达式为 真 否则为 假 所以 判断闰年的条件表达式为下列二者之一 year 4 0 year 100 0 year 400 0表达式 的或运算完整地表示判断闰年的条件 year 4 0 year 100 0 year 400 0等价表示 year 4 0 year 100 0 year 400 0或year 4 0 year 100 year 400 0或 year 4 year 100 year 400 2020 3 26 第3章控制结构和数据文件 23 3 3选择结构 SelectionStructure 程序设计 3 3 1选择结构语句 ConditionalStatements 3 3 2选择结构的嵌套 Nest 3 3 3switch语句 break语句和goto语句 选择结构分为 单分支 if双分支 if else多分支 if else if swtitch 2020 3 26 第3章控制结构和数据文件 24 3 3 1选择结构语句 ConditionalStatements 分析 自然语言描述算法如下 1 输入x 2 如果x 0则y 3 x 否则y 2 x 3 输出y的值 定义变量y x 用户输入x X 0 y 3 x y 2 x 输出y 引例1 计算分段函数 2020 3 26 第3章控制结构和数据文件 25 引例2 学生查分时 应输出查询成绩 并只对分数高于85分的学生表示庆贺 定义变量y 从文件读取数据y y 85 输出 祝贺你 输出y 根据 条件表达式 的值选择不同的程序分支执行 分支流程控制用if语句 TheifStatement 实现 结论 2020 3 26 第3章控制结构和数据文件 26 if语句的基本语句形式if单分支if else双分支单分支语句格式 if condition statement双分支语句格式 if condition statement1elsestatement2说明 condition是控制条件表达式 圆括号 必不可少 例 ifb aarea a a 错 缺少条件括号 语法上 内嵌statement是一条语句 内嵌statement有多条语句时 用复合语句内嵌statement又是if分支语句时 构成分支嵌套结构 C标准规定 编译程序必须能支持至少15层分支嵌套 内嵌语句可以是 赋值语句函数调用语句控制语句复合语句空语句 2020 3 26 第3章控制结构和数据文件 27 if condition if条件结构 控制流程 语句 statement 条件 T F statement if condition 条件 F statement1 statement2 elsestatement2 statement1 T 2020 3 26 第3章控制结构和数据文件 28 例3 1 把大写字母转换为对应小写字母 分析 1 问题背景 使用QQ 邮箱等软件时经常要输入用户名和密码 对用户而言 输入的用户名可不区分大小写需要把输入的字母转换为相应的小 大 写字母再与系统内容 全大写或小写 进行判断比较 2 需求分析 从键盘输入一个字符 若是大写字母 输出其对应的小写字母 否则其它字符直接输出 3 数学建模 小写字母的ASCII码值 大写字母的ASCII码值 32 算法NS流程图描述 定义char型变量 ch ch ch 32 输出ch 输入字符ch ch A ch Z T F includevoidmain charch printf 请输入一个字符 n ch getchar printf 输入的原始字符为 c n ch if ch A 编码 例3 3 用 假设思想 法求任意两数中的较大数 必记算法 分析 假设思想 先假设某事物成立或不成立 然后判断事实是否如此 如果事实和假设条件不符 则对假设进行修正 设有变量x y max 假设较大的数是max x 然后反假设证之 如果max y条件成立 则假设错误 修改语句 max y 否则假设正确 输出总是大数的max值 定义变量x y max max y 输出max 输入x y 假设max x max y T F includevoidmain void intx y max printf 请输入两个实数 scanf d d 定义变量x y max max y 输出max 输入x y 假设max x max y T F 求三个数或更多数中的最大数或最小数都可以使用该算法 求三个数中的最小数 程序如下 includevoidmain void floatx y z min 定义x y z三个变量 printf 请输入三个实数 提示信息 scanf f f f 算法1 双分支语句floatx y max if x y max x elsemax y 输出max 双分支语句求两数中的较大数 算法2 双分支语句floatx y if x y 输出x else输出y 算法3 双分支语句floatx y max min if x y max x min y elsemax y min x 输出max min 算法4 单分支语句floatx y max max x ifmax ymax y 输出max 双分支 单分支 应用 数据排序 将x y中的数据按降序排列 算法分析 假设思想 1 定义变量x y t2 假设x y已按降序排列 输出x y 3 若x y是升序 则交换两个变量中的值 两两交换 4 输出x y includevoidmain void intx y t printf Enterx y scanf d d 定义变量x y t x y t x x y y t 输出x y includevoidmain void intx y printf Enterx y scanf d d 例3 4 数学中有许多有趣的数 如水仙花数 完数等 水仙花数是一个三位数 其各位数字的立方和恰等于这个数 例如153 13 53 33 153 编写程序 从键盘上输入一个三位的整数 判断其是否为水仙花数 分析 1 问题描述 判断一个三位整数num是否为水仙花数 2 数学建模和流程 分解num的每一位数字 ge num 10 个位 bai num 100 百位 shi num 10 10 十位 若num bai bai bai shi shi shi ge ge ge 则num为水仙花数 否则不是 定义变量num ge shi bai 输出yes 输入一个三位数num 从num分解ge shi bai 输出no includevoidmain void intnum bai shi ge printf 请输入一个三位的整数 scanf d 是水仙花数 T F 2020 3 26 第3章控制结构和数据文件 38 2 条件运算符和条件表达式 条件运算符是C语言中唯一的三目运算符 由 和 组成 条件表达式的一般形式为 表达式1 表达式2 表达式3说明 表达式1一般是控制条件表达式2和表达式3可以是C语言中任意合法的表达式 一般这两个表达式的值类型相同 2020 3 26 第3章控制结构和数据文件 39 功能 首先计算表达式1 条件 的逻辑值如结果为真 则计算表达式2的值 并将表达式2的值作为整个条件表达式的值 如结果为假 则计算表达式3的值 并将表达式3的值作为整个条件表达式的值 条件运算符可看作以下if语句的缩略形式 if 表达式1 条件表达式的值 表达式2的值else条件表达式的值 表达式3的值例 求两数中的较大数 max x y x y 条件运算符的优先级低于逻辑运算符 高于赋值操作符 自右向左结合 2020 3 26 第3章控制结构和数据文件 40 例3 5 从键盘输入一个数 判断其是奇数还是偶数 includevoidmain void intx printf x scanf d 2020 3 26 第3章控制结构和数据文件 41 趣味例题 编写一个程序统计某物品的数量 统计结束后将物品数量存储在变量nItems中并报告用户 把结果报告给用户最直接的方法是调用printf函数 printf ditemsfound nItems 但假如遇到一个语言学者 而nItems的值又恰巧为1时 看到这个输出可能会让他很不满意 1itemsfound 因为其中复数形式的items应该是单数形式的 可以这样用条件运算符实现 printf ditem cfound nItems nItems 1 s 提示 如果使用 运算符代替复杂的if语句来处理一些小的细节 那它将大大简化程序的结构 2020 3 26 第3章控制结构和数据文件 42 3 3 2选择结构的嵌套 Nestedifstatement 一个基本的if语句可以用作另一个if语句的分支语句 构成嵌套选择结构 即statement部分又是分支语句时 称为分支嵌套 C标准规定 编译程序必须能支持至少15层分支嵌套 2020 3 26 第3章控制结构和数据文件 43 if语句嵌套的形式如下 1 单if语句的嵌套形式if 表达式 if语句 内嵌语句 可以是各种形式的if语句 2 双分支if语句的嵌套形式if 表达式 if语句elseif语句 内嵌语句 如果是复杂的if语句 请用 括起 1 分支语句嵌套 2020 3 26 第3章控制结构和数据文件 44 例如 if c 50 printf 50 50 printf 50num2 双分支内嵌双分支 求三个数中的最大值 if num1 num3 max num1 双分支内嵌双分支 elsemax num3elseif num2 num3 max num2 双分支内嵌双分支 elsemax num3 2020 3 26 第3章控制结构和数据文件 45 例 单分支的statement是一个双分支选择语句 if a 1 if b 2 printf n elseprintf n else与if配对问题 if语句中出现多个 if 与 else 时 要注意它们之间的匹配关系 否则可能导致逻辑错误 书写形式不能改变句法规则 不能决定else的配对问题 else与if的匹配原则是 一个else应与其之前距离最近且没有与其它else配对的if配对 等价书写形式 if a 1 if b 2 printf n elseprintf n if a 1 if b 2 printf n elseprintf n 2020 3 26 第3章控制结构和数据文件 46 例 else匹配问题 if c 50 printf 50 50 printf 50150 n if c 50 printf 50 c 100 n elseprintf c 50 n if c 50 printf 50 50 printf 50150 n if c 50 printf 50 c 100 n elseprintf c 50 n 2020 3 26 第3章控制结构和数据文件 47 例3 6 编程实现 判断某数是否能被k整除 算法分析 1 问题背景 任何数除以零的值是无穷大 计算机无法存储 产生一个数据溢出错误并终止程序的执行 为了防止程序被0除而终止 必须保证除数不为零 2 算法描述 定义并输入数据a k 如果除数k 0则继续判断a k 若结果为0 能整除 否则不能整除 include stdio h voidmain inta k scanf d d 单分支嵌套双分支 if k 是if k 0 常用的等价写法 例3 7 实际问题或数学中有许多分段函数 有分段函数如下 编程求其值 分析 1 问题描述 分支嵌套语句的典型应用是求解分段函数 本分段函数可用多种方法观察图形 从左往右 或从右往左 看数轴 分段函数若以第一个点分界 把数轴分为 x 1 和 x 1 两部分 其中 x 1 再从左往右 又分成三种情况110 x 10 注意 多分段函数中的断点 2 需求分析 输入x的值 根据x的值计算并输出y的值 y 2 x intx y 输出y x 1 T F 输入x x 10 T F y 3 x 10 y x 5 X 10 T F X无定义 include stdio h voidmain void intx y printf 请输入数据x scanf d 使用分支嵌套结构编写程序如下 提倡缩格书写 indentation 有利于阅读程序 2020 3 26 第3章控制结构和数据文件 52 2 多分支语句if else if 重点 多分支选择结构 根据条件k k1 k2 kn 的逻辑结果 执行语句体1 2 n n 1之一 2020 3 26 第3章控制结构和数据文件 53 语句功能 首先计算条件表达式1的值 如为真 执行子句1 否则 若条件表达式2为真 执行子句2 以此类推 若条件表达式n真 执行子句n 若有语句n 1 则执行语句n 1 所有条件均不成立 则结束if else if语句 执行其下一条语句 多分支if else if语句的一般格式if 条件1 语句体1 elseif 条件2 语句体2 elseif 条件3 语句体3 elseif 条件n 语句体n else语句体n 1 2020 3 26 第3章控制结构和数据文件 54 特征多分支选择语句只能选择执行多个子句中的一个子句 所以也叫多选一分支选择语句 多分支选择语句中 每个分支有不同的条件表达式 可以有任意个else子句 也叫级联if语句 cascadingifstatement 只在else分支嵌套if else语句 语法上 if else if结构是一条语句 它是双分支语句的嵌套扩充 2020 3 26 第3章控制结构和数据文件 55 例3 9 某些应用中常需要判断键盘输入的字符类型 试编程实现 分析 设字符类型数据分为 数字字符大写字母小写字母其它字符输入一个字符 输出该字符的类型 charch 输入ch Tch 0 includevoidmain charch printf 请输入一个字符 ch getchar if ch 0 2020 3 26 第3章控制结构和数据文件 58 例3 10 多分支的典型应用 用if else if语句编程计算分段函数的值 分析 数学基础 分段函数的自变量取值范围一般是整个数轴或数轴某部分 分段函数将数轴分成几段 在各段应用不同的公式计算函数的值 2020 3 26 第3章控制结构和数据文件 59 在数轴上从左向右 或从右向左 逐个分析各分段点并产生分支 若x 1为真 应用公式x2 2x 1 分支一 否则 若x 1 若为真 应用公式2x sin x 分支二 否则应用公式x3 1计算函数的值 分支三 2020 3 26 第3章控制结构和数据文件 60 定义变量x y 输入x x 1 x 1 y 2x sin x y x3 1 输出y 提示 对于类似可以映象到数轴上的有序问题 均可用if else if语句来设计编程 2020 3 26 第3章控制结构和数据文件 61 程序如下 include stdio h include math h voidmain doublex y printf enterx scanf lf 2020 3 26 第3章控制结构和数据文件 62 学生项目案例3 1 从键盘任意输入一个百分制考试成绩 判断该成绩的等级 新编项目功能代码 分析 对于考试成绩等级的划分 可在数轴上分段划分如下 为保证程序的健壮性 应进行数据的有效性检查 2020 3 26 第3章控制结构和数据文件 63 定义变量score 输入score score 100 score 0 score 90 输出优 score 80 数据有错 输出良 score 70 输出中 score 60 及格 不及格 2020 3 26 第3章控制结构和数据文件 64 编写程序代码如下 includevoidmain void floatscore printf 请输入成绩 scanf f if else if语句结构易使程序冗长不清晰 降低程序的可读性 2020 3 26 第3章控制结构和数据文件 65 例 3 11 玩牌游戏 本游戏中 每一组牌用数字1 13代表 当要显示这些牌时 2 10可以直接显示数字 但1 11 12 13应该用Ace Jack Queen和King来表示 分析 1 问题描述 根据不同的牌面显示不同的结果 设牌面值用变量cardnum表示 2 处理流程 3 3 3switch语句和break语句 2020 3 26 第3章控制结构和数据文件 66 定义牌面变量x 输入x x 1 输出Ace 方法流程一 单分支语句 x 2 输出2 x 3 输出3 x 11 输出Jack x 12 输出Queen x 13 输出King 2020 3 26 第3章控制结构和数据文件 67 定义牌面变量x 输入x x 1 输出Ace 方法流程二 多分支语句 x 2 输出2 下一语句 2020 3 26 第3章控制结构和数据文件 68 牌面变量 下一条语句 2020 3 26 第3章控制结构和数据文件 69 单分支语句实现 if cardnum 1 printf Ace n if cardnum 2 printf 2 n if cardnum 11 printf Jack n if cardnum 12 printf Queen n if cardnum 13 printf King n 特点 每个单分支语句都要判断一次 多分支if else if语句实现 if cardnum 1 printf Ace n elseif cardnum 2 printf 2 n else elseif cardnum 11 printf Jack n elseif cardnum 12 printf Queen n elseif cardnum 13 printf King n 特点 虽然判断的次数有所减少 但最坏情况下 还是要判断到最后且结构复杂 2020 3 26 第3章控制结构和数据文件 70 1 switch语句选择结构 switch语句是if else if语句的推广使用形式 又叫开关结构语句 它根据同一个表达式的多个不同取值执行不同的分支语句 特点 实现选择分支较多的复杂判断结构一般有两个以上的可选项各选项分支条件取值可表示为不同的整型量各选项条件可用同一个表达式表示 2020 3 26 第3章控制结构和数据文件 71 switch语句的一般格式如下 switch expression casec1 statement1 casec2 statement2 casec3 statement3 casecn statementn default statementn 1 break break break break break 开关表达式 可有多个不同结果 圆括号是必须的 2 功能 1 计算expression的值 依次与各常量表达式的结果比较 等于第i个值时 顺序执行statementi statementi 1 statementn 1子句 2 若与所有常量表达式值都不相等 执行default语句序列n 1 3 每个子句可以有break选取项 2020 3 26 第3章控制结构和数据文件 72 1 break语句结束它所在的switch语句 终止该switch语句的执行 所以也叫终止语句 switch语句本身并没有包括break语句 switch子句中如果没有break语句 程序将在执行完所选case子句后顺序执行紧随其后的子句 这种设计在某些情况下是有用的 但它解决的问题远比不上它所带来的麻烦 2 开关expression的值应为有序类型 如整型 字符型和枚举类型等 3 case子句和default子句组成switct语句的主体 statement子句可以为空 4 常量表达式值互不相同且是expression可能的取值 5 default子句是可选项 注意 switch语句本意 switch语句的执行过程 值1 语句组1 下一条语句 值2 语句组2 语句组3 语句组n 语句组n 1 值1 语句组1 加入break语句的switch语句 switch表达式 值1 语句组1 下一条语句 break 值2 语句组2 break 值3 语句组3 break break 值n 语句组n break deauflt 语句组n 1 break 设cardnum为牌变量 case1 11 12 13分四种不同情况 其它2 10号情况规律相同 作为default类情况处理 用printf d cardnum 语句实现输出 程序段如下 includevoidmain void intcardnum printf Whatistherankofthecard 1 13 scanf d 2020 3 26 第3章控制结构和数据文件 76 趣味例题2 有些网页会向用户提示今天的日期或其它有趣的内容 编程模拟实现网页上每天星期几对应语句的显示 请学习者模拟上题分析 程序如下 includevoidmain intd printf 请输入今天星期几 scanf d 2020 3 26 第3章控制结构和数据文件 77 学生项目案例3 2 用switch语句实现判断百分制考试成绩的等级 进化 学生项目案例3 1 分析 1 问题背景 学生信息管理系统 的 成绩管理子系统 中查询学生成绩时 一般输入学号进行查询 查询出学生成绩后 系统判断成绩等级并报告结果 2 数学模型 switch语句的开关表达式值的类型必须是可列举的 学生成绩理论上可列举 但数据太多不可行 2020 3 26 第3章控制结构和数据文件 78 缩小数据范围法 设学生成绩score为实型数据 将数据范围缩小到0 10的整数范围 1 实型显式转换为整型 2 用10取整转为1至2位的十进制整型 缩小数据的数学表达式为 int score 10 2020 3 26 第3章控制结构和数据文件 79 3 算法分析 编制自定义函数 函数首部 cjpd1 功能 判断成绩等级并报告结果定义一个临时主函数main 调用cjpd1 函数 2020 3 26 第3章控制结构和数据文件 80 cjpd1 函数 主函数main 调用函数cjpd1 floatscore 输入学生成绩score Tscore100F int score 10提示输入10 9876其它值成绩default 错误 输出输出输出输出输出 A B C D E break break break break break 程序代码如下 include stdio h voidcjpd1 cjpd 自定义函数的定义 floatscore printf 请输入学生成绩 scanf f 函数调用 2020 3 26 第3章控制结构和数据文件 82 2020 3 26 第3章控制结构和数据文件 83 2 嵌套的switch语句 分析如下程序段执行结果 intx 1 y 0 switch x case1 switch y case0 printf 1 n break case1 printf 2 n break case2 printf 3 n break 插入该语句后结果如何 2020 3 26 第3章控制结构和数据文件 84 3 4软件开发与项目案例设计 3 4 1软件项目及其开发过程3 4 2项目案例设计 2020 3 26 第3章控制结构和数据文件 85 3 4 1软件项目及其开发过程 1 软件项目软件项目是完成特定目的 符合用户特定需求的软件所需的组织结构 过程和规范的集合 软件项目可以是一个单独的开发项目 也可以与产品项目组成一个完整的软件产品项目 若是订单开发 成立软件项目组即可 若是产品开发 需成立软件项目和产品项目组 负责市场调研和销售 组成软件产品项目组 公司实行项目管理时 首先要成立项目管理委员会 项目管理委员会下设项目管理小组 项目评审小组和软件产品项目组 实施软件项目需要周密部署 合理的规章制度 符合项目的软件开发过程 良好的项目管理以及人员安排等 2020 3 26 第3章控制结构和数据文件 86 2 软件开发从软件工程角度 软件开发主要分为六个阶段 需求分析阶段 概要设计阶段 详细设计阶段 编码阶段 测试阶段 安装及维护阶段 软件开发需遵循七条基本原则 它们是 1 用分阶段的生命周期计划严格管理 2 坚持进行阶段评审 3 实行严格的产品控制 4 采用现代程序设计技术 5 结果应能够清楚地审查 6 开发小组地人员应该少而精 7 承认不断改进软件工程实践的必要性 软件开发面临的问题 有限的时间 资金内 要满足不断增长的软件产品质量要求 开发的环境日益复杂 代码共享日益困难 需跨越的平台增多 程序的规模越来越大 软件的重用性需要提高 软件的维护越来越困难 2020 3 26 第3章控制结构和数据文件 87 3 软件项目管理与人员组织软件项目管理的目的是为了让软件项目尤其是大型项目的整个软件生命周期 从分析 设计 编码到测试 维护全过程 都能在管理者的控制之下 以预定成本按期 按质的完成软件交付用户使用 主要包括如下几个方面 人员的组织与管理 软件度量 软件项目计划 风险管理 软件质量保证 软件过程能力评估 软件配置管理等 合理配置人员 根据项目工作量 所需专业技能 再参考各个人员的能力 性格 经验 组织一个高效 和谐的开发小组 一般一个开发小组人数在5到10人之间最为合适 如果项目规模很大 可以采取层级式结构 配置若干个这样的开发小组 不是一群高水平的程序员在一起就一定可以组成一个成功的小组 与同事沟通融洽的程序员很重要 2020 3 26 第3章控制结构和数据文件 88 4 软件开发流程很多项目都是小型项目 参与人员少 2到5人 需快速交付 一两个月 项目人员配置一般有 一个项目经理 一到四位开发人员 项目经理负责需求分析 主持设计评审 决定设计评审是否通过 决定是否可进入交叉测试决定是否可发布项目 开发人员负责系统设计 开发和自测 交叉测试 修改Bug 编写部署手册和使用说明 要成功完成项目 除了使用成熟且被团队成员熟练使用的技术之外 有一个良好的开发流程 也是很必要的 小型软件项目开发流程 2020 3 26 第3章控制结构和数据文件 90 3 4 2项目案例设计 开发软件项目时 如果把所有的语句或过程写在一个main 函数或同一个函数中 程序过长给调试和阅读带来困难 常把完成独立功能的程序段编写为一个独立的函数 既便于调试 也有效缩短了各程序的长度 项目小组需要共同开发项目 前两章中 通过学生项目案例1 1 案例2 2和案例2 3分析并设计了学生信息管理系统的主界面 一级菜单和二级菜单 在此基础上继续优化 加入判断功能 假设某小组成员独立开发一 二级菜单界面模块 2020 3 26 第3章控制结构和数据文件 91 学生项目案例3 3 建立有多个函数的源文件 学生信息管理系统 一 二级菜单程序的再优化 分析 1 优化后的运行界面图 2 界面程序优化用选择结构优化已实现的各个菜单程序优化 学生项目案例2 2 在主函数main 中 利用选择结构 判断一级输入功能码的有效性 在主函数main 中 用switch结构中的case子句实现一级菜单和各二级菜单函数间的调用 保留主菜单界面函数menu 2020 3 26 第3章控制结构和数据文件 92 优化 学生项目案例2 3 为了子模块程序间的调用 修改 学生项目案例2 3 的主函数main 名 定义为 成绩管理子系统 的二级模块函数mod 2 再修改 成绩管理子系统 的二级菜单函数为menu2 3 利用选择结构 判断二级输入功能码的有效性 用switch结构中的case子句实现二级菜单中各提示信息的调用 exit 0 调用主菜单函数menu fc code 5 T F 输入fc code getchar 3 定义变量 charfc code 算法流程图 主函数main 的算法图 fc code mod 2 0 exit default 提示信息 break 待开发 exit 0 调用二级菜单函数menu2 3 fc code 9 T F 输入fc code2 getchar 定义变量 charfc code2 fc code2 0 return default 提示信息 mod 2 函数 待开发 2020 3 26 第3章控制结构和数据文件 95 3 主函数main 和自定义函数menu mod 2 menu2 3 构成一个程序文件ch3 3 c 这个c程序文件中各函数间关系如图所示 main menu switch menu mod 2 menu2 3 switch menu2 3 学生项目案例ch3 3 c include stdio h include stdlib h 包含exit 函数 voidmenu 用户自定义函数 printf 欢迎使用学生信息管理系统 n n printf n printf 1 用户身份验证2 学籍管理子系统 n printf 3 成绩管理子系统4 作业管理子系统 n printf 5 素质评价子系统0 退出系统 n printf n voidmenu2 3 用户自定义函数 某二级菜单 printf 欢迎使用成绩管理子系统 n n printf n printf 1 学生成绩录入2 学生成绩输出 n printf 3 学生成绩查询4 学生成绩修改 n printf 5 学生成绩插入6 学生成绩删除 n printf 7 班级成绩删除8 学生成绩排序 n printf 9 学生成绩统计0 返回 n printf n voidmod 2 charfc code2 menu2 3 函数调用 printf 请你在上述的功能编号中选择 n fc code2 getchar if getchar 10 if fc code2 0 voidmain 主函数首部 charfc code 存放选择主选功能编码 menu 函数调用 printf 请选择功能编号进入系统 n fc code getchar if getchar 10 if fc code 0 2020 3 26 第3章控制结构和数据文件 100 程序剖析 exit 函数通常用在子程序中用来终结整个程序 使用后程序自动结束跳回操作系统 该函数包含在stdlib h头文件中 exit 0 表示程序正常 exit 1 表示程序异常退出 一个C语言程序文件可以包含多个C源文件 本程序中的函数定义为无参函数 存在主调函数和被调函数的关系 被调函数常用return 语句返回主调函数 2020 3 26 第3章控制结构和数据文件 102 文本项目案例3 1 文本编辑器 软件菜单界面的优化设计 分析 1 设计各一级功能模块对应的临时自定义函数 以下各函数只有一条语句 若有其它编程员有相应模块的程序 则替换这些临时程序 voidfile void puts 正在使用文件功能模块 n 文件功能模块函数 voidedit void printf 正在使用编辑功能模块 n 编辑功能模块函数 voidinsert void printf 正在使用插入功能模块 n 插入功能模块函数 voidformat void printf 正在使用格式功能模块 n 格式功能模块函数 voidtools void printf 正在使用工具功能模块 n 工具功能模块函数 2020 3 26 第3章控制结构和数据文件 103 2 主函数算法分析类同 学生项目案例3 3 但在switch语句中的各case子句 直接调用各临时函数 include stdio h include 包含杂项函数及内存分配函数 自定义函数 voidfile void puts 正在使用文件功能模块 n voidedit void printf 正在使用编辑功能模块 n voidinsert void printf 正在使用插入功能模块 n voidformat void printf 正在使用格式功能模块 n voidtools void printf 正在使用工具功能模块 n voidmain charchnum 存放选择主选功能编码 system cls 清屏 printf n n欢迎使用自编文本编辑器软件 n n printf t n printf t 文件 1 编辑 2 插入 3 格式 4 工具 5 n printf t n printf 请你在上述的功能编号中选择 n chnum getchar getchar switch chnum case 1 file break 调用文件函数 case 2 edit break 调用编辑函数 case 3 insert break 调用插入函数 case 4 format break 调用格式函数 case 5 tools break 调用工具函数 default printf 你选择的功能模块号错误 n system pause 系统暂停函数 exit 0 switch语句结束 2020 3 26 第3章控制结构和数据文件 106 程序剖析 1 include是包含杂项函数及内存分配函数的头文件 exit函数 system函数均在此头文件中定义 exit 程序终止函数 函数原型 voidexit intstatus system函数 system 函数用于向操作系统传递控制台命令行 以Windoes系统为例 通过system 函数执行命令和在DOS窗口中执行命令的效果是一样的 所以只要在运行窗口中可以使用的命令都可以用system 传递 但要注意的

温馨提示

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

评论

0/150

提交评论