轉移語(yǔ)句
程序中的語(yǔ)句通??偸前错樞蚍较?, 或按語(yǔ)句功能所定義的方向執行的。如果需要改變程序的正常流向, 可以使用本小節介紹的轉移語(yǔ)句。在C語(yǔ)言中提供了4種轉移語(yǔ)句:
goto,break, continue和return。
其中的return語(yǔ)句只能出現在被調函數中, 用于返回主調函數,我們將在函數一章中具體介紹。 本小節介紹前三種轉移語(yǔ)句。
1.goto語(yǔ)句
goto語(yǔ)句也稱(chēng)為無(wú)條件轉移語(yǔ)句,其一般格式如下: goto 語(yǔ)句標號; 其中語(yǔ)句標號是按標識符規定書(shū)寫(xiě)的符號, 放在某一語(yǔ)句行的
前面,標號后加冒號(:)。語(yǔ)句標號起標識語(yǔ)句的作用,與goto 語(yǔ)句配合使用。
如: label: i++;
loop: while(x<7);
C語(yǔ)言不限制程序中使用標號的次數,但各標號不得重名。goto語(yǔ)句的語(yǔ)義是改變程序流向, 轉去執行語(yǔ)句標號所標識的語(yǔ)句。
goto語(yǔ)句通常與條件語(yǔ)句配合使用??捎脕?lái)實(shí)現條件轉移, 構成循環(huán),跳出循環(huán)體等功能。
但是,在結構化程序設計中一般不主張使用goto語(yǔ)句, 以免造成程序流程的混亂,使理解和調試程序都產(chǎn)生困難。
統計從鍵盤(pán)輸入一行字符的個(gè)數。
#include"stdio.h"
void main(){
int n=0;
printf("input a string\n");
loop: if(getchar()!='\n')
{ n++;
goto loop;
}
printf("%d",n);
}
本例用if語(yǔ)句和goto語(yǔ)句構成循環(huán)結構。當輸入字符不為'\n'時(shí)即執行n++進(jìn)行計數,然后轉移至if語(yǔ)句循環(huán)執行。直至輸入字符為'\n'才停止循環(huán)。
break語(yǔ)句
break語(yǔ)句只能用在switch 語(yǔ)句或循環(huán)語(yǔ)句中, 其作用是跳出switch語(yǔ)句或跳出本層循環(huán),轉去執行后面的程序。由于break語(yǔ)句的轉移方向是明確的,所以不需要語(yǔ)句標號與之配合。break語(yǔ)句的一般形式為: break; 上面例題中分別在switch語(yǔ)句和for語(yǔ)句中使用了break 語(yǔ)句作為跳轉。使用break語(yǔ)句可以使循環(huán)語(yǔ)句有多個(gè)出口,在一些場(chǎng)合下使編程更加靈活、方便。
continue語(yǔ)句
continue語(yǔ)句只能用在循環(huán)體中,其一般格式是:
continue;
其語(yǔ)義是:結束本次循環(huán),即不再執行循環(huán)體中continue 語(yǔ)句之后的語(yǔ)句,轉入下一次循環(huán)條件的判斷與執行。應注意的是, 本語(yǔ)句只結束本層本次的循環(huán),并不跳出循環(huán)。
void main(){
int n;
for(n=7;n<=100;n++)
{
if (n%7!=0)
continue;
printf("%d ",n);
}
}
輸出100以?xún)饶鼙?整除的數。
int n;
for(n=7;n<=100;n++)
{
if (n%7!=0)
continue;
printf("%d ",n);
}
本例中,對7~100的每一個(gè)數進(jìn)行測試,如該數不能被7整除,即模運算不為0,則由continus語(yǔ)句轉去下一次循環(huán)。只有模運算為0時(shí),才能執行后面的printf語(yǔ)句,輸出能被7整除的數。
#include"stdio.h"
void main(){
char a,b;
printf("input a string:\n");
b=getchar();
while((a=getchar())!='\n'){
if(a==b){
printf("same character\n");
break;
}b=a;
}
}
檢查輸入的一行中有無(wú)相鄰兩字符相同。
char a,b;
printf("input a string:\n");
b=getchar();
while((a=getchar())!='\n'){
if(a==b){
printf("same character\n");
break;
}b=a;
}
本例程序中,把第一個(gè)讀入的字符送入b。然后進(jìn)入循環(huán),把下一字符讀入a,比較a,b是否相等,若相等則輸出提示串并中止循環(huán),若不相等則把a中的字符賦予b,輸入下一次循環(huán)。
輸出100以?xún)鹊乃財?。素數是只能? 和本身整除的數??捎酶F舉法來(lái)判斷一個(gè)數是否是素數。
void main(){
int n,i;
for(n=2;n<=100;n++){
for(i=2;i<n;i++)
if(n%i==0) break;
if(i>=n) printf("\t%d",n);
}
} int n,i;
for(n=2;n<=100;n++){
for(i=2;i<n;i++)
if(n%i==0) break;
if(i>=n) printf("\t%d",n);
}
本例程序中,第一層循環(huán)表示對1~100這100個(gè)數逐個(gè)判斷是否是素數,共循環(huán)100次,在第二層循環(huán)中則對數n用2~n-1逐個(gè)去除,若某次除盡則跳出該層循環(huán),說(shuō)明不是素數。 如果在所有的數都是未除盡的情況下結束循環(huán),則為素數,此時(shí)有i>=n, 故可經(jīng)此判斷后輸出素數。然后轉入下一次大循環(huán)。實(shí)際上,2以上的所有偶數均不是素數,因此可以使循環(huán)變量的步長(cháng)值改為2,即每次增加2,此外只需對數n用2~n去除就可判斷該數是否素數。這樣將大大減少循環(huán)次數,減少程序運行時(shí)間。
#include"math.h"
void main(){
int n,i,k;
for(n=2;n<=100;n+=2){
k=sqrt(n);
for(i=2;i<k;i++)
if(n%i==0) break;
if(i>=k) printf("\t%2d",n);
}
}
聯(lián)系客服