【C#学习笔记】【6】找出0-100以内的所有的能被3整除或者被5整除余2的数(二)(流程控制)

在上节中,我们画的那个流程图还记得么?判断部分我们会了,就差循环了,下面我会介绍三种常用的循环。

循环结构

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那样把所有的循环都停掉。

总结

  1. 三种循环语句,重点掌握while循环和for循环。
  2. break和continue的区别。

练习

  1. 求级数和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略(若有疑问,请发邮件给我,646858695@qq.com)

posted @ 2015-07-17 22:20  鹏哥,一个业余爱好者  阅读(2477)  评论(0编辑  收藏  举报