第6章 循环结构程序设计_36540465
合集下载
c语言循环结构设计

2014/6/9
C语言程序设计教程
第六章 循环结构程序设计
21 21
例6.2 韩信点兵-goto
#include <stdio.h> main() { int x; for (x=1; ;x++) { if (x%5==1 && x%6==5 && x%7==4 && x%11==10) { printf("x = %d\n", x); goto END; } } END: ; }
2014/6/9
C语言程序设计教程
第六章 循环结构程序设计
25 25
使用goto语句的原则
主张少用、慎用,而不是禁用 保证使用之后,程序仍然是单入口,单出口 不要使用一个以上的标号 不要用goto语句往回跳,要向下跳 不要让goto语句制造出永远不会被执行的 代码
2014/6/9
C语言程序设计教程
2014/6/9
C语言程序设计教程
第六章 循环结构程序设计
22 22
例6.2 韩信点兵-break
#include <stdio.h> main() { int x; for (x=1; ;x++) { if (x%5==1 && x%6==5 && x%7==4 && x%11==10) { printf("x = %d\n", x); break; } } }
2014/6/9
C语言程序设计教程
第六章 循环结构程序设计
27 27
例6.3 输入n值,计算并输出 1! + 2! + 3! + … + n!
C语言程序设计教程
第六章 循环结构程序设计
21 21
例6.2 韩信点兵-goto
#include <stdio.h> main() { int x; for (x=1; ;x++) { if (x%5==1 && x%6==5 && x%7==4 && x%11==10) { printf("x = %d\n", x); goto END; } } END: ; }
2014/6/9
C语言程序设计教程
第六章 循环结构程序设计
25 25
使用goto语句的原则
主张少用、慎用,而不是禁用 保证使用之后,程序仍然是单入口,单出口 不要使用一个以上的标号 不要用goto语句往回跳,要向下跳 不要让goto语句制造出永远不会被执行的 代码
2014/6/9
C语言程序设计教程
2014/6/9
C语言程序设计教程
第六章 循环结构程序设计
22 22
例6.2 韩信点兵-break
#include <stdio.h> main() { int x; for (x=1; ;x++) { if (x%5==1 && x%6==5 && x%7==4 && x%11==10) { printf("x = %d\n", x); break; } } }
2014/6/9
C语言程序设计教程
第六章 循环结构程序设计
27 27
例6.3 输入n值,计算并输出 1! + 2! + 3! + … + n!
第6章 循环结构程序设计

就等同于:while (1),会无限循环(死循环)
⑵ 省略表达式1和表达式3,即: for(;表达式2;)
就等同于:while( 表达式2 ) ⑶ 省略表达式2,即:
for(表达式1; ;表达式3) 就等同于:表达式1; while(1){…表达式3;}
注意:在省略某个表达式时,应在适当位置进行循 环控制的必要操作,以保证循环的正确执行
15
❖循环体可能一次也不执行
#include <stdio.h> main() { int i,sum=0;
scanf("%d",&i); while(i<=10) { sum+=i;
i++; } printf("%d",sum); }
❖循环体至少执行一次
#include <stdio.h> main() { int i,sum=0;
• 注意:
goto语句能实现程序无条件转移,为编程 提供了便利。但是无限制地使用,会破坏 程序的结构化程度。因此应限制使用。
2020/3/2
6.5 循环结构中的跳转语句
28
有如下三种语句实现跳转: – continue语句 – break语句 – goto语句
在循环语句的循环体中使用,可以进行 循环的流程控制
for (n=0; n<26; n++) printf("%c ", n+'A'); 作用是输出26个大写字母
for (sum=0, i=1; i<=100; sum=sum+i, i+=2) ; 作用是计算100以内的奇数和
2020/3/2
⑵ 省略表达式1和表达式3,即: for(;表达式2;)
就等同于:while( 表达式2 ) ⑶ 省略表达式2,即:
for(表达式1; ;表达式3) 就等同于:表达式1; while(1){…表达式3;}
注意:在省略某个表达式时,应在适当位置进行循 环控制的必要操作,以保证循环的正确执行
15
❖循环体可能一次也不执行
#include <stdio.h> main() { int i,sum=0;
scanf("%d",&i); while(i<=10) { sum+=i;
i++; } printf("%d",sum); }
❖循环体至少执行一次
#include <stdio.h> main() { int i,sum=0;
• 注意:
goto语句能实现程序无条件转移,为编程 提供了便利。但是无限制地使用,会破坏 程序的结构化程度。因此应限制使用。
2020/3/2
6.5 循环结构中的跳转语句
28
有如下三种语句实现跳转: – continue语句 – break语句 – goto语句
在循环语句的循环体中使用,可以进行 循环的流程控制
for (n=0; n<26; n++) printf("%c ", n+'A'); 作用是输出26个大写字母
for (sum=0, i=1; i<=100; sum=sum+i, i+=2) ; 作用是计算100以内的奇数和
2020/3/2
第六课循环结构程序设计(全课)解析ppt课件

