第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.
");
printf("Enter number of entries in table:");
scanf("%d", &n);
i = 1;
while (i <= n) {
printf("%10d%10d
", 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.
");
printf("Enter integers (0 to terminate):");
scanf("%d",&n);
while (n!=0){
sum+=n;
scanf("%d",&n);
}
printf("The sum is: %d
",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).
", 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.
");
printf("Enter number of entries in table:");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
printf("%10d%10d
", 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.
");
printf("Enter number of entries in table:");
scanf("%d", &n);
i = 1;
odd = 3;
for (square = 1; i <= n; odd += 2) {
printf("%10d%10d
", i, square);
++i;
square += odd;
}
return 0;
}