迴圈控制結構
最近我們的C語言課程剛剛結束對迴圈控制結構的學習。在此對C語言中迴圈控制結構的知識點進行總結,並發表看法。
迴圈結構主要分為兩種:當型迴圈結構和直到型迴圈。當型迴圈是根據條件決定是否執行迴圈,直到型迴圈是先迴圈再判斷,即至少迴圈一次。C語言中主要是通過for、while、do-while三中迴圈語句來實現迴圈的。
一、while語句為當型迴圈。格式為:
while(迴圈控制表示式)
{
迴圈語句
}
當迴圈控制表示式成立時則執行迴圈,while便於多組迴圈輸入。對於特殊情況,例如:while(r!=0)等價於while®,即r不等於0時迴圈;while(!r)為r=0時迴圈。另外,當輸入為有效輸入時執行迴圈的語句為:while(scanf("%d",&x)=1);當輸入不是無效輸入時,語句為(scanf("%d",&x)=EOF)(ps:EOF是一個計算機術語,為End Of File的縮寫,在作業系統中表示資料源無更多的資料可讀取。資料源通常稱為檔案或串流。通常在文字的最後存在此字元表示資料結束。為C語言中的一個常量。)對於C++則直接使用while(cin>>a>>b>>…)表示輸入為有效輸入時執行迴圈。
二、do-while語句屬於直到型迴圈。格式為:
do
{
迴圈語句
}while(迴圈控制表示式)
先執行一次迴圈再進行判斷,若迴圈條件成立則繼續迴圈,迴圈體內的語句至少迴圈執行一次。
三、for語句屬於當型迴圈。格式為:
for(初始化表示式;迴圈控制表示式;增值表示式)
{
迴圈語句
}
即迴圈控制表示式成立時則執行迴圈,根據增量表達式確定迴圈幾次之後結束迴圈,一般來說for(…)已經確定了迴圈執行次數和終止條件。注意三個表示式之間是用分號隔開。
注意:1.迴圈變數可在迴圈體中做一般變數使用,這時迴圈變數變化唯一。
2.和變數賦初值在重複累加之前,作為重複累加的第一條語句。
3.for、while之後無分號。
4.break為跳出迴圈語句,終止迴圈。
關於三種迴圈結構的選擇:若迴圈次數已知,計數控制的迴圈用for;若迴圈次數未知,用條件控制的迴圈用while;迴圈體至少執行一次的用do-while。也要根據實際情況進行選擇,當有多組輸入時,一般採用while。對於只有一組輸入的了情況,一般用for即可。對於有些題目,不能一下算出來,就需要把所有的情況都羅列出來,這種方法叫暴力法。許多題目不是用一個迴圈寫的,而是在一個迴圈中在套一個迴圈,即為迴圈巢狀結構。舉個例子:openjudg中的畫矩形問題,題目要求是用輸入一個字元,輸出一個用該字元組成實心或空心矩形方陣。程式碼如下:
#include<stdio.h>
using namespace std;
int main()
{
int a,b,n;
char x;
scanf("%d %d %c %d",&a,&b,&x,&n);
if(n1)
{
for(int i=1;i<=a;i++)
{
for(int j=1;j<=b;j++)
printf("%c",x);
printf("\n");
}
}
if(n
{
for(int j=1;j<=b;j++)
{
if(j==1||j==b)
{
for(int i=1;i<=a;i++)
printf("%c",x);
printf("\n");
}
else
{
for(int i=1;i<=a;i++)
{
if(i==1||i==a)
printf("%c",x);
else
printf(" ");
}
printf("\n");
}
}
}
return 0;
}
因為輸出的是一個二維圖形,所以需要兩重迴圈控制,分別控制行數何列數。其中,迴圈變數i控制的是行數的變化,而j表示的是列數的變化。其他題目類似。
對於迴圈結構的學習,需要不斷的深入理解。首先,要將知識點記住,把結構牢記於心,需要注意各種易錯的地方,敲程式碼時要嚴格認真。其次,做題時要注意讀懂題意,避免掉入陷阱。比如說:int定義的是最多是32位整數,此時若運算時或輸出時的資料超出32位,則會出現錯誤,此時就應該用long long進行定義。再者,我認為所有的程式設計師都必須具備一定的專業素養,我們應該學會用計算機的思維看程式碼。當程式編譯成功但是輸出不正確時,我們需要對程式碼進行修改除錯,這是就需要我們用計算機的思維方式進行修改,通過對程式碼的閱讀,試著讓程式碼在自己的大腦裡執行一遍,找出錯誤的地方,並進行修改。如果無法通過閱讀檢視來對程式進行除錯,可以在不同的位置多加幾組輸出,看看執行結果是否正確,這樣能較快速的找出錯誤的地方,並進行改正。需要注意的是,提交時需要把多加的輸出語句註釋掉。