第二章-编程基础1课件.ppt_第1页
第二章-编程基础1课件.ppt_第2页
第二章-编程基础1课件.ppt_第3页
第二章-编程基础1课件.ppt_第4页
第二章-编程基础1课件.ppt_第5页
免费预览已结束,剩余83页可下载查看

下载本文档

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

文档简介

3 2循环语句 在程序设计中有许多问题都要用到循环 例如 将某个字符串打印100遍 求若干个数的和等它们使用循环能多次执行同一个任务 直到完成程序的功能 这是程序设计中经常用到的技术 循环是程序设计的基本语句之一 几乎所有的实用程序都包含了循环语句 熟练掌握它们是程序设计的基本要求 1 3 2 1for循环 在大多数高级编程语言中 C Java 都有for循环语句 它的功能强大并且使用灵活 不仅可以用于循环次数确定的情况下 还能用于循环次数不确定的情况 for语句使用的语法形式为 for 表达式1 表达式2 表达式3 循环体 2 2020 4 17 3 for语句的算法 例如 staticvoidmain string args for i 1 i 100 i Console Write i 可部分或全部省略 但 不可省略 2020 4 17 4 省略for语句的表达式 表达式1 2 3全省略 即 for 就等同于 while 1 会无限循环 死循环 注意 在省略某个表达式时 应在适当位置进行循环控制的必要操作 以保证循环的正确执行 省略表达式1和表达式3 即 for 表达式2 就等同于 while 表达式2 省略表达式2 即 for 表达式1 表达式3 就等同于 表达式1 while 1 表达式3 2020 4 17 5 例如 i 1 for i100 for i 1 i100 i 2020 4 17 6 例如 例3 9 编写程序 求100个自然数的和即 s 1 2 3 100 思路 寻找加数与求和的规律 加数i 从1变到100 每循环一次 使i增1 直到i的值超过100 i的初值设为1 求和 设变量sum存放和 循环求sum sum i 直至i超过100 2020 4 17 7 注意 为了保证循环正常运行 应该特别注意 循环控制条件的描述控制条件的初始状态 初始值 循环体内部对控制条件的影响 2020 4 17 8 例3 10 求n 即计算p 1 2 3 n的值 思路 求阶乘与求累加的运算处理过程类似 只要将 变为 设置 乘数i 初值为1 终值为n n是循环控制终值 需要从键盘输入 累乘器p 每次循环令p p i 例3 11 一张单据上有一个5位数的号码为6 42 其中百位数和千位数已模糊不清 但知道该数能被57和67除尽 设计一个算法 找出该单据所有可能的号码 3 2 2while循环 while循环语句是C 中不同于for语句的一种循环形式 它由循环条件和循体语句组成 使用while循环语句的语法形式如下所示 while 循环条件 循环体语句 10 2020 4 17 11 功能 计算表达式的值 为true时 重复执行内嵌语句 每执行一次 就判断一次表达式的值 直到表达式的值为false时结束循环 转去执行while后面的语句 2020 4 17 12 注意 如果while的 表达式 值为false 则循环体一次也不执行 例如当i的初值 101 在循环体中必须有使循环趋向结束的操作 否则循环将无限进行 死循环 在循环体中 语句的先后位置必须符合逻辑 否则会影响运算结果 思考程序段的输出 while i 100 i sum sum i 运行后 输出 sum 5150原因是什么 例3 12 编程求下式的值 要求编写成控制台应用程序 S 12 22 102 2020 4 17 14 说明 所有用for语句实现的循环都可以用while语句实现 等价于 for 表达式1 表达式2 表达式3 语句 表达式1 while 表达式2 语句 表达式3 3 2 3do while循环 do while同样是由循环条件和循环体组成 但它while语句略有不同 do while语句的特点为 先执行循环体 然后判断循环条件是否成立 使用它时的语法形式为 do 循环体 while 循环条件 15 2020 4 17 16 do while循环的算法 main inti 1 sum 0 do sum sum i i while i 100 Console Write sum 用do while语句求100个自然数的和 while与do while while由于先判断条件 如第一次测试条件时 表达式值就为false 循环体将一次也不执行 因此 当型循环又称 允许0次循环 do while先执行语句 后判断表达式 因此 循环体至少执行一次 因此 直到型循环又称 不允许0次循环 例3 13 编一个程序按下列公式求e的值 要求精度达到1e 6 2020 4 17 19 do while语句的简单应用 例3 14 用辗转相除法求m和n的最大公约数 2020 4 17 20 几种循环语句的比较 while和do while语句的表达式只有一个 for语句有三个 while和for先判断循环条件后执行循环体 do while语句先执行循环体后判断循环条件 while语句多用于循环次数不定的情况do while语句多用于至少要运行一次的情况for语句多用于要赋初值或循环次数固定的情况 3 2 4foreach循环 foreach循环语句是C 中特有的 在C C 和Java语言中并没有这种循环语句 它非常适合遍历数组中的元素 foreach很重要的优点是它不必去处理数组的下标 使用foreach时它的语法形式一般为 for 类型标识符in表达式 循环体 21 3 3跳转语句 除了上述的分支语句和循环语句外 还有一种特殊的程序控制语句 即跳转语句 跳转跳转语句用于需要从当前程序跳转到另一行程序执行代码的情况 C 中提供了多种跳转语句 详细介绍goto break continue和return语句 22 goto语句 语句格式 goto标示符 转向具有给定标签的标记语句 用于跳出深层嵌套循环 gotodefault gotocase常数表达式将控制传递给特定的switch case标签或switch语句中的默认标签 说明 1 如果当前函数成员中不存在具有给定名称的标签 或者goto语句不在标签的范围内 则发生编译时错误 2 goto语句可将控制转移出嵌套范围 即跳出深层嵌套循环 但是不允许将控制转移进另一个语句块内部 更不能转到另一个函数内部 2020 4 17 25 不提倡使用goto语句 注意 goto语句能实现程序无条件转移 为编程提供了便利 但是无限制地使用 会破坏程序的结构化程度 因此应限制使用 注意 2020 4 17 26 循环中break的应用 功能 利用break语句能够强迫终止本层循环 转到后续语句执行 while语句 do while语句 for语句 2020 4 17 27 例如 intx n 0 s 0 while n 10 Console Read x if x 0 break s x n intx n 0 s 0 do Console Read x if x 0 break s x n while n 10 for n 0 s 0 n 10 n Console Read x if x 0 break s x break用于退出最近的封闭switch while do或for语句 如果break语句不是由switch while do或for语句封闭 则发生编译时错误 当多个switch while do或for语句彼此嵌套时 break语句只应用于最里层的语句 若要在多个嵌套层之间转移控制 必须使用goto语句 例3 15 输入一个整数X 如果该数是素数 则显示 是素数 如果不是则显示 不是素数 2020 4 17 30 continue语句及应用 功能 中断循环体的本次执行 即跳过循环体中尚未执行的语句 立即开始执行下一次循环 while语句 do while语句 for语句 2020 4 17 31 例如 intx n 0 s 0 while n 10 Console Read x if x 0 continue s x n intx n 0 s 0 do Console Read x if x 0 continue s x n while n 10 for n 0 s 0 n 10 n Console Read x if x 0 continue s x continue语句将控制转到最近的封闭while do for或foreach语句的嵌入语句的结束点 从而执行这些语句的另一次迭代 如果continue语句不是由while do for或foreach语句封闭的 则发生编译时错误 当多个while do或for语句互相嵌套时 continue只应用于最里层的语句 若要在多个嵌套层之间转移控制 必须使用goto语句 2020 4 17 33 例3 16 把100 200之间能被7整除的数 以十个数为一行的形式输出 最后输出一共有多少个这样的数 breakVS continue将控制转移到循环将控制转移到语句的结束点 从嵌入语句的结而终止整个循环束点 即结束本的执行 次循环 执行循环语句的另一次迭代 2020 4 17 35 循环的嵌套 如果循环语句的循环体内又包含了另一条循环语句 则称为循环的嵌套例如 staticvoidmain stringargs inti j for i 1 i 10 i for j 1 j i j if j i Console WriteLine j i elseConsole Write j i 外循环语句 内循环语句 2020 4 17 36 注意 while do while for循环语句可以并列 也可以相互嵌套 但要层次清楚 不能出现交叉 多重循环程序执行时 外层循环每执行一次 内层循环都需要循环执行多次 例如 for a 1 a 10 a for b 0 b 5 b 外循环执行了10次 内循环执行6次循环正常结束时 内循环执行了10 6 60次 2020 4 17 37 循环结构程序设计综合示例 例3 17 按每行输出5个数的形式输出Fibonacci数列的前20项 思路 Fibonacci数列的前几项是 1 1 2 3 5 8 13 21 34 此数列的变化规律是 设变量f1 f2和f3 并为f1和f2赋初值1 令f3 f1 f2得到第3项 将f1 f2 f2 f3 再求f3 f1 f2得到第4项 依此类推求第5项 第6项 这是一种递推算法应采用循环实现 2020 4 17 38 算法和程序 2020 4 17 39 如何输出100 200中所有的素数 2020 4 17 40 例3 18 用牛顿迭代法求方程2x3 4x2 7x 6 0在x 1 5附近的根 思路 设xn为一个接近xa的近似根 过 xn f xn 点做切线 切线方程为 即 牛顿迭代公式 2020 4 17 41 算法基本步骤 先设一个方程近似根x0 求出方程f的值和方程导数f1的值 f 2x03 4x02 7x0 6f1 6x02 8x0 7 用迭代公式x x0 f f1进行迭代 求出x比x0要接近方程真实的根 当 x x0 大于某个很小的数时 如10 6 认为未找到 此时将x x0 再次求f f1 并迭代 又求出一个新的更接近方程根的x 一直到 x x0 10 6时得到方程近似根 x或x0 这是一种迭代算法用循环实现 2020 4 17 42 算法和程序 staticvoidmain stringargs floatx x0 f f1 x 1 5 do x0 x f 2 x0 x0 x0 4 x0 x0 7 x0 6 f1 6 x0 x0 8 x0 7 x x0 f f1 while Math abs x x0 1e 6 Console Write x 2020 4 17 43 例3 19 编程序求2 10000以内的完全数 完全数 一个数的因子 除了这个数本身 之和等于该数本身 思路 设定i从2变到10000 对每个i找到其因子和s 判定i s 若相等 则i为完全数 否则不是 例如 6的因子是1 2 3 因子和1 2 3 6因此6是完全数 使用穷举算法用双层循环实现 2020 4 17 44 算法和程序 staticvoidmain string args inti j s for i 2 i 10000 i s 0 for j 1 j i j if i j 0 s j if i s Console Write s 2020 4 17 45 例3 20 编程序 输出以下图形 一共有4行 每行由空格和星号组成 空格数按行增加 星号按行减少变量i控制输出行数 从1变化到4变量j控制输出每行的空格和星号 j从1变化到i 每次输出一个空格j从1变化到8 2 i 1 每次输出一个星号 使用双重循环实现 思路 2020 4 17 46 算法 思考 如何输出10行图形 输出图形向右平移20个字符位置 应如何修改程序 3 2典型实例练能力 3 2 1典型实例一 根据长度和面积求矩形的高和宽 实例题目 使用一根长度为L厘米的铁丝 制作一个面积为S的矩形框 要求计算出满足这种条件的矩形的高h和宽w 3 2 2典型实例二 百钱买百鸡 实例题目 我国古代数学家在 算经 中出了一道题 鸡翁一 值钱五 鸡母一 值钱三 鸡雏三 值钱一 百钱买百鸡 问鸡翁 母 雏各几何 意为 公鸡每只5元 母鸡每只3元 小鸡3只1元 用100元买100只鸡 问公鸡 母鸡 小鸡各多少 要求编写成控制台应用程序 3 3上机练习重应用 3 3 1上机练习一 邮包计费程序 练习题目 假定向国外邮寄包裹收费如下计算 首先 包裹重量四舍五入到最近的15克的倍数 然后按表3 3收费 3 3 2上机练习二 捉拿肇事司机 练习题目 一辆卡车违反交通规则 撞死行人 司机畏罪驾车逃跑 当时有三个人目击这一车祸的发生 但都没有看清卡车的牌照号码 只记住牌照号码的部分特征 甲记住牌照号码的前两位数字是相同的 乙记住牌照号码的后两位数字是相同的 丙是一位数学家 他说 车牌号码肯定是四位数 而且恰好是一个整数的平方 并且丙已推导出符合该条件的号码只可能有一个 根据这些信息来判定车牌号并捉拿肇事司机 要求编写控制台应用程序 执行结果 好好的学习这一章 至关重要 数组 本章要点 掌握一维 二维数组的定义和引用方法 存储结构和初始化方法 掌握有关一维数组的有关算法掌握数组的运算 主要内容 1一维数组的定义和引用2二维数组的定义和引用3多维数组定义和引用4不规则数组定义和引用 1 一维数组的定义格式有两种方式分别为 1 类型说明符 数组名 2 类型说明符 数组名 new类型说明符 常量表达式 例如 int a 1 2 3 int a newint 10 它表示定义了一个整形数组 数组名为a 7 1 1一维数组的定义 说明 1 数组名命名规则和变量名相同 遵循标识符命名规则 2 在定义数组时 需要指定数组中元素的个数 方括弧中的常量表达式用来表示元素的个数 即数组长度 3 表达式中可以包括常量和符号常量 还能包含变量 2 一维数组在内存中的存放 每个数据元素占用的字节数 就是基类型的字节数一个元素占4个字节 一维数组 float mark 注意 定义数组时用到的 常量表达式 数组名 和引用数组元素时用到的 数组名 下标 是有区别的 例如 int a newint 6 t a 6 7 1 2一维数组元素的引用 1 数组元素的引用方式数组名 下标 下标可以是整型常量或整型表达式 例如 a 0 a 5 a 7 a 2 3 对数组元素初始化的实现方法 1 在定义数组时对数组元素赋以初值 例如 int a 0 1 2 3 4 5 6 7 8 9 将数组元素的初值依次放在一对花括弧内 经过上面的定义和初始化之后 a 0 0 a 1 1 a 2 2 a 3 3 a 4 4 a 5 5 a 6 6 a 7 7 a 8 8 a 9 9 7 1 3一维数组的初始化 3 如果想使一个数组中全部元素值为0 可以写成 int a 0 0 0 0 0 0 0 0 0 0 或int a newint 10 不能写成 int a 0 10 注意 C 语言中数组的默认值为0 2 可以只给一部分元素赋值 例如 int a newint 10 for i 0 i 5 i a i i f 0 1 f 1 1 for i 2 i 20 i f i f i 2 f i 1 for i 0 i 20 i Console Write f i if i 1 5 0 Console Write n For循环结束 运行结果如下 11235813213455891442333776109871597258441816765 if语句用来控制换行 每行输出5个数据 如果有n个数 则要进行n 1趟比较 在第1趟比较中要进行n 1次两两比较 在第j趟比较中要进行n j次两两比较 程序流程图如下 for i 0 ia i 1 t a i a i a i 1 a i 1 t Console Write 排序后 n 0 a j 程序结束 程序运行结果如下 input10numbers 10481265 76100 45123 thesortednumbers 76 4501481265100123 7 2二维数组的定义和引用 7 2 1二维数组的定义 二维数组定义的格式有两种分别为 1 类型说明符 数组名 2 类型说明符 数组名 new类型说明符 常量表达式 常量表达式 例如 定义a为3 4 3行4列 的数组 b为5 10 5行10列 的数组 如下 Newfloat 3 4 5 10 注意 我们可以把二维数组看作是一种特殊的一维数组 它的元素又是一个一维数组 例如 可以把a看作是一个一维数组 它有3个元素 a 0 a 1 a 2 每个元素又是一个包含4个元素的一维数组 7 2 1二维数组的定义 二维数组中的元素在内存中的排列顺序是 按行存放 即先顺序存放第一行的元素 再存放第二行的元素 一维数组在内存中的存放 下图表示对a 3 4 数组存放的顺序 地址值数组元素 b 0 0 b 0 1 b 0 2 b 1 0 b 1 1 b 1 2 b 2 0 b 2 1 b 2 2 3000H3002H3004H3006H3008H300AH300CH300EH3010H 例如 整型数组b 3 3 1 2 3 4 5 6 7 8 9 123 456 789 三维数组的元素排列顺序 二维数组元素的表示形式为 数组名 下标 下标 例如 a 2 3 下标可以是整型表达式 如a 2 1 2 2 1 数组元素可以出现在表达式中 也可以被赋值例如 b 1 2 a 2 3 2 7 2 2二维数组的引用 常出现的错误有 inta 3 4 定义a为3 4的数组 a 3 4 3 在使用数组元素时 应该注意下标值应在已定义的数组大小的范围内 可以用下面的方法对二维数组初始化 数据类型 常量表达式1 常量表达式2 数组名 初始化数据 分行给二维数组赋初值 例如 int a 1 2 3 4 5 6 7 8 9 10 11 12 7 2 3二维数组的引用 注意 初始化时必须要将所有的项都付值 7 2 4二维数组程序举例 例7 4将一个二维数组行和列元素互换 存到另一个二维数组中 UsingSystem Staticvoidmain string args int 2 3 a 1 2 3 4 5 6 int 3 2 b i j Console Write arraya n for i 0 i 1 i for j 0 j 2 j Console Write a i j b j i a i j Console Write n Console Write arrayb n for i 0 i 2 i for j 0 j 1 j Console Write b i j Console Write n 程序结束 运行结果如下 arraya 123456arrayb 142536 例7 5 有一个3 4的矩阵 要求编程序求出其中值最大的那个元素的值 以及其所在的行号和列号 N S流程图表示算法如下 程序 UsingSystem StaticvoidMain string args inti j row 0 colum 0 max inta 3 4 1 2 3 4 9 8 7 6 10 10 5 2 max a 0 0 for i 0 imax max a i j row i colum j Console Write 0 1 2 n max row colum 程序结束 7 3字符数组 7 3 1字符数组的定义 定义方

温馨提示

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

评论

0/150

提交评论