Presentation is loading. Please wait.

Presentation is loading. Please wait.

第4章 循环结构 程序设计 本章主讲 赵家刚、李俊萩 计算机编程导论.

Similar presentations


Presentation on theme: "第4章 循环结构 程序设计 本章主讲 赵家刚、李俊萩 计算机编程导论."— Presentation transcript:

1 第4章 循环结构 程序设计 本章主讲 赵家刚、李俊萩 计算机编程导论

2 程序设计的3种基本结构 (1)顺序结构(2)选择结构(3)循环结构
顺序结构 —— 是指程序流程按先后顺序执行,只有执行 了前一步,才能执行后一步。例如火车在轨道上行驶,只 有过了上一站点才能到达下一站点。 选择结构 —— 又称分支结构,是指程序流程可以分几条 路径执行。例如在一个十字路口处,可以选择向东、南、 西、北几个方向行走。 循环结构 —— 又称重复结构,是指程序流程重复执行某 一段代码。例如万米跑,围着足球场跑道不停地跑,直到 满足条件时(25圈)才停下来。 计算机编程导论

3 3种基本结构的流程图 顺序结构 选择结构 循环结构 流程图 流程图 流程图 假 假 真 真 语句A 条件判断 语句A 条件判断 语句B
循环体 语句B 顺序结构 流程图 选择结构 流程图 循环结构 流程图 计算机编程导论

4 4.1循环结构设计问题 【问题4-1】用户输入一个列表,求出列表中所有正偶数之和。
分析:由于不知道用户输入的具体数据及个数,因此需要在循环结构中进行判断和累加。 计算机编程导论

5 #ques4_1.py li=input('请输入一个列表:') sum=0 for x in li:
if x>0 and x%2==0: sum+=x print 'sum=',sum 程序输入及运行结果: 请输入一个列表:[2, 3, 4, -5, 6, 12] sum= 24 计算机编程导论

6 4.2 循环结构概述 循环结构是一种重复执行的程序结构。实际应用中,常会碰到一些需要重复执行的步骤,如级数求和、统计报表等等。例如:
(1)计算 … + 100,这是一个级数求和问题,需要重复执行100次,对100个数依次进行累加。 (2)假设1个班级中有n名同学,统计男同学和女同学各有多少名。该问题的求解需要重复执行n次,对每1个同学依次进行判断,同时统计男同学和女同学的人数。 计算机编程导论

7 4.2 循环结构概述 Python提供了两种基本的循环结构语句——while语句、for语句。
(3)给定2个整数,求它们的最大公约数和最小公倍数。例如:给定6和9,求最大公约数时,循环过程从6依次递减至1,当循环到3时,判断得6和9都能被3整除,于是终止循环,求得最大公约数是3.;求最小公倍数时,循环过程从9依次递增至54,当循环到18时,判断得18同时能被6和9整除,于是终止循环,求得最小公倍数是18。 Python提供了两种基本的循环结构语句——while语句、for语句。 计算机编程导论

8 4.3 while语句 while 表达式: 循环体 while 表达式: 循环体 else: else子句 表达式 假(零) 真(非零)
计算机编程导论

9 说明: (1)while语句是一个条件循环语句,即首先计算表达式,根据表达式值的真、假来决定是否继续循环。
(2)while语句的语法与if语句类似,要使用缩进来分隔子句。 (3)while语句的条件表达式不需要用括号括起来,但是表达式后面必须有冒号。 (4)使用while语句编程通常会遇到两种题型,一种是循环次数事先确定的问题;一种是循环次数事先不确定的问题。 计算机编程导论

10 4.3.1 while语句用于有限循环 【例4-1】编程从键盘输入若干正整数,求所有输入整数之和。当输入整数为负数时,结束该操作。 【分析】
该问题使用循环结构解决,由于不确定用户即将输入几个正整数,因此属于不确定循环次数的问题。 计算机编程导论

