免费预览已结束,剩余74页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章结构化程序开发 3 1基本语句3 2顺序结构3 3选择结构3 4循环结构3 5简单程序设计实例 1 3 1基本语句 表达式语句 基本语句主要有表达式语句 空语句 goto语句 break语句 continue语句 return语句等 基本语句都以分号为结束符 1 表达式语句格式 表达式 例如 k k k 2 2 3 1基本语句 goto语句 2 goto语句格式 goto语句标号 功能 控制立即转移到goto后标号所指定的语句处继续执行 例如 start i 0 gotostart 3 3 1基本语句 空语句 3 空语句格式 功能 什么也不做的语句 例如 for 无循环体if 条件1 if 条件2 语句1 else else语句2 4 3 1基本语句 break语句 4 break语句格式 break 功能 强制结束它所在的控制结构 switch或循环结构 例如 for 大括号内是循环体语句1 break 跳出循环 转做语句2 语句2 5 3 1基本语句 continue语句 5 continue语句格式 continue 功能 提早结束当前轮次循环体的执行 进入下一轮循环 例如 for 大括号内是循环体语句1 continue 不执行语句2语句2 语句3 6 3 1基本语句 return语句 6 return语句格式 return 或return表达式 功能 结束函数的这次执行 将控制返回到函数调用处 说明 return 只能用于函数不返回结果的函数体中 return表达式 用于函数有返回结果的函数体中 例如 voidswap inta intb 大括号内是函数体语句1 return 不执行语句2 返回到调用函数语句2 7 3 2顺序结构 目前 结构化程序设计提供三种基本结构 顺序结构 选择结构和循环结构 顺序结构 描述一个计算步骤序列 表示从步骤序列的第一个计算步骤开始 顺序执行每个计算步骤 直至最后一个计算步骤 在C程序中 顺序执行的语句序列 用花括号括住 就构成C语言的复合语句 复合语句中的每个计算步骤可以是单个语句 也可以是一个控制结构 8 顺序结构 例 例 交换变量x y的值 可分解为以下顺序执行的三个计算 temp x 将x的值保存到变量temp x y 变量x置y值 y temp 变量y置temp的值 若把交换变量x y的值作为一个不可分割的整体来考虑 应把它们写成复合语句 本复合语句要求外面为它定义temp变量 temp x x y y temp 9 顺序结构 说明 在构造复合语句时 为完成指定的工作 可能需要临时工作变量 例如 以上述中的temp变量 在语句序列中插入变量定义 引入只有复合语句内的语句可使用的临时变量 例如 将前面的例子改写成以下形式 inttemp 定义自己专用的临时变量 temp x x y y temp 10 3 3选择结构 选择结构可分为两路条件选择结构和多路按值选择结构两种 3 3 1两路条件选择结构 if语句 由一个条件和两个供选择的分支语句组成 用于按条件成立与不成立两种情况 作两种选一的控制 11 两路条件选择结构 if语句 if语句的一般形式为 if 表达式 语句1else语句2 12 例如 if a b printf MAX f n a elseprintf MAX f n b 说明 当a b成立时 输出a 否则 输出b if语句 无else 当if语句中的语句2为空语句时 if语句的形式为 if 表达式 语句 13 例如 max a if max b max b printf MAX f n max 说明 将a b中大的数存于max 最后输出max if语句 例3 1和3 2 例3 1 求m max a b if ac 14 if语句 例3 3和3 4 if嵌套 例3 3 若ch中的字符为大写字母 则改为对应的小写字母 if ch A 15 if语句的嵌套 if 表达式1 if 表达式2 语句1else语句2 16 执行语句2的条件是 表达式1 表达式2 还是 表达式1 else总是与它前面最接近的if对应 if 表达式1 if 表达式2 语句1else语句2 if语句的嵌套 说明 上例中若要执行语句2的条件为 表达式1 可用以下两种方法实现 方法一 if 表达式1 将分支语句变成一个复合语句 if 表达式2 语句1 else语句2方法二 if 表达式1 if 表达式2 语句1else 这里有1个空语句 else语句2 17 3 3 1if语句的说明 如果if语句中的语句 语句1 语句2是一个简单语句 在这些简单语句之后会有一个分号 如果if语句中的语句 语句1 语句2是由多个语句组成的顺序结构时 则必须将它们写成复合语句 例 if a b 按小到大排列 temp a a b b temp 18 3 3 1if语句的说明 如果if语句中的语句 语句1 语句2是一个简单语句 在这些简单语句之后会有一个分号 如果if语句中的语句 语句1 语句2是由多个语句组成的顺序结构时 则必须将它们写成复合语句 例 if a b 按小到大排列 temp a a b b temp 19 3 3 1if语句的说明 3 在if语句中 每个else总要与它前面的if对应 不可能出现没有对应if的else 例 if a b max b elsemax a elsemax c 错误 20 例3 5 输入三个整数 输出它们中的最大数 为求三个数中的最大者 最简洁的办法是先将其中某一个预作最大者 然后逐一与其它两个数比较 当发现有更大者时 就以它重置最大者 includevoidmain inta b c max printf 输入三个整数 n scanf d d d 21 例3 6 输入三个整数 按值大到小的顺序输出 要求 有x y z三个变量 使满足关系x y z 方法 先调整x和y 使x y 再调整x和z 使x z 至此 x为最大值 最后再调整y和z 使y z includevoidmain intx y z temp printf Enterx y z n scanf d d d 22 例3 7 求一元二次方程的根 设一元二次方程为ax2 bx c 0 对输入的系数a b c 有以下几种情况需要考虑 1 a 0 方程有两个根 2 a 0 b 0 方程退化为bx c 0 方程根为 c b 3 a 0 b 0 方程为同义反复 c 0 或矛盾 c 0 由以上分析得到以下程序结构 1 输入方程系数a b c if a 0 0 2 求两个根 elseif b 0 0 3 输出方程根 c b elseif c 0 4 输出方程同义反复字样 else 5 输出方程矛盾字样 23 例3 7 求一元二次方程的根 分析 分析1 对步骤 用C语言描述非常简单 分析2 对步骤 根椐判别式 b2 4ac 0 有两个实根 b2 4ac 0 有两个复根对于两个复根情况 可分别计算它们的实部和虚部 对于实根 也可根据上面给出的公式计算两个根 但是考虑到b2 4ac时 有一个根就非常接近零 数值计算中 两个非常接近的数执行减法求出的值的精度很低 为此先求出一个绝对值大的根root1 然后 利用根与系数的关系 root1 root2 c a即root2 c a root1 求出root2 24 例3 7 求一元二次方程的根 程序 include include 使用数学库函数 voidmain doublea b c delta re im root1 root2 printf 输入方程系数a b c n scanf lf lf lf 25 例3 7 求一元二次方程的根 程序续 elseprintf 两复根分别是 7 5f 7 5fI 7 5f 7 5fI n re fabs im re fabs im else a 0 0 if b 0 0 printf 单根 7 5f n c b elseif c printf 方程同义反复 n elseprintf 方程矛盾 n 26 3 3 2switch语句 switch语句描述多路按值选择结构 switch语句的一般形式为 switch 表达式 case常量表达式1 语句序列1case常量表达式2 语句序列2 case常量表达式n 语句序列ndefault 语句序列n 1 27 switch语句 执行过程 28 说明 若遇到break语句 则直接转向switch出口 例3 8 输入选择 输出相应的选择名称 charchoice printf Enterchoice A B C n scanf c 如输入字符 B 则程序的执行将输出 Bchosen Cchosen defaultchosen 29 switch语句 说明 1 switch后面括号内的表达式只限于是整型表达式 字符型表达式或枚举型表达式 当表达式的值与某一个 case常量表达式 的值相等时 就执行case后面的语句 只要未遇到break语句或goto语句就一直向下执行 直至switch语句出口 只有当所有条件都不匹配时 才执行default后面的语句序列 每一个case的常量表达式的值必须互不相同 并与switch后面括号内的表达式值的类型相一致 语句序列由任意条合法的 语句构成 也可以没有语句 30 switch语句 break语句 break作用 控制转向switch语句的后继语句 即跳出Switch语句 例3 9 根据天气情况 安排活动 intw con 天气情况变量定义 printf 天气如何 1 晴天 2 多云 3 下雨 scanf d 31 例3 10 计算 switch int x 0 5 case1 y sin x break case2 case3 case4 y log x break case5 case6 case7 y exp x break default printf 自变量x值超出范围 n break 32 sin x 0 5 x 1 y x log x 1 5 x 4 5exp x 4 5 x 7 5 3 4循环结构 C语言提供描述三种不同的循环结构的语句 while语句 do while语句 for语句3 4 1while语句一般形式 while 表达式 语句执行过程 1 计算循环条件表达式的值 2 当表达式的值为非0时 转步骤 3 当表达式的值为0时 结束循环 3 执行循环体 并转步骤 1 说明 若循环体由两个以上语句组成 循环体应写成复合语句 33 循环体 while语句 流程图 例3 11 求s 1 2 100用while语句可描述如下 s 0 i 1 while i 100 s i i 34 循环体可改为s i while语句 说明 循环体如果包含一个以上的语句 应该用花括号括起来 以复合语句形式出现 如果不加花括号 则while语句的范围只到while后面第一个分号处 在循环体中 应有使循环趋向于结束的语句 如上例中循环结束的条件是i 100 用i 语句达到此目的 如果无i 语句 将导致循环条件永远成立 永不结束 当循环体为空时 可用空语句代替 例 跳过输入的空白类字符 while c getchar c t 35 无循环体 用空语句表示 while语句 说明 续 4 有时很难写出循环条件 可用1代之 表示条件为真 但在循环体中必须有break语句 用于跳出循环 while 1 if 表达式 break 36 例3 12 求学生平均成绩 当输入负数时结束 includevoidmain intsum count mark sum 0 count 0 while 1 循环条件永远为真 printf 输入成绩 小于0结束 n scanf d 37 例3 13 统计输入字符行中 空白类字符 数字符和其它字符的个数 includevoidmain intc nwhite nother ndigit nwhite nother ndigit 0 printf Enterstringline n while c getchar n switch c case 0 case 1 case 2 case 3 case 4 case 5 case 6 case 7 case 8 case 9 ndigit break case case t nwhite break default nother break printf digit d twhitespace d tother d n ndigit nwhite nother 38 3 3 2do while语句 一般形式 do语句while 表达式 执行过程 1 执行循环体 2 求循环条件表达式的值 3 当表达式的值为非0时 转步骤 1 当表达式的值为0时 结束循环 注意 分号是do while语句的结束符 不能省略 39 循环体 do while语句 流程图 例3 14 求s 1 2 100用do while语句可描述如下 s 0 i 1 do s i i while i 100 40 真 非0 循环体可改为s i do while语句 说明 41 与while语句一样 当循环体由多个语句组成时 必须把它们书写成复合语句 while与do while区别while 先判别表达式 后执行循环体 当while表达式第一次为假时 循环体一次也不执行 do while 先执行循环体 后判别表达式 因此 使用do while至少执行一次循环体 do while语句 例 例3 15 求方程f x 3x3 4x2 2x 5的实根 说明 1 用牛顿迭代方法求方程f x 0的根的近似解 xk 1 xk f xk f xk k 0 1 2 当修正量dk f xk f xk 的绝对值小于某个很小数 时 xk 1就作为方程的近似解 3 下面的程序取迭代初值为 2 1 0e 6 42 例3 15 求方程f x 3x3 4x2 2x 5的源程序 include include 引用数学函数 defineEpsilon1 0e 6voidmain doublex d x 2 0 do d 3 0 x 4 0 x 2 0 x 5 0 9 0 x 8 0 x 2 0 f x f x x x d while fabs d Epsilon 未满足精度要求循环 printf Therootis 6f n x 43 结果为 Therootis 2 053319 do while语句 例 例3 16 查找一个最小整数 要求满足以下条件 被3除余2 被5除余3 被7除余4 includevoidmain inti 2 doi while i 3 2 44 例3 16 提高运行效率 采用分阶段的办法 先让变量在保证满足条件被3除余2情况下 寻找被5除余3的解 接着在保证被3除余2和被5除余3的条件下 寻找被7除余4的解 这样做能简化循环条件 并能加快找解的速度 45 includevoidmain inti 2 初值i被3除余2 doi 3 while i 5 3 保证i被3除余2 while i 7 4 保证i被3除余2 并被5除余3 i 15 printf 被3除余2 被5除余3 被7除余4的最小数是 d n i 结果为 53 3 4 3for语句 一般形式 for 表达式1 表达式2 表达式3 语句执行过程 1 计算表达式1 2 当表达式2的值为非0 转步骤 3 当表达式2的值为0 结束循环 3 执行循环体语句 4 计算表达式3 5 转向步骤 2 46 循环体 for语句 流程图 例3 17 求s 1 2 100用for语句可描述如下 s 0 for i 1 i 100 i s i 47 for s 0 i 1 i 100 i s i 可改写为 for语句 说明 1 for语句的一般形式中 表达式1 表达式2和表达式3都可以省略 表达式1省略 表示没有赋初值部分 或在for语句前已为有关变量赋了初值 例 求s 1 2 100s 0 i 1 for i 100 i s i 48 for语句 说明 续 表达式2省略 表示循环条件永远为真 可能循环体内有控制转移语句转出for语句 例 for s 0 i 1 i s i if i 100 break 表达式3省略 表示没有修正部分 对变量的修正已在循环体内一起完成 for s 0 i 1 i 100 s i 49 for语句 说明 续 不管表达式1 表达式2和表达式3省略情况如何 其中两个分号都不能省略 如果三个表达式都省略 用以下形式表示 for 语句表达式1 表达式2和表达式3都可包含逗号运算符 由多个子表达式组成 例 for s 0 i 1 i 100 i s i 50 for语句 说明 续 对于s 1 2 100的计算下面都是合理的for语句描述 for s 0 i 1 i 100 s i i for s 0 i 1 s i i 100 i for s 0 i 0 i 100 i s i for s 0 i 1 i 100 s i 51 for语句 例 例3 18 编制一个程序 实现输入n个整数 输出其中的最大数 并指出其是第几个数 includevoidmain intn i max x index printf 输入n n scanf d 52 for语句 例 续 if i 1 第一次输入 直接用x为max置初值 max x index 1 continue i为1时 不再执行以下语句 直接进入下一轮循环 if x max 输入了一个更大的数 max x index i printf 最大数是 d 它是第 d个数 n n max index 53 3 4 4三种循环语句比较 例3 19 p 1 1 3 1 5 1 7 要求 当某项的绝对值小于0 000001时程序结束 一 使用while循环语句对当前项t的绝对值不小于0 000001时循环求和 并修正变量d 作为分母 和t 其代码为 p 0 0 d 1 t 1 0 while fabs t 1 0e 6 p t d 2 后一项的分母递增2 t d 1 4 1 0 d 1 0 d d 1 能除尽4则当前项为负 否则为正 54 二 使用do while循环语句 循环求和 并修正变量d 作为分母 和t 作为当前项 直至新的t的绝对值小于0 000001时结束 其代码为 例3 19 p 1 1 3 1 5 1 7 p 0 0 d 1 t 1 0 do p t d 2 后一项的分母递增2 t d 1 4 1 0 d 1 0 d while fabs t 1 0e 6 55 三 使用for循环语句 从变量d 作为分母 初值为1 0 t 作为当前项 初值为1 0开始 当t的绝对值不小于0 000001时循环求和 每次循环后相应地修正变量d和t 其代码为 例3 19 p 1 1 3 1 5 1 7 for p 0 0 d 1 t 1 0 fabs t 1 0e 6 d 2 t d 1 4 1 0 d 1 0 d p t 56 3 4 5嵌套的循环结构 当循环结构的循环体中又包含循环结构时 称为循环结构的嵌套 在实际应用中 三种循环语句可以相互嵌套 会呈现多种复杂形式 例3 20 已知直角三角形每边长为25以内的整数 求出所有这样的直角三角形三边长 设 三边长为a b c 且c b a 用三重嵌套的for语句实现 设最外层的c的变化范围是3 25 对于确定的c 内层的b的取值范围是1 c 1 最内层的a的取值范围是1 b 57 循环嵌套 例3 20 P 65 includevoidmain inta b c for c 3 c 25 c for b 1 b c b for a 1 a b a if a a b b c c printf A d tB d tC d n a b c scanf c 等待输入回车后继续执行 按回车后显示下一个满足条件结果 58 运行结果 A 3B 4C 5 循环嵌套 例3 21 P 65 例3 21 甲 乙 丙三位球迷分别预测已进入半决赛的四队A B C D的名次如下 甲预测 A第一名 B第二名乙预测 C第一名 D第三名丙预测 D第二名 A第三名设比赛结果 四队名次互不相同 并且甲 乙 丙的预测各对一半 求 A B C D四队的名次 59 循环嵌套 例3 21 分析 令变量a b c d分别表示四队的名次 对四队所有可能的名次组合作循环测试 就能找到解 甲的预测 预测对了一半 若A是第一名 则B不会是第二名 或者A不是第一名 则B必须是第二名 用逻辑运算与关系运算描述如下 a 1 b 2 a 1 b 2考虑 A是第一名和B是第二名不允许同时成立 即条件a 1和b 2不允许相等 这样预测对一半的条件可写成 a 1 b 2 乙预测的条件为 c 1 d 3 丙预测的条件为 d 2 a 3 60 循环嵌套 例3 21 程序 includevoidmain inta b c d t for a 1 a 4 a for b 1 b 4 b if b a continue 两队名次不可相同 取下一个b值 for c 1 c 4 c if c a c b continue 取下一个c值 d 10 a b c 四队名次之和为10 t a 1 b 2 61 输出结果 A 3 B 2 C 1 C 4 3 5简单程序设计实例 例3 22 输入整数n 输出由2 n 1行 2 n 1列组成的以下形式 n 2 的图案 分析 图案上面由n 1行 下面有n行 同一行上的两个星号字符之间有一个空格符 对于上半部分 设第一行的星号字符位于屏幕的中间 则后行图案的起始位置比前行起始位置提前两个位置 而对于下半部 第一行的起始位置比上半部最后一行起始位置前进两个字符位置 以后各行也相继进两个位置 62 例3 22 程序P 66 includevoidmain intn j k space printf Entern n scanf d 63 例3 23 试输入整数n 10 输出以下形式的数字排列图案 所示图案假定n 3 1121123211211参照例3 22的解 将图案分成上下两部分 并对每行的开始前导空格符作同样的控制 对于本例子 利用每行的对称性 分两个循环组织输出 如果上半部的行从1开始至n编号 对于j行 前一半输出1至j 后一半输出j 1至1 如果下半部的行从n 1至1编号 则每行结构与上半部相同 64 例3 23 程序P 67 includevoidmain intn j k space printf 输入n n scanf d 一行输出结束 换行 65 例3 23 程序P 67续 space 4 准备输出下半图for j n 1 j 1 j space 2 共输出n 1行printf c space 输出space个空白符for k 1 k 1 k 顺序输出j 1至1printf 2d k printf n 一行输出结束 换行 66 例3 24 输出以下形式的乘法表 12345678911224336944812165510152025661218243036771421283542498816243240485664991827364554637281 67 例3 24 程序P 68 includevoidmain inti j printf n t123456789 n 输出首行 for i 1 i 9 i 再输出9行 printf t d i 一行的第一个数i for j 1 j i j 顺序输出i的倍数 printf 4d i j printf n 68 例3 25 输入n个整数 2 输出其中的次最大数 分析 1 为求次最大 程序在循环过程中需保留两个数 当前暂时最大数max1和当前暂时次最大数max2 2 程序将输入的第一个数暂时保留 待输入第二个数后 确定max1和max2 3 从第三个输入数x开始 根据x调整max1和max2 调整过程需考虑以下几种可能 若x max1 则以max1作为新的max2 x作为新的max1 若max1 x max2 则以x作为新的max2 若x max2 则不调整 69 例3 25 程序P 69 includevoidmain intn i max1 max2 x temp printf 输入n 2 n scanf d 70 例3 25 程序P 69 续 else max1 temp max2 x for i 3 imax1 调整最大和次最大 max2 max1 max1 x elseif x max2 max2 x 调整次最大
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年新疆交通职业技术学院单招职业技能测试必刷测试卷附答案解析
- 2026年平凉职业技术学院单招职业技能考试题库附答案解析
- 2026年安庆师范大学单招职业倾向性测试题库附答案解析
- 2026年四川文化传媒职业学院单招职业倾向性考试必刷测试卷及答案解析(名师系列)
- 2026年内蒙古美术职业学院单招职业倾向性测试必刷测试卷附答案解析
- 2026年广东省深圳市单招职业适应性考试必刷测试卷及答案解析(名师系列)
- 基因变异关联研究
- 房屋征收电子协议书
- 房屋损坏赔损协议书
- 房屋物品改造协议书
- 2025年郑州水务集团有限公司招聘80人笔试模拟试卷带答案解析
- 创伤急救模拟教学的团队协作模拟演练
- 2025年国有企业管理专员岗位招聘面试参考题库及参考答案
- 无纺布袋采购合同范本
- 2025年铁路安全教育培训考试试题及答案
- 2025 年中国互联网助贷业务发展研究报告
- 专题10 立体图形的表面展开图的四类综合题型(压轴题专项训练)数学人教版2024七年级上册(解析版)
- 2025年上海公务员考试(城市建设管理)历年参考题库含答案详解(5套)
- 生猪屠宰兽医卫生检验人员理论考试题库及答案
- 13.Arnold(阿诺德)渲染器
- 婚姻法教学精品课件
评论
0/150
提交评论