x :E n Writeln( x) ; End. 21
repeat-until语句 (直到循环)
n repeat 语句用于"重复执行循环体,一直 到指定的条件为真时为止"。语法格式为:
repeat
语句1;
…
…
语 句 n;
until 布 尔 表 达 式 ;
其中Repeat、 until是Pascal保留字,
n
31
作业
n 1、编写一个译码程序,把一个英语句子译成数字 代码。译码规则是以数字1代替字母A,数字2代
替字母B, … 26代替字母Z,如遇空格则打印
一个星号‘*’,英文句子以‘ .‘结束。 n 2、五个好朋友聚在一起,第一个带了很多糖块送
给大家,他使每人的糖块在原来基础上翻了一倍。
接着第二个人也同样向每人发糖块,他也使每人
?
用 5 0 0元 钱 买 了 90只 鸡 ,
,
鸡 一 只 1 0元 , 小 鸡 一 只 5 母 鸡、 公 鸡、 小 鸡 各 买 多
分析:设母鸡I只,公鸡J只,则小鸡为90 I- J-只, 则15*I+ 10* J+(90-I-J)*5=500,显然一个方
程求两个未知数是不能直接求解。必须组合出所有 可能的I,j值,看是否满足条件。这里I的值可以 是0到33,J的值可以0到50。
repeat语 句 的 保 留 字 repeat和 until已 经 起
语句括号作用,可以包含多个语句而无须
begin和end。
25
当循环和直到循环的区别
n 3、repeat语句中,当布尔表达式为true时 结束循环,而while语句中,是当表达式为
false时 才 结 束 循 环 。 当 描进述行由的计计算算操时作,后
repeat-until语句 (直到循环)
n repeat 语句用于"重复执行循环体,一直 到指定的条件为真时为止"。语法格式为:
repeat
语句1;
…
…
语 句 n;
until 布 尔 表 达 式 ;
其中Repeat、 until是Pascal保留字,
n
31
作业
n 1、编写一个译码程序,把一个英语句子译成数字 代码。译码规则是以数字1代替字母A,数字2代
替字母B, … 26代替字母Z,如遇空格则打印
一个星号‘*’,英文句子以‘ .‘结束。 n 2、五个好朋友聚在一起,第一个带了很多糖块送
给大家,他使每人的糖块在原来基础上翻了一倍。
接着第二个人也同样向每人发糖块,他也使每人
?
用 5 0 0元 钱 买 了 90只 鸡 ,
,
鸡 一 只 1 0元 , 小 鸡 一 只 5 母 鸡、 公 鸡、 小 鸡 各 买 多
分析:设母鸡I只,公鸡J只,则小鸡为90 I- J-只, 则15*I+ 10* J+(90-I-J)*5=500,显然一个方
程求两个未知数是不能直接求解。必须组合出所有 可能的I,j值,看是否满足条件。这里I的值可以 是0到33,J的值可以0到50。
repeat语 句 的 保 留 字 repeat和 until已 经 起
语句括号作用,可以包含多个语句而无须
begin和end。
25
当循环和直到循环的区别
n 3、repeat语句中,当布尔表达式为true时 结束循环,而while语句中,是当表达式为
false时 才 结 束 循 环 。 当 描进述行由的计计算算操时作,后
第6章循环结构程序设计.ppt

