资源预览内容
第1页 / 共29页
第2页 / 共29页
第3页 / 共29页
第4页 / 共29页
第5页 / 共29页
第6页 / 共29页
第7页 / 共29页
第8页 / 共29页
第9页 / 共29页
第10页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
题目及分析题目及分析例:求例:求例:求例:求 Fibonacci Fibonacci 数列的前数列的前数列的前数列的前4040个数。该数列满足递推公式个数。该数列满足递推公式个数。该数列满足递推公式个数。该数列满足递推公式f f1 1= 1 , f= 1 , f2 2 = 1 ; f = 1 ; fn n = f = fn-1 n-1 + f+ fn-2n-2分析:分析:分析:分析: 题目需要计算累加,应该用到循环语句。题目需要计算累加,应该用到循环语句。题目需要计算累加,应该用到循环语句。题目需要计算累加,应该用到循环语句。 怎么循环?我们把前怎么循环?我们把前怎么循环?我们把前怎么循环?我们把前4040个数的递推过程写一下:个数的递推过程写一下:个数的递推过程写一下:个数的递推过程写一下:f f1 1=1=1f f2 2=1=1f f3 3=f=f2 2+f+f1 1f f4 4=f=f3 3+f+f2 2f f5 5=f=f4 4+f+f3 3可见,在已知可见,在已知可见,在已知可见,在已知f1f1和和和和f2f2的时候,从第的时候,从第的时候,从第的时候,从第3 3个数据开始,个数据开始,个数据开始,个数据开始,每个数据都只与前面相邻的两个数据有关。每个数据都只与前面相邻的两个数据有关。每个数据都只与前面相邻的两个数据有关。每个数据都只与前面相邻的两个数据有关。比如:当根据比如:当根据比如:当根据比如:当根据 f1+f2=f3 f1+f2=f3 求出求出求出求出 f3 f3 后,再求后,再求后,再求后,再求 f4 f4 时,原来时,原来时,原来时,原来 f1 f1 变量中的数据不再有用,所以如果把变量中的数据不再有用,所以如果把变量中的数据不再有用,所以如果把变量中的数据不再有用,所以如果把 f2 f2 的值放到的值放到的值放到的值放到 f1 f1 中,把中,把中,把中,把 f3 f3 的值放到的值放到的值放到的值放到 f2 f2 中,那么中,那么中,那么中,那么计算计算计算计算 f4 f4 的表达式的表达式的表达式的表达式 f3+f2 f3+f2 就变成了就变成了就变成了就变成了 f2+f1 f2+f1 ,结结结结果又可以放到果又可以放到果又可以放到果又可以放到 f3 f3 中,依此类推就形成了循环。中,依此类推就形成了循环。中,依此类推就形成了循环。中,依此类推就形成了循环。算法算法1f f3 3 = f= f2 2 + f+ f1 1f f3 3 = f f2 2f f1 1(f(f3 3) )(f(f2 2) )+f f4 4 = f= f3 3 + f+ f2 2(f(f4 4) )f f3 3 = f f2 2f f1 1+f f5 5 = f= f4 4 + f+ f3 3(f(f4 4) )(f(f3 3) )(f(f5 5) )第第第第1 1次循环:次循环:次循环:次循环:第第第第2 2次循环:次循环:次循环:次循环:第第第第3 3次循环:次循环:次循环:次循环:算法算法算法算法1 1:每循环一次求出:每循环一次求出:每循环一次求出:每循环一次求出一个一个一个一个新的数据新的数据新的数据新的数据实现方案一实现方案一/* /* 算法算法算法算法1 1:循环一次输出一个数据:循环一次输出一个数据:循环一次输出一个数据:循环一次输出一个数据 * */ /#include #include intint main() main() long int f1 = 1 , f2 = 1, f3; int n=3; long int f1 = 1 , f2 = 1, f3; int n=3; printf(“%12ld%12ld”, f1 , f2 ); printf(“%12ld%12ld”, f1 , f2 ); while (n = 40) while (n = 40) f = f1 + f2 ; printf(“%12ld”, f); f = f1 + f2 ; printf(“%12ld”, f); if (n % 5 = 0) printf(“n”) ; if (n % 5 = 0) printf(“n”) ; f1 = f2 ; f2 = f ; f1 = f2 ; f2 = f ; n+ n+; return 0; return 0;每次循环求出一个新每次循环求出一个新每次循环求出一个新每次循环求出一个新的数据并输出的数据并输出的数据并输出的数据并输出使每行只输使每行只输使每行只输使每行只输出出出出5 5个数据个数据个数据个数据实现循环递推实现循环递推实现循环递推实现循环递推算法的关键算法的关键算法的关键算法的关键算法算法2算法算法算法算法2 2:每循环一次求出:每循环一次求出:每循环一次求出:每循环一次求出两个两个两个两个新的数据新的数据新的数据新的数据f f3 3 = f= f2 2 + f+ f1 1f f4 4 = f= f3 3 + f+ f2 2第第第第1 1步:求步:求步:求步:求f3f3第第第第2 2步:求步:求步:求步:求f4f4f f1 1 = f= f2 2 + f+ f1 1(f(f3 3) )f f2 2 = f= f1 1 + f+ f2 2(f(f4 4) )(f(f3 3) )一次循环:一次循环:一次循环:一次循环:每循环一次求出每循环一次求出每循环一次求出每循环一次求出两个两个两个两个新的数据新的数据新的数据新的数据实现方案二实现方案二/* /* 算法算法算法算法2 2:循环一次输出两个数据:循环一次输出两个数据:循环一次输出两个数据:循环一次输出两个数据 * */ /#include #include intint main() main() long int f1 = 1 , f2 = 1; int n=1; long int f1 = 1 , f2 = 1; int n=1; while while( n = 20 )n = 20 ) printf(“%12d%12d”, f1 , f2); printf(“%12d%12d”, f1 , f2); if(n % 2 = 0) printf(“n”) ; if(n % 2 = 0) printf(“n”) ; f1 = f2 + f1 ; f1 = f2 + f1 ; f2 = f1 + f2 ; f2 = f1 + f2 ; n+ n+; return 0;return 0; 循环变量的初值和循环变量的初值和循环变量的初值和循环变量的初值和终值不一样了终值不一样了终值不一样了终值不一样了一次输出两一次输出两一次输出两一次输出两个数据个数据个数据个数据每行输出每行输出每行输出每行输出4 4 个数据个数据个数据个数据技巧性比较强的循技巧性比较强的循技巧性比较强的循技巧性比较强的循环递推算法的实现环递推算法的实现环递推算法的实现环递推算法的实现int main( ) int sum=0, i; scanf(“%d”,&i); while(i=10) sum=sum+i; i+; printf(“sum= %d”,sum); return 0;运行时如下:运行时如下:1输出为?输出为?运行时如下:运行时如下:11输出为?输出为?sum=55sum=0读程序读程序int main( ) int sum=0, i; scanf(“%d”,&i); do sum=sum+i; i+; while(i=10); printf(“sum= %d”,sum); return 0;运行时如下:运行时如下:1输出为?输出为?运行时如下:运行时如下:11输出为?输出为?sum=55sum=11读程序读程序任务一:任务一:任务一:任务一: 分别用分别用分别用分别用whilewhile语句和语句和语句和语句和dowhiledowhile语句来编程实现计算语句来编程实现计算语句来编程实现计算语句来编程实现计算1!+2!+3!+n! 1!+2!+3!+n! ,n=10n=10intint main( ) main( ) intint i=1, s=1,sum=0; i=1, s=1,sum=0; do do s=s*i; s=s*i; sum= sum=sum+ssum+s; ; i+; i+; while(iwhile(i=10);=10); 循环控制(二)循环控制(二)for for 语句语句for 语句语句vv 语法:语法:语法:语法: for(for(表达式表达式表达式表达式1; 1; 表达式表达式表达式表达式2; 2; 表达式表达式表达式表达式3)3) 循环体语句循环体语句循环体语句循环体语句 vv 执行过程:执行过程:执行过程:执行过程: 首先求解首先求解首先求解首先求解表达式表达式表达式表达式1 1的具体值的具体值的具体值的具体值; 再求解再求解再求解再求解表达式表达式表达式表达式2 2的逻辑值。若值的逻辑值。若值的逻辑值。若值的逻辑值。若值为为为为“ “T”T”,则执行内嵌的则执行内嵌的则执行内嵌的则执行内嵌的循环体语句循环体语句循环体语句循环体语句;若值为若值为若值为若值为“ “F”F”,则循环结束,执行则循环结束,执行则循环结束,执行则循环结束,执行forfor语句下面的语句;语句下面的语句;语句下面的语句;语句下面的语句; 求解求解求解求解表达式表达式表达式表达式3 3的具体值的具体值的具体值的具体值; 返回第返回第返回第返回第步步步步循环体语句循环体语句循环体语句循环体语句T TF F表达式表达式表达式表达式2 2求解表达式求解表达式求解表达式求解表达式1 1求解表达式求解表达式求解表达式求解表达式3 3vv 通常:通常:通常:通常: 表达式表达式表达式表达式1 1 用于循环初始化用于循环初始化用于循环初始化用于循环初始化; 表达式表达式表达式表达式2 2 用于描述循环继续条件;用于描述循环继续条件;用于描述循环继续条件;用于描述循环继续条件; 表达式表达式表达式表达式3 3 的用于循环变量的增减,的用于循环变量的增减,的用于循环变量的增减,的用于循环变量的增减,从而使循环继续条件越来越不满足。从而使循环继续条件越来越不满足。从而使循环继续条件越来越不满足。从而使循环继续条件越来越不满足。for 循环控制语句:例循环控制语句:例例:编程计算例:编程计算例:编程计算例:编程计算123n 123n ,n=10n=10#include #include intint main( )main( ) long int prod = 1 ; int n = 1 ; long int prod = 1 ; int n = 1 ; whilewhile ( n = 10 ) ( n = 10 ) prod = prod * n ; n + ; prod = prod * n ; n + ; printf(“1*2*3*%d = %ldn”, n1, prod) ; printf(“1*2*3*%d = %ldn”, n1, prod) ; return 0; return 0; 用用用用whilewhile语句语句语句语句构成的循环构成的循环构成的循环构成的循环用用用用dowhiledowhile语句语句语句语句构成的循环构成的循环构成的循环构成的循环 do do prod = prod * n ; n + ; prod = prod * n ; n + ; whilewhile ( n = 10 ) ; ( n = 10 ) ;用用用用forfor语句语句语句语句构成的循环构成的循环构成的循环构成的循环 long int prod = 1 ; int n ; long int prod = 1 ; int n ; for (n = 1 ; n = 10 ; n +) for (n = 1 ; n = 10 ; n +) prod = prod * n ; prod = prod * n ; prod=prod*nprod=prod*nT TF Fn=10n=10n=1n=1n +n +for 语句的有关说明语句的有关说明for for 语句语法组成部分多,功能强大,使用非常灵活。语句语法组成部分多,功能强大,使用非常灵活。语句语法组成部分多,功能强大,使用非常灵活。语句语法组成部分多,功能强大,使用非常灵活。#include #include intint main( )main( ) long int prod = 1 ; int n ; long int prod = 1 ; int n ; for (n = 1 ; n = 10 ; n +) for (n = 1 ; n = 10 ; n +) prod = prod * n ; prod = prod * n ; printf(“1*2*3*%d = %ldn”, n1, prod) ; printf(“1*2*3*%d = %ldn”, n1, prod) ; return 0; return 0; 表达式表达式表达式表达式1 1可以省略,可以省略,可以省略,可以省略,循环初始化可以放循环初始化可以放循环初始化可以放循环初始化可以放在在在在forfor语句之前。语句之前。语句之前。语句之前。 long int prod = 1 ; long int prod = 1 ; int int n = 1 n = 1 ; ; for ( ; n = 10 ; n +) for ( ; n = 10 ; n +) prod = prod * n ; prod = prod * n ; 如果如果如果如果表达式表达式表达式表达式2 2也省也省也省也省略,则成了无限循略,则成了无限循略,则成了无限循略,则成了无限循环。显然这是不允环。显然这是不允环。显然这是不允环。显然这是不允许的。许的。许的。许的。 long int prod = 1 ; long int prod = 1 ; int int n = 1 n = 1 ; ; for ( ; ; n +) for ( ; ; n +) prod = prod * n ; prod = prod * n ; long int prod = 1 ; long int prod = 1 ; int int n = 1 n = 1 ; ; for ( ; n = 10 ; ) for ( ; n = 10 ; ) prod = prod * n ; prod = prod * n ; n + ;n + ; 表达式表达式表达式表达式3 3也可以省也可以省也可以省也可以省略,把它放回到循略,把它放回到循略,把它放回到循略,把它放回到循环体语句中。环体语句中。环体语句中。环体语句中。 long int prod = 1 ; long int prod = 1 ; int int n = 1 n = 1 ; ; for ( ; n = 10 ; for ( ; n = 10 ; prod = prod * n , prod = prod * n , n + )n + ) ; ; 循环体中的部分表达循环体中的部分表达循环体中的部分表达循环体中的部分表达式语句甚至也可以放式语句甚至也可以放式语句甚至也可以放式语句甚至也可以放到到到到表达式表达式表达式表达式3 3中。只要中。只要中。只要中。只要保证流程正确即可。保证流程正确即可。保证流程正确即可。保证流程正确即可。for for 循环常用于循环次数(循环变量循环常用于循环次数(循环变量循环常用于循环次数(循环变量循环常用于循环次数(循环变量的初值和终值)比较明确的问题中。的初值和终值)比较明确的问题中。的初值和终值)比较明确的问题中。的初值和终值)比较明确的问题中。for 语句:语句:例:课本例:课本例:课本例:课本p120 p120 习题习题习题习题6.36.3编程求编程求编程求编程求 S Sn n = a + aa + aaa + + aa(n = a + aa + aaa + + aa(n个个个个a)a)其中,其中,其中,其中,a a是一个是一个是一个是一个0 09 9的整数,的整数,的整数,的整数,n n是一个整数由键盘输入。是一个整数由键盘输入。是一个整数由键盘输入。是一个整数由键盘输入。思路:思路:思路:思路: 肯定是用循环来解决。为什么?因为每一个数据看上去都肯定是用循环来解决。为什么?因为每一个数据看上去都肯定是用循环来解决。为什么?因为每一个数据看上去都肯定是用循环来解决。为什么?因为每一个数据看上去都很有规律,且都是加法运算(即累加)。很有规律,且都是加法运算(即累加)。很有规律,且都是加法运算(即累加)。很有规律,且都是加法运算(即累加)。 如何寻找每一个数据产生的规律?如何寻找每一个数据产生的规律?如何寻找每一个数据产生的规律?如何寻找每一个数据产生的规律?考察某个数据和前一个数据的关系;考察某个数据和前一个数据的关系;考察某个数据和前一个数据的关系;考察某个数据和前一个数据的关系;或者考察某个数据与它在整个数据序列中所处位置的关系。或者考察某个数据与它在整个数据序列中所处位置的关系。或者考察某个数据与它在整个数据序列中所处位置的关系。或者考察某个数据与它在整个数据序列中所处位置的关系。#include #include intint main() main() int a=2 , n=0, i ; long int sum=0 , temp=0 ; int a=2 , n=0, i ; long int sum=0 , temp=0 ; printf(“Please input a integer: ”) ; printf(“Please input a integer: ”) ; scanf(“%d”, &n) ; scanf(“%d”, &n) ; for ( i = 1 ; i = n ; i + ) for ( i = 1 ; i = n ; i + ) temp = temp * 10 + a ; temp = temp * 10 + a ; sum = sum + temp; sum = sum + temp; printf(“Sn = %ldn”, sum); printf(“Sn = %ldn”, sum); return 0; return 0; 每个数据每个数据每个数据每个数据产生的规律产生的规律产生的规律产生的规律循环的嵌套循环的嵌套whilewhile () () whilewhile () () whilewhile () () do do while while (); (); whilewhile () () for for ( ; ; ) ( ; ; ) 循环嵌套循环嵌套vv在一个循环体内包含另一个循环控制语句称为在一个循环体内包含另一个循环控制语句称为在一个循环体内包含另一个循环控制语句称为在一个循环体内包含另一个循环控制语句称为“ “循环嵌套循环嵌套循环嵌套循环嵌套” ”。vv嵌套的层数不同的系统规定不同。一般来说,实际中最多就嵌套的层数不同的系统规定不同。一般来说,实际中最多就嵌套的层数不同的系统规定不同。一般来说,实际中最多就嵌套的层数不同的系统规定不同。一般来说,实际中最多就用到用到用到用到4 4层嵌套。最常用的是双重循环。层嵌套。最常用的是双重循环。层嵌套。最常用的是双重循环。层嵌套。最常用的是双重循环。dodo do do while while (); (); whilewhile () ; () ;dodo while while (); (); whilewhile () ; () ;dodo forfor ( ; ; ) ( ; ; ) whilewhile () ; () ;for( ; ; )for( ; ; ) do do while while (); (); for( ; ; )for( ; ; ) while while (); (); for( ; ; )for( ; ; ) forfor ( ; ; ) ( ; ; ) 循环嵌套:例循环嵌套:例6-5例:编程求例:编程求例:编程求例:编程求 n n!= 1! + 2! + 3! + + n != 1! + 2! + 3! + + n !其中,其中,其中,其中,n n是一个整数由键盘输入。是一个整数由键盘输入。是一个整数由键盘输入。是一个整数由键盘输入。思路:思路:思路:思路: 用两层循环用两层循环用两层循环用两层循环 内层循环求每一个数的阶乘,外层循环求累加值内层循环求每一个数的阶乘,外层循环求累加值内层循环求每一个数的阶乘,外层循环求累加值内层循环求每一个数的阶乘,外层循环求累加值#include #include intint main( ) main( ) int n = 10 , i , j ; long int sum = 0 , prod = 1 ; int n = 10 , i , j ; long int sum = 0 , prod = 1 ; forfor ( i = 1 ; i = n ; i + ) ( i = 1 ; i = n ; i + ) prod = 1 ; prod = 1 ; for for ( j = 1 ; j = i ; j + ) ( j = 1 ; j = i ; j + ) prod = prod * j ; prod = prod * j ; sum = sum + prod ; sum = sum + prod ; printf(“1!+2!+3!+%d! = %ldn”, n, sum); printf(“1!+2!+3!+%d! = %ldn”, n, sum); return 0 return 0; 外层循环变量把每次外层循环变量把每次外层循环变量把每次外层循环变量把每次由内层循环计算出的由内层循环计算出的由内层循环计算出的由内层循环计算出的阶乘值累加到变量阶乘值累加到变量阶乘值累加到变量阶乘值累加到变量sumsum中。中。中。中。内层循环用于求内层循环用于求内层循环用于求内层循环用于求外层循环变量外层循环变量外层循环变量外层循环变量 i i 当前值的阶乘。当前值的阶乘。当前值的阶乘。当前值的阶乘。实际上,这个问题用一层循环实际上,这个问题用一层循环实际上,这个问题用一层循环实际上,这个问题用一层循环就可以解决。就是利用关系式:就可以解决。就是利用关系式:就可以解决。就是利用关系式:就可以解决。就是利用关系式:n! = (n-1)! * nn! = (n-1)! * ninclude include intint main( ) main( ) int n = 10 , i ; int n = 10 , i ; long int sum = 0 , prod = 1 ; long int sum = 0 , prod = 1 ; forfor ( i = 1 ; i = n ; i + ) ( i = 1 ; i = n ; i + ) prod = prod * i ;prod = prod * i ; sum = sum + prod ; sum = sum + prod ; printf(“1!+2!+3!+ +%d ! = %ldn”, n, sum); printf(“1!+2!+3!+ +%d ! = %ldn”, n, sum); return 0; return 0; breakbreak语句和语句和continuecontinue语句语句break 语句语句vv 语法:语法:语法:语法:break ;break ;vv 用法:用在一个循环控制语句的循环体内。用法:用在一个循环控制语句的循环体内。用法:用在一个循环控制语句的循环体内。用法:用在一个循环控制语句的循环体内。vv 作用:作用:作用:作用:结束整个循环语句结束整个循环语句结束整个循环语句结束整个循环语句,接着执行该语句后面的语句。,接着执行该语句后面的语句。,接着执行该语句后面的语句。,接着执行该语句后面的语句。break break 语句语句语句语句只能只能只能只能用在用在用在用在switchswitch 语句和三种专门的语句和三种专门的语句和三种专门的语句和三种专门的循环控制即循环控制即循环控制即循环控制即whilewhile、dowhiledowhile和和和和forfor语句中。语句中。语句中。语句中。 用在用在用在用在switchswitch语句中作用是结束语句中作用是结束语句中作用是结束语句中作用是结束它所在的它所在的它所在的它所在的switchswitch语句的执行,接着执行语句的执行,接着执行语句的执行,接着执行语句的执行,接着执行switchswitch后面的语句。后面的语句。后面的语句。后面的语句。 用在用在用在用在循环体循环体循环体循环体中作用是结束中作用是结束中作用是结束中作用是结束它所在的它所在的它所在的它所在的循环语句的执循环语句的执循环语句的执循环语句的执行,接着执行该循环语句后面的语句。行,接着执行该循环语句后面的语句。行,接着执行该循环语句后面的语句。行,接着执行该循环语句后面的语句。注意:注意:注意:注意: continue 语句语句vv 语法:语法:语法:语法:continue ;continue ;vv 用法:用在一个循环控制语句的循环体内。用法:用在一个循环控制语句的循环体内。用法:用在一个循环控制语句的循环体内。用法:用在一个循环控制语句的循环体内。vv 作用:作用:作用:作用:结束本次循环的执行,结束本次循环的执行,结束本次循环的执行,结束本次循环的执行,即当遇到即当遇到即当遇到即当遇到continuecontinue语句时,语句时,语句时,语句时,就跳过该循环体中位于就跳过该循环体中位于就跳过该循环体中位于就跳过该循环体中位于continuecontinue后面的语句,接着进行下一后面的语句,接着进行下一后面的语句,接着进行下一后面的语句,接着进行下一次是否继续循环的判断。次是否继续循环的判断。次是否继续循环的判断。次是否继续循环的判断。continue continue 语句语句语句语句只能只能只能只能用在三种专门的循环控制语句用在三种专门的循环控制语句用在三种专门的循环控制语句用在三种专门的循环控制语句即即即即whilewhile、dowhiledowhile和和和和forfor语句中。语句中。语句中。语句中。注意:注意:注意:注意: break 语句和语句和continue 语句的区别语句的区别breakbreak语句语句语句语句:结束整个循环语句结束整个循环语句结束整个循环语句结束整个循环语句continuecontinue语句语句语句语句:结束本次循环的执行结束本次循环的执行结束本次循环的执行结束本次循环的执行T TF F表达式表达式表达式表达式1 1表达式表达式表达式表达式2 2whilewhile后的语句后的语句后的语句后的语句T TF Fbreakbreakwhile(while(表达式表达式表达式表达式1) 1) if(if(表达式表达式表达式表达式2)2) break; break; T TF F表达式表达式表达式表达式1 1表达式表达式表达式表达式2 2whilewhile后的语句后的语句后的语句后的语句T TF Fcontinuecontinuewhile(while(表达式表达式表达式表达式1) 1) if(if(表达式表达式表达式表达式2)2) continue; continue; #include #include intint main( )main( ) long int prod = 1 ; int n = 1 ; long int prod = 1 ; int n = 1 ; whilewhile ( 1 ) ( 1 ) prod = prod * n ; n + ; prod = prod * n ; n + ; if (n 10) if (n 10) breakbreak ; ; printf(“1*2*3*%d = %ldn”, n1, prod) ; printf(“1*2*3*%d = %ldn”, n1, prod) ; return 0; return 0; break 语句:语句:例:编程计算例:编程计算例:编程计算例:编程计算123n 123n ,n=10n=10用用用用常量常量常量常量 1 1 作判断表达式,好作判断表达式,好作判断表达式,好作判断表达式,好像形成了一个无限循环。像形成了一个无限循环。像形成了一个无限循环。像形成了一个无限循环。当当当当循环终止条件循环终止条件循环终止条件循环终止条件满足时,满足时,满足时,满足时,用用用用 break break 语句结束循环。语句结束循环。语句结束循环。语句结束循环。#include #include intint main( )main( ) int sum = 0 ; int n = 0 ; int sum = 0 ; int n = 0 ; whilewhile ( n = 100) ( n = 100) sum = sum + n ; sum = sum + n ; n += 2 ; n += 2 ; printf(“sum = %dn”, sum) ; printf(“sum = %dn”, sum) ; return 0; return 0; continue 语句语句例:编程计算例:编程计算例:编程计算例:编程计算1 1100100之间所有偶数的和。之间所有偶数的和。之间所有偶数的和。之间所有偶数的和。 for ( ; n = 100 ; ) for ( ; n = 100 ; ) sum = sum + n ; sum = sum + n ; n = n + 2 ; n = n + 2 ; 用用用用whilewhile语句语句语句语句实现实现实现实现用用用用forfor语句语句语句语句实现实现实现实现 for ( ; n = 100 ; n +) for ( ; n = 100 ; n +) if (n % 2 != 0) if (n % 2 != 0) continuecontinue ; ; sum = sum + n ; sum = sum + n ; 用用用用forfor语句和语句和语句和语句和continuecontinue实现实现实现实现程序举例程序举例题目及分析题目及分析例:求例:求例:求例:求 Fibonacci Fibonacci 数列的前数列的前数列的前数列的前4040个数。该数列满足递推公式个数。该数列满足递推公式个数。该数列满足递推公式个数。该数列满足递推公式f f1 1= 1 , f= 1 , f2 2 = 1 ; f = 1 ; fn n = f = fn-1 n-1 + f+ fn-2n-2分析:分析:分析:分析: 题目需要计算累加,应该用到循环语句。题目需要计算累加,应该用到循环语句。题目需要计算累加,应该用到循环语句。题目需要计算累加,应该用到循环语句。 用那种循环语句来控制呢?根据题目考虑用用那种循环语句来控制呢?根据题目考虑用用那种循环语句来控制呢?根据题目考虑用用那种循环语句来控制呢?根据题目考虑用forfor语句比较合适。语句比较合适。语句比较合适。语句比较合适。 怎么循环?我们把前怎么循环?我们把前怎么循环?我们把前怎么循环?我们把前4040个数的递推过程写一下:个数的递推过程写一下:个数的递推过程写一下:个数的递推过程写一下:f f1 1=1=1f f2 2=1=1f f3 3=f=f2 2+f+f1 1f f4 4=f=f3 3+f+f2 2f f5 5=f=f4 4+f+f3 3可见,在已知可见,在已知可见,在已知可见,在已知f1f1和和和和f2f2的时候,从第的时候,从第的时候,从第的时候,从第3 3个数据开始,个数据开始,个数据开始,个数据开始,每个数据都只与前面相邻的两个数据有关。每个数据都只与前面相邻的两个数据有关。每个数据都只与前面相邻的两个数据有关。每个数据都只与前面相邻的两个数据有关。比如:当根据比如:当根据比如:当根据比如:当根据 f1+f2=f3 f1+f2=f3 求出求出求出求出 f3 f3 后,再求后,再求后,再求后,再求 f4 f4 时,原来时,原来时,原来时,原来 f1 f1 变量中的数据不再有用,所以如果把变量中的数据不再有用,所以如果把变量中的数据不再有用,所以如果把变量中的数据不再有用,所以如果把 f2 f2 的值放到的值放到的值放到的值放到 f1 f1 中,把中,把中,把中,把 f3 f3 的值放到的值放到的值放到的值放到 f2 f2 中,那么中,那么中,那么中,那么计算计算计算计算 f4 f4 的表达式的表达式的表达式的表达式 f3+f2 f3+f2 就变成了就变成了就变成了就变成了 f2+f1 f2+f1 ,结结结结果又可以放到果又可以放到果又可以放到果又可以放到 f3 f3 中,依此类推就形成了循环。中,依此类推就形成了循环。中,依此类推就形成了循环。中,依此类推就形成了循环。算法算法1f f3 3 = f= f2 2 + f+ f1 1f f3 3 = f f2 2f f1 1(f(f3 3) )(f(f2 2) )+f f4 4 = f= f3 3 + f+ f2 2(f(f4 4) )f f3 3 = f f2 2f f1 1+f f5 5 = f= f4 4 + f+ f3 3(f(f4 4) )(f(f3 3) )(f(f5 5) )第第第第1 1次循环:次循环:次循环:次循环:第第第第2 2次循环:次循环:次循环:次循环:第第第第3 3次循环:次循环:次循环:次循环:算法算法算法算法1 1:每循环一次求出:每循环一次求出:每循环一次求出:每循环一次求出一个一个一个一个新的数据新的数据新的数据新的数据实现方案一实现方案一/* /* 算法算法算法算法1 1:循环一次输出一个数据:循环一次输出一个数据:循环一次输出一个数据:循环一次输出一个数据 * */ /#include #include intint main() main() long int f1 = 1 , f2 = 1, f3; int n; long int f1 = 1 , f2 = 1, f3; int n; printf(“%12d%12d”, f1 , f2 ); printf(“%12d%12d”, f1 , f2 ); for (n = 3; n = 40; n+) for (n = 3; n = 40; n+) f3 = f1 + f2 ; printf(“%12d”, f3); f3 = f1 + f2 ; printf(“%12d”, f3); if (n % 5 = 0) printf(“n”) ; if (n % 5 = 0) printf(“n”) ; f1 = f2 ; f2 = f3 ; f1 = f2 ; f2 = f3 ; return 0; return 0;每次循环求出一个新每次循环求出一个新每次循环求出一个新每次循环求出一个新的数据并输出的数据并输出的数据并输出的数据并输出使每行只输使每行只输使每行只输使每行只输出出出出5 5个数据个数据个数据个数据实现循环递推实现循环递推实现循环递推实现循环递推算法的关键算法的关键算法的关键算法的关键算法算法2算法算法算法算法2 2:每循环一次求出:每循环一次求出:每循环一次求出:每循环一次求出两个两个两个两个新的数据新的数据新的数据新的数据f f3 3 = f= f2 2 + f+ f1 1f f4 4 = f= f3 3 + f+ f2 2第第第第1 1步:求步:求步:求步:求f3f3第第第第2 2步:求步:求步:求步:求f4f4f f1 1 = f= f2 2 + f+ f1 1(f(f3 3) )f f2 2 = f= f1 1 + f+ f2 2(f(f4 4) )(f(f3 3) )一次循环:一次循环:一次循环:一次循环:每循环一次求出每循环一次求出每循环一次求出每循环一次求出两个两个两个两个新的数据新的数据新的数据新的数据实现方案二实现方案二/* /* 算法算法算法算法2 2:循环一次输出两个数据:循环一次输出两个数据:循环一次输出两个数据:循环一次输出两个数据 * */ /#include #include intint main() main() long int f1 = 1 , f2 = 1; int n; long int f1 = 1 , f2 = 1; int n; for (n = 1; n = 20; n + ) for (n = 1; n = 20; n + ) printf(“%12d%12d”, f1 , f2); printf(“%12d%12d”, f1 , f2); if(n % 2 = 0) printf(“n”) ; if(n % 2 = 0) printf(“n”) ; f1 = f2 + f1 ; f1 = f2 + f1 ; f2 = f1 + f2 ; f2 = f1 + f2 ; return 0;return 0; 循环变量的初值和循环变量的初值和循环变量的初值和循环变量的初值和终值不一样了终值不一样了终值不一样了终值不一样了一次输出两一次输出两一次输出两一次输出两个数据个数据个数据个数据每行输出每行输出每行输出每行输出4 4 个数据个数据个数据个数据技巧性比较强的循技巧性比较强的循技巧性比较强的循技巧性比较强的循环递推算法的实现环递推算法的实现环递推算法的实现环递推算法的实现作业:作业:1、随机输入一个整数,判断其是不是素数可多次判断,、随机输入一个整数,判断其是不是素数可多次判断,直至输入为直至输入为0,退出。,退出。2、四个学生上地理课,回答我国四大淡水湖大小的时候、四个学生上地理课,回答我国四大淡水湖大小的时候这样说:这样说:甲:最大洞庭湖,最小洪泽湖,鄱阳湖第三甲:最大洞庭湖,最小洪泽湖,鄱阳湖第三乙:最大洪泽湖,最小洞庭湖,鄱阳湖第二,太湖第三乙:最大洪泽湖,最小洞庭湖,鄱阳湖第二,太湖第三丙:最小洪泽湖,洞庭湖第三丙:最小洪泽湖,洞庭湖第三丁:最大鄱阳湖,最小太湖,洪泽湖第二,洞庭湖第三丁:最大鄱阳湖,最小太湖,洪泽湖第二,洞庭湖第三对于每个湖的大小,每个学生仅答对一个,请编程确定对于每个湖的大小,每个学生仅答对一个,请编程确定四个湖的大小。四个湖的大小。3、一球从、一球从100米高度自由落下,每次落地后反跳回原高米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第度的一半;再落下,求它在第10次落地时,共经过多次落地时,共经过多少米?第少米?第10次反弹多高?次反弹多高?
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号