一、循环结构的必要性
前面讨论了编程中进行判断的各种方法,然而有些问题仅仅通过判断还不能解决。某些情况中,为解决一个问题常常需要重复执行一个或多个操作。例如,要求输出从1—5分别乘以10所得的乘法表,用以前学过的知识编制的程序见例【4-5】。
例【1】输出从1—5分别乘以10所得的乘法表
程序清单 sample.c
#include <stdio.h>
int main()
{
int result1,result2,result3,result4,result5;
result1 = 1 * 10;
printf("1 * 10 = %d\n",result1);
result2 = 2 * 10;
printf("2 * 10 = %d\n",result2);
result3 = 3 * 10;
printf("3 * 10 = %d\n",result3);
result4 = 4 * 10;
printf("4 * 10 = %d\n",result4);
result5 = 5 * 10;
printf("5 * 10 = %d\n",result5);
}
程序编写5条语句计算乘积,再编写另外5条语句显示这些乘积。如果要求输出1—100的数与10相乘的乘法表呢?就需要重复编写100次这样的语句。这样既费时又费力。我们需要一种方法可以快速有效地执行重复性操作。在C语言中,可以通过循环结构来解决这类问题。
循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,重复执行某程序段,直到条件不成立为止。给定的条件成为循环条件,反复执行的程序段称为循环体。Java语言提供了三种不同形式的循环结构。
1. while循环结构
用于在特定条件为真的情况下重复执行某些操作,在执行循环体之前先检查条件,一旦条件为假,循环就停止。
2.do—while循环结构
同样用于在特定条件为真的情况下重复执行某些任务。但是在do—while循环中,是在执行循环语句之后再检查条件。因此,在循环结束前,循环体内的语句至少会被执行一次。
3.for循环结构
fou循环与while循环在功能上类似,只要条件为真,就会执行循环体中的语句。同样,也是在执行循环语句之前先检查条件,但是,其语法规则与while循环有所不同。
二、while循环
while循环的一般语法是:
while( 表达式 )
语句;
其中,表达式是循环条件,语句为循环体。while语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句,一旦条件为假,就停止执行循环体。如果条件在开始时就为假,则不执行循环体语句直接退出循环。
循环体语句可以是空语句、单条语句或语句集。如果是语句集,则要用“{”和“}”把它们括起来,用于循环条件的表达式必须返回真或假。
例【2】输出从1—10分别乘以10所得的乘法表
程序清单 sample.c
#include <stdio.h>
int main()
{
//声明变量num,初值为1
int num=1;
// 声明变量result,存储计算结果
int result;
while( num <=10 )
{
result = num * 10;
printf(" %d * 10 = %d \n",num,result);
//使用自增运算符,修改循环变量
num++;
}
}
程序声明了两个int类型的变量num和result,分别用来存储数字和乘积。然后,将num初始化为1,因为打算在while循环中从1开始执行乘法运算,求出1—10的数字与10的乘积,因此将while循环的条件编写为num<=10。这样确保了只要num小于等于10,就执行while循环;而当此条件变为假时,即num的值达到11时,就结束此循环。循环体中的第一个语句用num乘以10,将计算结果保存在变量result中。第二个语句输出乘法表,循环体中的最后一个语句将num的值递增1,来修改num的值。此处使用了单目自增运算符++,也可以编写为num=num+1,来替代num++。
程序中的num++非常重要,这条语句通过修改num的值来修改循环条件,直到num的值等于11,循环条件为假时退出循环。也就是说,循环条件中的变量,需要在循环中重新赋值,以逐渐改变循环条件的值,直到循环条件为假;否则循环将永远不会停止,这种循环称为“死循环”或者“无限循环”。
例【3】无限循环
程序清单 sample.c
#include <stdio.h>
int main()
{
int count=0;
while( count < 100 )
{
printf("这将没完没了,帮帮我吧!!!");
printf("试试Ctrl+C吧");
}
}
程序功能主要是演示在while循环语句中,由于缺乏改变条件的语句而导致出现无限循环的问题。
程序中while循环体内没有修改循环变量count的值,导致循环条件一直为真,造成了无限循环。