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);
}
}