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