您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 2017培训第03课1循环结构
Day3循环结构对于计算机,如果来说顺序结构是自动运行的可行性,分支结构是解决问题逻辑判断所必需。那么真正是它走向实际应用的,应该就是循环结构。让程序以最少的指令重复最多执行大量而繁琐的功能。让计算机真正发挥其功能。for循环若要打印1,2,3,。。。,10,每个占用一行。那么程序很容易写出来,10行就ok。或者一行也行。但若把问题放大,从10改为100,甚至是1000乃至更多。那怎么办呢?这时候我们就需要引入循环。格式说明:for(初始化;条件;调整)循环体;for(初始化;条件;调整){循环体;}打印1,2,3,。。。,n,每个占用一行。#includecstdiointmain(){inti,n;scanf(%d,&n);for(i=1;i=n;i++)printf(%d\n,i);return0;}这个程序,依次让i等于1,2,3,。。。,n,并且每次都执行一次printf(%d\n,i);调试观察变化。printf(“%d\n”,i);分别改成printf(“%d\n”,i*i);s=s+i;#includecstdiointmain(){inti,n,s=0;scanf(%d,&n);for(i=1;i=n;i++)s=s+i;printf(%d\n,s);return0;}应用1、输出100以内的所有偶数;2、分别计算1~100中的偶数和奇数之和;3、已知n个人的身高值中,求出其中的最大值;4、Fibonacci数列是一个特殊的数列:数列的第一项和第二项分别为0和1,从第三项开始,每一项是其前面两项之和。即0,1,1,2,3,5,8,……请编程输出该数列的前40项(每十项一行,每两项之间用空格分隔)。while循环写出下面程序的运行结果:intmain(){inti=1;while(i=5){couti;i++;}return0;}格式1:while(表达式)语句;格式2:while(表达式){语句1;语句2;......}改写程序#includecstdiointmain(){inti,n,s=0;scanf(%d,&n);for(i=1;i=n;i++)s=s+i;printf(%d\n,s);return0;}while循环例:考试结束后,老师想计算全体学生的平均分,你能帮助老师吗?现在无法知道参考人数,但是知道参加考试的人都不是0分。所以,提供给你的若干个考试成绩,以0作为计算的结束标志。分析计算平均分,需要知道总分和总人数。所以,本问题转化为先计算总分和总人数。我们用变量tot存放总分,pep来存放人数。现在要做的就是:每读入个非0的成绩,就将其加入tot,并且将pep加1。这个读成绩、累加、计数的过程一直重复到读入的成绩为0为止。intmain(){floatscore,tot=0;intpep=0;cinscore;while(score!=0){pep++;tot+=score;cinscore;}couttot/pependl;return0;}功能当表达式的值非0时,不断地执行循环体中的语句。所以,用while循环语句实现的循环被称为“当型循环”。“死循环”“死循环”例输入一个正整数,输出其位数。分析:当输入的正整数不是一位数时,我们要用累计的方法完成位数统计:设定计数器num,取出正整数的个位数字,num加1,从正整数中去掉个位数字,对剩余数位数字所组成的新数重复计数。这个计数的过程是一个当型循环,可以用while语句来解决。例:在银行取款时,我们需要输入密码(由六位数字组成)。密码正确,才可以进行取款操作;若连续三次输入密码错误,就会冻结帐号。现在,请你编写一个程序,模拟输入密码的过程。输入格式:每次输入六位数字输出格式:给出提示信息:正确、错误、冻结分析:对于取款用户,做的就是反复输入六位数字的操作。每输入一次密码,可能有三种情况:(1)输入错误,但输入不超过三次,输出“错误”。(2)错误输入超过三次,退出循环,输出“冻结”。(3)输入未超过三次,密码正确,退出循环,输出“正确”。综上,我们可以设置循环的条件为:输入次数不超过三次且输入不正确。例判断给定正整数n(保证在正整数范围内)是否为质数,是,则输出Yes,否则,输出No。分析:根据数学知识,质数是这么约定的:除了1和它本身不再有其他约数的数,就是质数。因此,我们可以从除数为2开始试除,除数没有超过n-1并且没有出现整除,就将除数加1,反复试除。在重复的过程中,一旦出现整除现象,那么n一定就是质数。重复的条件:没出现整除并且除数未超过n-1。例输入任意两个自然数,求它们的最大公约数。方法1:求任意两个自然数a和b的公约数,可以想到其最大的可能就是两个数中的较小者min,最小的可能是1,所以,可以设最大公约数gcd从min开始进行判断,若gcd1并且没有同时被a和b整除,就将gcd-1,重复判断是否整除。方法2:这里,我们来学习一个数学技巧---辗转相除法。辗转相除法即欧几里德算法。对于任意两个自然数a和b,如果q和r是a除以b的商和余数,那么a和b的最大公约数等于b的r的最大公约数。根据辗转相除法的思想,求解a和b的最大公约数,就是一个重复做除法的过程。具体的求解过程描述如下:(1)a/b=q......r1;(2)若r1=0,则a和b的最大公约数为b;(3)若r1!=0,则继续做除法:b/r1=q.....r2;(4)若r2=0,则a和b的最大公约数为r1;(5)若r2!=0,则继续做除法:r1/r2=q.....r3;(6)如此重复下去,直到出现整除为止。余数为0时的除数就是a和b最大公约数。Do-while例:对于给定的自然数n,求使1+2+3+4+5+......+i=n成立的最小i值。分析:这个题目的实质是对一个有规律的数值序列求和。但是,数值序列的个数不能直接确定,我们需要以序列的值作为结束的条件。因此,我们能做的只是不断地累加,直到序列之和=n为止。格式1:do语句;while(条件表达式);格式2:do{语句1;语句2;......while(条件表达式);改写程序#includecstdiointmain(){inti,n,s=0;scanf(%d,&n);for(i=1;i=n;i++)s=s+i;printf(%d\n,s);return0;}功能重复执行循环体,直到条件表达式的值为0。与while循环相比,do-while循环是先执行循环体,后判断条件表达式的当型循环。练习1、针对计算机随机产生的两个三位数字,用户计算并输入其和,直到计算正确,输出所用的次数。2、对于给定的任意正整数,将其各个数位上的数字分离出来,并倒序输出。例如,输入123,则输出321。3、计算与任意输入的十进制正整数等值的二进制数共有几位数字。
本文标题:2017培训第03课1循环结构
链接地址:https://www.777doc.com/doc-3591465 .html