C语言学习天花板C语言

C语言从零开始(十)-循环基础for

2015-11-16  本文已影响4001人  天花板

程序设计中,必不可少的就是循环。今天我们介绍一个最基本的实现循环的算法。

下面这幅图就是用for循环写出的效果。

用循环写出的程序

一、为什么需要循环?

程序设计中,很常用的功能就是实现各种重复性工作。计算机最大的强项就是快速地完成重复性动作。

比如说,我们需要在屏幕上打印100行“Hello World”,应该怎么做呢?当然,如果在代码里写100行printf("Hello World\n")也是可以的,但相信没有人愿意这么干。于是,实现重复执行一段代码的方法诞生了。

二、for语句

简单的for循环程序如下:

for (表达式1; 表达式2; 表达式3)
{
    循环体
}

这段代码大家也许看着有些不解,它主要分为5部分:

这个关键字告诉计算机后面是一段for循环代码,它后面跟着一个小括号和一个大括号

循环体就是需要多次执行的n行代码

这个表达式只被执行一次,是for语句中第一个执行的表达式。一般用于给循环控制变量赋初值

每次执行循环体之前,会执行一次表达式2,执行结果为真时进入执行循环体,如果结果为假则跳出for循环

每次执行循环体后,都会执行一次表达式3。一般用于循环控制变量的修改。

注意:表达式1和表达式3可以根据需要省略,但两个“;”不能省略。

具体流程如下:

for循环流程

下面我们看看如何打印100次"Hello World",代码如下:

int main()
{
    int i;

    for (i = 0; i < 100; i++)
    {
        printf("%d : ", i + 1);
        printf("Hello World!\n");
    }

    return 0;
}

是不是很简单呢?它的执行步骤是:

这里需要注意的是i的值是从0到99,一共执行了100次。所以打印次数时应该是i + 1。当然也可以这样写:

for (i = 1; i <= 100; i++)

这样也是执行100次,i的值从1到100。大家自己试试。

三、break语句

在执行过程中,如果因为一些特殊的要求,需要强行退出循环时,需要使用break语句。使用时,将break写在循环体的任何一个位置,一旦执行到这条语句,程序直接跳转到for语句大括号结束后执行后面的代码。

修改一下之前的需求,我们这次需要这样一个程序,从键盘输入数字,输入“1”打印一行“Hello World”,输入其他字符程序退出。

这个程序的设计需要注意下面几点:

代码如下:

int main()
{
    int i;
    int flag;

    for (i = 0; 1; i++)
    {
        scanf("%d", &flag);

        if (flag == 1)
        {
            printf("%d : ", i + 1);
            printf("Hello World!\n");
        }
        else
        {
            break;
        }
    }

    return 0;
}

执行结果:

执行结果

当输入1时,打印一行Hello World!。最后输入了一个6,跳出循环,程序结束。

四、continue语句

continue的用法与break完全相同,只是作用稍微有些变化。执行到continue语句时,程序会放弃本次循环后面的语句,直接进入for语句的下一次循环。

我们依然是用例子来说明这个问题。

有一道最基础的题目是在屏幕上打印出从1~100。代码很简单。

int main()
{
    int i;
    for (i = 0; i < 100; i++)
    {
        printf("%d ", i + 1);
    }

    return 0;
}

执行结果:

1~100

很简单吧,我们加点难度,每行打印10个数,这样看的比较清楚。你知道怎么实现吗?

int main()
{
    int cnt = 1;
    int i;
    for (i = 0; i < 100; i++)
    {
        printf("%d  ", i + 1);

        if (cnt++ % 10 == 0)
        {
            printf("\n");
        }
    }

    return 0;
}

执行结果:

执行结果

这段代码大家能看懂吗?

下面进入正题,我们新的需求是,在这100个数中,不打印能被10整除的数,每行打印9个数字。该怎么做呢?

我们只要在上面的代码中进行简单的修改,就是当需要打印能被10整除的数时自动跳过,直接执行下一次循环,这就轮到continue语句出厂了。

请看代码:

int main()
{
    int i;
    for (i = 0; i < 100; i++)
    {
        if ( (i + 1) % 10 == 0)
        {
            printf("\n");
            continue;
        }

        printf("%d  ", i + 1);
    }

    return 0;
}

执行结果:

执行结果

前面讲的代码你们看懂了吗?下面我们就来看看用今天学到的知识能够做些什么。

五、练习题

我们设计一个程序来计算n的阶乘。

功能:任意输入一个数,打印出这个数的阶乘。

分析:

简单来说,这个程序应该分为三个部分:

第一步和第三步大家应该已经很熟悉了,如果不清楚可以查看之前的文章。下面重点说一下第二步。请看下图:

计算阶乘流程

这就是计算阶乘的流程,我们要做的就是利用循环的方法反复执行计算乘积这个动作。最终跳出循环时的结果就是计算出的阶乘。

逻辑如下:

计算阶乘程序逻辑

从这张流程图我们很容易写出下面这段代码:

** 在看下面的代码之前,请先自己试着设计 **

int main()
{
    int n, i;
    int ret = 1;

    printf("---- Calculate n! ----\n");
    printf("Please input a number:\n");

    scanf("%d", &n);

    for (i = 1; i <= n; i++)
    {
        ret *= i;
    }

    printf("%d! = %d", n, ret);

    return 0;
} 

输入4,执行结果如下:

4!

看懂了这段程序,我们看看有没有其他的方式实现这个功能。请看这段代码:

int main()
{
    int n, i;
    int ret = 1;

    printf("---- Calculate n! ----\n");
    printf("Please input a number:\n");

    scanf("%d", &n);

    for (i = n; i > 0; i--)
    {
        ret *= i;
    }

    printf("%d! = %d", n, ret);

    return 0;
}

同样实现了计算阶乘的功能,你能看懂这个逻辑吗?

今天就聊到这里,例子中的每段代码都要反复练习,达到熟练掌握。如果在这里领悟的不透后面就会学习得很吃力。

最后留一个作业。本文中最前面的那张图片(用*组成的三角形)你知道是如何打印出来的吗?请大家自己实现一下。


关于今天讲的内容,有任何问题欢迎mail讨论。

我是天花板,让我们一起在软件开发中自我迭代。
如有任何问题,欢迎与我联系。


上一篇:C语言从零开始(九)-选择结构
下一篇:C语言从零开始(十一)-循环while语句

上一篇 下一篇

猜你喜欢

热点阅读