1 / 19

for 循 环 语 句( 1 )

for 循 环 语 句( 1 ). 求解表达式 1. 假. 表达式 2. 真. 语 句. 求解表达式 3. for 语句的 下一语句. 一般形式: for (表达式 1 ; 表达式 2 ; 表达式 3 ) ~ 或 for (初始化表达式 ; ( 条件 ) 表达式 ; 修正表达式) ~. 注意: 此处的 ; 是表达式的间隔符. 如: s = 0; for ( i = 1 ; i < = 100 ; i + + ) s = s + i ;. for 循 环 实 例( 1 ).

Download Presentation

for 循 环 语 句( 1 )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. for 循 环 语 句(1) 求解表达式1 假 表达式2 真 语 句 求解表达式3 for 语句的 下一语句 一般形式: for (表达式1;表达式2;表达式3)~ 或 for (初始化表达式;(条件)表达式;修正表达式)~ 注意: 此处的 ;是表达式的间隔符 如:s = 0; for (i = 1 ; i < = 100 ; i + +) s = s + i ;

  2. 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 ) ; }

  3. 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 + + ; } 无初始化表达式 和修正表达式

  4. for 循 环 实 例(2) S6_2.c 将输入的字符原样输出 分析:此处无需记录循环次数,不用专门定义循环控制变量 可用特殊符号的输入来控制循环的结束; main( ) {char c ; for( c = getchar ( ) ; c ! = ‘\n’ ; c = getchar ( ) ; ) putchar (c ) ; }

  5. 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个 数输出其中 最大者

  6. for 循 环 实 例(4) S6_4.c Fibonacci兔子繁衍 (迭代) 设有一对新生兔子,从第三个月开始它们每个月生一对兔子;按此规律,并假设没有兔子死亡,每个月的兔子总数是多少,一年后共有多少对兔子。 兔子繁衍的数量变化规律见 Page 117 表6.1

  7. 实 例(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 数列

  8. 实 例(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 使用循环进行求和 使用选择结构对是否第三个月进行判断

  9. 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);}

  10. 编写求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循环实例

  11. 循 环 的 嵌 套 1 定 义:一个循环体内包含另一个完整的循环结构 ; 内嵌的循环中还可以嵌套循环,即多层循环 三种循环可以进行本类循环的嵌套,也可以 相互嵌套。 如: while ( ~ ) { … while( ~ ) { … } … } do { … do { … }while( ~ ); … }while( ~ ); (1) (2)

  12. 嵌 套 2 ( 3 ) for( ~ ; ~ ; ~ ) { … for( ~ ; ~ ; ~ ) { … } … } (4) while( ~ ) { … do { … }while( ~ ); … } (5) (6) do { … for( ; ; ) { … } }while( ~ ); for( ~ ; ~ ; ~ ) { … while( ~ ) { … } … }

  13. 循 环 嵌 套 的 程 序(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 ;

  14. 循 环 嵌 套 的 程 序(2) S6_8.c 百鸡问题:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡。问鸡翁、母、雏各几何? 题目分析:设公鸡、母鸡和小鸡各为x,y,z只。因为一共100钱,若全部买公鸡,最多买20只,显然x的变化范围在0~20之间,同理,y的变化范围在0~33之间,所得到的不定方程为:5x+3y+z/3=100

  15. 几 种 循 环 的 比 较 • 四种循环都可以用来处理同一问题,一般情况下可以互相 替代 • (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来进行控制

  16. 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的面积

  17. continue 语 句 作用:结束本次循环,即跳过循环体中下面尚未执行的语句, 接着进行下一次是否循环的判定。 main( ) { int n; for( n = 100 ; n < = 200 ; n + + ) { if( n %3 = = 0 ) continue ; printf( “%d” , n ) ; } } S6_10.c 输出100~200之间不能被3整除的数

  18. 用逐个判别法求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++;}} 循环嵌套实例

  19. 思 考 题 36块砖,36人搬;男生搬4块,女生搬3块,两个小孩抬一块。要求一次全搬完,问:男、女、小孩各需搬几块?(二重循环)

More Related