第四章 循环算法总结.doc

上传人:hs****ma 文档编号:544265900 上传时间:2023-11-10 格式:DOC 页数:9 大小:92.01KB
返回 下载 相关 举报
第四章 循环算法总结.doc_第1页
第1页 / 共9页
第四章 循环算法总结.doc_第2页
第2页 / 共9页
第四章 循环算法总结.doc_第3页
第3页 / 共9页
第四章 循环算法总结.doc_第4页
第4页 / 共9页
第四章 循环算法总结.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《第四章 循环算法总结.doc》由会员分享,可在线阅读,更多相关《第四章 循环算法总结.doc(9页珍藏版)》请在金锄头文库上搜索。

1、第四章 循环主要语法: while语句,for语句,do while语句,以及break与continue,具体语法看书或者课件主要思想:能循环执行的东西一定是重复的东西,所以重要的是找出步骤当中重复的地方例如 打印出一行 * ,则可以看成是重复打印*号五次,则重复的地方就在于打印*号,重复五次如何实现呢?基本思想是用一个变量控制,从一数到五则表示五次 i=1; while(i=5) printf(*); i+; 或者用for(i=1;i=5;i+)printf(*);注意的地方:while 以及for语句 执行循环体的时候默认只有一个语句,如果想让多句语句循环执行,则必须加变成复合语句本章主

2、要算法:1.迭代算法1. 累加题目:u s=1+2+3+.+100 可以看成是 +1 +2 +3 + +100所以重复的地方在于每次加上一个数,那每次加的数不一样我们可以用一个变量来表示,比如说i,则每次的动作就可以总结为+i,但是每次加完要去改变i的值,即i要自加1,至于累加则用累加器:sum=sum+ 则每次的动作可以总结为 sum=sum+i;一共累加100次则程序可以表达为 sum=0; for(i=1;i=100;i+)sum=sum+i;所以循环注意的三个地方:a) 循环体也就是重复的地方是什么b) 重复的次数也就是循环终止的条件c) 循环的初始值u s=2+22+222+2222

3、+.这道题目是上道题目的延伸,也是每次加上一个数,每次加的数不一样我们也可以用一个变量例如t来表示,则每次的累加可以表示为 sum=sum+t; 如果要累加n项,那么就是循环n次, 那么如果t=2,那下次要想再用t的变量来表示加上22,则它们之间的关系应该是t=t*10+2;所以循环里面要做的重复的事情是 每次进行累加,即 sum=sum+t; 累加完还要为下一次累加做准备,即是 t=t*10+2 sum=0;t=2for(i=1;i=n;i+) sum=sum+t;t=t*10+2;循环的初始值可以把第一次循环代进去得到,程序写完必须把第一次循环以及第二次循环跟最后一次循环执行一遍,看对不对

4、。u s=1+2!+3!+4!+.+n!此道题目也是累加,则也是sum=sum+t,那么每次累加的值不一样,则可以用t=t*i来表示,累加n项则是循环n遍 Sum=0;t=1; for(i=1;i=n;i+)sum=sum+t; t=t*(i+1);这道题目要注意的地方,t跟i有关系,所以如果是先累加再计算下一项的话,应该是t=t*(i+1);因为比如i=1时,要算的下一项是1*2,所以应该是t*2,也就是t*(i+1);所以当循环变量i与里面的累加项还有关系的时候要注意与i的关系,这个程序也可以改为 Sum=0;t=1; for(i=1;i=n;i+) t=t*i;sum=sum+t;自己考

5、虑下两个程序的差别,语句的顺序不一样所带来的影响。u s=1+x/1-x2/2!+x3/3!-.xn/n!前后两项之间的关系是 t=t*(-1)*x/i; sum=1;t=-1;for(i=1;i=n;i+) t=t*(-1)*x/isum=sum+t;或者 sum=1;t=x;for(i=1;i=1;i+)n=(n+1)*2;3. 整数逆序输出 :输入1234输出4321 要想逆序输出,则分析这道题目的算法,找出重复的地方: 1234%10 输出4 123%10 输出312%10 输出21%10 输出1则重复的地方在于 %10,每次被除的数不一样,可以用变量例如x来代替,那么前后两项之间的关

