8 月 7 日上课内容:while 循环,循环嵌套。

87 日上课内容:while 循环,循环嵌套。

while 循环

在这之前相信大家已经初步了解过 while 循环,他和 for 循环的最大区别就在于 while 循环是解决一些不知道明确执行次数的一个循环类型,他可以解决(简化)一些 for 循环的功能,不过 while 循环也可以用 for 循环表示。我们先用 for 循环实现以下功能:

输入一个数 n,求出数 n 的位数。

我们可以用 n 不断地除以十,使每次循环时可以减掉 n 的一位,最后再在循环循环末尾用 if 判断 n 是否为 0 就行。注:x(0<x<10)/10=0

此时的我们不知道明确的循环次数,所以 for 循环里的第二个格子该怎么写呢?首先我们来回顾一下 for 循环里的三个格子里的作用。

for(循环开始执行语句;循环条件;循环结束执行语句);

由此可见 for 循环里的第二个格子是用来做循环条件的。由于我们是在循环末尾放的 if 语句判断,如果为 0 就输出并跳出循环,所以我们可以让他无限执行,所以在循环条件里填 1(非 0 及真),即可每次读到此语句的时候就执行。所以我们可以这样写:

for(int i=1;1;i++){
	n=n/10;
	if(n==0){
		cout<<i;
		break;
	}
}

有的同学可能想到了,既然 for 循环里的第二个格子是循环条件,那还不如把循环条件里写成 n!=0。于是我们运行以下程序发现:

int i;//定义成全局变量不然不能再 for 循环外使用。
for(i=1;n!=0;i++){
	n=n/10;
}
cout<<i;

输入:123

输出:4

这是为什么呢?原来,i++ 语句是在每次循环结束无脑执行的语句,当第一次循环运行的时候,i 的初始值为 1,再循环结束时 i 又加了 1,所以 i 的值会被多加一次,我们只需将 i 的初始值改为 0 就行,以至于为什么之前提到的程序里没有多加,是因为 if 语句是在 i++ 语句执行前执行的,在 n=0 时过滤掉了 i++ 并直接输出了,所以不会多算。

而我们今天要学的就是简化这种循环,以示更加简结、明了。

while 循环结构:

while(满足条件执行);

所以将 n!=0 语句放入 while 循环里就行了:

int i=0;
while(n!=0){
	n=n/10;//减掉一位
	i++;//计数
}
cout<<i;
//上面的程序大意:发现一位计一位。

这样我们就可以更简洁的表示“读取 n 的位数”的效果啦。

while 循环进阶用法

题目:请用 while 循环倒序输出 n(n<0<1000)

我们知道 %(mod) 运算的特性:n%10。取出 n 的最后一位。将值赋值给答案变量,这里用 ans 表示,因为有着仅为关系,所以在每次计算时,都要将 ans10,以便将各位留给下一位。

n ans 代码
123 0 -
123 3 ans=ans+n%10
12 3 n=n/10
12 30 ans=ans*10
12 32 ans=ans+n%10
1 32 n=n/10
1 320 ans=ans*10
1 321 ans=ans+n%10
0 321 n=n/10

以上表格便于大家理解。

至此,我们发现规律:

ans=ans*10;ans=ans+n%10;n=n/10;

将次程序写进 while:

int ans=0;
while(n!=0){
	ans=ans*10;
  ans=ans+n%10;
  n=n/10;
}
cout<<ans;

所以,倒序输出 n 的题目被我们轻而易举的完成了。

循环嵌套

如果我们要实现逆序输出 1099 中的所有数的话,我们就需要用到 forwhile

for(int i=10;i<=99;i++){
  int ans=0,n=i;
  while(n!=0){
	ans=ans*10;
  ans=ans+n%10;
  n=n/10;
  }
  cout<<ans<<endl;
}

这样我们就完美学会了循环嵌套的入门知识

21 个赞

不知道说什么 :grinning:

2 个赞

怎么感觉你是学别人的

2 个赞

都是无聊我们大佬搞的

2 个赞

赞!

1 个赞

我要变成基本用户!
看见我几次发几个 :grinning:
#防重 e

1 个赞

我没有学别人的,每次上课前一天的晚上我都会把自己的经验写出来,然后刚好看到了有帖子就发了,有一点可以证明的就是我的格式,正常人不会在一天之内学会文档格式,而且我还会在以后把我之前写出来的解法粘到信友队。

9 个赞

栓Q啊,真的是非常的好用好吧!

1 个赞

不错
orz

1 个赞

为什么你们现在还上课啊,难道是新班级?

1 个赞

什么新班级?

10 个赞

你们今天还上课?是新人吗?

1 个赞

对,但我不是

10 个赞

好吧,产量挺高的点个赞

2 个赞

他们江汉区集训 有点像我们的语法入门

1 个赞

是的,现在在学算法1