美文网首页C语言学习天花板C语言
C语言从零开始(十)-循环基础for

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

作者: 天花板 | 来源:发表于2015-11-16 22:12 被阅读4001次

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

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

用循环写出的程序

一、为什么需要循环?

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

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

二、for语句

简单的for循环程序如下:

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

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

  • 关键字for

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

  • 循环体

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

  • 表达式1

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

  • 表达式2

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

  • 表达式3

每次执行循环体后,都会执行一次表达式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;
}

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

  • 1、i = 0 初始化之前定义的变量i;
  • 2、进行条件判断i是否小于100,如果条件为真,则继续执行;
  • 3、两个printf语句,第一个打印当前执行的次数i + 1,第二个打印"Hello World!"并换行;
  • 4、执行i++使变量i自增一次;
  • 5、回到第2步继续判断。
  • 6、一直循环,直到第2步判断结果为假, 之后退出循环,结束。

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

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

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

三、break语句

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

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

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

  • 循环体部分需要能够无限循环的执行,如果一直输入1就一直打印
  • 循环体内有三个动作:从键盘读入一个数字、判断输入数字、执行打印功能
  • 一旦出现需要退出的情况(输入了其他数字),需要使用break退出

代码如下:

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语句

相关文章

  • 维护中-1

    此文章已经移至 C语言从零开始(十)-循环基础for 上一篇:C语言从零开始(九)-选择结构下一篇:C语言从零开始...

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

    程序设计中,必不可少的就是循环。今天我们介绍一个最基本的实现循环的算法。 下面这幅图就是用for循环写出的效果。 ...

  • C语言-基础篇

    目的 掌握c语言基础,main 函数,编译过程,变量,if语句,for循环,while循环,do while循环 ...

  • iOS学习第三天2015.12.30

    今天,学习了软件开发语言的基础C语言的循环语句. 在C语言中,循环语句有三大类: while语句,do..whil...

  • C语言000——开始

    C语言000——开始 介绍 本系列博客主要面向于新手,提供一个从零开始的基础C语言教程。 开发环境如下: 操作系统...

  • 自学python第一天——变量和列表

    从零开始,万事开头难,从最基础的开始。学python已有几天,因为有C语言和perl语言的基础,学起python确...

  • C语言基础——循环详解!

    循环:有些事情可以反复执行 算法里面三大结构之循环结构。 while 循环 do...While循环 For循环 ...

  • Java基础笔记04

    04.01_Java语言基础(循环结构概述和for语句的格式及其使用) A:什么是循环结构 B:循环结构的分类 C...

  • 2018/07/17

    c语言基础分支数组,2018/07/18运行程序,循环及数组 07/29基本类型 2018/7/30计划 c语言课...

  • C语言基础知识梳理总结

    C语言是当代人学习及生活中的必备基础知识,应用十分广泛,下面为大家带来C语言基础知识梳理总结,C语言零基础入门绝对...

网友评论

本文标题:C语言从零开始(十)-循环基础for

本文链接:https://www.haomeiwen.com/subject/wqgkhttx.html