6.1 循环控制概述
循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某
程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为
循环体。C语言提供了多种循环语句,可以组成各种不同形式的循环结构。
1) 、用goto语句和if语句构成循环;
2) 、用while语句;
3) 、用do-while语句;
4) 、用for语句;
6.2 goto语句以及用goto语句构成循环
goto语句是一种无条件转移语句,其一般形式为:goto 语句标号;
语句标号用标识符表示,它的定名规则与变量名相同,即由字母,数字和下划线组成,
其第一个字符必须是字母或者下划线,不能用整数来做标号。
goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时, 用
goto语句则比较合理。
例6.1 用goto语句和if语句构成循环,。
#include<stdio.h>
int main(void)
{
int i,sum = 0;
i = 1;
loop:
if(i <= 100)
{
sum = sum + i;
i ++;
goto loop;
}
printf("%d\n",sum);
}
6.3 while语句
while语句的一般形式为:while(表达式)语句
其中表达式是循环条件,语句为循环体。
while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。
例6.2 用while语句求
#include<stdio.h>
int main(void)
{
int i,sum = 0;
i = 1;
while(i <= 100)
{
sum = sum + i;
i++;
}
printf("%d\n",sum);
}
使用while语句应注意以下几点:
1)、while语句中的表达式一般是关系表达或逻辑表达式,只要表达式的
值为真(非0)即可继续循环。
2)、循环体如包括有一个以上的语句,则必须用{}括起来,组成复合语句。
例6.3 统计从键盘输入一行字符的个数。
#include<stdio.h>
int main(void)
{
int n = 0;
printf("input a string:\n");
while(getchar() != '\n')
{
n++;
}
printf("%d\n",n);
}
使用while语句应注意以下几点:
1)、while语句中的表达式一般是关系表达或逻辑表达式,只要表达式的
值为真(非0)即可继续循环。
2)、循环体如包括有一个以上的语句,则必须用{}括起来,组成复合语句。
6.4 do-while语句
do-while语句的一般形式为:
do
语句
while(表达式);
与while循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为真,
如果为真则继续循环;如果为假, 则终止循环。因此, do-while循环至少要执
行一次循环语句。
例6.5 用do-while语句求
#include<stdio.h>
int main(void)
{
int i,sum = 0;
i = 1;
do
{
sum = sum + i;
i ++;
}
while(i <= 100);
printf("%d\n",sum);
}
6.5 for语句
在C语言中,for语句使用最为灵活,它完全可以取代 while 语句。
它的一般形式为:for(表达式1;表达式2;表达式3) 语句
for语句最简单的应用形式也是最容易理解的形式如下:
for(循环变量赋初值;循环条件;循环变量增量) 语句
例如: for(i=1; i<=100; i++)
{
sum=sum+i;
}
6.6 循环的嵌套
例6.7 循环的嵌套
#include<stdio.h>
int main(void)
{
int i,j,k;
for(i = 0;i < 2;i++)
for(j = 0;j < 2;j++)
for(k = 0;k < 2;k++)
printf("%d %d %d\n",i,j,k);
}
6.7 几种循环的比较
1) 、四种循环都可以用来处理同一个问题,一般可以互相代替。
但一般不提倡用goto型循环。
2)、 while和do-while循环,循环体中应包括使循环趋于结束的语句。
for语句功能最强。
3) 、用while和do-while循环时,循环变量初始化的操作应在while和
do-while语句之前完成,而for语句可以在表达式1中实现循环变
量的初始化。
6.8 break和continue语句
6.8.1 break语句
break语句可以使流程跳出switch结构,继续执行switch语句下面的一个语句,
实际上,break语句还可以用来从循环体内跳出循环体。
例6.8
#include<stdio.h>
int main(void)
{
int i = 0;
char c;
while(1)
{
c = '\0';
while(c!=13 && c!=27)
{
c = getchar();
printf("%c\n",c);
}
if(c == 27)
break;
i++;
printf("The No. is %d\n",i);
}
printf("The end");
}
6.8.2 continue 语句
continue其作用为结束本次循环,即跳出循环体中下面尚未执行的语句,接着
进行下一次是否执行循环的判定。
continue语句和break语句的区别是:
continue语句只结束本次循环,而不是终止整个循环的执行
break语句是结束整个循环过程,不再判断执行循环的条件是否成立。
例6.9
#include<stdio.h>
int main(void)
{
char c = '\0';
while(c!=13)
{
c = getchar();
if(c == 0x1B)
continue;
printf("%c\n",c);
}
}