本章主讲本章主讲第第第第4 4章章章章 循环结构循环结构循环结构循环结构 程序设计程序设计程序设计程序设计1-2Copyright © SWFU-CISD, 2012. All rights reserved.程序设计的程序设计的3种基本结构种基本结构v((1)顺序结构()顺序结构(2)选择结构()选择结构(3)循环结构)循环结构§顺序结构顺序结构 —— 是指程序流程按先后顺序执行,只有执行是指程序流程按先后顺序执行,只有执行了前一步,才能执行后一步例如火车在轨道上行驶,只了前一步,才能执行后一步例如火车在轨道上行驶,只有过了上一站点才能到达下一站点有过了上一站点才能到达下一站点 §选择结构选择结构 —— 又称分支结构,是指程序流程可以分几条又称分支结构,是指程序流程可以分几条路径执行例如在一个十字路口处,可以选择向东、南、路径执行例如在一个十字路口处,可以选择向东、南、西、北几个方向行走西、北几个方向行走 §循环结构循环结构 —— 又称重复结构,是指程序流程重复执行某又称重复结构,是指程序流程重复执行某一段代码例如万米跑,围着足球场跑道不停地跑,直到一段代码。
例如万米跑,围着足球场跑道不停地跑,直到满足条件时(满足条件时(25圈)才停下来圈)才停下来1-3Copyright © SWFU-CISD, 2012. All rights reserved.语句语句A语句语句B顺序结构顺序结构流程图流程图条件判断条件判断语句语句A真真语句语句B假假选择结构选择结构流程图流程图条件判断条件判断循环体循环体真真假假循环结构循环结构流程图流程图3种基本结构的流程图种基本结构的流程图1-4Copyright © SWFU-CISD, 2012. All rights reserved.【【问题问题4-1】】 用户输入若干个分数,求所有分数用户输入若干个分数,求所有分数的平均分每输入一个分数后询问是否继续输的平均分每输入一个分数后询问是否继续输入下一个分数,回答入下一个分数,回答“yes”就继续输入下一就继续输入下一个分数,回答个分数,回答“no”就停止输入分数就停止输入分数分析:该问题需要输入若干分数并求和,这是一分析:该问题需要输入若干分数并求和,这是一个重复的过程,应使用循环结构解决循环次个重复的过程,应使用循环结构解决循环次数事先不确定,需根据应答数事先不确定,需根据应答“yes”、、“no”来决定循环是否继续。
来决定循环是否继续1-5Copyright © SWFU-CISD, 2012. All rights reserved. #ques4_1.py endFlag="yes" sum=0.0 count=0 while endFlag[0]=='y': x=input("请输入一个分数请输入一个分数: ") sum=sum + x count=count + 1 endFlag=raw_input("继续继续输入吗输入吗(yes or no)? ") print "\n平均分是平均分是: ", sum / count1-6Copyright © SWFU-CISD, 2012. All rights reserved.4.1循环结构设计问题循环结构设计问题【问题【问题4-2】用户输入一个列表,求出列表中所】用户输入一个列表,求出列表中所有正偶数之和有正偶数之和分析:由于不知道用户输入的具体数据及个数,分析:由于不知道用户输入的具体数据及个数,因此需要在循环结构中进行判断和累加因此需要在循环结构中进行判断和累加。
1-7Copyright © SWFU-CISD, 2012. All rights reserved.#ques4_2.pyli=input('请输入一个列表请输入一个列表:')sum=0for x in li: if x>0 and x%2==0: sum+=xprint 'sum=',sum程序输入及运行结果:程序输入及运行结果:请输入一个列表:请输入一个列表:[2, 3, 4, -5, 6, 12]sum= 241-8Copyright © SWFU-CISD, 2012. All rights reserved.4.2 循环结构概述循环结构概述v循环结构是一种重复执行的程序结构实际应用中,循环结构是一种重复执行的程序结构实际应用中,常会碰到一些需要重复执行的步骤,如级数求和、常会碰到一些需要重复执行的步骤,如级数求和、统计报表等等例如:统计报表等等例如: ((1)计算)计算 1 + 2 + 3 + … + 100,这是一个级数求和,这是一个级数求和问题,需要重复执行问题,需要重复执行100次,对次,对100个数依次进行个数依次进行累加 ((2)假设)假设1个班级中有个班级中有n名同学,统计男同学和女名同学,统计男同学和女同学各有多少名。
该问题的求解需要重复执行同学各有多少名该问题的求解需要重复执行n次,次,对每对每1个同学依次进行判断,同时统计男同学和女个同学依次进行判断,同时统计男同学和女同学的人数同学的人数1-9Copyright © SWFU-CISD, 2012. All rights reserved.4.2 循环结构概述循环结构概述((3)给定)给定2个整数,求它们的最大公约数和最小个整数,求它们的最大公约数和最小公倍数例如:给定公倍数例如:给定6和和9,求最大公约数时,,求最大公约数时,循环过程从循环过程从6依次递减至依次递减至1,当循环到,当循环到3时,判断时,判断得得6和和9都能被都能被3整除,于是终止循环,求得最大整除,于是终止循环,求得最大公约数是公约数是3.;求最小公倍数时,循环过程从;求最小公倍数时,循环过程从9依依次递增至次递增至54,当循环到,当循环到18时,判断得时,判断得18同时能同时能被被6和和9整除,于是终止循环,求得最小公倍数整除,于是终止循环,求得最小公倍数是是18 vPython提供了两种基本的循环结构语句提供了两种基本的循环结构语句——while语句、语句、for语句语句。
1-10Copyright © SWFU-CISD, 2012. All rights reserved.4.3 while语句语句表达式表达式循环体循环体真真假假1-11Copyright © SWFU-CISD, 2012. All rights reserved.((1))while语句是一个语句是一个条件循环语句条件循环语句,即首先计算表,即首先计算表达式,根据表达式值的真、假来决定是否继续循环达式,根据表达式值的真、假来决定是否继续循环 ((2))while语句的语法与语句的语法与if语句类似,要使用语句类似,要使用缩进缩进来来分隔子句分隔子句3))while语句的条件表达式不需要用括号括起来,语句的条件表达式不需要用括号括起来,但是表达式后面必须有但是表达式后面必须有冒号冒号4)使用)使用while语句编程通常会遇到两种题型,一种语句编程通常会遇到两种题型,一种是循环次数事先确定的问题;一种是循环次数事先不是循环次数事先确定的问题;一种是循环次数事先不确定的问题确定的问题说明:说明:1-12Copyright © SWFU-CISD, 2012. All rights reserved.4.3.1 while语句解决不确定循语句解决不确定循环次数的问题环次数的问题【【分析分析】】该问题使用循环结构该问题使用循环结构解决,由于不确定用解决,由于不确定用户即将输入几个正整户即将输入几个正整数,因此属于不确定数,因此属于不确定循环次数的问题。
循环次数的问题1-13Copyright © SWFU-CISD, 2012. All rights reserved.#Exp4_1.pyprint '请输入若干正整数进行求和操作,当输入负数时结束请输入若干正整数进行求和操作,当输入负数时结束: 's = 0x = input("请输入一个整数请输入一个整数: ")while x >= 0: s = s + x x = input("请输入一个整数请输入一个整数: ")print '整数之和整数之和=', s程序:程序:程序运行结果:程序运行结果:请输入若干正整数进行求和操作,当输入负数时结请输入若干正整数进行求和操作,当输入负数时结束束: 请输入一个整数请输入一个整数: 10请输入一个整数请输入一个整数: 20请输入一个整数请输入一个整数: 301-14Copyright © SWFU-CISD, 2012. All rights reserved.【【分析分析】】((1)本题使用循环)本题使用循环结构解决,每次循环结构解决,每次循环从键盘输入一个字符,从键盘输入一个字符,直到输入为直到输入为“#”字字符时停止循环符时停止循环。
2)由于输入的字)由于输入的字符个数无法确定,因符个数无法确定,因此此循环次数不确定循环次数不确定 是是否否1-15Copyright © SWFU-CISD, 2012. All rights reserved.a = raw_input('请输入字符,如果输入请输入字符,如果输入 # 号则结束输入操作号则结束输入操作: ')while a != '#': #判断输入的是否是井号判断输入的是否是井号print '您输入的字符是:您输入的字符是:', a #打印输入的字符打印输入的字符#以下语句是再次输入一个新的字符以下语句是再次输入一个新的字符a = raw_input('请输入字符,如果输入请输入字符,如果输入 # 号则结束输入操作号则结束输入操作: ')else:print '输入结束输入结束'程序:程序:提问:提问:((1)循环结束后,变量)循环结束后,变量 a 中的值是什么?中的值是什么?((2)如果循环体中没有下面这条语句会怎么样?)如果循环体中没有下面这条语句会怎么样?a =raw_ input('请输入字符,如果输入请输入字符,如果输入 # 号则结束输入操作号则结束输入操作: ')1-16Copyright © SWFU-CISD, 2012. All rights reserved.4.3.2 while语句解决确定循环次数的问题语句解决确定循环次数的问题 确定循环次数的问题是指循环之前可以预确定循环次数的问题是指循环之前可以预知循环即将执行的次数,为了控制循环次数,知循环即将执行的次数,为了控制循环次数,通常在程序中设置一个计数变量,每次循环,通常在程序中设置一个计数变量,每次循环,该变量进行自增或自减操作,当变量值自增到该变量进行自增或自减操作,当变量值自增到大于设定的上限值或者自减到小于设定的下限大于设定的上限值或者自减到小于设定的下限值时,循环自动结束。
值时,循环自动结束1-17Copyright © SWFU-CISD, 2012. All rights reserved.4.3.2 while语句解决确定循环次数的问题语句解决确定循环次数的问题【【例例4-3】】 编程计算编程计算1+2+3+…+100 的值分析:本题使用循环结构解决,每循环一次累加分析:本题使用循环结构解决,每循环一次累加一个整数值,整数的取值范围为一个整数值,整数的取值范围为1~100由于整数的范围是确定的,因此循环次数也是确定整数的范围是确定的,因此循环次数也是确定的1-18Copyright © SWFU-CISD, 2012. All rights reserved.4.3.2 while语句解决确定循环次数的语句解决确定循环次数的问题问题程序:程序:#Exp4_3.pyi, s = 1, 0while i <= 100 :s = s + ii += 1print '1+2+3+...+100 = ', s框图:1-19Copyright © SWFU-CISD, 2012. All rights reserved.4.3.2 while语句解决确定循环次数的语句解决确定循环次数的问题问题分析:本题使用循环结构解决,每循环一次输出一分析:本题使用循环结构解决,每循环一次输出一个列表元素值,由于列表定义后,其长度是已知的,个列表元素值,由于列表定义后,其长度是已知的,因此循环次数也是确定的。
因此循环次数也是确定的1-20Copyright © SWFU-CISD, 2012. All rights reserved.4.3.2 while语句解决确定循环次数的问题语句解决确定循环次数的问题程序:程序:#Exp4_4.pya_list = ['a', 'b', 'mpilgrim', 'z', 'example']a_len = len(a_list)i = 0while i < a_len: print '列表的第列表的第', i+1, '个个元素是:元素是:', a_list[i] i += 11-21Copyright © SWFU-CISD, 2012. All rights reserved.练习练习: :1.1.求求1+3+5+…+991+3+5+…+992.2.求求2*4*6*…*122*4*6*…*121-22Copyright © SWFU-CISD, 2012. All rights reserved.第第6 6次上机作业次上机作业: :1.1.计算,参考值:计算,参考值: S=1.718282 S=1.7182822.2.编程求斐波拉契数列的前编程求斐波拉契数列的前2020项,已知该数列项,已知该数列的第一、二项分别是的第一、二项分别是0 0、、1 1,从第三项开始,每,从第三项开始,每一项都是前两项之和。
例如:一项都是前两项之和例如:0, 1, 1, 2, 3, 0, 1, 1, 2, 3, 5, 8, 135, 8, 13……3.3.求求1 1~~100100之间所有的素数,并统计素数的个之间所有的素数,并统计素数的个数。