1、for 循 环 语 句(1),一般形式:for (表达式1;表达式2;表达式3) 或 for (初始化表达式;(条件)表达式;修正表达式),如:s = 0;for (i = 1 ; i = 100 ; i + +)s = s + i ;,注意:此处的 ;是表达式的间隔符,for 循 环 实 例(1),S6_1.c 求1+2+3+4+99+100,main( ) int i ; double s ;s = 0;for ( i = 1 ; i = 100 ; i + + )s += i ;printf ( “ n %e ” , s ) ;,分析:1、第一个参与运算的数是12、共有100个数参与运算
2、3、每两个数之间相差值14、循环变量和运算数合二为一,且定义为int型,( 1 ) s = 0; i = 1;for ( ; i = 100 ; i + +)s = s + i ;,( 2 ) s = 0; for ( i = 1; ; i + +)s = s + i ;,( 3 ) s = 0; for ( i = 1; i = 100 ; ) s = s + i ; i + + ; ,无条件表达式 此处为死循环,for 循 环 语 句(2),无初始化表达式,无修正表达式,( 4 ) s = 0; i = 1; for ( ; i = 100 ; ) s = s + i ; i + + ;
3、,无初始化表达式 和修正表达式,for 循 环 实 例(2),main( ) char c ; for( c = getchar ( ) ; c ! = n ; c = getchar ( ) ; )putchar (c ) ;,S6_2.c 将输入的字符原样输出,分析:此处无需记录循环次数,不用专门定义循环控制变量可用特殊符号的输入来控制循环的结束;,for 循 环 实 例(3),main( ) int a11 ;int i , j , max ;printf( “ input 10 numbers: n ” ) ;for( i = 1 ; i 11 ; i + + )scanf( “ %d
4、 ” , ,S6_3.c 输入10个 数输出其中 最大者,main( ) int x , i , max ; printf( “ n input 10 number : ” ) ; scanf( “ %d, ” , ,for 循 环 实 例(4),Fibonacci兔子繁衍 (迭代)设有一对新生兔子,从第三个月开始它们每个月生一对兔子;按此规律,并假设没有兔子死亡,每个月的兔子总数是多少,一年后共有多少对兔子。 兔子繁衍的数量变化规律见 Page 117 表6.1,S6_4.c,f6= 8 ,f1=1 ( n = 1 ) f2=1 ( n = 2 ) f n = f n-1 + f n-2 (
5、 n = 3 ),实 例(1.1),f1 = 1 f2 = 1,f3 = 2 = f1 + f2,f4 = 3,f5 = 5,Fibonacci 数列,= f2 + f3,= f3 + f4,= f4 + f5,实 例(1.2),f1= 1 f2 = 1,f1 = 2 = f1 + f2,f2 = 3 = f2 + f1,f1 = 5 = f1 + f2,f1=f1+f2 ; f2=f2+f1;,共定义4个长整型变量 f1 , f2 ,f 和 一个int 变量 i 使用循环进行求和 使用选择结构对是否第三个月进行判断,f2 = 5 = f2 + f1,for循环实例,用for循环重新编写程序求
6、:(6_5.c)e11/1!+1/2!+1/n!,源程序(二): main() float t,e; int n; for(e=1,t=1,n=1;n=10;n+) t/=n;e+=t; printf(“n=%d,t=%f,e=%fn”,n,t,e);,源程序(一): main() float t=1,e=1; int n=1; while(n=10) t/=n;e+=t;n+; printf(“n=%d,t=%f,e=%fn”,n,t,);,for循环实例,编写求2n的程序(6_6.c)源程序:main()int n,i; long p; printf(“Enter n: “); scanf
7、(“%d”,循 环 的 嵌 套 1,定 义:一个循环体内包含另一个完整的循环结构 ;内嵌的循环中还可以嵌套循环,即多层循环三种循环可以进行本类循环的嵌套,也可以相互嵌套。,如:,(1),(2),while ( ) while( ) ,do do while( ); while( );,(5),(4),(6),嵌 套 2,( 3 ) for( ; ; ) for( ; ; ) ,while( ) do while( ); ,for( ; ; ) while( ) ,do for( ; ; ) while( );,循 环 嵌 套 的 程 序(1),S6_7.c 打印(直角)三角形的九九乘法表,i
8、: 从 1 到 9j : 从 1 到 9乘积:i * j,i=1 :j 从 1 到 9 s=i*j ;,for( i = 1; i = 9 ; i + +)for( j = 1 ; j = 9 ; j + + )s = i * j ;,i=9 :for( j=1;j=9;j+) s=i*j ;,i=2 :j 从 1 到 9 s=i*j ;,i=2 :for( j=1;j=9;j+) s=i*j ; ,循 环 嵌 套 的 程 序(2),S6_8.c 百鸡问题:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡。问鸡翁、母、雏各几何?,题目分析:设公鸡、母鸡和小鸡各为x,y,z只。因为一共
9、100钱,若全部买公鸡,最多买20只,显然x的变化范围在020之间,同理,y的变化范围在033之间,所得到的不定方程为:5x+3y+z/3=100,几 种 循 环 的 比 较,四种循环都可以用来处理同一问题,一般情况下可以互相 替代 (2) While和do-while循环,只在while后指定循环的条件,在循环体中应包含是循环趋于结束的语句for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中,因此for语句的功能更强,凡用while循环能完成的,用for循环都能实现 (3)用while和dowhile循环时,循环变量初始化的操作应在while和dow
10、hile语句之前完成,而for可以在表达式1中实现循环变量的初始化 (4)while循环。dowhile和for循环,可以用break语句跳出循环,用continue语句结束本次循环,而对用goto语句构成的循环则不能用break和continue来进行控制,break 语 句,作用:可以使流程跳出 switch 结构,继续执行switch 语 句下面的语句;还可以用来从 循环体内跳出,即 提前结束循环,接着执行循环下面的语句。 #define pi 3.1415926 main( ) int r; double area;for( r = 1: r 100 ) break ;printf(
11、“% f ”, area ) : ,S6_9.c 输出不大于100的面积,continue 语 句,作用:结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否循环的判定。,main( ) int n;for( n = 100 ; n = 200 ; n + + ) if( n %3 = = 0 )continue ;printf( “%d” , n ) ; ,S6_10.c 输出100200之间不能被3整除的数,循环嵌套实例,用逐个判别法求3500以内的所有素数(6-11)源程序:main()int i,j;for(i=3;i500;i+)j=2;while(ji,36块砖,36人搬;男生搬4块,女生搬3块,两个小孩抬一块。要求一次全搬完,问:男、女、小孩各需搬几块?(二重循环),思 考 题,