《C语言-5-C循环结构 PPT课件》由会员分享,可在线阅读,更多相关《C语言-5-C循环结构 PPT课件(41页珍藏版)》请在金锄头文库上搜索。
1、问题的提出,程序设计: 求三个整数的和。 算法思想是引入三个整型变量a,b,c和一个和变量sum,表达式 sum=a+b+c表示三数之和; 求四个整数的和。 算法思想是引入四个整型变量a,b,c,d和一个和变量sum,表达式 sum=a+b+c+d表示三数之和; 若计算1到100的和,如何实现?,设想求1+2+100的方法?,结构化程序设计,循 环 结 构,C语言程序设计实现循环结构的语句: for循环 while循环 do-while循环,P113,for 循环语句,for(表达式1; 表达式2; 表达式3) 语句组 ,P118,循环体,初值,终值,增量,设置循环控制变量,给定初值,设定终值
2、条件(循环条件)以及循环控制变量的变化规律,由循环结构语句for控制执行循环体的次数。 语句组实现:“重复的工作”。,for(表达式1; 表达式2; 表达式3) 循环体 ,Y,N,for 循环语句,退出循环,执行后继语句,#include main() int i,sum=0; for(i=1;i=100;i+) sum=sum+i; printf(sum=%d,sum); ,作加时,和变量必须先赋初值。通常情况下赋 0 值。,for 循环语句,算法总结:求和(累加和),累加和的算法思想: sum=sum+a 和变量sum必须先赋值,通常情况下赋0值。也可视情况而定。 结构:循环结构,例.求2
3、00以内的奇数之和与偶数之和。,#include main() int i,sum1=0,sum2=0; for(i=1;i=200;i+) if(i%2=0) sum1+=i; else sum2+=i; printf(%d %d,sum1,sum2); ,例 求n!=1*2*3* *n,算法:累乘(求积),f=f*n;,注意:作累乘时,积变量必须先赋初值,通常赋1值。,#include main( ) int i ,n; long f=1; scanf(%d,for( ; ; ),i=1,i=n,i+,f=f*i;,注意: 作乘时,注意数的范围: 整型:-3276832767 若其值大于该
4、范围,可修改数据类型为长整型。,printf( %d != %ld,n,f); ,算法总结:求积(累积),累积的算法思想: f=f*a 积变量f必须先赋值,通常情况下赋1值。也可视情况而定。 结构:循环结构,友情提醒:考虑数据的溢出。,P129.6.8: 有一分数序列:,求这个数列前20项之和。,#include main( ) int n ; float a=2,b=1,t,sum=0;,for( ; ; ),n=1,n=20,n+, sum=sum+a/b; t=a; a=a+b; b=t; ,a:分子,b:分母 sum:和,printf(“ sum= %.2f”,sum); ,1、表达式
5、1,2,3可以是任意表达式。 2、表达式间用“;”相隔。表达式1,2,3都可以省略,但表达式2省略时,会造成死循环。当某一表达式省略时,分号“;”不可省略。,for 循环语句,P121,(1)省略表达式1,但必须在for之前给循环控制变量赋初值。否则会导致死循环。 i=1; for ( ;i=50 ;i+) sum=sum+i; ,for 循环语句,(2)省略表达式2,会导致死循环。在编写程序时一定要避免产生死循环。 for ( i=1; ;i+) sum=sum+i; ,for 循环语句,(3)省略表达式3,但必须在循环体内对循环控制变量重新赋值(增量),否则导致死循环。 for ( i=1
6、;i=50 ;) sum=sum+i; i+; ,for 循环语句,(4)同时省略表达式和表达式3,保证不产生死循环,须在循环体外对循环控制变量赋初值以及在循环体内对该变量重新赋值(增量)。 i=1; for (;i=50 ;) sum=sum+i; i+; ,for 循环语句,while 循环语句,while(条件表达式) 语句组 ,求解条件表达式的值,值为非0(条件为真)时,执行循环体,之后继续求解表达式的值,当值为0(条件为假)时退出循环,执行其后继语句。,循环体,P114,真(值为非零),假(值为零),while的后继语句,#include main() int m,n,b=0; m=
7、11; while(m!=0) n=m%2; m=m/2; b=b+n; printf(“%dn,b); ,3,while 循环语句,11,1,5,1,1,2,2,0,1,2,1,0,3,假,do_ while 循环语句,do 语句组 while(条件表达式);,循环体,P115,先执行循环体,然后求解条件表达式的值,若值为非0(条件为真),继续执行循环体,直至条件表达式的值为0(条件为假),退出循环,执行其后继语句。,真(值为非零),假(值为零),do-while的后继语句,do_ while 与while的区别,do 语句组 while(表达式);,while(表达式) 语句组 ,无分号,
8、必须有分号,无论条件是否成立,循环必执行一次。,最少是一次都不执行。,表达式可以是任意表达式。但其值只有两种:0值或非0值。 若语句只一条时,才能省略 。,#include #include main() double pi, sum=0; int f=1,n=1; while( fabs(1.0/n)=1e-6) sum=sum+f*1/n; n+=2; f=-f; pi=4*sum; printf(pi=%lf,pi); ,P124 例6.6:用 公式 求 的近似值,直到某一项的绝对值小于10-6为止。,#include #include main() double pi, sum=0;
9、int f=1,n=1; do sum=sum+f*1/n; n+=2; f=-f; while( fabs(1.0/n)=1e-6) ; pi=4*sum; printf(pi=%lf,pi); ,例:输入任意的正整数(一个不多于5位),求出它是几位数。,#include main( ) int i,n=0; long m; do printf(input m:n); scanf(%ld, ,若数超出范围,重新输入。,P112 5.7:输入任意的正整数(一个不多于5位),求出它是几位数;求它的逆序并输出。,#include main( ) int i,n=0; long m,k=0; do
10、printf(input m:n); scanf(%ld, ,P129 6.1 :求两个正整数的最大公约数,#include main() int m,n,r,t; do scanf(%d%d, ,欧几里得的辗转相除: 1、用两数中的小数去除大数,得到余数; 2、若余数1不为零,则用余数1去除小数,得到余数2; 3、若余数2还不为零,再以此余数2去除余数1,这样辗转相除,直到余数是零为止。 4、在最后一次相除所用的余数,即最后一个不为零的余数,就是所求两数的最大公约数。,辅助控制语句 break,break语句 功能:在循环语句和switch语句中,终止并跳出循环体或switch结构 用法:
11、break; 说明: break只能终止并跳出最近一层的结构 break只用于循环语句和switch语句,P122,辅助控制语句 continue,continue语句 功能:结束本次循环,跳过尚未执行的语句,进行下一次循环。 仅用于循环语句中。 用法: continue;,P123,例:阅读程序,写出程序的输出结果,#include main() int x,j=1; for(x=1;x10)break; if(x2!=0) x+=3; continue; x-=1; printf(x=%d,j=%dn,x,j); ,x=12,j=10,x j,1,for (x50),1,if (x10),
12、N,if (x%2!=0),Y,4,2,4,N,3,3,3,Y,6,4,6,N,5,5,5,Y,8,6,8,N,7,7,7,Y,10,8,10,N,9,9,9,Y,12,10,12,Y,#include main ( ) int i=0,j,k=19; do k-=3 ; if (k%5=0) i+ ; continue ; else if (k5) break ; i+; while(i=k-1); printf(i=%d,k=%dn,i,k);,例、读下列程序,写出其运行结果。,i=6,k=4,P126 例6.8:判断数m是否素数(质数)。,判断数m能否被除1和本身之外的任何数整除,若不能
13、则是素数,否则不是素数。,循环条件: 1)2 m-1; 2)2 sqrt(m); 3)2 m/2;,#include main() int m,i,k; scanf(%d, ,#include main( ) int i,a ; int flag=1; printf(Enter a Number :); scanf(%d, ,求素数,例:编程实现判断输入的数a是否为素数。当a为素数时,输出字符串YES,否则输出NO。 采用标识变量。 即在程序中,用变量flag来标志a是否是素数,若flag的值为“真”表示是素数,否则不是素数。,if(a%i=0) flag=0; else i+;,flag f
14、lag!=0 flag=1,循环嵌套-多重循环,一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,称为多重循环。,P121,Y,Y,N,N,for(表达式1;表达式2;表达式3) . . for(表达式1;表达式2;表达式3) 语句组; . . ,循环嵌套-多重循环,一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,称为多重循环。,#include main() int i,j,sum=0; for(i=1; i=2; i+) for(j=1; j=2; j+) sum+=i+j; printf(sum=%dn,sum); ,
15、sum=12,循环嵌套-多重循环,#include #define N 4 main( ) int i,j; for(i=1;i=N;i+) for(j=1;ji;j+) printf( ); printf(*); printf(n); ,* * * *,#include main() int i,j,k; for(i=1;i=1;i-) for(j=1;j14-i;j+) printf( ); for(k=1;k=2*i-1;k+) printf(*); printf(n); ,P130 6.14,#include main( ) int i,j,ok; for(j=101;j200;j+) i=2; ok=1; while( ok ,P127 例6.9 求100200间的所有素数,#include main() int j,i,k; for(j=101;jk) printf(%4d,j); ,#include stdio.h main() int j, i, sum=0; for(i=1;i=1000;i+) sum=0; for(j=1;ji;j+) if(i%j=0) sum=su