基本信息
在C語言程式中,一共有三種程式結構:順序結構、選擇結構(分支結構)、循環結構;順序結構,從頭到尾一句接著一句的執行下來,直到執行完最後一句;選擇結構,到某個節點後,會根據一次判斷的結果來決定之後向哪一個分支方向執行; 循環結構,循環結構有一個循環體,循環體裡是一段代碼。對於循環結構來說,關鍵在於根據判斷的結果,來決定循環體執行多少次。C語言循環控制語句是一個基於C語言的編程語句,該語句主要有while循環語句、do-while循環語句和for循環語句來實現循環結構。
循環語句
一般形式如下:
while(表達式)
語句;
其中執行過程如下:
(1)計算while後面括弧里表達式的值,若其結果非0,則轉入(2),否則轉(3)
(2)執行循環體,轉(1)
(3)退出循環,執行循環體下面的語句。
由於是先執行判斷後執行循環體,所以循環體可能一次都不執行。
循環體可以為空語句“;”。
do-while語句
一般形式如下:
do
語句;
while(表達式);
(1)執行循環體,轉(2)
(2)計算while後面括弧里表達式的值,若其結果非0,則轉入(1),否則轉(3)
(3)退出循環,執行循環體下面的語句。
注意:do……while語句最後的分號(;)不可少,否則提示出錯。循環體至少執行一次。
for語句
for語句是循環控制結構中使用最廣泛的一種循環控制語句,特別適合已知循環次數的情況。
一般形式如下:
for ( [表達式 1]; [表達式 2 ]; [表達式3] )
語句
其中:
表達式1:一般為賦值表達式,給控制變數賦初值;
表達式2:關係表達式或邏輯表達式,循環控制條件;
表達式3:一般為賦值表達式,給控制變數增量或減量;
語句:循環體,當有多條語句時,必須使用複合語句。
其執行過程如下:首先計算表達式1,然後計算表達式 2。若表達式2為真,則執行循環體;否則,退出 for循環,執行for循環後的語句。如果執行了循環體,則循環體每執行一次,都計算表達式3,然後重新計算表達式2,依此循環,直至表達式 2的值為假,退出循環。
for語句的三個表達式都是可以省略的,但分號“;”絕對不能省略。for語句有以下幾種格式:
(1)for(; ;) 語句;
(2)for(;表達式2;表達式3 ) 語句;
(3)for(表達式1;表達式2;) 語句;
(4)for(i=1,j = n; i < j; i ++,j - - ) 語句;
三種語句比較
同一個問題,往往既可以用 while語句解決,也可以用 do-while或者for語句來解決,但在實際套用中,應根據具體情況來選用不同的循環語句。選用的一般原則是:
(1) 如果循環次數在執行循環體之前就已確定,一般用 for語句。如果循環次數是由循環體的執行情況確定的,一般用 while語句或者do- while語句。
(2) 當循環體至少執行一次時,用 do-while語句,反之,如果循環體可能一次也不執行,則選用while語句。
C++/C循環語句中,for語句使用頻率最高,while語句其次,do語句很少用。
三種循環語句for、while、do-while可以互相嵌套自由組合。但要注意的是,各循環必須完整,相互之間絕不允許交叉。
其他循環語句
多重循環結構
在多重循環中,如果有可能,應當將最長的循環放在最內層,最短的循環放在最外層,以減少CPU跨越循環層的次數。
一個循環體內又包含另一個完整的循環結構
三種循環可互相嵌套,層數不限
外層循環可包含兩個以上內循環,但不能相互交叉
c循環舉例
這裡使用c語言中的for循環。添加了九九乘法表查詢、每天存錢問題、猴子吃桃問題、百錢買百雞。
#include <stdio.h>
void main()
{
float x,y,z,a,b,c,d,i,n,sum;int m;char yn;
system ("graftable 936");
yn="y";
while(yn=="y" )
{
clrscr ();
printf(" 歡迎使用 \n");
printf("請按提示操作,謝謝!\n");
printf("九九乘法表查詢請按1\n");
printf("每天存錢問題請按2\n");
printf("猴子吃桃問題請按3\n");
printf("一分數序列課本請按4\n");
printf("百錢買百雞請按5\n");
m=getch();
switch(m)
{case '1':
{
for (a=1;a<=9;a++)
{for (b=1;b<=a;b++)
printf("%.0f*%.0f=%2.0f\t",a,b,a*b);
printf("\n");
}
break;}
case '2':
{
a=1,sum=0;
for(i=1;i<31;i++)
{sum=sum+a;
printf("第%2.0f天收益%20.0f分錢\t",i,sum);
a=2*a;
}
break;}
case '3':
{
b=1;
for(i=1;i<10;i++)
b=2*(b+1);
printf("猴子吃桃問題:");
printf("第一天摘桃子的個數為%.0f個\n",b);
break;}
case '4':
{ a=2,b=1, sum=0;
for(i=1;i<=20;i++)
{ n=(1.0*a)/b; c=a; a=a+b; b=c; sum=sum+n; }
printf("2/1,3/2,5/3...最後結果%f\n",sum);
break;}
case '5':
{
for(a=1;a<=20;a++)
for(b=1;b<=33;b++)
for(c=3;c<=99;c=c+3)
if((5*a+3*b+c/3==100)&&(a+b+c==100))
printf("公雞=%.0f,母雞=%.0f,小雞=%.0f\n",a,b,c);
break;}
}
fflush(stdin);
printf("請選擇繼續y或者離開n\n");
yn=getch();
}
}