在上节中,我们画的那个流程图还记得么?判断部分我们会了,就差循环了,下面我会介绍三种常用的循环。
循环结构
while循环(当循环,至少我的C语言老师这么叫)
先来介绍一下语法吧,如下
while(条件表达式) { //这里是循环体,当上面的条件表达式为真时,执行循环体,否则退出 }
while后面跟一个条件表达式,如果是真的话才会执行循环。执行完循环体再判断条件表达式,直到为假的时候推出循环。
例如我们输出1到100的数,例程如下:
int i=1; while (i <= 100) { Console.WriteLine(i); i++; }
输出的结过如下:
//结果如下 1 2 3 ... 99 100
这个例子看懂了么?我来解释一下,首先i=1执行到while时,判断i<=100,是真的,所以进入循环中,输出了i,然后i自增了1,也就是i现在等于2,然后又回到了循环的头部,判断i<=100,是真的,又进入循环体,一直到i=101的时候,条件i<=100发现是假的,结果循环就不执行了,也就结束了。
好的,相信你已经明白了,那么我们把文章题目中的问题解决了吧:
int i=0; while (i <= 100) { if (i % 3 == 0 || i % 5 == 2) { Console.WriteLine(i); } i++; }
发现好简单的,对吧。这里我没有用else,因为只需要找出符合题意的数就行,题中没有说要处理不符合的数。顺便说一下,这里的 i 其实是一个计数器,他控制了循环的次数。下面我们介绍while的变体。
do…while(直到循环,当然我老师告我这么读)
当然,先上语法:
do { //这里是循环体 }while(条件表达式);
和while差不多,就是多了个do,循环体跑到while前面了。我来解释一下执行顺序:
第一步先执行循环体,然后才去判断条件是否为真,如果为真,进行第二次循环体执行,,,直到条件为假,退出。
可以看出,这个直到循环和当循环区别,直到循环至少会执行一次循环体,而当循环不一定。当然,实际工作中,我们用的当循环更多。
这里就不举例子了。下面介绍个最常用的,可以叫做计次循环。
for循环(计次循环)
看标题,说明这个本身可以计次。来,上语法
for (int i = 0; i < length; i++) { //循环体 }
解释一下过程。
for后面跟着三个语句,第一句其实是声明了一个计数器(刚才介绍了什么是计数器),第二个是计数器的长度,也就是一个条件表达式,第三句,计数器自增。
执行的流程是,首先执行第一句,初始化计数器,然后判断第二句是否为真,接着进入循环体执行,循环体执行完第一次后,执行for后面的第三句,也就是计数器的自增,然后判断条件,为真就又一次进入循环体,直到退出循环。说的有点抽象,我们用for循环来做一次1+2+3+4+…+100,代码如下:
int sum = 0;//其实这个叫累加器 for (int i = 1; i <= 100; i++) { sum += i; } Console.WriteLine(sum); //运行结果5050
是不是比用while简单一些呢?
这是一个最常用的循环。当然,如果你将外面的调节都写成真的,那就是死循环了,再也出不来了,下面我介绍两个关键字,可以在适当的时候跳出循环。代码如下:
int i = 0; while (true) { if (i < 10) { Console.WriteLine(i);
i++; } else { break; } } //运行结果 0, 1 2 3 ... 9
我写了个死循环,但是真正的却循环了10次,因为i>10的时候,我用了break,这个词可以跳出整个循环。
再看下面的一个例子:
int i = 0; while (true) { if (i < 10) { i++; continue; } if (i < 20) { Console.WriteLine(i); i++; } else { break; } } //结果 10 11 ... 19
发现点什么没有,continue把循环后面的屏蔽掉了。
虽然前10次循环,第二个if是真的,但是并没有执行。也就是说,一旦循环中遇到了continue语句时,循环体就不再执行了,但是会进入下一圈的循环,不会像break那样把所有的循环都停掉。
总结
- 三种循环语句,重点掌握while循环和for循环。
- break和continue的区别。
练习
- 求级数和1/(1*3)+2/(3*5)+3/(5*7)+…+n/((2*n-1)*(2*n+1)),要求前N-1项和于前N项和的差的绝对值小于0.00001时结束。并且输出此时的n。
上篇中的练习答案
1.
int a = 5; int b = 4; int c = 7; if (a + b > c && Math.Abs(a - b) < c) //取绝对值是为了防止小边减去大边 { Console.WriteLine("这三边能组成三角形"); } else { Console.WriteLine("这三边不能组成三角形"); }
2.3.4略(若有疑问,请发邮件给我,[email protected])