第6章循环结构程序设计
循环结构程序设计
For循环结构 For循环用于控制循环次数预知的循环
结构。它的语法如下: For 循环变量=初值 To 终值 [Step 步长]
语句块1 [Exit For] [语句块2] Next [循环变量] 其中:循环变量必须是一个数值型的变
量,一般多用整型。
开始(start) ……
使用 While...Wend 语句来增加计数变量的值。假如条件Counter <
20判断值为 True,那么循环内的语句将一直执行下去。
Form_click()
Dim Counter
Counter = 0
' 设置变量初值。
While Counter < 20 ' 测试计数器的值。
Counter = Counter + 1 ' 将计数器的值加一,这句一定要有,否
• Private Sub Command1_Click()
• List1.Clear
• For n = 1001 To 1100 Step 2
• s=0
• For i = 2 To Int(Sqr(n))
• If n Mod i = 0 Then
•
s = 1 : Exit For
• End If
• Next
循环变量的初值
循环结构程序设计
循环变量小 于终值 T 语句块1
Exit For F
语句块2
F T
改变循环变量的值(循环变量加步长)
…… 结束(end)
利用For循环结构显示1000以内的所有能被37整
除的自然数。
设计步骤如下:
(1) 窗体界面的设计与属性设置。
循环结构程序设计
For循环结构 For循环用于控制循环次数预知的循环
结构。它的语法如下: For 循环变量=初值 To 终值 [Step 步长]
语句块1 [Exit For] [语句块2] Next [循环变量] 其中:循环变量必须是一个数值型的变
量,一般多用整型。
开始(start) ……
使用 While...Wend 语句来增加计数变量的值。假如条件Counter <
20判断值为 True,那么循环内的语句将一直执行下去。
Form_click()
Dim Counter
Counter = 0
' 设置变量初值。
While Counter < 20 ' 测试计数器的值。
Counter = Counter + 1 ' 将计数器的值加一,这句一定要有,否
• Private Sub Command1_Click()
• List1.Clear
• For n = 1001 To 1100 Step 2
• s=0
• For i = 2 To Int(Sqr(n))
• If n Mod i = 0 Then
•
s = 1 : Exit For
• End If
• Next
循环变量的初值
循环结构程序设计
循环变量小 于终值 T 语句块1
Exit For F
语句块2
F T
改变循环变量的值(循环变量加步长)
…… 结束(end)
利用For循环结构显示1000以内的所有能被37整
除的自然数。
设计步骤如下:
(1) 窗体界面的设计与属性设置。
第6章_ c语言循环结构的程序设计

