小树快长高ACM--4287TimeLimit:1000msMemoryLimit:65536KiBSubmitStatisticProblemDescription小明在植树节种了一棵小树,小明非常关心小树,每天都给小树浇水,盼望着小树快快长高。他知道小树现在有ncm,每天长高kcm,他想知道多少天小树可以长到mcm。Input?int n,m,k,t=0;?0400scanf("%d%d%d",&n,&m,&k);输入三个整数nmk。(0<=n<=10000,0<=m<=10000,0<=k<=10000)while (n<m)Outputn=n+k;输出一个整数,即需要的天数t++;SampleInputprintf("%d/n",t):1002005SampleOutput20
ACM-4287 ① int n,m,k,t=0; ② scanf(" %d%d%d",&n,&m,&k); ③ while (n<m) ④ { n=n+k; ⑤ t++; ⑥ } ⑦ printf("%d\n",t);
2、如何终止while循环-----改变循环条件例2:1+2+3+4+5代码1:死循环!1inti=1,s=Inti=1,s=0;2while (i<= 5);while (i<=)8④s=s+i;s=s+i;X++i;++i;55printf("s=%d",s);printf("s=%d",s);代码4:代码3:Q①inti=1,s=0;int i=5s=0;22while (i<= 5)while(i>=1)33{ s=s+ i; ++i;)(s=s+i, --printf("s=%d",s);printf("s=%d",s);结论:要正确设计循环体。在循环体中,必须让循环变量朝着正确的方向变化,循环才能正常结束
2、如何终止 while循环 -改变循环条件 例2:1+2+3+4+5 结论:要正确设计循环体。在循环体中,必须让循环变量朝着正 确的方向变化,循环才能正常结束。 代码2: ① Int i = 1,s = 0; ② while ( i<= 5); ③ s = s + i; ④ ++i; ⑤ printf("s=%d" ,s); 代码3: ① int i = 1,s = 0; ② while ( i<= 5) ③ { s = s + i; ++i;} ④ printf("s=%d" ,s); 代码1: ① int i = 1,s = 0; ② while ( i<= 5) ③ s = s + i; ④ ++i; ⑤ printf("s=%d" ,s); 代码4: ① int i = 5,s = 0; ② while ( i>=1) ③ { s = s + i; -i;} ④ printf("s=%d" ,s); 死循环! √ √ × ×
循环小结发现重复性动作到写好一个循环结构通常包括:循环中涉及哪些变量?循环开始前应该赋给它们什么初值?循环体中应该如何修改它们?在什么情况下应该继续(或应该终止)循环?循环终止后如何得到所需要的结果?S循环设计四要素:循环变量的初始化;循环条件的设置;循环体;循环控制变量的改变
循 环 小 结 • 发现重复性动作到写好一个循环结构通常包括: ① 循环中涉及哪些变量? ② 循环开始前应该赋给它们什么初值? ③ 循环体中应该如何修改它们? ④ 在什么情况下应该继续(或应该终止)循环? ⑤ 循环终止后如何得到所需要的结果? 循环设计四要素: ① 循环变量的初始化; ② 循环条件的设置; ③ 循环体; ④ 循环控制变量的改变
3、while循环应用举例例3:输入一批整数,以0结束,求最大、和、平均。算法分析:①整数的个数不确定、找最#include<stdio.h>②int main()大一打播台③ int x,max,n=;doubles=0;s=0,n=0;④scanf("%d",&x);l/输入第一个数22输入第一个数x?while (x!=0)3)若x!=01if(n==0)max=x;Tif(n==0)max=x;1/给max赋初值else8elseif(x>max)max=x;?(if (max<x)max=x;}s=s+x;n++;S=s+x;n++;scanf("%d",&x);//输入下一个数①7输入下一个数×,车转到3)?print("%d %if %ifin",max,s,s/n);输出max、S、s/n?80return O;907060390300.00000075.000000
3、while循环应用举例 例3:输入一批整数,以0结束,求最大、和、平均。 ① #include <stdio.h> ② int main() ③ { int x,max,n=0; double s=0; ④ scanf("%d",&x); //输入第一个数 ⑤ while (x!=0) ⑥ { ⑦ if (n==0) max=x; //给max赋初值 ⑧ else if (x>max) max=x; ⑨ s=s+x; n++; ⑩ scanf("%d",&x); //输入下一个数 ⑪ } ⑫ printf("%d %lf %lf\n",max,s,s/n); ⑬ return 0; ⑭ } 算法分析:整数的个数不确定、找最 大—打擂台 1)s=0 , n=0; 2)输入第一个数 x 3)若 x!=0 ① if (n==0) max=x; ② else ③ { if (max<x) max=x;} ④ s=s+x; n++; ⑤ 输入 下一个数 x,转到3) 4)输出max 、s、s/n
3、while循环应用举例例4:输入一个正整数,反序输出各位数(输入:12345,输出54321)算法:1)定义n是longint,m是int2)车输入n3)若n>0贝则m=n%10,输出m;n=n/10;转到3)继续。程序:①#include<stdio.h>②int main()③I long int n;int m;④scanf("%ld",&n);?while (n>0)?Ⅱ取个位 m=n%10;12345printf("%d",m);1/输出个位?n=n/10;I/n去掉个位543219?return 0;人
3、while循环应用举例 例4: 输入一个正整数 , 反序输出 各位数(输入: 12345, 输出5 4 3 2 1 ) 算法: 1)定义n是 long int ,m 是int 2)输入n 3)若n>0 则: m= n % 10, 输出 m;n=n/10; 转到 3)继续。 程序: ① #include <stdio.h> ② int main() ③ { long int n; int m; ④ scanf("%ld" ,&n); ⑤ while (n>0) ⑥ { m=n%10; // 取个位 ⑦ printf("%d " ,m); //输出个位 ⑧ n=n/10; // n去掉个位 ⑨ } ⑩ return 0; ⑪ }