全国计算机 二级C语言程序设计.ppt_第1页
全国计算机 二级C语言程序设计.ppt_第2页
全国计算机 二级C语言程序设计.ppt_第3页
全国计算机 二级C语言程序设计.ppt_第4页
全国计算机 二级C语言程序设计.ppt_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

5 1while语句5 2do while语句5 3for语句5 4循环的嵌套5 5break continue和goto语句5 6程序举例 第5讲循环结构程序设计 2 C语言有while do while for三种循环结构语句 前两个称为条件循环 即根据条件来决定是否继续循环 后一个称为计数循环 即根据设定的执行次数来执行循环 5 1while语句及其循环结构 while语句和格式及执行过程 格式 while 表达式 语句执行过程 先计算表达式之值 若为非0 即条件成立 执行后面的语句 称之为循环体 之后 再计算表达式之值进行判断 如此多次重复执行循环体 若表达式之值为0 即条件不成立 跳出循环体语句 继续向下执行 while语句的流程图 表达式 语句 循环体 Y 非0 N 0 while 表达式 语句 例1求1 100之间所有整数的和 i 100 sum i 累加 i 1 计数器加1 Y 非0 N 0 i 1 sum 0 printf i d sum d n i sum 求1 100之间整数和的程序 main inti 1 sum 0 while i 100 sum i i 1 printf i d sum d n i sum 这是一个while语句 想一想 语句sum i 和语句i 1 能否改变位置 为什么 想一想 如果在while语句之前对变量sum赋初值为1 是否可以 程序的哪些地方应作相应的改动 求1 100之间整数和的程序运行过程 main inti 1 sum 0 while i 100 sum i i 1 printf i d sum d n i sum 这是一个while语句 程序执行的过程和结果如下 i 101 sum 5050 注意 循环结束后 变量i的值一定大于100 想想这样的一段循环语句的执行结果 i 1 while i 100 putchar i 这个循环永远不会结束 因为循环控制变量i没有在循环体内被改变 i 不属于循环体 应该改为 i 1 while i 100 putchar i 循环语句中一定要注意表达式的值是否能在循环执行过程中被改变 以免造成死循环 5 2do while语句及其循环结构 do while语句和格式及执行过程 格式 do语句while 表达式 执行过程 先执行语句 称之为循环体 然后计算表达式之值 若为非0 即条件成立 再执行语句 循环体 后计算表达式之值 如此多次重复执行循环体并判断条件 若表达式之值为0 即条件不成立 结束循环 继续向下执行 do while语句的流程图 表达式 语句 循环体 Y 非0 N 0 注意 while循环语句与do while循环语句的区别 用do while语句求100以内正整数的和 main inti 1 sum 0 do sum i i 1 while i 100 printf i d sum d n i sum i 101 sum 5050 从键盘上输入10个整数 求总和及平均值 main intx sum 0 i 1 floataver while i 10 scanf d 从键盘上输入若干个整数 求总和及平均值 输入 1结束 main intx sum 0 i 1 floataver while sum x i scanf d scanf d x 1 5 3for语句 格式 for 表达式1 表达式2 表达式3 语句执行 1 先求解表达式1的值 2 再求解表达式2的值 若值为非0 条件成立 则执行语句 循环体 后执行下面的 3 若表达式2的值为0 条件不成立 则转向 5 3 求解表达式3的值 4 转回执行 2 5 执行for语句后面的语句 for语句执行流程图 表达式2 语句 循环体 Y 非0 N 0 表达式1 表达式3 for 表达式1 表达式2 表达式3 语句 求1 100之间的整数之和 for语句 main inti sum for i 1 sum 0 i 100 i sum i printf i d sum d n i sum i 101 sum 5050 求1 100之间的整数之和 for语句 main inti sum for i 100 i sum i printf i d sum d n i sum i 101 sum 5050 表达式1可缺省 放在循环之前 但for语句中的第一个分号不能省略 i 1 sum 0 求1 100之间的整数之和 for语句 main inti sum for i 100 sum i printf i d sum d n i sum i 101 sum 5050 表达式3可缺省 放在循环体之中 但for语句中的第二个分号不能省略 i 1 sum 0 i 求1 100之间的整数之和 for语句 main inti sum for i 1 sum 0 i 100 sum i i printf i d sum d n i sum i 101 sum 5050 循环体中的内容可以放在表达式3中 但要在花括号的后面加一个空语句 for语句的一般格式 在for语句中 一般表达式1用来为变量赋初值 表达式2一般用来设置循环结束条件 表达式3一般用于循环变量增值 故for语句的一般格式为 for 变量赋初值 执行循环体的条件 循环变量增值 语句 例 求1 100 2 99 1 分析 用变量i从1开始循环 每次增加1 用变量j从100开始循环 每次减少1 累加i j的值到s中 当i j时结束循环 即i j时继续循环 最后输出s includemain inti j floats 0 for i 1 j 100 i j i j s s float i j printf ns f s 例 任意输入一个自然数 把它反序输出 如 原数为123 输出321 分析 此题不确定循环执行的次数 也不涉及一个规律变化的变量 一般用while或do while来编写 又由于第一次就要判断输入的是否是自然数 通常用while来实现 算法步骤如下 1 定义整型变量a用于存储输入的自然数 定义t初值为0用于存放a的反序数 定义i用于依次存放求出的a的每一位的数值 2 输入一个自然数赋值给变量a3 若a 0 执行第4步 否则执行第7步4 i a 105 t t 10 i6 a a 10 并返回第3步7 输出t 程序 includemain longa i t 0 scanf ld 1 有以下程序main inti for i 1 i 40 i if i 5 0 if i 8 0 printf d i printf n 执行后的输出结果是A 5B 24C 32D 40 2006 9 2 若变量已正确定义 有以下程序段i 0 doprintf d i while i printf d n i 其输出结果是A 0 0B 0 1C 1 1D 程序进入无限循环3 有以下程序 includemain inty 9 for y 0 y if y 3 0 printf d y 程序的运行结果是A 741B 963C 852D 875421 2007 9 2007 9 4 以下程序的输出结果是 includemain intn 12345 d while n 0 d n 10 printf d d n 10 5 有以下程序段 且变量已正确定义和赋值for s 1 0 k 1 k n k s s 1 0 k k 1 printf s f n n s 请填空 使下面程序段的功能与之完全相同s 1 0 k 1 while s s 1 0 k k 1 printf s f n n s 2007 954321 2007 9k nk 6 以下程序的输出结果是 includemain inti for i a i f i i printf c i a A printf n 2007 9ACE 7 有以下程序 includemain intx 8 for x 0 x if x 3 printf d x continue printf d x 程序运行的结果是A 7 4 2 B 8 7 5 2 C 9 7 6 4 D 8 5 4 2 2008 4 8 以下不构成无限循环的语句或语句组是A n 0 B n 0 do n while n 0 while 1 n C n 10 D for n 0 i 1 i n i while n n 15 若有定义 intk 以下程序段的输出结果是 2 4 for k 2 k 6 k k printf d k 2008 4 9 有以下程序 includemain inti 5 do if i 3 1 if i 5 2 printf d i break i while i 0 printf n 程序的运行结果是A 7B 3 5C 5D 2 6 2008 9 10 设变量已正确定义 以下不能统计出一行中输入字符个数 不包含回车符 的程序段是A n 0 while ch getchar n n B n 0 while getchar n n C for n 0 getchar n n D n 0 for ch getchar ch n n 2009 3 11 有以下程序 includemain charc1 c2 scanf c 程序运行输入65回车后 能否输出结果 结束运行 请回答能或不能 2009 3 不能 12 以下程序运行后的输出结果是 includemain intk 1 s 0 do if k 2 0 continue s k k while k 10 printf s d n s 2009 3 s 0 13 下列程序运行时 若输入labcedf2df输出为 includemain chara 0 ch while ch getch n if a 2 0 2009 3 1AbCeDf2dF 14 有以下程序 includemain intc 0 k for k 1 k 3 k switch k default c k case2 c break case4 c 2 break printf d n c 程序运行后的输出结果是A 3B 5C 7D 9 2009 9 15 有以下程序 includemain intn 2 k 0 while k 程序运行后的输出结果是A 02B 13C 57D 12 2009 9 16 以下程序运行后的输出结果是 includemain inta 1 b 7 do b b 2 a b while b 1 printf d n a 2009 9 5 17 有一下程序 includemain intf f1 f2 i f1 0 f2 1 printf d d f1 f2 for i 3 i 5 i f f1 f2 printf d f f1 f2 f2 f printf n 程序运行后的输出结果是 01123 2009 9 5 4循环嵌套 一个循环体中又包含了另一个完整的循环结构 叫做循环的嵌套 三种循环结构可以互相嵌套 循环嵌套的执行过程是 外循环执行一次 内循环执行一个全过程 循环嵌套举例 输出一个图形 main inti j for i 1 i 4 i for j 1 j 3 j printf printf n 外循环控制输出图形的行数 内循环控制每行输出的数量 循环嵌套语句 第一个语句是循环语句 实现输出3个 号 第二个语句是简单语句 输出一个换行符 main printf n printf n printf n printf n main inti j for i 1 i 4 i printf n 循环嵌套举例 输出一个图形 main inti j for i 1 i 4 i for j 1 j i j printf printf n 外循环控制输出图形的行数 内循环控制每行输出的数量 循环嵌套语句 第一个语句是循环语句 实现输出若干个 号 第二个语句是简单语句 输出一个换行符 5 5break语句和continue语句 break语句格式 break 功能 提前结束循环 从循环体中无条件跳转到循环语句后面执行 可用于switch语句和循环结构中 continue语句格式 continue 结束本次循环 即在本次循环中 不再执行循环体中continue后面的语句 只能用于循环结构 break语句的使用 definePI3 14159main intr floatarea for r 1 r100 break printf r d tarea 2f n r area 计算半径为1 10的圆面积 面积大于100时停止 r 1 area 3 14 r 2 area 12 57 r 3 area 28 27 r 4 area 50 27 r 5 area 78 54 r 6 area 113 10 定义一个符号常量PI 观察r和area的值 r 1area 3 14 r 2area 12 57 r 3area 28 27 r 4area 50 27 r 5area 78 54 带有break 语句的for循环就有两个出口即r 10或者area 100 continue语句的使用 输出1 7之间所有不能被3整除的整数 main intn for n 1 n 7 n if n 3 0 continue printf 5d n n 1 观察n的值 n 2 n 3 n 4 n 5 n 6 n 7 n 8 1 2 4 5 7 5 6循环结构程序举例 连续级数求和Fibonacci数列问题判断一个数是否为素数求出100 200之间的所有素数 求 的近似值 求 的近似值 直到最后一项绝对值小于10 6 111 1 4357 求 的近似值算法流程图 pi pi t n 2 s s t s n 定义变量pi 和 n 分母 s 符号 t 项值 0 pi 1 n 1 s 1 t Y N 求 的近似值 直到最后一项绝对值小于10 6 111 1 4357 求 的近似值程序 main ints 1 longn 1 floatpi 0 t 1 s存放符号 n存放分母 while fabs t 1e 6 pi pi t n n 2 s s t float s n 实现s的 1和 1交替出现 pi pi 4 printf pi f n pi 累加 分母加2 pi 3 141594 pi存放和 t存放项值 计算下一个项值 掌握在循环体中实现正负相间的技巧 判断整数m是否为素数 素数即为质数 如果一个整数只能被1或者它本身整除 这个数就称为是素数 判断素数的算法是 让m被2 m 1之间所有的整数整除 如果m能被2 m 1之中的任何一个整数整除 则提前结束循环 此时m一定不是素数 如果在2 m 1之间不存在能被m整除的整数 则终止循环 此时循环变量的值一定大于或者等于m 判断整数m是否为素数算法流程图 定义变量m 被判断数 i 循环变量 输入m的值 N i m i 2 N Y 结束 i m 输出m是素数 Y N 输出m不是素数 break i for循环 不是素数 是素数 判断整数m是否为素数程序 main intm i scanf d for i 2 i m i if m i 0 break if i m printf n d是素数 n m elseprintf n d不是素数 n m 判断整数m是否为素数程序2 includemain intm i k scanf d for i 2 i k i if m i 0 break if i k printf n d是素数 n m elseprintf n d不是素数 n m 判断整数m是否为素数程序3 main intm i k flag scanf d for i 2 i k i if m i 0 flag 0 break if flag 0 printf n d是素数 n m elseprintf n d不是素数 n m 定义变量flag作为标志变量 变量flag赋初值1 如果m是素数 flag赋0 例 求3 150中所有素数的和 算法分析 1 用变量a从3到150循环 每次值增加12 用变量i从2到a 1循环 每次值增加13 若a i 0 结束i的循环 执行第4步4 若i a 把a累加到s上 5 输出s的值 注意 此题中执行第4步时有两种情况 第一种 在第3步中发现了满足a i 0的情况 直接跳出了i的循环 此时的i一定是在2到a 1中间的一个值 而且a不是素数 第二种 一直没有发现满足a i 0的i 在i a时 不再满足i循环的执行条件 i循环结束 此时的a是素数 程序 includemain inta s 0 i for a 3 a a s s a printf n d s 1 有以下程序 includemain inti j m 55

温馨提示

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

评论

0/150

提交评论