引例:求恰好使s=1+1/2+1/3+…+1/n的值大于10时n的值。vars:real;n:integer;{n分母}begins:=0;n:=0;whiles<=10do{当s的值还未超过10时}beginn:=n+1;{分母1}s:=s+1/n;{将下一项值累加到s}end;writeln(n);{输出结果}end.第一页,共三十二页。while循环当循环次数不能预先确定时,只能根据某一条件来决定是否进行循环时,用while语句实现。格式:while<布尔表达式>do<一条语句:循环体>;或:while<布尔表达式>dobegin<语句组:循环体>end;其意义为:当布尔表达式的值为true时,执行do后面的语句。循环体中必须有改变循环控制变量的语句,否则出现死循环。区别于for结构第二页,共三十二页。例1:求两个数a,b(<1000)的最小公倍数。样例:输入:203021输出:2260第三页,共三十二页。vara,b:integer;s:longint;beginreadln(a,b);s:=a;whilesmodb<>0dos:=s+a;writeln(s);end.最大公约数?第四页,共三十二页。例2、输入n(<1015),求他的各位数字之和.如:输入:1234输出:10第五页,共三十二页。varn:int64;s,t:integer;beginreadln(n);s:=0;whilen<>0dobegint:=nmod10;s:=s+t;n:=ndiv10;end;writeln(s);end.Int64:[-9*1018,9*1018][-9223372036854775808,9223372036854775807]第六页,共三十二页。For与while的区别与联系:1、for必须能预先确定循环次数。循环控制变量,每次自动加1,不能人为的改变。2、while可以不知道循环次数。在循环体内必须有修改循环控制变量的语句,否则死循环。循环控制变量的改变可以不是1。但必须是整数。3、能用for的一定能用while实现。第七页,共三十二页。例1、键入一个自然数N(<=106),求这个自然数的因数的个数S(包含1和n)。如:输入:6输出:4第八页,共三十二页。varn,I,s:longint;beginreadln(n);s:=0;fori:=1tondoifnmodi=0thens:=s+1;writeln(s);end.第九页,共三十二页。varn,i,s:longint;beginreadln(n);s:=0;i:=1;whilei<=ndobeginifnmodi=0thens:=s+1;i:=i+1;end;writeln(s);end.第十页,共三十二页。例2:求s=3+6+9+……+300的值。vari,s:integer;begins:=0;fori:=1to100dos:=s+3*i;writeln(s);end.第十一页,共三十二页。vari,s:integer;begins:=0;i:=0;whilei<=300dobegins:=s+i;i:=i+3;end;writeln(s);end.第十二页,共三十二页。二、循环结构的综合练习第十三页,共三十二页。1、陶陶摘苹果(NOIP2006p)(apple.pas/c/cpp)【问题描述】陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。第十四页,共三十二页。【输入】第1行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。第2行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。【输出】输出包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。【样例输入】110100200150140129134167198200111【样例输出】5第十五页,共三十二页。varh,x,sum,i:integer;beginsum:=0;readln(h);h:=h+30;fori:=1to10dobeginread(x);ifx<=htheninc(sum);end;writeln(sum);end.第十六页,共三十二页。2、灯的开关状态有N个灯放成一排,从1到N依次顺序编号,开始时全部打开。有N个人也从1到N依次编号。1号人将灯全部关闭,2号人将凡是编号为2的倍数的灯打开;3号人将凡是编号为3的倍数的灯作相反处理(该灯如为打开的,则将它关闭;如关闭的,则将它打开)。以后的人都和3号人一样,将凡是自己编号倍数的灯作相反处理。编程实现:第N个人操作后,按顺序输出灯的状态。(1-表示灯打开,0-表示灯关闭)输入:n(n<=100),灯的个数,输出:灯的状态,01序列,中间无空格。样例:输入:2输出:01第十七页,共三十二页。varn,m,i:integer;beginreadln(n);f...