




已阅读5页,还剩64页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章程序流程和异常处理 2 顺序结构选择结构 if语句 switch语句循环结构 for语句 while语句 do while语句和foreach语句跳转语句 goto break continue return throwC 异常处理机制创建和引发异常 现实生活中的循环 银行的ATM需要不停地为不同的客户服务 我们每天的生活和学习需要重复 生活中充满了循环 食堂 宿舍 教室 ATM业务 ATM业务 ATM业务 ATM业务 ATM业务 食堂 食堂 宿舍 食堂 宿舍 食堂 教室 宿舍 食堂 在编写程序过程中 往往出现相同类型操作需要重复出现 如实现1 2 100 则需要做99次加法 这类问题使用循环语句解决 即循环语句用于实现语句块的重复执行 C 中提供了四种不同的循环机制 for循环while循环do while循环foreach循环foreach循环常用在遍历数组时用到 for循环语句for循环常常用于已知循环次数的情况 使用该循环时 测试是否满足某个条件 如果满足条件 则进入下一次循环 否则 退出该循环 格式 for 表达式1 布尔表达式2 表达式3 单语句或 循环语句序列 三元运算表达式 4 3 1for循环 功能 true false 语句 布尔表达式2 1计算表达式1 2计算布尔表达式2 如果结果为true 则执行语句 再计算表达式3 然后重复本过程 如果表达式2为false 则退出循环 表达式1 表达式3 1计算表达式1 2计算布尔表达式2 如果结果为true 则执行语句 再计算表达式3 然后重复本过程 1计算表达式1 如果表达式2为false 则退出循环 2计算布尔表达式2 如果结果为true 则执行语句 再计算表达式3 然后重复本过程 1计算表达式1 如果表达式2为false 则退出循环 2计算布尔表达式2 如果结果为true 则执行语句 再计算表达式3 然后重复本过程 1计算表达式1 如果表达式2为false 则退出循环 2计算布尔表达式2 如果结果为true 则执行语句 再计算表达式3 然后重复本过程 1计算表达式1 表达式1 for 表达式1 布尔表达式2 表达式3 语句 表达式1 for循环语句的使用 例子 计算1 2 3 100 使用for语句实现 分析1 定义sum 连续写sum sum n 分析2 该问题属于重复执行加法的问题 并且参与运算的两个操作数不断的按规律增加 该类问题可以通过循环进行解决 例 求1 2 3 100的值 sum sum i sum 0 sum sum 1 sum sum 2 sum sum 3 sum sum 100 Console WriteLine sum 写完这100条语句 就算出来了 你想累死我啊 sum sum i sum 0 sum sum 1 sum sum 2 sum sum 3 sum sum 100 Console WriteLine sum sum sum i sum 0 sum sum 1 sum sum 2 sum sum 3 sum sum 100 Console WriteLine sum sum sum i sum 0 sum sum 1 sum sum 2 sum sum 3 sum sum 100 Console WriteLine sum 写完这100条语句 就算出来了 你想累死我啊 累加器 写完这100条语句 就算出来了 例 求1 2 3 100的值 sum 0 i 1 sum sum i i i 1 sum sum i i i 1 sum sum i i i 1 sum sum i i i 1 Console WriteLine sum i 1 i 2 i 3 i 100 i 101 sum 0 i 1 sum sum i i i 1 sum sum i i i 1 sum sum i i i 1 sum sum i i i 1 Console WriteLine sum i 1 sum 0 i 1 sum sum i i i 1 sum sum i i i 1 sum sum i i i 1 sum sum i i i 1 Console WriteLine sum sum 0 i 1 sum sum i i i 1 sum sum i i i 1 sum sum i i i 1 sum sum i i i 1 Console WriteLine sum sum 0 sum sum 1 sum sum 2 sum sum 3 sum sum 100 Console WriteLine sum sum 0 i 1 sum sum i i i 1 sum sum i i i 1 sum sum i i i 1 sum sum i i i 1 Console WriteLine sum i 1 i 2 i 3 i 100 i 101 sum 0 i 1 sum sum i i i 1 sum sum i i i 1 sum sum i i i 1 sum sum i i i 1 Console WriteLine sum sum 0 i 1 sum sum i i i 1 sum sum i i i 1 sum sum i i i 1 sum sum i i i 1 Console WriteLine sum sum 0 i 1 sum sum i i i 1 sum sum i i i 1 sum sum i i i 1 sum sum i i i 1 Console WriteLine sum 循环条件 i 100 这两条语句需要循环执行 计算1 2 100的for循环流程 intsum 0 i for i 1 i 100 i sum sum i Console WriteLine sum 运行流程分析 intsum 0 i for i 1 i 100 i sum sum i Console WriteLine sum intsum 0 i for i 1 i 100 i sum sum i Console WriteLine sum intsum 0 i for i 1 i 100 i sum sum i Console WriteLine sum intsum 0 i for i 1 i 100 i sum sum i Console WriteLine sum intsum 0 i for i 1 i 100 i sum sum i Console WriteLine sum intsum 0 i for i 1 i 100 i sum sum i Console WriteLine sum intsum 0 i for i 1 i 100 i sum sum i Console WriteLine sum 在窗体设计图上 双击按钮button1编写 计算 按钮的Click 单击 事件代码为 privatevoidbutton1 Click objectsender System EventArgse intsum k sum 0 for k 1 k 100 k k 1 sum sum k label1 Text 从1加到100值为 sum ToString 程序的运行结果如图所示的左图 单击 计算 按钮 将在标签上显示运行结果 程序运行结果 例子 计算n 假设n 10 分析 该例实现阶乘的运算 可以使用改变乘数的值进行实现 使用循环可以方便的实现该类问题 程序的运行结果如图所示 计算n n n n 1 2 1 privatevoidbutton1 Click objectsender System EventArgse intsum k sum 1 for k 1 k 10 k sum sum k textBox1 Text sum ToString 编写 计算 按钮的Click 单击 事件代码为 练习 使用for语句 编程输出1 10的每个整数的平方 staticvoidMain string args ints for inti 1 i 10 i s i i Console Write 0 t s for语句的常见用法 1 inti for i 0 i 100 i Console WriteLine i 01234 9899 运行结果 赋初值 01234 9899 循环体被运行100次 循环变量依次为0 99 改变循环变量 i 循环变量 循环条件 for语句的常见用法 2 inti for i 1 i 100 i Console WriteLine i 12345 99100 运行结果 循环体也被运行100次 循环变量依次为1 100 inti for i 1 i 100 i Console WriteLine i 12345 99100 inti for i 1 i 100 i Console WriteLine i 12345 99100 for语句的简化 for i 1 i 100 i Console WriteLine i 可以为空 可以为空 可以为空 认为是true inti 0 形成死循环 分号不能省略哦 在for循环中定义变量 for inti 1 i 100 i sum sum i 在for中定义的变量只在该循环语句内有效 在循环语句外不能访问 可以在这里定义变量 for inti 1 i 100 i sum sum i 在for中定义的变量只在该循环语句内有效 在循环语句外不能访问 for inti 1 i 100 i sum sum i 可以用于不知道循环次数的情况 用于在循环时判断是否满足某个条件 while循环语句的格式为 while 布尔表达式 单语句或者语句块布尔条件表达式是每次循环开始前进行判断的条件 当条件表达式的值为真时 执行循环 否则 退出循环 该语句结构的流程图如图所示 4 3 2while循环 while语句 while 布尔表达式 语句 格式 功能 1如果布尔表达式为false 直接跳出循环 2如果为true 则执行语句 并继续第1步 布尔表达式 语句 false true while循环语句的使用 例子 设有一张厚为xmm 面积足够大的纸 将它不断地对折 试问对折多少次后 其厚度可达珠穆朗玛峰的高度 8844 43m 设对折后纸的厚度为hmm 计数器为n 在没有对折时 纸厚为xmm 每对折一次 其厚度是上一次的2倍 在未到达8844 43m时 重复对折 在程序中 纸的厚度就是对折后纸的厚度 所以用一个变量h 建立应用程序用户界面与设置对象属性 如图所示 用户界面及程序运行结果 privatevoidbutton1 Click objectsender System EventArgse intn 0 floath h float Parse textBox1 Text while h 8844430 未到达8844 43m时 重复对折 n n 1 计数器为n对折次数h 2 h 每对折一次 其厚度是上一次的2倍 textBox2 Text n ToString 求1 2 3 100的值改成while循环 sum 0 i 1 sum sum i i i 1 sum sum i i i 1 sum sum i i i 1 sum sum i i i 1 cout sum endl 循环条件 循环体语句 5050 运行结果 5050 5050 5050 while运行流程分析 i 1 while i 100 sum sum i i 1 100 100 100 101 100 true true false 1 100 true 100 100 1 100 false 100 100 1 100 101 100 100 100 1 100 在while循环的循环体中一般应该有使循环条件不成立的语句 否则会形成 死循环 i 1 while i 100 sum sum i i i 1 这个语句让循环条件可以不成立 死循环 不会自动终止的循环 i 1 while i 100 sum sum i i i 1 死循环 不会自动终止的循环 i 1 while i 100 sum sum i i i 1 i 1 while i 100 sum sum i i i 1 死循环 去掉该语句 形成死循环 运行时 死循环占用大量CPU时间 i 1 while i 100 sum sum i i i 1 死循环 i 1 while i 100 sum sum i i i 1 死循环 while true 可以形成死循环 while true Console WriteLine Hello HelloHelloHelloHelloHelloHelloHello 条件恒为true while true Console WriteLine Hello HelloHelloHelloHelloHelloHelloHello while true Console WriteLine Hello 计算1 2 100for循环和while循环 intsum 0 i for i 1 i 100 i sum sum i Console WriteLine sum sum 0 i 1 while i 100 sum sum i i i 1 Console WriteLine sum intsum 0 i for i 1 i 100 i sum sum i Console WriteLine sum sum 0 i 1 while i 100 sum sum i i i 1 Console WriteLine sum for循环与while循环 功能完全相同 for可以转化为while while也可以转为for intsum 0 i for i 1 i 100 i sum sum i Console WriteLine sum sum 0 i 1 while i 100 sum sum i i i 1 Console WriteLine sum 例 求一个整数x所有位数之和 sum 0 while x 0 sum x 10 x 10 Console WriteLine sum 算法思路 x 10可以得到个位数字 x x 10可以得到去掉个位数字后剩下的数字 重复这个过程直到x变为0 可以依次得到所有数字 学习编程语言的同时 也要学会用 计算机的思维方式 掌握计算机解决问题的方法 算法 sum 0 while x 0 sum x 10 x 10 Console WriteLine sum 算法思路 x 10可以得到个位数字 x x 10可以得到去掉个位数字后剩下的数字 重复这个过程直到x变为0 可以依次得到所有数字 sum 0 while x 0 sum x 10 x 10 Console WriteLine sum 算法思路 x 10可以得到个位数字 x x 10可以得到去掉个位数字后剩下的数字 重复这个过程直到x变为0 可以依次得到所有数字 do while循环非常类似于while循环 差别在于while循环的测试条件在每一次循环开始时执行 而do while循环的测试条件在每一次循环体结束时进行判断 同样的 do while可以解决一些循环问题 但使用的频率较少 do while语法的一般格式为 do语句while 布尔表达式 4 3 3do while循环 do while语句 do语句while 布尔表达式 功能 true false 语句 表达式 1执行循环体语句 2计算表达式 如果为true 并继续第1步 如果为false 则退出循环 1执行循环体语句 2计算表达式 如果为true 并继续第1步 如果为false 则退出循环 1执行循环体语句 2计算表达式 如果为true 并继续第1步 do语句while 布尔表达式 如果为false 则退出循环 1执行循环体语句 2计算表达式 如果为true 并继续第1步 do while的使用 例子 使用do while语句实现1 2 3 100 inti 1 sum 0 do sum sum i i i 1 while i 100 Console WriteLine sum 是do while语句的一部分 不要遗忘 5050 运行结果 inti 1 sum 0 do sum sum i i i 1 while i 100 Console WriteLine sum 5050 inti 1 sum 0 do sum sum i i i 1 while i 100 Console WriteLine sum do while的循环体至少被执行一次 inti 20 while i 10 Console WriteLine i i inti 20 do Console WriteLine i i while i 10 运行结果 20 运行结果 inti 20 while i 10 Console WriteLine i i inti 20 do Console WriteLine i i while i 10 inti 20 while i 10 Console WriteLine i i 20 inti 20 do Console WriteLine i i while i 10 inti 20 while i 10 Console WriteLine i i inti 20 while i 10 Console WriteLine i i inti 20 do Console WriteLine i i while i 10 inti 20 while i 10 Console WriteLine i i 4 3 4foreach循环 foreach语句用于循环访问数组或集合以获取所需信息 当为数组或集合中的所有元素完成迭代后 控制传递给foreach块之后的下一个语句foreach 类型名称变量名称in数组或集合名称 循环体语句序列 例4 17 使用foreach显示整数数组的内容 当一个循环 称为 外循环 的循环语句序列内包含另一个循环 称为 内循环 称为循环的嵌套 这种语句结构称为多重循环结构 内循环中还以包含循环 形成多层循环 循环嵌套的层数理论上无限制 三种循环 while循环 do while循环 for循环 可以互相嵌套 在多重循环中 需要注意的是循环语句所在循环的层数 4 3 5循环的嵌套 循环的嵌套 循环体内的语句也可以是任意循环语句 inti for i 1 i 100 i j 0 while j 4 Console WriteLine j 内循环 外循环 例子 编程实现九九乘法表 分析 本例中实现每一个一位数i显示从1乘到i 对于i的取值要从1取到9 所以可以使用两重循环实现 程序设计如图所示 九九乘法表 本例的界面设计如图 使用label1控件实现乘法表的显示 本例使用两重循环实现 其中外层循环实现乘法表中第二乘数i取值范围为1到9 内层循环在外层循环的基础上计算第一个乘数k的取值范围为1到i 其乘积以及表达式在label控件中显示 运行结果如图所示 九九乘法表 按钮的Click 单击 事件代码为 privatevoidbutton1 Click objectsender System EventArgse label1 Text strings intsum for inti 1 i 10 i i 1 s for intk 1 k i k k 1 sum k i s s k ToString i ToString sum ToString label1 Text s n 显示并换行 例 利用for循环的嵌套 求1 2 3 10 的和 N 1 2 3 N 称为N的阶乘例 4 1 2 3 4 24 计算N的阶乘的算法 mul 1 for i 1 i N i mul i 循环结束后 mul保存N N 1 2 3 N 称为N的阶乘例 4 1 2 3 4 24 计算N的阶乘的算法 mul 1 for i 1 i N i mul i 循环结束后 mul保存N staticvoidMain string args longs 0 longm for inti 1 i 10 i m 1 for intj 1 j i j m j s s m 累加到变量s Console WriteLine 1 2 3 10 0 s 避免内外循环的变量冲突 避免内外循环的变量冲突 计算i的阶乘到变量m 4 4跳转语句 使用跳转语句执行分支 可以使程序执行跳转到程序中其它部分 C 中提供四种转移语句 GotoBreakContinuereturn goto语句可以将程序控制直接转移给标签制定的语句 但由于goto语句改变了程序的正常流程 使得程序特别容易出错 所以尽量不要用 而且 用goto语句实现的循环完全可以用循环语句实现 因此 goto语句很少使用 4 4 1goto语句 goto语句 无条件转移语句 goto标号 标号 功能 控制流程直接转到指定标号处 标号可以在goto之前或之后 但必须在同一个方法内 goto标号 标号 控制流程直接转到指定标号处 标号可以在goto之前或之后 但必须在同一个方法内 goto标号 标号 控制流程直接转到指定标号处 例 使用if和goto计算1 2 100 usingSystem classProgram staticvoidMain string args inti 1 sum 0 Loop sum i i if i 100 gotoLoop Console WriteLine 1 2 3 100 0 sum Loop是自定义的标号 属于标识符 例 找到两个数 乘积为45 并且两个数都小于10 输出这两个数 staticvoidMain string args inti 0 j 0 for i 1 i 10 i for j 1 j 10 j if i j 45 gotoend end Console WriteLine 0 1 2 i j i j 退出多重循环 是C 保留goto语句的最大价值 只能从循环内层往外层跳转 不能从外层往内层跳转 退出多重循环 是C 保留goto语句的最大价值 只能从循环内层往外层跳转 不能从外层往内层跳转 使用goto的注意事项 经验证明 使用goto语句实现循环 破环了程序的可读性 现代程序设计中 不提倡使用goto来完成循环 保留goto语句 应该仅仅用于跳出多重循环这个功能 用于switch语句和循环语句 while do while for foreach 语句中 用于跳出所在的switch或者循环语句 break 例 break跳出for语句inti for i 1 i 100 i Console WriteLine i if i 5 break Console WriteLine Finished 12345Finished 输出结果 4 4 2break语句 用于switch语句和循环语句 while do while for foreach 语句中 用于跳出所在的switch或者循环语句 break 例 break跳出for语句inti for i 1 i 100 i Console WriteLine i if i 5 break Console WriteLine Finished 用于switch语句和循环语句 while do while for foreach 语句中 用于跳出所在的switch或者循环语句 break 输出结果 例 break跳出for语句inti for i 1 i 100 i Console WriteLine i if i 5 break Console WriteLine Finished 用于switch语句和循环语句 while do while for foreach 语句中 用于跳出所在的switch或者循环语句 break 12345Finished 例 break跳出for语句inti for i 1 i 100 i Console WriteLine i if i 5 break Console WriteLine Finished 用于switch语句和循环语句 while do while for foreach 语句中 用于跳出所在的switch或者循环语句 break break语句 强制退出一层循环 只能够退出一层 使用goto可以退出多层 for for break Console WriteLine n 例 判断一个整数n是否为素数 算法 输入n从2到n 1试验是否被n整除 如果任意一个能够整除 则不是素数如果全部试验都不能整除 则为素数 素数 大于1的正整数 如果除了1和它本身 没有其它正因子 算法 输入n从2到n 1试验是否被n整除 如果任意一个能够整除 则不是素数如果全部试验都不能整除 则为素数 算法伪代码 输入n isPrime true for i 2 i n i if n i 0 i被n整除isPrime false 现在 isPrime变量表示n是否素数 伪代码是人交流算法时使用的不完整的代码 没有固定的语法 但写出关键的语句 对所有的i进行检测是多于的 因为只要有一个i被n整除 已经可以判定不是素数 不需要继续试验 在这里 可以使用break语句跳出循环 输入n isPrime true for i 2 i n i if n i 0 i被n整除isPrime false 现在 isPrime变量表示n是否素数 输入n isPrime true for i 2 i n i if n i 0 i被n整除isPrime false 现在 isPrime变量表示n是否素数 输入n isPrime true for i 2 i n i if n i 0 i被n整除isPrime false 现在 isPrime变量表示n是否素数 staticvoidMain string args intn k boolIsPrime true 标志Console WriteLine 请输入要检测的整数 大于1 n int Parse Console ReadLine for k 2 k n k if n k 0 IsPrime false 可以肯定不是素数break 余下的不必再试验了 if IsPrime Console WriteLine 0 是素数 n elseConsole WriteLine 0 不是素数 n 注 在该例子中 没有break程序也能正确运行 但有多余计算 continue语句用于循环语句中 类似于break语句 但仅从当前的循环迭代中退出 然后执行下一次迭代循环 用于循环语句中 while do while for foreach continue结束本次循环 继续下一次循环 continue 4 4 3continue语句 用于循环语句中 while do while for foreach continue结束本次循环 继续下一次循环 continue staticvoidMain string args for inti 1 i 10 i i 1 if i 5 continue Console WriteLine i 了解continue语句的使用 求输出大于或等于5的数 运行结果 5678910 staticvoidMain string args for inti 1 i 10 i i 1 if i 5 continue Console WriteLine i 运行结果 5678910 for intn 10 n 20 n if n 3 0 continue Console WriteLine n 例 打印出10到20之间不能被3整除的数字 例 输出100以内所有能被5整除的数 staticvoidMain string args for inti 1 i 100 i if i 5 0 continue Console Write 0 t i staticvoidMain string args for inti 1 i 100 i if i 5 0 Console Write 0 t i 使用Continue 不用Continue 这两个程序功能相同 staticvoidMain string args for inti 1 i 100 i if i 5 0 continue Console Write 0 t i staticvoidMain string
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 考研专业课复习方法技巧交流分享
- 航海许可证颁发细则
- 恪守合同约定承诺书5篇
- 员工培训需求评估调查表模板
- 体育场馆运营服务协议
- 定制家居家具制作安装合同
- 品牌联名合作与推广协议
- 客户服务回访跟踪记录表服务质量监测版
- 改善资金运用效率承诺书3篇范文
- 学习故事:克服困难的我13篇范文
- 2025四川蜀道建筑科技有限公司招聘16人考试模拟试题及答案解析
- 国旗下讲话稿:预防秋季传染病
- 第1课 认识工具教学设计-2025-2026学年小学书法西泠版三年级上册-西泠版
- 教师网络安全培训会课件
- 2024年中国中信金融资产江西分公司招聘2人笔试模拟试题附答案详解(研优卷)
- 体育模拟上课培训课件
- 标准件供货协议合同范本
- 纳税申报流程课件
- 2025年秋期新教科版四年级上册小学科学教学计划+进度表
- 2025新疆维吾尔自治区人民检察院招聘聘用制书记员(14人)笔试参考题库附答案解析
- 循环水泵设备安装方案详细指导
评论
0/150
提交评论