收藏 分享(赏)

第四章 循环算法总结.doc

上传人:tkhy51908 文档编号:6994972 上传时间:2019-04-29 格式:DOC 页数:9 大小:92KB
下载 相关 举报
第四章 循环算法总结.doc_第1页
第1页 / 共9页
第四章 循环算法总结.doc_第2页
第2页 / 共9页
第四章 循环算法总结.doc_第3页
第3页 / 共9页
第四章 循环算法总结.doc_第4页
第4页 / 共9页
第四章 循环算法总结.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、第四章 循环主要语法: while 语句,for 语句,do while 语句,以及 break 与 continue,具体语法看书或者课件主要思想:能循环执行的东西一定是重复的东西,所以重要的是找出步骤当中重复的地方例如 打印出一行 * ,则可以看成是重复打印*号五次,则重复的地方就在于打印*号,重复五次如何实现呢?基本思想是用一个变量控制,从一数到五则表示五次i=1;while(i=1;i+)n=(n+1)*2;3. 整数逆序输出 :输入 1234 输出 4321要想逆序输出,则分析这道题目的算法,找出重复的地方: 1234%10 输出 4123%10 输出 312%10 输出 21%10

2、 输出 1则重复的地方在于 %10,每次被除的数不一样,可以用变量例如 x 来代替,那么前后两项之间的关系则是 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“,if(nm) t=n;n=m;m=t; /*将 n,m 两个数中大的数放在 n,小的数放在 m*/p=m*n; /*保留 m*n 的值*/while(m!

3、=0) r=n%m; n=m; m=r; /*求出最大公约数,放在变量 n*/printf(“最大公约数:%dn“,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) /*说明是水

4、仙花数,则输出*/ 素数 P126 例题 6.8素数,指的是只能被 1 或者自身整除的数,判断是否素数,也就是如果在 2 到 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

5、.71000 以内的则应该从 1 判断到 999,for(i=1;i=999;i+),For(i=1;i=999;i+)Sum=0;For(j=1;ji;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”);其中打印五个*号也可以用

6、循环来做,即重复打印五个*号,则程序可以改为for(i=1;i=3;i+) /*外层循环 */for(j=1;j=5;j+)/*内层循环*/printf(“*”);printf(“n”);则对于每一次 i 的外层循环来说, j 都从 1 循环到 5,也就是每一次外层循环,内层循环都循环五次,也就是说 printf(“*”);这条语句一共执行了 5*3 ,15 次;3. 如何打印*一共四行,则外层循环控制行数 for(i=1;i=4;i+)花括号里面代表每一行怎么打的。对于每一行都是怎么实现的呢?应该这样分析:每一行都是先打出空格,再打印*号,再打印换行符,那么空格的个数是随着行数的增加而减少的

7、,则跟行数的 i 的关系应该是-i,而*号是随着行数的增加而增加的,而且行数增加 1,*号的个数是增加 2,所以与 i 的关系应该是+2*i,先把跟 i 的关系写出来,其中还有的常量将第一行代进去,即可以得到,例如,第一行时候 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 元一只,小鸡

8、 1 元三只;一百元买一百只鸡,且公鸡,母鸡,小鸡都要有.有几种买法?将所有公鸡和母鸡还有小鸡的组合都尝试过去。三重循环,对于每一次 i 的循环, j 都从 1 循环到 33,对于每一次 i 与 j,k 都从 3 循环到100,也就是把所有的公鸡。母鸡、小鸡的组合都组合过去了,最后判断如果同时满足鸡的数量是 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 printf(“i=%d,j=%d,k=%dn”,i,

9、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); 以上题目是典型代表,具体还是应该多看看第六章的课件,然后结合上机练习,所有的程序都应该先弄懂它的算法,然后把程序按照自己的思路上机实践一遍,如果只是看的话那么一切都是空的,重在实践,即程序把它弄懂之后应该独立的把程序自己写一遍,然后上机实现

10、看看是否是对的,这样才能充分的理解!练习与答案1. 用循环实现 1+2+3+1000,要求用 while,do while ,for 语句分别实现main()long i,sum=0;for(i=1;i=1000;i+)sum=sum+i;printf(“%ld“,sum);main()long i=1,sum=0;while(i=1000)sum=sum+i;i+;printf(“%ld“,sum);2. 思考如何实现 1+3+5+999main()long i,sum=0;for(i=1;i=999;i=i+2)sum=sum+i;printf(“%ld“,sum);3 计算 s=1+2!

11、+3!+4!+n! (测试数据,如果输入 n=5,sum 应该等于 153)main()long n,i,sum=0,t=1;scanf(“%ld“,for(i=1;i=n;i+) t=t*i;sum=sum+t;printf(“%ld“,sum);4.计算 s=1+x/1!-x2/2!+x3/3!-x4/4!xn/n! (测试数据,如果给 x 赋值 5,n 赋值5,则结果应该为 14.33333)main()long n,i,x,sum=1,t=-1;scanf(“%ld%ld“,for(i=1;i=n;i+) t=t*(-1)*x/i;sum=sum+t;printf(“%ld“,sum)

12、;5.甲每天买苹果,每个苹果五毛钱,第一天买 2 个苹果,第二天买了第一天的两倍少一个,以此类推,问第 n 天买了多少个苹果,要花多少钱(测试数据:n=8,结果是 129 个苹果,花了 64.5 块钱)main()long t;int n,i;scanf(“%d“,for(i=2;i=n;i+)t=t*2-1;printf(“%ld“,t);6.输入一个整数,要求逆序输出该数,并求出它们的和(测试数据输入 1234,能输出 4321,并输出 sum=10)main() int x;scanf(“%d”,while(x!=0)printf(“%d”,x%10);x=x/10;7. 在屏幕上输出以

13、下图形:* *main() int i,j,k;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”);for(i=1;i=3;i+)for(j=1;j=i;j+)printf(“ “);for(k=1;k=7-2*i;k+)printf(“*“);printf(“n“);8:百钱买百鸡.公鸡 5 元一只,母鸡 3 元一只,小鸡 1 元三只;一百元买一百只鸡,且公鸡,母鸡,小鸡都要有.有几种买法?并输出对应的公鸡,母鸡和小鸡数(正确答案:三种买法 )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);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报