1、计算机编程导论计算机编程导论本章主讲本章主讲赵家刚赵家刚 第第第第4 4章章章章 循环结构循环结构循环结构循环结构 程序设计程序设计程序设计程序设计1-2Copyright SWFU-CISD,2012.All rights reserved.计算机编程导论计算机编程导论程序设计的程序设计的3种基本结构种基本结构v(1)顺序结构()顺序结构(2)选择结构()选择结构(3)循环结构)循环结构顺序结构顺序结构 是指程序流程按先后顺序执行,只有执行是指程序流程按先后顺序执行,只有执行了前一步,才能执行后一步。例如火车在轨道上行驶,只了前一步,才能执行后一步。例如火车在轨道上行驶,只有过了上一站点才能
2、到达下一站点。有过了上一站点才能到达下一站点。选择结构选择结构 又称分支结构,是指程序流程可以分几条又称分支结构,是指程序流程可以分几条路径执行。例如在一个十字路口处,可以选择向东、南、路径执行。例如在一个十字路口处,可以选择向东、南、西、北几个方向行走。西、北几个方向行走。循环结构循环结构 又称重复结构,是指程序流程重复执行某又称重复结构,是指程序流程重复执行某一段代码。例如万米跑,围着足球场跑道不停地跑,直到一段代码。例如万米跑,围着足球场跑道不停地跑,直到满足条件时(满足条件时(25圈)才停下来。圈)才停下来。1-3Copyright SWFU-CISD,2012.All rights
3、reserved.计算机编程导论计算机编程导论语句语句A语句语句B顺序结构顺序结构流程图流程图条件判断条件判断语句语句A真真语句语句B假假选择结构选择结构流程图流程图条件判断条件判断循环体循环体真真假假循环结构循环结构流程图流程图3种基本结构的流程图种基本结构的流程图1-4Copyright SWFU-CISD,2012.All rights reserved.计算机编程导论计算机编程导论【问题问题4-1】用户输入若干个分数,求所有分数用户输入若干个分数,求所有分数的平均分。每输入一个分数后询问是否继续输的平均分。每输入一个分数后询问是否继续输入下一个分数,回答入下一个分数,回答“yes”就继
4、续输入下一就继续输入下一个分数,回答个分数,回答“no”就停止输入分数。就停止输入分数。分析:该问题需要输入若干分数并求和,这是一分析:该问题需要输入若干分数并求和,这是一个重复的过程,应使用循环结构解决。循环次个重复的过程,应使用循环结构解决。循环次数事先不确定,需根据应答数事先不确定,需根据应答“yes”、“no”来决定循环是否继续。来决定循环是否继续。1-5Copyright SWFU-CISD,2012.All rights reserved.计算机编程导论计算机编程导论#ques4_1.pyendFlag=yessum=0.0count=0while endFlag0=y:x=inp
5、ut(请输入一个分数请输入一个分数:)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】用户输入一个列表,求出列表中所】用户输入一个列表,求出列表中所有正偶数之和。有正偶数之和。分析:由于不知道用户输入的具体数据及个数,分析:由于不知道用户输入的具体数据及个数,因此需要在循环结构中进行
6、判断和累加。因此需要在循环结构中进行判断和累加。1-7Copyright SWFU-CISD,2012.All rights reserved.计算机编程导论计算机编程导论#ques4_2.pyli=input(请输入一个列表请输入一个列表:)sum=0for x in li:if x0 and x%2=0:sum+=xprint sum=,sum程序输入及运行结果:程序输入及运行结果:请输入一个列表:请输入一个列表:2,3,4,-5,6,12sum=241-8Copyright SWFU-CISD,2012.All rights reserved.计算机编程导论计算机编程导论4.2 循环结构
7、概述循环结构概述v循环结构是一种重复执行的程序结构。实际应用中,循环结构是一种重复执行的程序结构。实际应用中,常会碰到一些需要重复执行的步骤,如级数求和、常会碰到一些需要重复执行的步骤,如级数求和、统计报表等等。例如:统计报表等等。例如:(1)计算)计算 1+2+3+100,这是一个级数求和,这是一个级数求和问题,需要重复执行问题,需要重复执行100次,对次,对100个数依次进行个数依次进行累加。累加。(2)假设)假设1个班级中有个班级中有n名同学,统计男同学和女名同学,统计男同学和女同学各有多少名。该问题的求解需要重复执行同学各有多少名。该问题的求解需要重复执行n次,次,对每对每1个同学依次
8、进行判断,同时统计男同学和女个同学依次进行判断,同时统计男同学和女同学的人数。同学的人数。1-9Copyright SWFU-CISD,2012.All rights reserved.计算机编程导论计算机编程导论4.2 循环结构概述循环结构概述(3)给定)给定2个整数,求它们的最大公约数和最小个整数,求它们的最大公约数和最小公倍数。例如:给定公倍数。例如:给定6和和9,求最大公约数时,求最大公约数时,循环过程从循环过程从6依次递减至依次递减至1,当循环到,当循环到3时,判断时,判断得得6和和9都能被都能被3整除,于是终止循环,求得最大整除,于是终止循环,求得最大公约数是公约数是3.;求最小公
9、倍数时,循环过程从;求最小公倍数时,循环过程从9依依次递增至次递增至54,当循环到,当循环到18时,判断得时,判断得18同时能同时能被被6和和9整除,于是终止循环,求得最小公倍数整除,于是终止循环,求得最小公倍数是是18。vPython提供了两种基本的循环结构语句提供了两种基本的循环结构语句while语句、语句、for语句语句。1-10Copyright SWFU-CISD,2012.All rights reserved.计算机编程导论计算机编程导论4.3 while语句语句while 表达式表达式:循环体循环体表达式表达式循环体循环体真真假假while 表达式表达式:循环体循环体else:
10、else子句子句1-11Copyright SWFU-CISD,2012.All rights reserved.计算机编程导论计算机编程导论(1)while语句是一个语句是一个条件循环语句条件循环语句,即首先计算表,即首先计算表达式,根据表达式值的真、假来决定是否继续循环。达式,根据表达式值的真、假来决定是否继续循环。(2)while语句的语法与语句的语法与if语句类似,要使用语句类似,要使用缩进缩进来来分隔子句。分隔子句。(3)while语句的条件表达式不需要用括号括起来,语句的条件表达式不需要用括号括起来,但是表达式后面必须有但是表达式后面必须有冒号冒号。(4)使用)使用while语句编
11、程通常会遇到两种题型,一种语句编程通常会遇到两种题型,一种是循环次数事先确定的问题;一种是循环次数事先不是循环次数事先确定的问题;一种是循环次数事先不确定的问题。确定的问题。说明:说明:1-12Copyright SWFU-CISD,2012.All rights reserved.计算机编程导论计算机编程导论4.3.1 while语句解决不确定循语句解决不确定循环次数的问题环次数的问题【分析分析】该问题使用循环结构该问题使用循环结构解决,由于不确定用解决,由于不确定用户即将输入几个正整户即将输入几个正整数,因此属于不确定数,因此属于不确定循环次数的问题。循环次数的问题。【例例4-1】编程从键
12、盘输入若编程从键盘输入若干正整数,求所有输入整数之干正整数,求所有输入整数之和。当输入整数为负数时,结和。当输入整数为负数时,结束该操作。束该操作。1-13Copyright SWFU-CISD,2012.All rights reserved.计算机编程导论计算机编程导论#Exp4_1.pyprint 请输入若干正整数进行求和操作,当输入负数时结束请输入若干正整数进行求和操作,当输入负数时结束:s=0 x=input(请输入一个整数请输入一个整数:)while x=0:s=s+x x=input(请输入一个整数请输入一个整数:)print 整数之和整数之和=,s程序:程序:程序运行结果:程序
13、运行结果:请输入若干正整数进行求和操作,当输入负数时结请输入若干正整数进行求和操作,当输入负数时结束束:请输入一个整数请输入一个整数:10请输入一个整数请输入一个整数:20请输入一个整数请输入一个整数:301-14Copyright SWFU-CISD,2012.All rights reserved.计算机编程导论计算机编程导论【例例4-2】编程从键盘输入若干个字符,一边输入编程从键盘输入若干个字符,一边输入一边输出,当输入一边输出,当输入“#”字符时终止该操作。字符时终止该操作。【分析分析】(1)本题使用循环)本题使用循环结构解决,每次循环结构解决,每次循环从键盘输入一个字符,从键盘输入一
14、个字符,直到输入为直到输入为“#”字字符时停止循环。符时停止循环。(2)由于输入的字)由于输入的字符个数无法确定,因符个数无法确定,因此此循环次数不确定循环次数不确定。是是否否1-15Copyright SWFU-CISD,2012.All rights reserved.计算机编程导论计算机编程导论a=raw_input(请输入字符,如果输入请输入字符,如果输入#号则结束输入操作号则结束输入操作:)while a!=#:#判断输入的是否是井号判断输入的是否是井号print 您输入的字符是:您输入的字符是:,a#打印输入的字符打印输入的字符#以下语句是再次输入一个新的字符以下语句是再次输入一个
15、新的字符a=raw_input(请输入字符,如果输入请输入字符,如果输入#号则结束输入操作号则结束输入操作:)else:print 输入结束输入结束程序:程序:提问:提问:(1)循环结束后,变量)循环结束后,变量 a 中的值是什么?中的值是什么?(2)如果循环体中没有下面这条语句会怎么样?)如果循环体中没有下面这条语句会怎么样?a=raw_ input(请输入字符,如果输入请输入字符,如果输入#号则结束输入操作号则结束输入操作:)1-16Copyright SWFU-CISD,2012.All rights reserved.计算机编程导论计算机编程导论4.3.2 while语句解决确定循环次
16、数的问题语句解决确定循环次数的问题 确定循环次数的问题是指循环之前可以预确定循环次数的问题是指循环之前可以预知循环即将执行的次数,为了控制循环次数,知循环即将执行的次数,为了控制循环次数,通常在程序中设置一个计数变量,每次循环,通常在程序中设置一个计数变量,每次循环,该变量进行自增或自减操作,当变量值自增到该变量进行自增或自减操作,当变量值自增到大于设定的上限值或者自减到小于设定的下限大于设定的上限值或者自减到小于设定的下限值时,循环自动结束。值时,循环自动结束。1-17Copyright SWFU-CISD,2012.All rights reserved.计算机编程导论计算机编程导论4.3
17、.2 while语句解决确定循环次数的问题语句解决确定循环次数的问题【例例4-3】编程计算编程计算1+2+3+100 的值。的值。分析:本题使用循环结构解决,每循环一次累加分析:本题使用循环结构解决,每循环一次累加一个整数值,整数的取值范围为一个整数值,整数的取值范围为1100。由于。由于整数的范围是确定的,因此循环次数也是确定整数的范围是确定的,因此循环次数也是确定的。的。1-18Copyright SWFU-CISD,2012.All rights reserved.计算机编程导论计算机编程导论4.3.2 while语句解决确定循环次数的语句解决确定循环次数的问题问题程序:程序:#Exp4
18、_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语句解决确定循环次数的语句解决确定循环次数的问题问题分析:本题使用循环结构解决,每循环一次输出一分析:本题使用循环结构解决,每循环一次输出一个列表元素值,由于列表定义后,其长度是已知的,个列表元素值,由于列表定义后,其长度是已知的,因此循环次数也是确定的。因此循环次数也是确定的。【例例4-4】依次输出列表中依次输出列表中每每个元素的值。个
19、元素的值。1-20Copyright SWFU-CISD,2012.All rights reserved.计算机编程导论计算机编程导论4.3.2 while语句解决确定循环次数的问题语句解决确定循环次数的问题程序:程序:#Exp4_4.pya_list=a,b,mpilgrim,z,examplea_len=len(a_list)i=0while i a_len:print 列表的第列表的第,i+1,个个元素是:元素是:,a_listi i+=11-21Copyright SWFU-CISD,2012.All rights reserved.计算机编程导论计算机编程导论练习练习:1.1.求求
20、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,1
21、33.3.求求1 1100100之间所有的素数,并统计素数的个之间所有的素数,并统计素数的个数。数。1-23Copyright SWFU-CISD,2012.All rights reserved.人有了知识,就会具备各种分析能力,人有了知识,就会具备各种分析能力,明辨是非的能力。明辨是非的能力。所以我们要勤恳读书,广泛阅读,所以我们要勤恳读书,广泛阅读,古人说古人说“书中自有黄金屋。书中自有黄金屋。”通过阅读科技书籍,我们能丰富知识,通过阅读科技书籍,我们能丰富知识,培养逻辑思维能力;培养逻辑思维能力;通过阅读文学作品,我们能提高文学鉴赏水平,通过阅读文学作品,我们能提高文学鉴赏水平,培养文学情趣;培养文学情趣;通过阅读报刊,我们能增长见识,扩大自己的知识面。通过阅读报刊,我们能增长见识,扩大自己的知识面。有许多书籍还能培养我们的道德情操,有许多书籍还能培养我们的道德情操,给我们巨大的精神力量,给我们巨大的精神力量,鼓舞我们前进鼓舞我们前进。