《高级语言程序设计教学课件第4章循环结构.ppt》由会员分享,可在线阅读,更多相关《高级语言程序设计教学课件第4章循环结构.ppt(89页珍藏版)》请在优知文库上搜索。
1、第四章第四章 循环结构循环结构结构化程序设计的三种控制结构结构化程序设计的三种控制结构顺序结构顺序结构选择结构选择结构循环结构循环结构TFTFFTTTFFFTFTF内容内容n4.1 循环结构概述循环结构概述n4.2 while循环循环n4.3 do-while循环循环n4.4 for循环循环n4.5 循环的嵌套循环的嵌套n4.6 循环的中途退出循环的中途退出n4.7 算法举例算法举例4.1 4.1 循环结构概述循环结构概述用循环程序实现14循环结构特点循环结构特点 在在给定条件成立给定条件成立时,时,反复执行反复执行某程序段,某程序段,直到条件不成立为止。直到条件不成立为止。给定的条件称为给定
2、的条件称为循环条件循环条件,反复执行的,反复执行的程序段称为程序段称为循环体循环体。C语言中,实现循环的语句语言中,实现循环的语句n1用用 语句语句n2用用 语句语句n3用用 语句语句n4用用 语句和语句和 语句构造循环语句构造循环4.2 while循环循环nwhile语句语句 一般形式一般形式 执行流程执行流程TFwhile循环特点循环特点说明:说明:循环体有可能一次也不执行循环体有可能一次也不执行(当循环条件不满足)(当循环条件不满足)while语句中的语句中的,常,常用的是关系表达式和逻辑表达式,只要表达式用的是关系表达式和逻辑表达式,只要表达式的值为真(非的值为真(非0)即可继续循环)
3、即可继续循环51ii用用while循环求循环求i sum 1 0 sum=0+1=1 i+2 1 sum=1+2=3 i+3 3 sum=3+3=6 i+4 6 sum=6+4=10 i+5 10 sum=10+5=15 i+6 151+2+3+100?100循环变量初值循环变量初值循环变量终值循环变量终值循环变量增值循环变量增值n当循环体当循环体,以复合语句形式出现。,以复合语句形式出现。n如果不加花括弧,如果不加花括弧,while语句的执行范围语句的执行范围只到只到while后面的第一个分号处后面的第一个分号处while(i=100);sum=sum+i;i+;while(i=100)su
4、m=sum+i;i+;while(i0?1:xb)printf(%d,a);else printf(%d,b);printf(%d,ab?a:b);求求 a+|b|value=b0?a+b:a-b;exp1取取exp2值值取取exp3值值非非0=0n结合方向:结合方向:如如:x0?1:x0?1:(xy?1:1.5/xy,值为值为1.0;x=y ,值为值为1.5输入两个正整数输入两个正整数a和和b,求其最大公约数,求其最大公约数 几个自然数公有的约数,叫做这几个数的公几个自然数公有的约数,叫做这几个数的公约数。其中最大的就是最大公约数。约数。其中最大的就是最大公约数。n方法方法1定义法定义法具体
5、步骤:具体步骤:从键盘上输入从键盘上输入m,n,求求k=mn?m:n;如果如果m%k=0且且n%k=0,则,则k为最大公约数为最大公约数 否则,否则,k-,继续继续直到满足条件为止直到满足条件为止n方法方法2辗转相除法辗转相除法n方法方法3相减法相减法输入两个正整数输入两个正整数m和和n,求其最大公约数,求其最大公约数请输入请输入2个数个数:32 12最大公约数最大公约数:4Press any key to continue 将一个大于将一个大于1的正整数分解成质因的正整数分解成质因数。例如:输入数。例如:输入90,打印出,打印出 90=2*3*3*5n题目分析:为了将题目分析:为了将n分解成
6、质因数,应先找到一分解成质因数,应先找到一个最小的质数个最小的质数k,然后按下述步骤完成:,然后按下述步骤完成:如果如果n=k,则说明分解质因数的过程,则说明分解质因数的过程已经结束,输出即可已经结束,输出即可 如果如果n!=k,但,但n能被能被k整除,则应打印整除,则应打印出出k的值,并用的值,并用n除以除以k的商的商,作为新的正整数作为新的正整数n,重复执行重复执行STEP1 如果如果n不能被不能被k整除,则用整除,则用k+1作为新作为新的的k,重复执行重复执行 1.while(1.while(0 0).).由于循环的条件表达式恒由于循环的条件表达式恒等于等于0 0,循环体永远也不会执行,
7、是编程者的错误。,循环体永远也不会执行,是编程者的错误。2.while(2.while(1 1).).由于循环的条件表达式恒由于循环的条件表达式恒等于等于1 1,所以不可能通过循环控制条件来结束循环,所以不可能通过循环控制条件来结束循环体的执行,称为体的执行,称为“死循环死循环”。3.3.为了保证循环正常运行,应该特别注意:为了保证循环正常运行,应该特别注意:u 循环条件循环条件 u 循环条件的初始状态(初始值)循环条件的初始状态(初始值)i=1;i=1;u 循环体内部对控制条件的影响循环体内部对控制条件的影响 i+;i+;While While 使用注意使用注意4.3 do-while循环循
8、环nDo-while语句语句 一般形式一般形式 执行流程执行流程TF表达式表达式循环体循环体FT循环体循环体while循环循环 特点:特点:说明:说明:至少执行一次循环体至少执行一次循环体dowhile可转化成可转化成while结构结构 从键盘输入一个整数,计算它的位数。从键盘输入一个整数,计算它的位数。例如:输入例如:输入12345,输出,输出5;输入输入-123,输出,输出3,输入输入0,输出,输出1。main()int number,count=0;scanf(“%d”,&number);if(number0)number=-number;do printf(“%d”,number%10
9、);number=number/10;count+;while(number!=0);printf(“,%d n,count);输入一个整数,反序输出该数。输入一个整数,反序输出该数。如输入如输入1234512345,输出,输出5432154321。12345%10 =512345/10 =12341234%10 =41234/10 =123123%10 =3123/10 =1212%10 =212/10 =11%10 =11/10 =0用格里高利公式求用格里高利公式求的近似值。要的近似值。要求精确到最后一项的绝对值小于求精确到最后一项的绝对值小于1e-5。n格里高利公式为:格里高利公式为:n
10、分子分子 flag:1,-1,1,-1n分母分母 n:1,3,5,7,.n项项 item=flag/n.71513114.715131114#include main()int i,sum=0;scanf(%d,&i);do sum=sum+i;i+;while(i=10);printf(sum=%d,sum);#include main()int i,sum=0;scanf(%d,&i);while(i=10)sum=sum+i;i+;printf(sum=%d,sum);while和和dowhile比较比较:1 sum=551 sum=5511 sum=011 sum=114.4 for循
11、环循环nfor语句语句 一般形式一般形式 执行流程执行流程 for语句一般应用形式语句一般应用形式 说明说明for语句中语句中exp1,exp2,exp3类型任意,都可省略,类型任意,都可省略,但但无限循环无限循环:for(;)for语句可以转换成语句可以转换成while结构结构for(exp1;exp2;exp3)循环体语句;循环体语句;exp1;while(exp2)循环体语句;循环体语句;exp3;计算计算s=1+2+3+.+99+100 用用for语句实现,从语句实现,从0开始,输出开始,输出n个连续的偶数个连续的偶数 打印出所有打印出所有“水仙花数水仙花数”。所谓。所谓“水仙水仙花数
12、花数”是指一个三位数,其各位数字立方和等于该是指一个三位数,其各位数字立方和等于该数本身如:数本身如:153是一个是一个“水仙花数水仙花数”,因为,因为153=135333n题目分析:题目分析:利用利用for循环检验循环检验100-999中的每一个三位数中的每一个三位数 对于每个三位数分解出个位、十位、百位数,对于每个三位数分解出个位、十位、百位数,然后判断它是否为然后判断它是否为“水仙花数水仙花数”。设设n为一个三位数,为一个三位数,i、j、k分别为百位,十位分别为百位,十位和个位,怎样获得和个位,怎样获得i、j、k呢?呢?有一分数序列:有一分数序列:2/1,3/2,5/3,8/5,3/8,
13、.,求出这个数列的前,求出这个数列的前20项之和项之和n题目分析:题目分析:.81358352312fbaa=a+bb=at=a几种循环的比较几种循环的比较nfor和和while循环条件循环条件循环体,循环体,do-while语句语句循环体循环体循环条件。循环条件。nwhile、do-while、for可以相互替换使用。可以相互替换使用。n通常使用情况通常使用情况while语句多用于语句多用于的情况。的情况。for语句多用于语句多用于的情况。的情况。do-while语句多用于语句多用于循环控制循环控制(3 3)用)用forfor循循环语环语句句#include#include void mai
14、n()void main()int s=0,i;int s=0,i;for(i=1;i=10;i+)for(i=1;i=10;i+)s=s+i;s=s+i;printf(s=%d,s);printf(s=%d,s);54求求s=1+2+3+10,分别用,分别用三种循环语句实现,比较他们的异同。三种循环语句实现,比较他们的异同。(2 2)用)用dowhiledowhile循循环环#include#include void main()void main()int s=0,i=1;int s=0,i=1;do do s=s+i;s=s+i;i+;i+;while(i=10);while(i=10)
15、;printf(s=%d,s);printf(s=%d,s);(1 1)用)用whilewhile循循环环#include void main()void main()int s=0,i=1;int s=0,i=1;while(i=10)while(i=10)s=s+i;s=s+i;i+;i+;printf(s=%d,s);printf(s=%d,s);4.5 循环的嵌套循环的嵌套n三种循环可互相嵌套三种循环可互相嵌套,层数不限层数不限 外层循环可包含两个以上内循环外层循环可包含两个以上内循环,但不能相互交叉但不能相互交叉内循环内循环外循环外循环相互交相互交叉叉 分析程序的运行结果分析程序的运
16、行结果000001000100011011ijk1*1=11*2=22*2=41*3=32*3=43*3=91*4=42*4=83*4=124*4=141*5=52*5=103*5=154*5=205*5=25 打印出打印出乘法九九表乘法九九表第第1列列第第2列列第第3列列第第4列列第第5列列第第1行行1*1=1第第2行行1*2=22*2=4第第3行行1*3=32*3=43*3=9第第4行行1*4=42*4=83*4=124*4=14第第5行行1*5=52*5=103*5=154*5=205*5=25n找一找找一找 i和和j的规律的规律 行行i从从19,即,即i(1i9)列列j从从1i,即,即j(1ji)两个乒乓球队进行比赛,各出三人。两个乒乓球队进行比赛,各出三人。甲队为甲队为a、b、c三人,乙队为三人,乙队为x、y、z三人。已抽签三人。已抽签决定比赛名单。有人向队员打听比赛的名单。决定比赛名单。有人向队员打听比赛的名单。a说说他不和他不和x比,比,c说他不和说他不和x、z比,请编程序找出三对比,请编程序找出三对比赛选手的名单。比赛选手的名单。n题目分析题目分析 分别用三个字符变量分