教育专题:单元5-循环结构程序设计.ppt
Page 1 C 课程课程单元单元五五 循环结构程序设计循环结构程序设计 Page 2 主要主要内容内容1、循环的本质、循环的本质2、三种循环结构语句、三种循环结构语句(重点)(重点)while语句 do-while语句 for语句3 循环结构控制语句循环结构控制语句 break语句 continue语句4 综合应用案例综合应用案例Page 3 已知三边长,求三角形面积?已知三边长,求三角形面积?问题引入问题引入每次计算完毕,程序会退出,再次计算需要重新运行程序每次计算完毕,程序会退出,再次计算需要重新运行程序根据指定的条件重复执行一条或多条语句,根据指定的条件重复执行一条或多条语句,这就是这就是循环结构循环结构。Page 4 5.1 5.1 循环的本质循环的本质 printf(*n);printf(*n);printf(*n);printf(*n);printf(*n);printf(*n);printf(*n);printf(*n);printf(*n);printf(*n);for(int i=1;i=8;i+)printf(“*n);某些相同的代码,不必重复书写,利用循环结构即可达到自动重复某些相同的代码,不必重复书写,利用循环结构即可达到自动重复执行的目的,这样提高了程序编写的效率,减少了源代码的存储空执行的目的,这样提高了程序编写的效率,减少了源代码的存储空间,这就是间,这就是循环的本质循环的本质。等价等价Page 5 5.1 5.1 循环的本质循环的本质for(int i=1;i=8;i+)printf(“*n);循环结构三要素:循环结构三要素:1、循环从什么时候开始,即、循环从什么时候开始,即“循环变量初值循环变量初值”。2、满足什么条件要循环,即、满足什么条件要循环,即“循环控制条件表达式循环控制条件表达式”。3、每次循环要做什么,即、每次循环要做什么,即“反复执行的语句反复执行的语句”,简称为,简称为“循环体循环体”。123Page 6 5.1 5.1 三种循环结构语句三种循环结构语句 whilewhile循环的一般形式循环的一般形式循环的一般形式循环的一般形式whilewhile(表达式)(表达式)(表达式)(表达式)循环体循环体循环体循环体;whilewhile(i5i5)printf(printf(%d,%d,i);i);i+;i+;表达式为真?表达式为真?表达式为真?表达式为真?whilewhile循环执行过程循环执行过程循环执行过程循环执行过程执行循环体执行循环体执行循环体执行循环体真真退退退退 出出出出假假循环前:循环前:i=1i第一次第一次循环次数循环次数i511,第二次第二次22,第三次第三次33,第四次第四次44,退出循环:退出循环:i=5Page 7 5.1 5.1 三种循环结构语句三种循环结构语句 whilewhile循环的一般形式循环的一般形式循环的一般形式循环的一般形式whilewhile(表达式)(表达式)(表达式)(表达式)循环体循环体循环体循环体;当表达式为真当表达式为真(表达式为非表达式为非0)时,执行时,执行while语句中的语句。其特点是:语句中的语句。其特点是:先判断表达式,后执行语句。先判断表达式,后执行语句。while循环称为循环称为当型循环。当型循环。注意:注意:(1)循环体如果包含一个以上的语句,应该用花括号括起来,以复循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句形式出现。合语句形式出现。(2)在循环体中应有使循环趋向于结束的语句。在循环体中应有使循环趋向于结束的语句。Page 8 例例5-1编程序,计算编程序,计算 s=1+2+3+100(1)如何得到加数?如何得到加数?i:whilewhile(i=100i=100)s=s+i;s=s+i;i+;i+;i=1;i=1;(2)如何实现累加?如何实现累加?s为被加数,循环一次加一个为被加数,循环一次加一个初始:初始:s=0i=1:s+i ss=s+i;i=2:i=100:1、2、100s=0;s+=i;s+i ss+i svoid main()int i,s;i=1;s=0;while(i=100)s+=i;i+;1 1+2 1+2+.+100i=3:ss+i 1+2+3 printf(s=%d,s);Page 9【随堂练习【随堂练习5-1】利用利用while语句计算自然数序列语句计算自然数序列1,2,3,n的的和,和,n的值在程序执行时输入。的值在程序执行时输入。void main()int i,s;i=1;s=0;while(i=100)s+=i;i+;printf(sum=%d,s);5.2 5.2 三种循环结构语句三种循环结构语句 Page 10#include void main()int i,n,s;i=1;s=0;printf(请输请输入入n的的值值:);scanf(%d,&n);while(i=n)s+=i;i+;printf(sum=%d,s);参考代码参考代码5.2 5.2 三种循环结构语句三种循环结构语句 Page 11 5.2 5.2 三种循环结构语句三种循环结构语句 do-whiledo-while循环的一般形式循环的一般形式循环的一般形式循环的一般形式dodo 循环体循环体循环体循环体;while(while(表达式表达式表达式表达式););whilewhile(i5);i5);printf(printf(%d,%d,i);i);i+;i+;表达式为真?表达式为真?表达式为真?表达式为真?循环执行过程循环执行过程循环执行过程循环执行过程执行循环体执行循环体执行循环体执行循环体真真退退退退 出出出出假假 void void main()main()int i;int i;i=1;i=1;循环前:循环前:i=1i第一次第一次循环次数循环次数11,第二次第二次22,第三次第三次33,第四次第四次44,退出循环:退出循环:i=5 dodoPage 12 例例5-3编程序,计算编程序,计算 s=1+2+3+100#include stdio.hvoid main()int i=1,sum=0;do sum=sum+i;i+;while(i=100);printf(sum=%d,sum);Page 13【随堂练习【随堂练习5-2】利用利用do-while语句计算语句计算1+1/2+1/3+1/n。5.2 5.2 三种循环结构语句三种循环结构语句 Page 14#include void main()int i,n;float s;i=1;s=0;printf(请输请输入入n的的值值:);scanf(%d,&n);do s+=1.0/i;i+;while(i=n);printf(sum=%f,s);参考代码参考代码5.2 5.2 三种循环结构语句三种循环结构语句 Page 15 5.2 5.2 三种循环结构语句三种循环结构语句 forfor循环的一般形式循环的一般形式循环的一般形式循环的一般形式for(for(表达式表达式表达式表达式1 1;表达式;表达式;表达式;表达式2 2;表达式;表达式;表达式;表达式3 3)循环体循环体循环体循环体;printf(“*”);printf(“*”);表达式表达式表达式表达式2 2 2 2为真?为真?为真?为真?forfor循环执行过程循环执行过程循环执行过程循环执行过程计算表达式计算表达式计算表达式计算表达式1 1 1 1真真退退退退 出出出出假假 void void main()main()int i;int i;for(i=0;i10;i+)for(i=0;i10;i+)执行循环体执行循环体执行循环体执行循环体计算表达式计算表达式计算表达式计算表达式3 3 3 3Page 16 5.2 5.2 三种循环结构语句三种循环结构语句 forfor循环的一般形式循环的一般形式循环的一般形式循环的一般形式for(for(表达式表达式表达式表达式1 1;表达式;表达式;表达式;表达式2 2;表达式;表达式;表达式;表达式3 3)循环体循环体循环体循环体;printf(“*”);printf(“*”);for(k=0;k10;k+)for(k=0;k=1;k-)for(k=10;k=1;k-)printf(“%d”,k);printf(“%d”,k);Page 17 例例5-4编程序,计算编程序,计算 s=1+2+3+100#include stdio.hvoid main()int i,sum=0;for(i=1;i=100;i+)sum=sum+i;printf(sum=%dn,sum);Page 18 for(for(表达式表达式表达式表达式1 1;表达式;表达式;表达式;表达式2 2;表达式;表达式;表达式;表达式3 3)循环体循环体循环体循环体;(1)for(1)for语句中的语句中的语句中的语句中的“表达式表达式表达式表达式1”1”可以省略,此时应在可以省略,此时应在可以省略,此时应在可以省略,此时应在forfor语句之前语句之前语句之前语句之前给循环变量赋初值。给循环变量赋初值。给循环变量赋初值。给循环变量赋初值。(2)(2)如果表达式如果表达式如果表达式如果表达式2 2省略,此时表达式省略,此时表达式省略,此时表达式省略,此时表达式2 2始终为真,循环无终止始终为真,循环无终止始终为真,循环无终止始终为真,循环无终止地进行下去。地进行下去。地进行下去。地进行下去。(3)(3)表达式表达式表达式表达式3 3也可以省略,但此时程序设计者应另外设法保证也可以省略,但此时程序设计者应另外设法保证也可以省略,但此时程序设计者应另外设法保证也可以省略,但此时程序设计者应另外设法保证循环能正常结束。循环能正常结束。循环能正常结束。循环能正常结束。(4)(4)可以省略表达式可以省略表达式可以省略表达式可以省略表达式1 1和表达式和表达式和表达式和表达式3 3,只有表达式,只有表达式,只有表达式,只有表达式2 2,即只给循环,即只给循环,即只给循环,即只给循环条件。条件。条件。条件。for(i=1;i=100;i+)sum=sum+i;说明:说明:Page 19 例例5-5编程序,计算编程序,计算 s=1+2+3+100#include void main()int s=0,i;i=1;/表达式表达式1移至移至for语句之前语句之前 for(;i=10;)s=s+i;i+;/表达式表达式3移至循环体末尾移至循环体末尾 printf(s=%d,s);i=1;while(i=10)s+=i;i+;Page 20 例例 编程计算编程计算n的阶乘。的阶乘。n!=1 2 3 (n-1)n思路:思路:类似于累加求和,每一次循环乘上一个数字,求和将类似于累加求和,每一次循环乘上一个数字,求和将和初始化为和初始化为0,这里应把积初始化为?,这里应把积初始化为?随堂练习随堂练习Page 21 n!=1 2 3 (n-1)n#include stdio.hvoid main()int n,i,p;scanf(%d,&n);p=1;for(i=1;i=n;i+)p=p*i;printf(%d,p);Page 22 5.3 5.3 循环结构控制语句循环结构控制语句 breakbreak语句语句语句语句 :结束循环结束循环结束循环结束循环 break语句可以使流程跳出语句可以使流程跳出switch结构,继续执行结构,继续执行switch语句下面的语句。语句下面的语句。break语句还可以用于跳出循环。语句还可以用于跳出循环。break作用使流程从循环体内跳出循环体,即提前结束作用使流程从循环体内跳出循环体,即提前结束循环。循环。break语句只能用于循环语句和语句只能用于循环语句和switch语句内,不能语句内,不能单独使用或用于其他语句中。单独使用或用于其他语句中。while(表达式表达式1)if(表达式表达式2)break;Page 23 5.3 5.3 循环结构控制语句循环结构控制语句 continuecontinue语句语句语句语句 :结束本次循环结束本次循环结束本次循环结束本次循环 ,即跳过本次循环下,即跳过本次循环下,即跳过本次循环下,即跳过本次循环下面尚未执行的语句,接着进行下一次循环。面尚未执行的语句,接着进行下一次循环。面尚未执行的语句,接着进行下一次循环。面尚未执行的语句,接着进行下一次循环。for(int k=1;k=50;k+)for(int k=1;k=50;k+)if(k%3=0&k%5=0)if(k%3=0&k%5=0)printf(%dn,k);printf(%dn,k);printf(*n);printf(*n);读程序写结果读程序写结果读程序写结果读程序写结果continuecontinue;break;break;Page 24 例例5-6编程序,编程序,输入若干字符,对输入的英文字母原样输出,其他输入若干字符,对输入的英文字母原样输出,其他字符不输出,直到输入回车键结束。字符不输出,直到输入回车键结束。Page 25#include void main()char ch;while(1)ch=getchar();if(ch=n)break;else if(ch=a&ch=A&ch=Z)putchar(ch);参考代码参考代码Page 26 5.4 5.4 循环的嵌套循环的嵌套 一个循环体内又包含另一个完整的循环结构,称为一个循环体内又包含另一个完整的循环结构,称为循环的循环的嵌套嵌套。while循环、循环、do-while循环和循环和for循环可以互相嵌套。循环可以互相嵌套。while()while()while()do while();for(;)for(;)Page 27 5.4 5.4 循环的嵌套循环的嵌套#include#include void main()void main()int i,j;int i,j;for(i=1;i=9;i+)for(i=1;i=9;i+)for(j=1;j=for(j=1;j=i i;j+);j+)printf(%d*%d=%d,i,j,i*j);printf(%d*%d=%d,i,j,i*j);printf(n);printf(n);读程序写结果读程序写结果读程序写结果读程序写结果Page 28 5.5 5.5 综合应用案例综合应用案例 例例5-8输入一行字符,分别统计其中英文字符、数字字符和其他字输入一行字符,分别统计其中英文字符、数字字符和其他字符的个数。符的个数。分析分析1、输入一行字符,字符的个数未定,可以用回车键作为输输入一行字符,字符的个数未定,可以用回车键作为输入结束的条件。入结束的条件。2、三个整型变量、三个整型变量char_num、int_num、other_num作为作为英文字符、数字字符和其他字符的计数器。英文字符、数字字符和其他字符的计数器。3、定义一个字符型变量、定义一个字符型变量ch保存从键盘输入的字符,当输保存从键盘输入的字符,当输入一个字符后判断该字符的类型,对相应的计数器加入一个字符后判断该字符的类型,对相应的计数器加1。Page 29#includevoid main()char ch;int char_num=0,int_num=0,other_num=0;while(ch=getchar()!=n)/回车键结束输入回车键结束输入 if(ch=A&ch=a&ch=0&ch=9)int_num+;else other_num+;printf(字母字母%d个个;n数字数字%d个个;n其它字符其它字符%d个个.n,char_num,int_num,other_num);参考代码参考代码Page 30 5.5 5.5 综合应用案例综合应用案例 例例5-9自幂数是指一个自幂数是指一个 n 位整数,它的每个位上的数字的位整数,它的每个位上的数字的 n 次幂之和次幂之和等于它本身。当等于它本身。当n为为4时,自幂数称为玫瑰花数,试编程输出时,自幂数称为玫瑰花数,试编程输出10009999范围内所有的玫瑰花数。(如范围内所有的玫瑰花数。(如1643)。分析分析 1、4位数中逐一查找。位数中逐一查找。2、分别取出个、十、白、千位,计算判断、分别取出个、十、白、千位,计算判断 Page 31#include void main()int i,n,a,b,c,d;for(i=1000;i=9999;i+)n=i;a=n%10;b=n/10%10;c=n/100%10;d=n/1000;if(a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d=n)printf(%6d,n);参考代码参考代码Page 32 中国古代数学家张丘建在他的中国古代数学家张丘建在他的算经算经中提出了著名的中提出了著名的“百百钱买百鸡问题钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?值钱一,百钱买百鸡,问翁、母、雏各几何?5 5元元 3 3元元 1 1元元5.5 5.5 综合应用案例综合应用案例 Page 33#include stdio.h#include stdio.h main()main()int a,b,c;/*aint a,b,c;/*a是公鸡数,是公鸡数,是公鸡数,是公鸡数,b b是母鸡数,是母鸡数,是母鸡数,是母鸡数,c c是小鸡数是小鸡数是小鸡数是小鸡数*/printf(cock,hen,chickn);printf(cock,hen,chickn);for(a=0;a=20;a+)for(a=0;a=20;a+)for(b=0;b=33;b+)for(b=0;b=33;b+)for(c=0;c=99;c+)for(c=0;c=99;c+)if(a+b+c=100&5*a+3*b+c/if(a+b+c=100&5*a+3*b+c/3.03.0=100)=100)printf(%d,%d ,%d n,a,b,c);printf(%d,%d ,%d n,a,b,c);参考代码参考代码Page 34#include stdio.h#include stdio.hvoid main()void main()int a,b,c;/*aint a,b,c;/*a是公鸡数,是公鸡数,是公鸡数,是公鸡数,b b是母鸡数,是母鸡数,是母鸡数,是母鸡数,c c是小鸡数是小鸡数是小鸡数是小鸡数*/printf(cock,hen,chickn);printf(cock,hen,chickn);for(a=0;a=20;a+)for(a=0;a=20;a+)for(b=0;b=33;b+)for(b=0;b=33;b+)c=100-a-b;c=100-a-b;if(5*a+3*b+c/3.0=100)if(5*a+3*b+c/3.0=100)printf(%d,%d ,%d n,a,b,c);printf(%d,%d ,%d n,a,b,c);参考代码参考代码Page 35 课程小结:我们学习了什么?课程小结:我们学习了什么?循环结构本质循环结构本质 三种循环结构三种循环结构 while()do while()for()循环控制语句循环控制语句 break continuePage 36 课程实验:课程实验:实验内容实验内容Page 37 课后作业课后作业Page 38 C