100
问题1:y n 做99次加法 n1
问题2:求n个学生平均成绩 分数相加后除以课数
问题3:找出能同时被3和7整除的所有数 找数
循环是有规律的重复操作。将复杂问题分解为 简单的操作过程,程序只对简单过程描述,这些
过程的多次重复就可完成对问题的求解。
6
§6-1 循环的基本概念
C提供四种循环控制:
scanf("%d",&x);
lfooorwp(h:;iifnl(n<e=<(x=n;<x)=) x)
{s=s+n; n++;
循环结束
s=55 100 s=5050 255
初始化n,s,x
输入x
s=32640 N n<=x
输出s
Y
g}oto loop;} printf("s=%d\n",s); }
结束
scanwf(h"i%le(dn"<,=&xx));
for(;n<=x;n++) s=s+n; for(n{s==1s,+s=n0;;n<=x;n++)s=s+n;
printf("s=%d\n",s); printfn(+"+s=; %d\n",s);
}
语句
}}
21
§6-2 当型循环控制语句(完)
/* 对分类2计数 */
default: class3++; break;/* 对分类3计数 */ } } while (ch != ’\\’); printf(“\n class1=%d, class2=%d, class3=%d\n", class1, class2, class3); }
第6章 循环结构程序设计 ppt课件

main() { int s=0,n=1;
loop1: if (n>100) goto loop2; s=s+n; n++; goto loop1; loop2: printf("S=%d",s); }
ppt课件
6
例2:统计从键盘输入一行字符的个数。
#include"stdio.h"
void main()
if (n>100) break; }
printf("s=%d\n",s);
} ppt课件
18
4. for语句中的三个表达式都可以是逗号表达式,即每个表 达式都可由多个表达式组成。
main() { int n,s; for(n=1,s=0;n<=100;n++) s=s+n; printf("s=%d\n",s); }
C语言不限制程序中使用标号的次数,但各标号不得重名。
goto语句的语义是改变程序流向,转去执行语句标号所标识
的语句。
ppt课件
4
用goto语句与if语句实现循环
形式1: loop1:
语句; if (表达式) goto loop1;
形式2: loop1:
if (表达式) goto loop2; 语句; goto loop1;
void main() { int s=0,n=1; while (n<=100) { s=s+n; n++; } printf("S=%d",s); }
void main() { int s=0,n=1; do { s=s+n; n++; } while (n<=100); printf(“s=%d",s); }
第06讲循环结构程序设计PPT课件

t=t*i NEXT i
s=s+t
循环初值: i=1, 循环终值: i->10
循环体:
t=t*i
PRINT “T=10!=“;t ,“s=“;
END 问:求:t=n!,如何改s ?
返回
2021问/2/11:求:s=1!+2!+雷3宏设!计+,4版!权+所5有!+……+10!
例4.使用EXIT FOR语句,强行退出循环。
功能:当条件为真,执行循环体,到WEND后再判断条件;否则条件为假,执 行WEND后面的语句。
说明: (1)<条件>可是关系型表达式或逻辑型表达式,甚至可是一个常数,QB将一切
非零的数都视作“真”。
(2) WHILE和WEND必须成对使用。
(3)程序运行时遇到死循环,可以用Ctrl+Break键,使之强制终止程序。
功能:先判断循环〈条件〉,当条件为真(WHILE) 或为假(UNTIL)时,执行〈循环体〉;否则,退 出循环。程序运行到LOOP时,返回到DO语句处, 继续判断条件.
实例: <实例6> <实例7>
2021/2/11
雷宏设计,版权所有
返回
例6.观察下列程序的运行结果。
程序为: CLS x=10 DO WHILE x>=0 PRINT x, x=x-3 LOOP END
BASIC提供的循环语句,可分为已知 循环次数的步长的时候得以终止。
2021/2/11
雷宏设计,版权所有
返回
循环结构流程图
(T) (F)
2021/2/11
雷宏设计,版权所有
返回
固定次数的循环语句(FOR…NEXT)
s=s+t
循环初值: i=1, 循环终值: i->10
循环体:
t=t*i
PRINT “T=10!=“;t ,“s=“;
END 问:求:t=n!,如何改s ?
返回
2021问/2/11:求:s=1!+2!+雷3宏设!计+,4版!权+所5有!+……+10!
例4.使用EXIT FOR语句,强行退出循环。
功能:当条件为真,执行循环体,到WEND后再判断条件;否则条件为假,执 行WEND后面的语句。
说明: (1)<条件>可是关系型表达式或逻辑型表达式,甚至可是一个常数,QB将一切
非零的数都视作“真”。
(2) WHILE和WEND必须成对使用。
(3)程序运行时遇到死循环,可以用Ctrl+Break键,使之强制终止程序。
功能:先判断循环〈条件〉,当条件为真(WHILE) 或为假(UNTIL)时,执行〈循环体〉;否则,退 出循环。程序运行到LOOP时,返回到DO语句处, 继续判断条件.
实例: <实例6> <实例7>
2021/2/11
雷宏设计,版权所有
返回
例6.观察下列程序的运行结果。
程序为: CLS x=10 DO WHILE x>=0 PRINT x, x=x-3 LOOP END
BASIC提供的循环语句,可分为已知 循环次数的步长的时候得以终止。
2021/2/11
雷宏设计,版权所有
返回
循环结构流程图
(T) (F)
2021/2/11
雷宏设计,版权所有
返回
固定次数的循环语句(FOR…NEXT)
C语言程序设计6

第 6章 循环结构程序设计
说明: (1) do-while语句是先执行, 后判断.如果循环的条 件一开始就不成立, 循环也将执行一次. (2) 与while语句一样, 循环体中同样必须有改变循环 条件的语句, 否则循环不能终止, 形成无限循环. (3) 循环体为多条语句时必须采用复合语句. (4) 当循环条件为永真条件时, 将变成无限循环.可 利用break语句终止循环的执行. (5) 与其它高级语言不同, C语言的直到循环与当循环 的条件是同一的, 其它高级语言中是互为相反条件.
第 6章 循环结构程序设计
第 6章 循环结构程序设计 章
6.1 while语句 语句 6.2 do-while语句 语句 6.3 for语句 语句 6.4 终止循环语句 终止循环语句 6.5 多重循环 多重循环 6.6 程序设计举例
第 6章 循环结构程序设计
6.1 while语句 语句
格式: while (条件表达式) 语句 功能: 条件表达式描述循环的条件, 语句描述要反 复执行的操作, 称为循环体. 先计算条件表达式的值, 当条件表达式的值为真时, 代表循环的条件成立, 执行循环体.当条件表达式的值 为假时, 代表循环的条件不成立, 退出循环, 执行循环下 一条语句. while语句是当循环的条件成立时, 反复执行的循环.
第 6章 循环结构程序设计
(1) 循环体为多条语句时, 也必须采用复合语句描述. (2) 表达式1可省略, 分号不能省.此时应在循环外给 循环赋初值, 执行循环时, 将跳过第一步. 如: for(; i<=100; i++) sum+=i; (3) 如果表达式2省略(分号不能省), 则不判断循环条件, 相当循环条件永真, 形成无限循环. 如: for(i=1; ; i++) sum+=i
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5. 多重循环结构——循环的嵌套 如果在一个循环结构的循环体内完整地包含另一个循环 结构,则称为循环嵌套,或多重循环,嵌套的层数可以根 据需要而定,嵌套一层称为二重循环,嵌套二层称为三重
循环。
上面介绍的几种循环控制结构可以相互嵌套,下面是
几种常见的二重嵌套形式:
(1)For I=…. ….. For J=…. …. Next J ….. Next I
For I=1 to 10 step 2
Print I Next I print I
程序的运行结果?
当退出循环后,循环变量I的值为多少?
例: For I=2 To 13 Step 3 Print I ; Next I Print "I= ";I 循环体中输出 I 的值分别为: 退出循环后输出为: I=
循环次数
Int( 终值初值 1) 步长
(5)Next语句中的循环变量可以省略不写。
(6)Exit For 语句是可选项,可以出现在循环体中的任意位置,表示当遇到 该语句时退出循环,执行Next下面的语句。
For…Next语句的执行过程:
循环变量 初值
真
循环变量超过终值?
(1) 把"初值"赋值给"循环变量";
While C < > "? " S=S+1 C = InputBox("输入一个字符" ) Wend
Print "输入的字符数是:"; S
例:用当循环语句完成求 S=1+2+3+…+100 的累加和。
Private Sub Form_Click() S = 0: j = 0 While j < 100 j=j+1 S=S+j Wend Print " S="; S End Sub
4. GoTo 语句
形式: GoTo <标号|行号>
作用:它可以跳过某一段程序无条件地转移到标号或行号 处继续执行. 标号:是任何字符的组合,以字母开头,以冒号结尾。 行号:行号可以是任何非负整数的一个数字序列。
例 求 s=1 + 2 + 3 + … + 10
s=0: i=0 abc:i=i+1 s=s+i if i<10 then goto abc Print s
说明: ( 1 ) 当 使 用 While< 条 件 > 构 成 循 环 时 , 当 条 件 为 " 真 " , 则反复执行循环体,当条件为"假",则退出循环。 (2)当使用Until <条件>构成循环时,当条件为"假",则反 复执行循环体,直到条件成立,即为"真"时,则退出循环。
(3)在循环体内一般应有一个专门用来改变条件表达式中 变量的语句,以使随着循环的执行,条件趋于不成立 (或成立),最后达到退出循环。 (4)语句Exit Do的作用是退出它所在的循环结构,它只能 用在DO/Loop结构中,并且常常是同选择结构一起出现在循 环结构中,用来实现当满足某一条件时提前退出循环。
说明: (1) "循环变量"为数值变量;"初值"、"终值"和"步长"均为数值表达式。 (2)For与Next语句必须成对出现。 (3)步长可以为正数或负数,如果省略,默认步长为1。
步长
>0 初值 < 终值 (=1 时,可省略) <0 初值 > 终值 =0 死循环
(4)For循环中的起始值、终止值和步长决定循环的次数
循环变量
循环变量 + 步长
(6) 循环执行终止,接着执行Next语 句的下一条语句。
例:以紧凑的格式横向连续打印10个"*"号。
例:以紧凑的格式连续打印10个"*"号。 For I = 1 To 10 Step 1 For I = 10 To 1 print "*"; Next I 结果:********** step -1
例:用当循环语句完成求S=1+2+3+…+100的累加和,要求 当累加到1000时,马上终止循环。 Private Sub Form_Click() Dim S%, I% S = 0: j = 0 S=0 ' 累加前变量S为0 While S < 1000 For n=1 to 100 j=j+1 S=S+j Wend Print " S="; S End Sub S=S+n
S=S+I Next I Print " S=",S
' I=I+1
例: 求两个整数m、n的最大公约数及最小公倍数。
问题分析: 假设m>n则最大公约数应该小于或等于n,所以 只要对从1到n之间的所有整数去试着整除m、n,其能整除 m、n的那个最大整数,显然就是最大公约数。
Dim n%, m%, nm%, r% m = Val(InputBox("m=")) n = Val(InputBox("n=")) nm = n * m If m < n Then t = m : m = n : n = t k=n Do until m mod k = 0 and n mod k = 0 k=k-1 Loop Print "最大公约数="; k Print "最小公倍数="; nm / k
Байду номын сангаас
(2) 检查"循环变量"是否超过"终值 ",若没超过"终值",则接着执行 (3)—(5)步骤,否则跳过 (3)—(5)步 骤直接执行步骤(6);
(3) 执行循环体一次;
假
循环体
(4) 遇到Next语句,"循环变量"按" 步长"进行改变:即将 "循环变量 "+"步长"的值再赋值给"循环变量"; (5) 返回执行步骤(2);
格式:
While <条件表达式 >
<循环体>
条件 T 循环体 F
Wend
说明:当条件为真时执行循环
体中的语句,否则执行Wend
后面的语句。
例:从键盘上输入字符,对输入的字符进行计数,当
输入"?"时,停止计数并输出结果。
Dim C As String S=0
C = InputBox("输入一个字符" )
Dim p!, r!, n% P = 1400000000 r = 0.015 n=0 Do p = p + p*r n=n+1 Loop while p<=2000000000 Print n; "年后人口将达到"; p
‘也可以Until p>2000000000
前判断型循环(do while │ until…loop)与 后判断型循环(do… loop while│ until)的区别: dim t%, n% t=1: n=4 Do until n>5 t=t*n n=n+1 Loop Print t, n dim t%, n% t=1: n=4 Do t=t*n n=n+1 Loop until n>5 Print t, n 只要"循环体" 至少执行一次以上, 那么凡是用"前判断 型循环"解决的问题, 全部可以用"后判断 型循环"来解决. (如:n=4)
Print "*";
Next I 'I=I+1
结果:**********
For…Next 语句,终止循环的条件是"循环变量的值超过终值" :
即当步长为正值时,循环变量的值必须大于终值才使循环终止; 当步长为负值时,循环变量的值必须小于终值才使循环终止。
例: For I=1 to 10 print I Next I print I
例:输入5个学生的成绩,计算总分及平均分。
S=0 For n = 1 To 5 x = InputBox("输入第" & n & "个学生的成绩:") S=S+x Next n Print "总分= "; S Print "平均分= "; S / 5
2. While 循环结构 ——当循环 (适合于不知道循环次数,知道循环条件的情况)
例: 求S=1+2+3+…+100的和,要求当累加到1000时,终止循环。
Private Sub Form_Click() S=0 ' 累加前变量S为0 For N = 1 to 100 S=S+N IF S >= 1000 then Exit For Next N Print " S= ";S End Sub
格式2:
条件 真 循环体
假
循环体
Do Until <条件> 语句块 [Exit Do] 语句块 Loop
循环体
条件 假
真
循环体
例. 计算 S=1 + 2 + … + 100
Dim S As Integer, I As Integer S=0 ' 累加前变量S为0 I=1 ' 给控制循环的变量赋初值 Do While I <= 100 ' 该语句可改为 Do Until I >100 S=S+I Dim S%, I% I=I+1 S=0 ' 累加前变量S为0 Loop For I=1 to 100 Print " S="; S