《第五讲循环结构程序设计.ppt》由会员分享,可在线阅读,更多相关《第五讲循环结构程序设计.ppt(62页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、啄木鸟啄木鸟 制作制作第五讲第五讲第五讲第五讲 循环结构程序设计循环结构程序设计循环结构程序设计循环结构程序设计5.1 while5.1 while语句语句5.2 do-while5.2 do-while语句语句5.3 for5.3 for语句语句5.4 5.4 goto语句以及用语句以及用goto语句构成的循环语句构成的循环5.5 5.5 breakbreak语句语句和和continue语句语句 5.6 5.6 循环的嵌套循环的嵌套 5.7 5.7 循环结构程序设计举例循环结构程序设计举例 啄木鸟啄木鸟 制作制作在在C语言中可以用以下语句来实现循环:语言中可以用以下语句来实现循环:1.用用g
2、oto语句和语句和if语句构成循环;语句构成循环;2.用用while语句;语句;3.用用do-while语句;语句;4.用用for语句。语句。循环循环:就是在给定的条件成立时反复执行某一就是在给定的条件成立时反复执行某一程序段,被反复执行的程序段称为循环体。程序段,被反复执行的程序段称为循环体。啄木鸟啄木鸟 制作制作S=1+2+3+1000S12100S+1SS+2SS+100S作100次加法S+iS累加器计数器啄木鸟啄木鸟 制作制作5.1 5.1 whilewhile语句语句真真(非零非零)表达式表达式 循环体循环体假假(零零)1、while 语句的形式语句的形式:while(表达式)表达式
3、)循环体;循环体;2、while 语句语句 常称常称为为“当型当型”循环语句。循环语句。啄木鸟啄木鸟 制作制作3、说明、说明:先判断表达式,后执行语句。先判断表达式,后执行语句。表达式同表达式同ifif语句后的表达式一样,可以是语句后的表达式一样,可以是任何类型的表达式。任何类型的表达式。循环体多于一句时,用一对循环体多于一句时,用一对 括起括起。whilewhile循环结构常用于循环次数不固定,根循环结构常用于循环次数不固定,根据是否满足某个条件决定循环与否的情况。据是否满足某个条件决定循环与否的情况。啄木鸟啄木鸟 制作制作i=1;s=0;while(i0)printf(+);else pr
4、intf(-);scanf(%f ,&x);判断正负号判断正负号啄木鸟啄木鸟 制作制作#include stdio.h void main()char ch;int num=0;ch=getchar();【例【例5-2】统计从键盘输入的一行字符的个数统计从键盘输入的一行字符的个数(以回车键作为输入结束标记)。(以回车键作为输入结束标记)。while(ch!=n)判断是否输入结束判断是否输入结束num+;ch=getchar();printf(num=%dn,num);啄木鸟啄木鸟 制作制作注意注意表达式在判断前,必须要有明确的值。表达式在判断前,必须要有明确的值。循环体中一般有改变条件表达式的
5、语句。循环体中一般有改变条件表达式的语句。while(while(表达式表达式)后面没有分号。后面没有分号。啄木鸟啄木鸟 制作制作5.2 5.2 do-whiledo-while语句语句1、do-while的形式:的形式:do 循环体;循环体;while(表达式);表达式);2、do-while语句语句 常称常称为为“直到型直到型”循环语句。循环语句。真真(非零非零)表达式表达式 循环体循环体假假(零零)啄木鸟啄木鸟 制作制作3、说明、说明:先先执行执行语句语句,后判断,后判断表达式表达式。第一次条件为真时,第一次条件为真时,while,do-while等价;等价;第一次条件为假时,二者不同。
6、第一次条件为假时,二者不同。啄木鸟啄木鸟 制作制作【例例5 5-3 3】用用do-whiledo-while语语句句编编写写程程序序统统计计从从键键盘盘输输入入的的一一行行非非空空字字符符的的个个数数(以以回回车车键键作作为为输输入入结结束束标标记)。记)。#include stdio.hvoid main()char ch;int num=0;ch=getchar();do num+;ch=getchar();while(ch!=n);printf(num=%dn,num);啄木鸟啄木鸟 制作制作注意注意在在if、while语句中,表达式后面都没有分语句中,表达式后面都没有分号,而在号,而在
7、do-while语句的表达式后面则必语句的表达式后面则必须加分号。须加分号。do-while和和while语句相互替换时,要注意语句相互替换时,要注意修改循环控制条件修改循环控制条件。啄木鸟啄木鸟 制作制作5.3 5.3 forfor语句语句1、for的形式:的形式:for(初始表达式初始表达式1;条件表达式;条件表达式2;循环表达式;循环表达式3)循环体循环体;表表达达式式1:用用于于循循环环开开始始前前为为循循环环变变量量设设置置初初始始值。值。表达式表达式2:控制循环执行的条件,决定循环次数。:控制循环执行的条件,决定循环次数。表达式表达式3:循环控制变量修改表达式。:循环控制变量修改表
8、达式。循环体语句:循环体语句:被重复执行的语句。被重复执行的语句。啄木鸟啄木鸟 制作制作表达式表达式3计算表达式计算表达式1循环体循环体判断表达式判断表达式2零零非零非零for的下一条语句的下一条语句2、执行过程、执行过程啄木鸟啄木鸟 制作制作 for(i=1;i=100;i+)sum=sum+i;例如:例如:它相当于以下语句:它相当于以下语句:i=1;while(i=100)sum=sum+i;i+;表达式表达式1 1;while(表达式表达式2)表达式表达式3 3;啄木鸟啄木鸟 制作制作3、说明说明三个表达式都可以是逗号表达式。三个表达式都可以是逗号表达式。三个表达式都是任选项,都可以省略
9、,但要注三个表达式都是任选项,都可以省略,但要注意省略表达式后,分号间隔符不能省略。意省略表达式后,分号间隔符不能省略。啄木鸟啄木鸟 制作制作4.for语句中表达式省略的形式语句中表达式省略的形式(1)for语句一般形式中的语句一般形式中的“表达式表达式1”可以省可以省略;略;如:如:sum=0;i=1;for(;i100)break;sum=sum+i;啄木鸟啄木鸟 制作制作(3)表达式)表达式3也可以省略,但此时保证循环能也可以省略,但此时保证循环能正常结束如:正常结束如:for(sum=0,i=1;i=100;)sum=sum+i;i+;啄木鸟啄木鸟 制作制作 (4)可以省略表达式可以省
10、略表达式1和和表达式表达式3,只有表达式,只有表达式2,如:,如:i=1;sum=0;for(;i=100;)sum=sum+i;i+;i=1;sum=0;while(i100)break;sum=sum+i;i+;相当于相当于啄木鸟啄木鸟 制作制作(6)循环体为空语句)循环体为空语句 对对for语句,循环体为空语句的一般形式为语句,循环体为空语句的一般形式为:for(表达式表达式1;表达式;表达式2;表达式;表达式3);如:如:for(sum=0,i=1;i=100;sum+=i,i+);要要在在显显示示器器上上复复制制输输入入的的字字符符,输输入入的的字字符符为为.时时,结束循环。结束循环
11、。输入输入abcdefg.输出输出abcdefg.while(putchar(getchar()!=.);(1)在进入累加前先给累加器赋初值(一般为)在进入累加前先给累加器赋初值(一般为0););(2)用循环语句实现累加;)用循环语句实现累加;for(循环变量赋初值;循环条件;循环变量改变规律)循环变量赋初值;循环条件;循环变量改变规律)(3)循环体语句的设计。)循环体语句的设计。累加器当前值累加器当前值=累加器原值累加器原值+循环变量当前值循环变量当前值;典型例题分析典型例题分析【例【例5-45-4】求累加和求累加和1+2+3+10001+2+3+1000基本方法基本方法:属于属于“累加器累
12、加器”类型问题。类型问题。累加器赋初值累加器赋初值求偶数和求偶数和2+4+6+100参考程序:参考程序:void main()long int k,s;s=0;for(k=1;k=1000;k+)s=s+k;printf(s=%ld,s);累加累加思考思考(1)给累乘器赋初值,一般为)给累乘器赋初值,一般为1;(2)用循环语句实现累乘;)用循环语句实现累乘;for(循环变量赋初值;循环条件;循环变量改变规律)循环变量赋初值;循环条件;循环变量改变规律)(3)循环体设计。)循环体设计。累乘器当前值累乘器当前值=累乘器原值累乘器原值*循环变量当前值;循环变量当前值;例例5-5:求累乘积。求累乘积。
13、如:如:123.100基本方法基本方法:属于属于“累乘器累乘器”类型问题。类型问题。累乘器赋初值累乘器赋初值求求n!=1 2 3 n参考程序:参考程序:void main()double s=1;int k;for(k=1;k=100;k+)s=s*k;printf(s=%lf,s);累乘累乘思考思考整数连乘结果一定整数连乘结果一定是整数,而本例中是整数,而本例中结果数值相当大,结果数值相当大,用用longlong型都无法存型都无法存放,因此将存放累放,因此将存放累乘结果的变量乘结果的变量s s定义定义为为doubledouble型。型。例例5-6 判断一个数是否为素数判断一个数是否为素数?一
14、个数一个数x在在2,sqrt(x)范围内没有因子,范围内没有因子,我们就称其为素数(质数)我们就称其为素数(质数)主要编程方法:循环变量终值法、标记变主要编程方法:循环变量终值法、标记变量法量法#include math.h void main()int x,k;scanf(%d ,&x);排除法:如果有因子,排除法:如果有因子,不再往下判断是否是素不再往下判断是否是素数数循环变量终值法循环变量终值法for(k=2;ksqrt(x)printf(%d is a prime ,x);else printf(%d is not a prime ,x);在判断范围内无因在判断范围内无因子,程序正常终
15、止子,程序正常终止有因子,程序有因子,程序非正常终止非正常终止#include math.h void main()int x,k,f=1;scanf(%d ,&x);排除法:如果有因子,排除法:如果有因子,不再往下判断是否是素不再往下判断是否是素数数for(k=2;k=sqrt(x);k+)if(x%k=0)f=0;break;if(f=1)printf(%d is a prime ,x);else printf(%d is not a prime ,x);在判断范围内无因在判断范围内无因子,程序正常终止子,程序正常终止有因子,程序有因子,程序非正常终止非正常终止标记变量法标记变量法啄木鸟啄
16、木鸟 制作制作例例5-7 用用0-9这十个数字可以组成多少无重复这十个数字可以组成多少无重复的三位数的三位数?编程方法:编程方法:“枚举法枚举法”按问题本身的性质,一一列举出该问题所按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检有可能的解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解,若是,验每个可能解是否是问题的真正解,若是,我们采纳这个解,否则抛弃它。对于所列我们采纳这个解,否则抛弃它。对于所列举的值,既不能遗漏也不能重复。举的值,既不能遗漏也不能重复。啄木鸟啄木鸟 制作制作#include stdio.hvoid main()/*a,b,c代表百位、十
17、位、个位代表百位、十位、个位*/int x,a,b,c,num=0;/*num存放满足条件的数的个数,注意存放满足条件的数的个数,注意num要赋初值要赋初值*/for(x=100;x=999;x+)a=x/100;b=x/10%10;c=x%10;if(a!=b&a!=c&b!=c)num+;printf(%5d,x);printf(nnumber=%d,num);啄木鸟啄木鸟 制作制作编程方法:编程方法:“递推法递推法”例例5-8 裴波那契数列的第裴波那契数列的第1、2项分别为项分别为1、1,以后各项的值均是其前两项之和。求前,以后各项的值均是其前两项之和。求前30项菲波那契数。项菲波那契数
18、。所所谓谓递递推推法法就就是是从从初初值值出出发发,归归纳纳出出新新值值与与旧旧值值间间的的关关系系,直直到到求求出出所所需需值值为为止止。新新值值的的求求出出依依赖赖于于旧旧值值,不不知知道道旧旧值值,无无法法推推导导出出新新值值。数学上递推公式正是这一类问题。数学上递推公式正是这一类问题。啄木鸟啄木鸟 制作制作 f1-第一个数第一个数 f2-第二个数第二个数 f3-第三个数第三个数 f1=1;f2=1;f3=f1+f2;以后只要改变以后只要改变f1,f2的值,即可求出下一个数的值,即可求出下一个数.f1=f2;f2=f3;f3=f1+f2;递推递推啄木鸟啄木鸟 制作制作void main(
19、)long f1=1,f2=1,f3;int k;参考程序参考程序:printf(%ldt%ldt,f1,f2);for(k=3;k=1;x-)if(x%17=0)break;printf(x=%dn,x);找到满足条件的最找到满足条件的最大数,结束循环大数,结束循环啄木鸟啄木鸟 制作制作(1)语句形式)语句形式:continue;(2)语句作用)语句作用:结束结束本次循环本次循环。2 2、continuecontinue 语句语句(3)语句执行流程)语句执行流程:continuecontinue语句可以结束本次循环,即不再语句可以结束本次循环,即不再执行循环体中执行循环体中continue
20、continue 语句之后的语句,转语句之后的语句,转入下一次循环条件的判断与执行。入下一次循环条件的判断与执行。啄木鸟啄木鸟 制作制作【例【例5-115-11】求求300300以内能被以内能被1717整除的所有整数。整除的所有整数。#include stdio.hvoid main()int x,k;for(x=1;x=300;x+)if(x%17!=0)continue;printf(%dt,x);啄木鸟啄木鸟 制作制作while(条件条件)语句语句A;break;语句语句 B;真真语句语句B条件条件语句语句Abreak假假结束循环结束循环4 4、breakbreak语句与语句与conti
21、nuecontinue语句的区别语句的区别至此位置至此位置啄木鸟啄木鸟 制作制作while(条件条件)语句语句A;continue;语句语句 B;真真语句语句B条件条件语句语句Acontinue假假结束循环结束循环至此位置至此位置啄木鸟啄木鸟 制作制作#include stdio.hvoid main()int a,b;for(a=1,b=1;a=10)break;if(b%3=1)b+=3;continue;printf(%dn,a);【例【例5-125-12】分析以下程序的运行结果。分析以下程序的运行结果。程序运行结果:程序运行结果:4 4 啄木鸟啄木鸟 制作制作 在循环体语句中又包含有另
22、一个完整的循环结构在循环体语句中又包含有另一个完整的循环结构的形式,称为循环的嵌套。如果内循环体中又有的形式,称为循环的嵌套。如果内循环体中又有嵌套的循环语句,则构成多重循环。嵌套的循环语句,则构成多重循环。5.6 5.6 循环的嵌套循环的嵌套嵌套在循环体内的循环体称为内循环,外面的循环嵌套在循环体内的循环体称为内循环,外面的循环称为外循环。称为外循环。while、do-while、for三种循环都可以互相嵌套。三种循环都可以互相嵌套。啄木鸟啄木鸟 制作制作循环语句之间的关系循环语句之间的关系for(.).for(.).内内循循环环外外循循环环for(.).for(.).并列循环并列循环嵌套循
23、环嵌套循环交叉循环交叉循环for(.).for(.).错误错误啄木鸟啄木鸟 制作制作真真真真外循环初始条件外循环初始条件内循环初始条件内循环初始条件内循环体内循环体外循环条件外循环条件假假内循环条件内循环条件假假内循环循环条件内循环循环条件外循环循外循环循环条件环条件循环结束循环结束二重二重循环循环嵌套嵌套结构结构执行执行流程流程 例例5-13:输出图形输出图形:*编程分析编程分析:采用双重循环,一行一行输出。采用双重循环,一行一行输出。每一行输出步骤:一般每一行输出步骤:一般3步。步。1)光标定位)光标定位3)每输完一行光标换行)每输完一行光标换行(n)2)输出图形。)输出图形。例如本题:共
24、例如本题:共4行行,若行号用若行号用k表示,表示,则每一行有则每一行有2*k-1个个*号。号。#include stdio.h void main()int k1,k2;for(k1=1;k1=4;k1+)putchar(t);for(k2=1;k2=k1;k2+)putchar(b);for(k2=1;k2=k1*2-1;k2+)putchar(*);putchar(n);定位(还可定位(还可以用空格的以用空格的方法)方法)输出输出啄木鸟啄木鸟 制作制作5.7 5.7 循环结构程序设计举例循环结构程序设计举例【例【例5-145-14】求求#include stdio.hvoid main()
25、float s=0,f1=2,f2=1,f=1,t,n;/*累加器赋初值累加器赋初值*/for(n=1;n=1;n-)x=(x+1)*2;printf(%d,x);啄木鸟啄木鸟 制作制作【例例5-175-17】猜猜数数游游戏戏:任任意意设设置置一一个个整整数数,请请用用户户从从键键盘盘上上输输入入数数据据猜猜想想设设值值的的数数是是什什么么,告告诉诉用用户户是是猜猜大大了了还还是是小小了了。1010次次以以内内猜猜对对,用用户户获获胜胜。否否则则,告告诉用户设置的数据是什么。诉用户设置的数据是什么。#include stdio.hvoid main()int num=123,x,n;print
26、f(hint:0number1000n);/*给出数据范围的提示信息给出数据范围的提示信息*/for(n=1;nnum)printf(bigger!n);if(xnum)printf(smaller!n);if(n=11)printf(Lost!the number is%dn,x);啄木鸟啄木鸟 制作制作1、写出程序运行结果、写出程序运行结果:void main()int i,j,x=0;for(i=0;i2;i+)x+;for(j=0;j0)(3 )if(n0)(4 )printf(“i=%4d j=%4dn”,i,j);3.百钱买百鸡百钱买百鸡.公鸡公鸡5元一只元一只,母鸡母鸡3元一只元
27、一只,小鸡小鸡1元三只元三只;一百元买一百只鸡一百元买一百只鸡,且公鸡且公鸡,母鸡母鸡,小鸡小鸡都要有都要有.有几种买法有几种买法?void main()int i,j,k,n=0;for(i=1 )for(j=2 )k=100-i-j;if(3 =100)n+;printf(i=%d,j=%d,k=%dn”,i,j,k);printf(“n n=%d”,n);啄木鸟啄木鸟 制作制作4、编程输出下面的数字金字塔、编程输出下面的数字金字塔(1到到9)。1 121 12321 .12345678987654321啄木鸟啄木鸟 制作制作课后思考课后思考:以下问题可以用穷举法编程以下问题可以用穷举法编程某旅行团有男人、女人和小孩共某旅行团有男人、女人和小孩共30人,在人,在纽约一家小饭馆里吃饭,该饭馆按人头收纽约一家小饭馆里吃饭,该饭馆按人头收费,每个男人收费,每个男人收3美元,每个女人收美元,每个女人收2美元,美元,每个小孩收每个小孩收1美元,共收取美元,共收取50美元。共有多美元。共有多少组解?少组解?(答案答案:11组解或组解或9组解组解)本本 章章 小小 结结1.掌握掌握while,for及多重循环及多重循环注意!2.掌握典型例题及方法掌握典型例题及方法(1)累加、连乘、累加、连乘、判断素数、费氏数列等判断素数、费氏数列等(2)枚举、递推方法枚举、递推方法
限制150内