11 程序: 程序运行结果: 请输入若干正整数进行求和操作,当输入负数时结束: 请输入一个整数: 10 请输入一个整数: 20
#Exp4_1.py print '请输入若干正整数进行求和操作,当输入负数时结束: ' s = 0 x = input("请输入一个整数: ") while x >= 0: s = s + x print '整数之和=', s 程序运行结果: 请输入若干正整数进行求和操作,当输入负数时结束: 请输入一个整数: 10 请输入一个整数: 20 请输入一个整数: 30 计算机编程导论

12 【例4-2】编程从键盘输入若干个字符,一边输入一边输出,当输入“#”字符时终止该操作。
【分析】 (1)本题使用循环结构解决,每次循环从键盘输入一个字符,直到输入为“#”字符时停止循环。 (2)由于输入的字符个数无法确定,因此循环次数不确定。 计算机编程导论

13 程序: 提问: (1)循环结束后,变量 a 中的值是什么? (2)如果循环体中没有下面这条语句会怎么样?
a = raw_input('请输入字符,如果输入 # 号则结束输入操作: ') while a != '#': #判断输入的是否是井号 print '您输入的字符是:', a #打印输入的字符 #以下语句是再次输入一个新的字符 else: print '输入结束' 提问: (1)循环结束后,变量 a 中的值是什么? (2)如果循环体中没有下面这条语句会怎么样? a = raw_input('请输入字符,如果输入 # 号则结束输入操作: ') 计算机编程导论

14 while语句解决确定循环次数的问题 确定循环次数的问题是指循环之前可以预知循环即将执行的次数,为了控制循环次数,通常在程序中设置一个计数变量,每次循环,该变量进行自增或自减操作,当变量值自增到大于设定的上限值或者自减到小于设定的下限值时,循环自动结束。 计算机编程导论

15 4.3.2 while语句解决确定循环次数的问题 【例4-3】 编程计算1+2+3+…+100 的值。
分析:本题使用循环结构解决,每循环一次累加一个整数值,整数的取值范围为1~100。由于整数的范围是确定的,因此循环次数也是确定的。 计算机编程导论

16 4.3.2 while语句解决确定循环次数的问题 框图: 程序: #Exp4_3.py i, s = 1, 0
while i <= 100 : s = s + i i += 1 print ' = ', s 计算机编程导论

17 4.3.2 while语句解决确定循环次数的问题 【例4-4】 编程依次输出列表中每个元素的值。
分析:本题使用循环结构解决,每循环一次输出一个列表元素值,由于列表定义后,其长度是已知的,因此循环次数也是确定的。 计算机编程导论

18 4.3.2 while语句解决确定循环次数的问题 程序: #Exp4_4.py
a_list = ['a', 'b', 'mpilgrim', 'z', 'example'] a_len = len(a_list) i = 0 while i < a_len: print '列表的第', i+1, '个元素是:', a_list[i] i += 1 计算机编程导论

19 4.3.3 while语句用于无限循环 当while语句的“表达式”永远不会为布尔假时,循环将永远不会结束,形成无限循环,也称死循环。
while True: 循环体 可以在循环体内使用break语句强制结束死循环。 计算机编程导论

20 程序: 【例4-5】使用无限循环的方法编程实现例4-2。 a = input('请输入字符,如果输入 # 号则结束输入操作: ')
while True: print('您输入的字符是:', a) if a == '#': break 计算机编程导论

21 【例4-6】求以下表达式的值,其中n值从键盘输入。参考值:当n = 11时,s = 1.833333 。
计算机编程导论

22 (1)以上问题属于数学中的级数求和问题,是使用循环结构解决的一类常见问题。
【分析】 (1)以上问题属于数学中的级数求和问题,是使用循环结构解决的一类常见问题。 (2)级数求和问题编程的重点在于通过观察表达式的规律,分析每次循环都要完成的事件。通常将这些事件进行局部分解,称为“通式”。 该题的通式有以下几个: (1)分母的通式: (2)变量i的通式: (3)当前项的通式: (4)求和的通式: mu = mu + i i = i + 1 t = 1.0 / mu s = s + t 计算机编程导论

