第5章 循环结构程序设计
例:求式子的和,直到表达式的最后一项的值小于0.0001。 Dim i As Integer Dim s As Double i=1 s=0 While 1 / (i * (i + 1)) >= 0.0001 s = s + 1 / (i * (i + 1)) i=i+1 End While s = s + 1 / (i * (i + 1)) ’退出循环时,小于0.0001的项没有 加上去。因此,再加一次。 MsgBox("结果为:" + Str(s), , "求和")
例子
1、从键盘输入一个字符串,分别统计字母“M” 和“m”在其中出现的次数。 2、计算并输出下面级数前n项(n=40)中偶数项的 和。 s = 1*2+2*3+3*4+4*5+……+n*(n+1)+… 3、计算并输出所有6位正整数中能被6整除且其 十位数不是4的数之和,并求它们中的最大数。 4、编写程序,计算并输出下面数列前n项的和 (设n=15,结果取4位小数)。 数列为: 2/1,3/2,5/3,8/5,13/8,21/13,……
例:判断一个数n是否为素数。 分析:根据素数的定义可知:一个数除了1和它本身之外,不能被其它数整除的数就是素数。可 以推断:如果只要发现了从2到n-1之间的一个整数能被n整除,则n就不是素数;否则,n就是素数。 可以先假定一个标志变量Flag,其初值为True,表示假定n是素数。然后把从2到n-1之间的所有 整数试一遍,只要发现某一个数能被n整除,就把标志变量Flag的值赋值为False,表示n不再是素数。循环 结束后,根据Flag的值来判断n是否素数,若Flag的值为True,则n是素数;否则n不是素数。 Dim n, i As Integer Dim flag As Boolean n = InputBox("请输入一个数值n:", "判断素数") flag = True i=2 While i <= n - 1 If n Mod i = 0 Then flag = False Exit while End If i=i+1 End While If flag Then MsgBox(Str(n) + "是素数!", , "判断素数") Else MsgBox(Str(n) + "不是素数!", , "判断素数") End If
注意: 1.防止出现死循环 2.在While...End While循环结构中,由于是先判断循环的 条件,然后再决定是否执行循环体。若在第一次进入循环 结构之前,条件不成立,那么循环体一次也不执行。
Do…Loop语句
可分为四种 : 1. Do While…Loop循环结构 语句形式如下: Do While <条件表达式> 语句块A [Exit do] 语句块B Loop 这种结构也是先判断条件,然后决定是否执行 循环体.
例:求1+2+3+…+100的和。
方法一:用do while…loop语句实现 Dim i, s As Integer i=1 s=0 Do While i <= 100 s=s+i i=i+1 Loop 方法二:用do…loop while语句实现 Dim i, s As Integer i=1 s=0 Do s=s+i i=i+1 Loop While i <= 100
例:求自然对数e的近似值,要求其误差小于0.000001(即求和公式的最 后一项的值小于0.000001),近似公式为:
分析:本例涉及两个重要的运算:一个是累加求和,另一个是求阶乘。 Dim i As Integer Dim fac, s As Double s=1 fac = 1 i=0 Do i=i+1 fac = fac * i ’求第i项分母的值,即i! s = s + 1 / fac Loop While 1 / fac >= 0.000001 MsgBox("e的值为:" + Format(s, "#.######"), , "求e的值")
4. Do… Loop Until 循环语句
语句形式如下: Do 语句块A [Exit Do] 语句块B Until <条件表达式> 此语句与Do…While Loop语句的功能的区别仅 仅在于:若条件表达式的值为False,就执行下次循 环体;否则,退出循环。使用的条件与Do…W=0 Do While i < 5 s=s+i i=i+1 Loop
程序段2: Dim i, s As Integer i = 10 s=0 Do s=s+i i=i+1 Loop While i < 5 当第一个程序段执行结束时,s的值为0;则第二个程序段执行结束时,s 的值为10。
If flag Then MsgBox(Str(n) + "是素数!", , "判断素数") Else MsgBox(Str(n) + "不是素数!", , "判断素数") End If
2. Do…Loop While 循环结构
语句形式如下: Do 语句块A [Exit Do] 语句块B Loop While <条件> 根据语句形式的书写可以看出,此结构是先执行循 环体,后进行条件的判断,以决定是否进行下一次循环。 也就是说,这种循环的循环体至少执行一次。
执行的流程如图所示。 说明如下:
语句块
条件 表达式
Y
N
例:用辗转相除法求两个数m,n的最大公约数和最小公倍数。
分析:辗转相除法求两个数m,n的最大公约数的思想如下: (1)求m除以n的余数r,即r=m mod n; (2) 若r≠0,转(3);若r=0,则此时的n就是最大公约数,转(4); (3) 把n的值给m,把r的值给n,即m←n,n←r,转(1); (4) 循环结构的下一个语句。 求最小公倍数的方法:两个数的乘积除以它们的最大公约数。
例:判断一个数n是否为素数。
Dim n, i As Integer Dim flag As Boolean n = InputBox("请输入一个数值n:", "判断素数") flag = True i=2 Do While i <= Sqrt(n) If n Mod i = 0 Then flag = False Exit Do End If i=i+1 Loop
例:求100到999之间的所有“水仙花数”。“水仙花数”的含 义是一个数的每个数位的立方和等于该数。例153=13+53+33。 分析:对于某一个数说,先把这个数拆开成单个的数字,然后 再判断它们的立方和是否等于本身。 程序如下: Dim bw, gw, sw, i As Integer Dim str1 As String str1 = "" For i = 100 To 999 bw = i \ 100 sw = (i Mod 100) \ 10 gw = i Mod 10 If bw ^ 3 + sw ^ 3 + gw ^ 3 = i Then str1 = str1 + Str(i) + vbCrLf End If Next MsgBox("结果为:" + vbCrLf + str1, , "求水仙花数")
3. Do Until … Loop 循环语句
语句形式如下: Do Until <条件表达式> 语句块A [Exit do] 语句块B Loop 此语句与Do While…Loop语句的功能的区别仅 仅在于:若条件表达式的值为False,就执行循环体; 否则,退出循环。也就是说,用do while与do until的 条件刚好相反。
Dim m, n, r, x, y, z As Integer m = TextBox1.Text n = TextBox2.Text x=m:y=n ’保存最初两个数的值给x和y,以备求最小公倍数时使用 r = m Mod n While r <> 0 m=n n=r r = m Mod n End While z=x*y/n ’求最小公倍数 MsgBox("最大公约数为:" + Str(n) + vbCrLf + "最小公倍数为:" + Str(z), , "求 最大公约和最小公倍")
While...End While循环
此循环也称“当型循环”,表示当条件成立时,重复执 行某个动作。语法如下: While <条件表达式> 语句块 [Exit While] 语句块 End While 其中:(1)条件表达式表示循环要满足的条件。若表达 式的值为True,则执行语句块。 (2)语句块:即循环体。
循环变量=初值
循环变量是否 超过终值?
Y
N
语句块1 是否执行到 Exit for语句?
N 语句块2
循环变量=循环变量+步长
Y
例:计算1+2+3+…+100。(不能用等差数列求和的计算公 式) Dim i, s As Integer s=0 ’在计算累加和时,存放和的变量的初值为0 For i = 1 To 100 s=s+i Next MsgBox("1+2+3+…+100的和为:" + Str(s), , "求和")
C语言 第五章-循环结构程序设计
执行过程如图所示。其中i为外循环的控制变 量,j为内循环的控制变量。
i =0 当 i <=10
j=0 当 j<=10
printf(“%d ”, i*j ) j++ i++
例4 编程打印“九九乘法表”。
分析:九九乘法表 1×1=1 1×2=2 1×3=3 … 2×1=2 2×2=4 2×3=6 … 3×1=3 3×2=6 3×3=9 … …… 9×1=9 9×2=18 9×3=27 …
i ++ ; } while ( i <= 100 ) ; printf ( " %d " , sum ) ; }
结果相同
同样是下列程序,但如果while后面的表达式结果一开始就是 假时,两种循环结果会不一样。
main ( ) /*程序1*/
{ int i , sum = 0 ; i = 101 ;
所以程序需要设计成二重循环。由于题目只 要求找到一组解,所以在循环过程中只要找到一组 满足条件的x, y, z就可以跳出循环。
跳出循环的方法可以采用break语句,但是, 因为是二重循环,所以要考虑使用break是否方便。
程序 百钱买百鸡问题。 void main ( ) { int x , y , z ;
打印第2行 ( i = 2 ) for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
…… 打印第9行 ( i = 9 )
for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
第5章 循环结构程序设计
do-while语句的简单应用 do-while语句的简单应用
【例5.3】用辗转相除法求m和n的最大公约数 5.3】用辗转相除法求m
定义m、 、 定义 、n、r m<n T F m和n交换 和 交换 r=m%n m=n n=r 当r != 0时 时 输出最大公约数m 输出最: 算法和程序:
main( ) { int m,n,r; scanf("%d, %d",&m,&n); if (m<n) { r=m; m=n; n=r; } do { r=m%n; 程序运行情况如下: 程序运行情况如下: m=n; 24, 60 24, n=r; 12 }while(r!=0); while(r!=0 printf("%d\n",m); }
for语句的算法 for语句的算法
流程图 计算表达式1 计算表达式
表达式2 表达式 为真? 为真
15
N-S结构图 结构图 for (表达式 表达式 表达式 表达式1;表达式 表达式3) 表达式 表达式2;表达式 N 语句
Y 语句 计算表达式3 计算表达式
例如: 例如: 可部分或全部省略, 可部分或全部省略, main( ) 但“;”不可省略 { int i,sum; sum=0; for ( i=1; i<=100; i++) i=1 i<=100; sum=sum+i; sum=sum+i; printf("sum=%d\n",sum); }
龙诚数码:
18
for语句的简单应用 for语句的简单应用
【例5.4】求n! ,即计算p=1×2×3×…×n 5.4】 即计算p=1× 的值。 的值。
第五章 循环结构程序设计
第五章循环结构程序设计循环结构是结构化程序设计的三种基本结构之一,也是最重要、最常用的一种基本结构。
其特点是:在给定条件成立时,反复执行某程序段,直到给定条件不成立时为止。
给定的条件称为循环条件,反复执行的程序段称为循环体。
根据开始或结束循环的条件不同,在C 语言中可以用如下语句实现循环:1. 用goto语句和if语句构成循环。
2. 用while循环语句。
3. 用do-while循环语句。
4. 用for循环语句。
5.1 语句标号、goto语句及用goto语句构成的循环1.语句标号语句标号就是给程序中的某一个语句定义的标识符,标号可以是任意合法的标识符,但在语句标号和它所标识的语句之间必须加一个冒号作为分隔符。
C程序中的任何一个可执行语句之前都可以加上语句标号。
例如:stop:printf(“END\n”);通常,语句标号只是用作goto 语句的转向目标。
如:goto stop;如果程序中没有用goto语句改变程序的执行顺序,也就没有必要出现语句标号。
2.goto语句goto语句称为无条件转向语句,goto语句的一般形式为:goto 语句标号;goto语句的作用是把程序的执行转移到语句标号所在的位置,但这个语句标号必须与此goto语句在同一个函数之内。
goto语句不符合结构化程序设计的原则,因为无条件转向使得程序的结构没有规律、可读性差。
对于初学者来说应尽量避免使用goto语句,但如果使用goto语句能够大大地提高程序的执行效率,也可以使用。
3.用goto语句构成的循环结构goto语句通常与if语句配合构成条件转移语句,用来实现构成循环或跳出循环等功能。
例5.1统计从键盘输入的一行字符的个数。
#include <stdio.h>main(){int n= 0;char ch;printf("input a string\n");loop: ch= getchar();n++;if(ch!='\n') /*字符'\n'是结束从键盘输入字符串的标志*/goto loop;n=n-1; /*不要统计字符'\n'*/printf("%d",n);}当用户从键盘上输入一个字符后,先执行n++进行计数,然后判断该字符是否为'\n'字符,若该字符不是'\n'字符,则转移至loop构成循环;否则不执行goto语句,程序在输出n的值后结束。
清华大学VB经典教案第五节——循环结构程序设计
每循环一次,循环变量的值自动加一个
步长,然后判断循环变量的值是否“超 越”终值,如果“超越”,则结束循环,
否则进行下一次循环,用如图5-1所示
的流程图表示。
说明: (1)循环变量、初值、终值、步长都是数值类型; (2)步长可正可负,但不能为0,否则,循环将变成死循环或 无限循环;步长为1时,[Step <步长>]可以省略; (3)当初值小于终值时,步长为正;当初值大于终值时,步 长为负; 通过初值、终值、步长可以计算循环体的循环次数,计算公 式如下: 循环次数=Int((终值-初值)/步长)+1 注意:如果循环次数≤0,即当初值小于终值时,步长为负 ,或者当初值大于终值时,步长为正,则循环体一次都不执行。 (4)Exit For可以退出其所在层的For…Next循环,这一点在 多重循环中尤为重要。
分析:假设某个三位的正整数为n, 要判断n是否是“水仙花数”,关键是 要求出n的百位数字a、十位数字b和个 位数字c,即 百位数字a = n \ 100 十位数字b = n \ 10 Mod 10 个位数字c = n Mod 10
5.2 While…Wend循环 While…Wend循环用于循环次数未知的循环,其语法格式 如下: While <条件表达式> [<语句组>] Wend 当条件表达式的值为True时执行循环体,为False时结束 循环,用如图5-5所示的流程图表示。
入项;组合框是由文本框和列表框组合而成,因此,组合框 具有文本框和列表框的功能,既可以输入项也可以选择项,
但任意时刻最多只能选择一个项,选中的项将显示在组合框
中。
5.5.1 列表框 1.列表框的常用属性 (1)List属性 存放列表框中的所有项,是一个一维字符串数组,数组 名为List,下标为项的索引值,从上到下,第一个项的索引值 为0,第二个项的索引值为1,以此类推。 (2)ListCount属性 返回列表框中项的个数。 (3)ListIndex属性 返回当前选中项的索引值。若有多个项被选中,则返回 最后一个选中项的索引值;也可以给该属性赋一个整数值来选 中对应索引值的项;如果没有选中任何项,ListIndex属性值 为-1。 (4)Selected属性 判断列表框中的某个项是否被选中,选中为True,否则 为False。该属性是一个一维布尔或逻辑型数组,数组名为 Selected,下标为项的索引值。
C语言程序设计_05循环结构程序设计
5.2 DO…WHILE循环结构 5.2.1 DO…WHILE语句的格式 DO…WHILE语句的一般格式为: DO 语句 WHILE(表达式); DO…WHILE语句中的表达式表示循环的条件,可 以是任何表达式,常用的是关系表达式和逻辑表达 式。表达式必须加圆括号。语句是重复执行的部分, 称作循环体。
由亍循环体在表达式2乊后表达式3乊前执行所以把循环体语句放在表达式3的开头循环体语句不原来的i构成逗号表达式作为循环语句新的表达式3从而也就没有循环体语句了
第5章 循环结构程序设计
5.1 WHILE循环结构 5.2 DO…WHILE循环结构 5.3 FOR循环结构 5.4 与循环有关的控制语句 5.5 3种循环语句的比较 5.6 循环的嵌套 5.7 循环结构程序举例 本章小结
图5-6 FOR语句执行过 程
FOR语句的执行过程如图5-6所示。具体由以下几步 完成: (1)求表达式1。 (2)求表达式2,并判定其值为0或非0。若值为非0, 转步骤(3);否则结束FOR语句。 (3)执行语句,然后求表达式3。 (4)转向步骤(2)。 由FOR语句的执行流程可知,表达式1的作用是为循 环控制的有关变量赋初值,表达式2是循环控制条件, 表达式3用于修正有关变量,语句是重复执行部分。
【例5.7】输入20个数,求出其中的最大值与最小值。
5.3.3 FOR语句的各种变形 1.在FOR语句中省略表达式 FOR语句中的3个表达式可以部分或全部省略,下面 给出语句的4种基本变形。 (1)表达式1移至FOR语句前,但它后面的分号必 须保留。这时FOR语句的形式为: 表达式1; FOR(; 表达式2; 表达式3) 语句
(2)表达式3移至循环体语句之后,但它前面的分 号必须保留。FOR语句的形式为: FOR(表达式1; 表达式2;) { 语句; 表达式3; } 对于求P=5!的程序段,省略表达式3,将其放在循环 体中,则程序段写成:
第5章-循环结构程序设计PPT优秀课件
5.3.1 前测型Do…Loop循环语句
格式:
Do [While | Until <条件表达式>] <语句块> [Exit Do] <语句块>
Loop
18
5.3.1 前测型Do…Loop循环语句
前测型Do…Loop循环的流程图
Do While…Loop流程图
Do Until…Loop流程图
条件表达式 值为真?
格式:
Do <语句块> [Exit Do] <语句块>
Loop [While | Until <条件表达式>]
23
5.3.1 后测型Do…Loop循环语句
说明:
后测型Do…Loop循环语句与前测型Do…Loop循环语句的主 要区别在于:
后测型要先执行一次循环体,再判断条件;而前测型要 先判断条件,然后根据判断结果决定是否执行循环体。因此 对于后测型,不管条件是否满足,循环体至少有一次执行机 会。
16
5.3 Do…Loop循环语句
导入:
Do…Loop循环也属于条件型循环,即根据条件的 成立与否来决定是否执行循环。Do…Loop循环的应 用具有很强的灵活性,主要体现在:它既能指定循环 开始条件,又能指定循环结束条件;既能构成前测型 Do…Loop循环语句,又能构成后测型Do…Loop循 环语句。
25
5.3.1 后测型Do…Loop循环语句 【例5-10】将400~600间能够被3整除的数 输出(上机练习)
【例5-11】(略)
26
5.4 循环嵌套
介绍:
一个循环结构中又包含一个或多个循环结构被称为 循环嵌套,或称多重循环。 多重循环对嵌套的层数没有限制。有几层嵌套,就 称为几重循环,如二重循环、三重循环、四重循环 等。一般地,把嵌套在一个循环体内部的另一个循 环结构称为内循环;这样,嵌套了其他内循环部分 的循环结构就称为外循环。 为了使多重循环结构具有较好的可读性,通常用缩 进方式书写相应的源代码。
Python语言程序设计第五章循环结构程序设计
14
第5章
循环结构程序设计
5.2 for语句 结构
1. for语句一般形式: for 目标变量 in 序列对象: 循环体语句 说明:
for语句的首行定义了目标变量和遍历的序 列对象,后面是需要重复执行的语句块。语 句块中的语句要向右缩进,且缩进量要一致。
15
第5章
循环结构程序设计
注意:
(1)for语句是通过遍历任意序列的元素来建立 循环的。 (2)for 语句也支持一个可选的else块,一般格 式如下: for 目标变量 in序列对象: 语句块 else: 语句
5
第5章
循环结构程序设计
在while语句中使用else子句
while exp: 循环体 else: 语句
Python可以在循环语句中使用else子句,即构 成了while.......else循环结构。
6
第5章
循环结构程序设计
例 :求
100
n 1
n
开始 sum,n=0,1 n<=100
1)问题分析:
29
第5章
循环结构程序设计
5.4 循环控制语句
有时候我们需要在循环体中提前跳 出循环,或者在某种条件满足时,不执行 循环体中的某些语句而立即从头开始新的 一轮循环,这时就要用到循环控制语句 break、continue和pass语句。
30
第5章
循环结构程序设计
(1) break语句
一般格式 break 功能
371printdddijk40728python语言程序设计第5章循环结构程序设计第5章循环结构程序设计循环结构程序设计51while语句当型循环52for语句结构53循环的嵌套54循环控制语句55循环结构程序举例2第5章循环结构程序设计循环结构的基本类型exptaf
第5章 循环结构程序设计
输入学生2的三门课成绩,并计算平均值后输出
scanf(“%f,%f,%f”,&s1,&s2,&s3);
aver=(s1+s2+s3)/3;
printf(“aver=%7.2f”,aver); 要对50个学生进行相同操作
重复50次
大多数的应用程序都会包含循环结构
循环结构和顺序结构、选择结构是结构 化程序设计的三种基本结构,它们是各 种复杂程序的基本构造单元
(1) 先求解表达式1 (2) 求解表达式2,若其值为真,执行循环体, 然后执行下面第(3)步。若为假,则结束循环, 转到第(5)步 (3) 求解表达式3 (4) 转回上面步骤(2)继续执行 (5) 循环结束,执行for语句下面的一个语句
5.4用for 语句实现循环
for(i=1;i<=100;i++) sum=sum+i; 等价于 用for语句更简单、方便 i=1; while(i<=100) { sum=sum+i; i++; }
要向计算机输入全班50个学生的成绩
分别统计全班50个学生的平均成绩 求30个整数之和 教师检查30个学生的成绩是否及格
5.1为什么需要循环控制
例如:全班有50个学生,统计各学生 三门课的平均成绩。
输入学生1的三门课成绩,并计算平均值后输出 scanf(“%f,%f,%f”,&s1,&s2,&s3); aver=(s1+s2+s3)/3; printf(“aver=%7.2f”,aver);
n 1
100
5.3用do---while语句实现循环
解题思路:
sum=0 i=1 sum=sum+i i=i+1
第5章 循环结构程序设计PPT课件
}
C语言程序设计
第5章 循环结构程序设计
§ 5.2 用while语句实现循环i=1w; hile (i<=100)
2、while语句的注意事项
{ sum=sum+i;
注意:
i++; }
(1) 循环体如果包含一个以上的语句,应该用花括弧括
起来,以复合语句形式出现
(2) 在循环体中应有使循环趋向于结束的语句。如果无
C语言程序设计
第5章 循环结构程序设计
§ 5.2 用while语句实现循环
1、while语句的一般形式
while语句用来实现“当型”循环结构 一般形式: while (表达式)
循环体语句
当表达式为非0值时,执行while 语句中的循环体语句 其特点是:
先判断表达式,后执行语句
C语言程序设计
第5章 循环结构程序设计
} 运行结果:
}
1↙ sum=55 再运行一次:
}说明:当while后面的表达式的第一次的
值为“真”时,两种循环得到的结果相
11↙ sum=0
同。否则,二者结果不相同
C语言程序设计
第5章 循环结构程序设计
§ 5.4 用for语句实现循环
1、for语句的一般形式
C语言中的for语句使用最为灵活,不仅可以用于 循环次数已经确定的情况,而且可以用于循环次数 不确定而只给出循环结束条件的情况,它完全可以 代替while语句
语句,转到第(5)步
(3) 求解表达式3
(4) 转第(2)步骤继续执行
(5) 循环结束,执行for语句下面的一个语句
C语言程序设计
第5章 循环结
执行表达式1
循环初始条件
C语言程序设计:第5章-循环结构-课件教案
C语言程序设计课件教案第五章循环结构教学目的掌握循环结构中的while语句、dowhile语句、for语句的用法,掌握中断语句中break和continue语句的用法。
教学要求1.熟练掌握while语句、dowhile语句、for语句2.熟练掌握break语句、continue语句重点和难点1.while语句、dowhile语句、for语句的使用2.break语句、continue语句的使用教学支撑环境与教学资源:1.笔记本电脑2.VC20103.投影仪教学方法讲授法、练习法、讨论法授课课时6课时教学过程AM一、课程引入计算1+2+3+...+n有几种方法,需要多少步骤?、循环结构语句什么时候用到循环结构:处理重复的问题的时候。
循环结构的三大语句:while语句、dowhile语句、for语句。
1.while语句while(循环条件表达式)循环体语句;执行过程:只有循环条件表达式的值为真就执行循环体语句,先判断后执行。
1.输出1---n之间的数intmain(void){inti=1;intn=0;printf("请输入n的值:");scanf("%d",&n);//1015while(i<=n)15printf("%d\n",i);i++;}return0;}2.计算m+...+n 的值intmain(void){inti=1;intn=0;intm=0;intsum=0;printf("请依次输入m 和n 的值:");scanf("%d%d",&m,&n);//m+...n10while(m<=n){sum=sum+m ;m++;}printf("sum=%d\n",sum);return0;}2.do...while 语句do循环体语句;}while(循环条件表达式);执行过程:先执行循环体语句,再检查循环条件表达式的值是否为真,如果为真则继续执行循环体语句,否则结束循环。
