for 循 环 语 句( 1 )

19
for 1 循循循循 一: for 循循循 1 循循循 2 循循循 3 ~ for 循循循循循循 ( 循循 ) 循循循循循循循循~ 求求求求求 1 求求求 2 求求求求求 3 for 求求求 求求 s = 0; for i = 1 ; i < = 100 ; i + + s = s + i ; 求求求求求 求求求求求求求求

Upload: aristotle-farley

Post on 03-Jan-2016

135 views

Category:

Documents


3 download

DESCRIPTION

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

TRANSCRIPT

Page 1: for    循  环  语  句( 1 )

for 循 环 语 句( 1)一般形式:

for (表达式 1 ;表达式 2 ;表达式 3 ) ~或 for (初始化表达式; ( 条件 ) 表达式;修正表达式) ~

求解表达式 1

表达式 2

语 句

求解表达式 3

for 语句的下一语句

真如: s = 0; for ( i = 1 ; i < = 100 ; i + + ) s = s + i ;

注意: 此处的 ;是表达式的间隔符

Page 2: for    循  环  语  句( 1 )

for 循 环 实 例( 1)

S6_1.c 求 1+2+3+4+…+99+100 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 、第一个参与运算的数是 1

2 、共有 100 个数参与运算 3 、每两个数之间相差值 1

4 、循环变量和运算数合二 为一,且定义为 int 型

Page 3: for    循  环  语  句( 1 )

( 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 + + ; }

无初始化表达式和修正表达式

Page 4: for    循  环  语  句( 1 )

for 循 环 实 例( 2)

main( )

{char c ;

for( c = getchar ( ) ; c ! = ‘\n’ ; c = getchar ( ) ; )

putchar (c ) ;

}

S6_2.c 将输入的字符原样输出 S6_2.c 将输入的字符原样输出

分析:此处无需记录循环次数,不用专门定义循环控制变量 可用特殊符号的输入来控制循环的结束;

Page 5: for    循  环  语  句( 1 )

for 循 环 实 例( 3)

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

S6_3.c 输入 10 个 数输出其中最大者

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 );

}

Page 6: for    循  环  语  句( 1 )

for 循 环 实 例( 4)

Fibonacci 兔子繁衍 (迭代) 设有一对新生兔子,从第三个月开始它们每个月生一对兔子;按此规律,并假设没有兔子死亡,每个月的兔子总数是多少,一年后共有多少对兔子。

兔子繁衍的数量变化规律见 Page 117 表 6.1

S6_4.c S6_4.c

Page 7: for    循  环  语  句( 1 )

f6= 8 ……

f1=1 ( n = 1 )f2=1 ( n = 2 )f n = f n-1 + f n-2 ( n > = 3 )

实 例( 1.1 )

f1 = 1 f2 = 1 f3 = 2 = f1 + f2

f4 = 3 f5 = 5

Fibonacci 数列

= f2 + f3 = f3 + f4

= f4 + f5

Page 8: for    循  环  语  句( 1 )

实 例( 1.2 )

f1= 1 f2 = 1

f1 = 2 = f1 + f2 f2 = 3 = f2 + f1

f1 = 5 = f1 + f2f1=f1+f2 ;f2=f2+f1;

共定义 4 个长整型变量 f1 , f2 ,f 和 一个 int 变量 i 使用循环进行求和使用选择结构对是否第三个月进行判断

f2 = 5 = f2 + f1

Page 9: for    循  环  语  句( 1 )

for 循环实例

• 用 for 循环重新编写程序求: (6_5.c)

e = 1 + 1/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=%f\n”,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=%f\n”,n,t,);}

Page 10: for    循  环  语  句( 1 )

for 循环实例

• 编写求 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);

}

Page 11: for    循  环  语  句( 1 )

循 环 的 嵌 套 1

定 义:一个循环体内包含另一个完整的循环结构 ; 内嵌的循环中还可以嵌套循环,即多层循环 三种循环可以进行本类循环的嵌套,也可以 相互嵌套。

如:( 1 ) ( 2 ) while ( ~ )

{ …

while( ~ )

{ … }

}

do

{ …

do

{ … }while( ~ );

}while( ~ ) ;

Page 12: for    循  环  语  句( 1 )

( 5 )

( 4 )

( 6 )

嵌 套 2( 3 ) for( ~ ; ~ ; ~ ) { … for( ~ ; ~ ; ~ ) { … } … }

while( ~ ){ … do { … }while( ~ ); …}

for( ~ ; ~ ; ~ ){ … while( ~ ) { … } …}

do{ … for( ; ; ) { … }}while( ~ );

Page 13: for    循  环  语  句( 1 )

循 环 嵌 套 的 程 序( 1)

S6_7.c 打印(直角)三角形的九九乘法表S6_7.c 打印(直角)三角形的九九乘法表

i : 从 1 到 9 j : 从 1 到 9 乘积: i * j

i : 从 1 到 9 j : 从 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 ;

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 ;……

Page 14: for    循  环  语  句( 1 )

循 环 嵌 套 的 程 序( 2)

S6_8.c 百鸡问题:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡。问鸡翁、母、雏各几何?

S6_8.c 百鸡问题:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡。问鸡翁、母、雏各几何?

题目分析:设公鸡、母鸡和小鸡各为 x , y , z只。因为一共 100 钱,若全部买公鸡,最多买20 只,显然 x 的变化范围在 0 ~ 20 之间,同理, y 的变化范围在 0 ~ 33 之间,所得到的不定方程为: 5x+3y+z/3=100

Page 15: for    循  环  语  句( 1 )

几 种 循 环 的 比 较

(1)四种循环都可以用来处理同一问题,一般情况下可以互相 替代

(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 来进行控制

Page 16: for    循  环  语  句( 1 )

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 的面积 S6_9.c 输出不大于 100 的面积

Page 17: for    循  环  语  句( 1 )

continue 语 句

作用:结束本次循环,即跳过循环体中下面尚未执行的语句, 接着进行下一次是否循环的判定。

main( ){ int n; for( n = 100 ; n < = 200 ; n + + ) { if( n %3 = = 0 ) continue ; printf( “%d” , n ) ; }}

S6_10.c 输出 100 ~ 200 之间不能被 3整除的数 S6_10.c 输出 100 ~ 200 之间不能被 3整除的数

Page 18: for    循  环  语  句( 1 )

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

Page 19: for    循  环  语  句( 1 )

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

思 考 题