23 程序: 提问: i=1 mu = 0 s = 0.0 n = input('请输入n值: ') #或用书上的代码
while i <= n: #判断是否计算到表达式的最后一项 mu = mu + i #求分母的通式 i += # i 自增的通式 t = 1.0 / mu #求当前项的通式 s = s + t #求和的通式 print 's = ', s #循环结束后,打印总和 提问: (1)变量 i、mu、s 的初值只能是 1、0、0.0 吗? (2)循环体内语句的先后顺序可以随意调换吗? 计算机编程导论

24 【例4-7】 通过以下表达式求π的近似值,当某项小于0.00000001(即1e-8)时停止循环。
计算机编程导论

25 分析: 该题使用循环结构来解决,只有当某一项小于1e-8时才停止迭代,因此循环次数是不确定的。观察表达式中相邻两项的规律是——①前一项的分子乘以1个整数值“i”可得后一项的分子,而这个整数值“i”随着循环次数由1递增到n;②前一项的分母乘以“2*i+1”可得后一项的分母。该题的通式有以下几个: (1)分子的通式:zi = zi * i (2)分母的通式:mu = mu * (2 * i + 1) (3)变量i的通式:i = i + 1 计算机编程导论

26 程序: #Exp4_7. py i = 1 zi = 1. 0 mu = 1. 0 t = 1. 0 s = 0
程序: #Exp4_7.py i = 1 zi = 1.0 mu = 1.0 t = 1.0 s = 0.0 while t >= 1e-8: s = s + t zi = zi * i mu = mu * ( 2 * i + 1) t = zi * 1.0 / mu i += 1 print 'PAI = ', (2 * s) 计算机编程导论

27 【例4-8】求1 ~ 100之间能被7整除,但不能同时被5整除的所有整数 。
【分析】 (1)本题需要对1 ~ 100范围内的所有数一一进行判断。 (2)本题的循环次数确定是100次。 (3)在每次循环过程中需要用 if 语句进行条件判断。因此本题是循环嵌套选择的结构。 计算机编程导论

28 程序: 提问: i = 1 # i 既是循环变量,同时又是被判断的数 while i <= 100: #判断循环是否结束
print('1~100之间能被7整除,但不能同时被5整除的所有数是:') while i <= 100: #判断循环是否结束 if i % 7 == 0 and i % 5 != 0: #判断本次的i是否满足条件 print i, '\t ' #打印满足条件的i i += 1 #每次循环 i 应自增 提问: 请问语句“i += 1”可以和语句 “print i, '\t ' ”对齐吗? 计算机编程导论

29 【例4-6】输出“水仙花数”。所谓水仙花数是指1个3位的十进制数,其各位数字的立方和等于该数本身。例如:153是水仙花数,因为153 = 13 + 53 + 33 。
【分析】 (1)本题需要对100 ~ 999范围内的所有数一一进行判断。 (2)本题的变量 i 既是循环变量,同时也是被判断的数。 (3)每次循环过程中需要用 if 语句进行条件判断。因此本题也是循环嵌套选择的结构。 计算机编程导论

30 提问: 程序: 变量 i 是一个三位整数,例如 i = 123 (1)请写出分离 i 的百位数的表达式。
print('所有的水仙花数是:') while i <= 999: #判断循环是否结束 bai = int(i / 100) #分离 i 的百位数 shi = int((i % 100) / 10) #分离 i 的十位数 ge = int(i % 10) #分离 i 的个位数 if bai ** 3 + shi ** 3 + ge ** 3 == i: #判断条件 print i, '\t', #打印水仙花数 i += #变量 i 自增 计算机编程导论

31 第7次上机作业: 4.1 4.3 计算机编程导论


Download ppt "第4章 循环结构 程序设计 本章主讲 赵家刚、李俊萩 计算机编程导论."

Similar presentations


Ads by Google