6、系则是 x=x/10;while(x!=0)printf(“%d”,x%10); x=x/10当x是个位数的时候应该是最后一次输出,那么输出之后还要执行x=x/10,所以x将会变成0停止循环,则循环的条件应该是x!=04. 辗转相除法求最大公约数和最小公倍数main() int p,r,n,m,t; scanf(%d,%d,&n,&m); if(nm) t=n;n=m;m=t; /*将n,m两个数中大的数放在n,小的数放在m*/ p=m*n; /*保留m*n的值*/ while(m!=0) r=n%m; n=m; m=r; /*求出最大公约数,放在变量n*/ printf(最大公约数:%dn,

7、n); printf(“最小公倍数:%dn”,p/n); /*最小公倍数两个数的积/最大公约数*/2.求特殊数 水仙花数 P129 习题6.6所有的三位数,则应该从100判断到999,每个数判断过去,每个数都是取出它的个、十、百位数,然后判断是否立方和等于本身 For(i=100;i=999;i+) a=i/100; /*百位*/ b=i%100/10 /*十位*/ c=i%10 /*个位*/ if(a*a*a+b*b*b+c*c*c=i) printf(“%d”,i) /*说明是水仙花数,则输出*/ 素数 P126 例题6.8素数,指的是只能被1或者自身整除的数,判断是否素数,也就是如果在2

8、到n-1之间找到一个数能被整除,那么这个数将不是素数,也就是从2一直判断到n-1,看能否被整除,如果中间有一个数能被整除,那么可以跳出循环,那么跳出来后我们判断i的值是多少,如果是i=n-1,那么说明是从break那里强制跳出,说明有一个数满足m%i = =0,则说明不是素数 for(i=2;i=n-1;i+) if(m%i= =0) break;if(i=n-1) printf(“是素数”)esle printf(“不是素数”) 完数 P129 习题6.71000以内的则应该从1判断到999,for(i=1;i=999;i+),For(i=1;i=999;i+)Sum=0;For(j=1;j

9、i;j+)If(i%j= =0) sum=sum+j; /* 对于每一个i判断只要能被i整除的都是它的因子,则把因子累加*/If(sum= =i) printf(“%d”,i);/* 如果所有因子的累加和等于自身,则是说明是完数,则输出*/3. 循环嵌套首先理解下列程序打印三行 * * *一共打印三行,每行都是打印出五个*号,然后再打印一个换行符For(i=1;i=3;i+)printf(“*”);printf(“n”);其中打印五个*号也可以用循环来做,即重复打印五个*号,则程序可以改为 for(i=1;i=3;i+) /*外层循环*/for(j=1;j=5;j+)/*内层循环*/print

10、f(“*”);printf(“n”);则对于每一次i的外层循环来说,j都从1循环到5,也就是每一次外层循环,内层循环都循环五次,也就是说printf(“*”);这条语句一共执行了5*3 ,15次;3. 如何打印 * * * * 一共四行,则外层循环控制行数 for(i=1;i=4;i+)花括号里面代表每一行怎么打的。对于每一行都是怎么实现的呢?应该这样分析:每一行都是先打出空格,再打印*号,再打印换行符,那么空格的个数是随着行数的增加而减少的,则跟行数的i的关系应该是-i,而*号是随着行数的增加而增加的,而且行数增加1,*号的个数是增加2,所以与i的关系应该是+2*i,先把跟i的关系写出来,其

11、中还有的常量将第一行代进去,即可以得到,例如,第一行时候i=1,那么空格数应该是三个,所以应该是j从1开始,到3结束,所以应该是4-1才是3,所以就是4-i,其他类推。for(i=1;i=4;i+) for(j=1;j=4-i;j+)printf(“ ”);for(k=1;k=2*i-1;k+)printf(“*”);printf(“n”);4. 穷举法例:百钱买百鸡.公鸡5元一只,母鸡3元一只,小鸡1元三只;一百元买一百只鸡,且公鸡,母鸡,小鸡都要有.有几种买法?将所有公鸡和母鸡还有小鸡的组合都尝试过去。三重循环,对于每一次i的循环,j都从1循环到33,对于每一次i与j,k都从3循环到100

12、,也就是把所有的公鸡。母鸡、小鸡的组合都组合过去了,最后判断如果同时满足鸡的数量是100只,钱的数量是100块,则说明这种组合是正确的。main() int i,j,k,n=0; for(i=1;i=19;i+) for(j=1;j=33;j+) for(k=3;k=100;k+=3) if(i+j+k= =100& i*5+j*3+k/3= =100) n+; printf(“i=%d,j=%d,k=%dn”,i,j,k); printf(“n n=%d”,n); 二重循环:main() int i,j,k,n=0; for(i=1;i=19;i+) for(j=1;j=(100-5*i)/3;j+) k=100-5*i-3*j; if(i+j+3*k=100) n+; printf(“i=%d,j=%d,k=%dn”,i,j,3*k); printf(“n n=%d”,n); 以上题目是典型代表,具体还是应该多看看第六章的课件,然后结合上机练习,所有的程序都应该先弄懂它的算法,然后把程序按照自己的思路上机实践一遍,如果只是看的话那么一切都是空的,重在实践,即程序把它弄懂之后应该独立的把程序自己写一遍,然后上机实现看看是否是对的,这样才能充分的理解!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号