《C语言程序设计:现代方法(第2版)》第6章 循环

第6章 循环

没有循环和结构化变量的程序不值得编写。

第5章介绍了C语言的选择语句:if语句和switch语句。本章将介绍C语言的重复语句,这种语句允许用户设置循环。

循环(loop)是重复执行其他语句(循环体)的一种语句。在C语言中,每个循环都有一个控制表达式(controlling expression)。每次执行循环体(循环重复一次)时都要对控制表达式求值。如果表达式为真(即值不为零),那么继续执行循环。

C语言提供了3种重复语句,即while语句、do语句和for语句,我们将在6.1节、6.2节和6.3节分别进行介绍。while循环在循环体执行之前测试控制表达式,do循环在循环体执行之后测试控制表达式,for语句则非常适合那些递增或递减计数变量的循环。6.3节还介绍了主要用于for语句的逗号运算符。

本章最后两节致力于讨论与循环相关的C语言特性。6.4节描述了break语句、continue语句和goto语句。break语句用来跳出循环并把程序控制传递到循环后的下一条语句,continue语句用来跳过本次循环的剩余部分,而goto语句则可以调到函数内的任何语句上。6.5节介绍空语句,它可以用于构造循环体为空的循环。

6.1 while 语句

程序:显示平方表

/**
 * Prints a table of squares using a while statement
 */
#include <stdio.h>

int main() {
    int i, n;

    printf("This program prints a table of squares.\n");
    printf("Enter number of entries in table:");
    scanf("%d", &n);

    i = 1;
    while (i <= n) {
        printf("%10d%10d\n", i, i * i);
        i++;
    }

    return 0;
}

程序:数列求和

/**
 * Sums a series of numbers
 */
#include <stdio.h>

int main() {
    int n,sum=0;

    printf("This program sums a series of integers.\n");
    printf("Enter integers (0 to terminate):");

    scanf("%d",&n);
    while (n!=0){
        sum+=n;
        scanf("%d",&n);
    }
    printf("The sum is: %d\n",sum);
    
    return 0;
}

6.2 语句

do语句和while语句关系紧密。事实上,do语句本质上就是while语句,只不过其控制表达式是在每次执行完循环体之后进行判定的。

/**
 * Calculates the number of digits in an integer
 */
#include <stdio.h>

int main() {
    int digits = 0, n;

    printf("Enter a nonnegative integer:");
    scanf("%d", &n);

    do {
        n /= 10;
        digits++;
    } while (n > 0);

    printf("The number has %d digit(s).\n", digits);
    
    return 0;
}

6.3 for语句

现在开始介绍C语言循环中最后一种循环,也是功能最强大的一种循环:for语句。

程序:显示平方表(改进版)

/**
 * Prints a table of squares using a for statement
 */
#include <stdio.h>

int main() {
    int i, n;

    printf("This program prints a table of squares.\n");
    printf("Enter number of entries in table:");
    scanf("%d", &n);

    for (i = 1; i <= n; i++) {
        printf("%10d%10d\n", i, i * i);
    }
    
    return 0;
}

利用这个程序可以说明关于for语句的一个要点:C语言对控制循环行为的三个表达式没有加任何限制。虽然这些表达式通常对同一个变量进行初始化、判定和更新,但是没有要求它们之间以任何方式进行相互关联。看一下同一个程序的另一个版本。

/**
 * Prints a table of squares using an odd method
 */
#include <stdio.h>

int main() {
    int i, n, odd, square;

    printf("This program prints a table of squares.\n");
    printf("Enter number of entries in table:");
    scanf("%d", &n);

    i = 1;
    odd = 3;
    for (square = 1; i <= n; odd += 2) {
        printf("%10d%10d\n", i, square);
        ++i;
        square += odd;
    }

    return 0;
}
posted @ 2019-09-09 15:53  SHENHUANJIE  阅读(415)  评论(0编辑  收藏  举报