程良萍 劉星辰






摘要:在C語言程序設計中順序、選擇、循環三大基本結構之一的循環結構由于其具有較高的方便性和靈活性因而被廣泛應用于程序設計中。循環結構是指在C語言程序設計中需要反復執行而設計的程序結構,由循環體中的某個條件來判斷是否繼續執行某個功能。C語言中的循環結構包含三種循環語句:while循環語句、do-while循環語句和for循環語句。本文對循環語句的執行過程進行了探討、分析和舉例,同時針對執行過程的特殊要求引入了break語句和continue語句來實現程序運行的高效性,為C語言程序設計的應用提供了借鑒思路。
關鍵詞:C語言程序設計;while循環語句;do-while循環語句;for循環語句
引言
C語言是一門計算機語言,使用者可以通過它和計算機交流,讓計算機完成想做的事情[1]。計算機軟件編程通過C語言,能夠使編程工作更為便捷,提升編程工作的效率[2]。計算機語言就是指人與計算機之間通訊的語言,是人與計算機之間傳遞信息的媒介。計算機系統最大的特征就是指令通過一種語言的形式傳達給機器,使之進行各種工作,C語言就是這種特殊語言中的一種,由字符和語法規則組成計算機能夠接受的語言。
1.循環結構中的三種循環語句
1.1 while循環語句
While循環的一般使用格式如下:
圖1為while循環的執行過程。在一般使用格式中,“表達式”是循環條件,“語句”是循環體。上述格式的含義為:計算表達式的值,當值為真(非0),執行循環體語句。當值為假(0)時,跳出循環體,執行循環體后面的語句。while后面括號里面的表達式為邏輯值、關系表達式或邏輯表達式,只要表達式的值為真(非0),即可繼續循環。由于while循環取決于表達式條件的值,因此,while語句用于滿足條件時的循環結構[3],也可用于循環次數不固定或循環次數未知的情況。一旦循環執行完畢(當條件的結果為假時),程序就執行循環后面的代碼。表達式括號后面一般不能加“;”,加了會導致循環為空,不會執行循環體。在循環體中要有能改變條件表達式中的語句,如果條件表達式變量不發生改變,那么循環就永遠不會結束,從而變成死循環。
1.2 do- while循環語句以及與while的聯系與區別
do-while與while相似,只是在結構中有點不同。一般格式如下:
圖2為do-while循環的執行過程循環體語句可以是簡單語句、復合語句和空語句。do-while的執行步驟一般是:先執行一次循環體語句,然后判斷while括號中的條件表達式的值,若為真(非0),繼續執行循環體語句;若為假(0)則退出循環,while循環條件表達式后面必須帶“;”,不可省略。與while循環的聯系:在使用while語句設計循環結構時遵循的規則對do-while語句也成立,在循環體內部都必須要有改變條件(即邏輯表達式的變量)的語句,否則將造成死循環。一般來講while循環能解決的問題,do-whie也可以解決,只需要在解決問題的時候,考慮好循環第一次運行的條件即可。
與while循環的區別:while循環需要先進行判斷才能進行循環體,而do-while則先執行循環體再對條件變量進行判斷,也就是說do-while循環至少會進行一次循環體的運行。
1.3 for循環語句
在C語言中有一種循環不但可以用于循環次數已經確定的情況,也可以用于循環次數不確定的而只給出循環結束條件的情況,這個強大的循環就是for循環結構。for循環語句是C語言所提供的功能更強、使用更廣泛的一種循環語句。其語法格式如下:
for循環結構中表達式和語句的作用如下:
表達式1:相當于對條件變量進行初始化,該表達式只在進入循環時,執行一次,在后續的循環過程中不再執行。表達式2:相當于循環結構中的條件判斷,一般是關系或邏輯表達式,但也可以是數值表達式和字符表達式,只要這個判斷體能進行真假判斷即可。表達式3:相當于循環體中對條件變量進行改變即修改計數器(循環變量),使循環變量進行變化,從而使循環程序最終達到退出的條件。每執行一次循環體,就會執行一次該表達式改變循環變量。每個表達式都需要用“;”進行隔開,不能省略。從流程圖3中可以看出for循環先進行表達式1,然后用表達式2對循環變量進行判斷,若判斷為真就進入循環體進行循環語句,再進行表達式3,若判斷為假,則直接退出循環進行for循環后面的語句。進行了一次循環后直接從表達式2開始判斷從而進入下一次的循環。在for循環中一般可以將表達式1進行省略,寫到代碼的其他地方,但是“;”不能省略,表達式3也是可以在()中進行省略,將表達式3寫到循環體語句中。表達式2語句的位置也可以是空,如果表達式2語句的位置為空的話,表示循環條件永遠為真,如果是這樣的話,在循環體中就要配合break語句使用,否則for循環語句將無法退出循環[4]。
2.循環結構中的特殊結構和特殊語句
2.1 雙循環
雙循環又稱為循環的嵌套,即在一個循環語句中又有一個完整的循環結構的形式。常見的嵌套式一般為:while循環嵌套,do-while循環嵌套,for循環嵌套,for循環與while循環相互嵌套,while與do-while循環相互嵌套,do-while循環中嵌套for循環。在雙循環中一般都是使用for循環的嵌套,流程為,先進行第一個for語句中的表達式1,然后進行表達式2進行判斷,為真就進行循環體語句第二個for循環就在循環體語句中,然后進行表達式4,再進行表達式5,這也是為了進行判斷,為真就進入第二個for循環的循環體語句,然后執行表達式6,等第二個for循環退出后再執行第一個表達式3,循環上述步驟,直到退出第一個for循環。其語法格式如下:
2.2 break和continue語句
在執行循環語句時,總是需要等條件變量不符合條件時才會退出循環體,如果想中途就退出循環,就可以使用break語句,因為break語句可以不顧循環條件表達式檢驗的結果。比如,當一個小孩正在打游戲,父母叫他不要打了,可小孩不聽,這時父母就會采取一些措施讓他強行停下來,這就是break語句[5]。break的功能說明有:1.改變程序的控制力2.如果已執行break語句就不會在執行break后面的語句3.通常與循環中的條件語句一起使用,若條件真,則跳出循環4。某些時候需要創建一個死循環結構這時就可用break來退出循環。
continue語句則是與break語句有一定的區別,continue的作用是跳過循環體后面剩余的語句,結束本次循環,轉而進入下一次的循環,不像break那樣直接退出循環,一般用來加快循環。所以continue不能強制退出死循環。continue語句只能作用于循環結構不能在其他結構中,通常也是和if語句連用。
3.案例分析
3.1 字符串復制
【問題描述】編寫一個字符串復制函數strCopy(),將字符串1中的字符復制到另一個字符串2中,在主函數中調用函數strCopy()并輸出復制后的結果。例如,當字符串1為“This is a C program”,則字符串2為“This is a C program”。代碼如下:
#include<stdio.h>
void strCopy(char str[]);
int main()
{
char s[100],cop[100],t;
gets(s);
strCopy(s);
return 0;
}
void strCopy(char str[])
{
int i,j;
char str2[100];
j=0;
i=0;
while(str[i]!=’\0’)
{
str2[j]=str[i];
j++;
i++;
}
str2[j]=’\0’;
puts(str2);
}
在此代碼中,循環體放入了函數strCopy()中,用了while循環,先對()中的條件語句進行判斷,判斷字符串1此時的元素是否為‘\0’,因為字符串以‘\0’為結束,判斷為真后,進入循環體,將此時的元素賦值給字符串2,并讓字符串2的下標加1,再讓字符串1的下標加1然后再進行條件語句判斷從而進入下一次循環,直到字符串元素為‘\0’退出循環,再讓字符串2以‘\0’結束,通過主函數輸出出來。此代碼就比較直觀地表現了while循環的用法。
3.2 九九乘法表
【問題描述】在剛上小學的時候,數學老師就會教我們背誦九九乘法表,九九乘法表也是我們后面學習數學的基礎,那時候每次數學課都會看到這個九九乘法表,讓我們爛熟于心,但是運用c語言能不能實現九九乘法表呢?答案是可以的。具體代碼如下:
#include<stdio.h>
int main()
{
int a[10],i,s,d;
for(i=0;i<9;)
{
i++;
a[i]=i;
for(s=0;s!=a[i];)
{
s++;
d=a[i]*s;
printf(“%d*%d=%d “,a[i],s,d);
}
printf(“\n”);
}
return 0;
}
此代碼運用了循環的嵌套俗稱雙循環,先讓i=0,然后進行判斷i是否小于9,真就進行循環體,進入循環體先讓i自身加1,并存儲在數組a[i]中,然后發生循環的嵌套,再進行第二個for循環讓s=0,判斷s是否不等于這時的a[i],真則進入循環,讓s自身加1,再讓d等于s乘a[i],并在第二個for循環中輸出,當不符合第二個for循環的條件語句后,再進行換行,進入下一次循環,比如:第一次i=1,a[i]=1,則s=1,所以輸出為1*1=1;然后進入下一次循環,i=2,a[i]=2,s再次等于1,輸出為2*1=2;這時并沒有退出第二個for循環,s再進行加1,變為2,所以再輸出2*2=4。這個過程循環進行直到輸出9*9=81,在個代碼中for循環()中的第3個表達式都省略了,為的是更好的進行循環變量的改變,運行結果如圖4。
3.3 正數和
【問題描述】從鍵盤上輸入數據,只求所有輸入的正數之和,如果輸入負數則不累加其和,直到輸入0為止。具體代碼如下:
#include<stdio.h>
int main()
{
float n,sum=0;
int i=0;
do
{
scanf(“%f”,&n);
if(n<0) continue;
if(n==0) break;
i++;
sum=sum+n;
}while(l)
printf(“你輸入了%d個正數,所有正數之和為:%2f\n”,i,sum);
}
這個代碼運用了do-while循環,continue和break語句,通過題目要求可以看出只進行正數的相加,當輸入負數時則不相加,于是需要進行下一次的循環,這是continue就起到了這個作用,為了當輸入0時就退出循環,于是通過if(n==0) break;語句就完成了這個功能,break語句就讓循環強行退出,這也體現了這個循環體并不需要特別設置條件變量進行判斷,于是while()中就是一個空語句。
4.結束語
所謂循環是指使用一定條件對同一個程序段重復執行若干次,所解決的問題需要執行的若干次基本操作都應該相同或相似。循環的執行需要滿足一定的條件,利用此條件可以終止循環,C語言就提供了while,do-while,for這3種循環結構。如何學習循環結構呢?首先,循環結構與選擇、順序結構不同,在實際的問題解決中很少會按照循環的思想考慮如何解決一個問題。因而在學習循環結構的時候,要多分析一些循環的源程序,總結其編寫的規律。同時要記住一些常見的算法,如累加、連乘、判斷素數、最大公約數、費式數列等,還有枚舉、遞推的方法。以后出現同樣的問題,盡量使用已經具備的算法解決。
參考文獻:
[1]韋鵬程,李靜,C語言程序設計[M].北京:中國林業出版社,2019.
[2]王華,計算機軟件編程中的C語言設計和應用[J].信息與電腦,2020,2:68-70.
[3]戚龍,C語言程序設計中的循環語句應用算法研究[J].計算機產品與流通,2020,7:200-201.
[4]戚龍,C語言程序設計中for循環語句應用算法研究[J].計算機產品與流通,2020,8:11-12.
[5]高茂嬋,呂雪,彭星星,孫新杰,淺談C語言中循環結構程序設計[J].軟件設計與開發,2020,16:58-60.
重慶第二師范學院 400065