C語言學習教程第三章-C語言程式設計初步(8)

來源:互聯網
上載者:User

轉移語句

程式中的語句通常總是按順序方向, 或按語句功能所定義的方向執行的。如果需要改變程式的正常流向, 可以使用本小節介紹的轉移語句。在C語言中提供了4種轉移語句:
goto,break, continue和return。
其中的return語句只能出現在被調函數中, 用於返回主調函數,我們將在函數一章中具體介紹。 本小節介紹前三種轉移語句。

1.goto語句

goto語句也稱為無條件轉移語句,其一般格式如下: goto 語句標號; 其中語句標號是按標識符規定書寫的符號, 放在某一語句行的
前面,標號後加冒號(:)。語句標號起標識語句的作用,與goto 語句配合使用。
如: label: i++;
loop: while(x<7);
C語言不限制程式中使用標號的次數,但各標號不得重名。goto語句的語義是改變程式流向, 轉去執行語句標號所標識的語句。
goto語句通常與條件陳述式配合使用。可用來實現條件轉移, 構成迴圈,跳出迴圈體等功能。
但是,在結構化程式設計中一般不主張使用goto語句, 以免造成程式流程的混亂,使理解和偵錯工具都產生困難。
統計從鍵盤輸入一行字元的個數。
#include"stdio.h"
void main(){
int n=0;
printf("input a string\n");
loop: if(getchar()!='\n')
{ n++;
goto loop;
}
printf("%d",n);
}
本例用if語句和goto語句構成迴圈結構。當輸入字元不為'\n'時即執行n++進行計數,然後轉移至if語句迴圈執行。直至輸入字元為'\n'才停止迴圈。

break語句

break語句只能用在switch 語句或迴圈語句中, 其作用是跳出switch語句或跳出本層迴圈,轉去執行後面的程式。由於break語句的轉移方向是明確的,所以不需要語句標號與之配合。break語句的一般形式為: break; 上面例題中分別在switch語句和for語句中使用了break 語句作為跳轉。使用break語句可以使迴圈語句有多個出口,在一些場合下使編程更加靈活、方便。

continue語句

continue語句只能用在迴圈體中,其一般格式是:
continue;
其語義是:結束本次迴圈,即不再執行迴圈體中continue 語句之後的語句,轉入下一次迴圈條件的判斷與執行。應注意的是, 本語句只結束本層本次的迴圈,並不跳出迴圈。
void main(){
int n;
for(n=7;n<=100;n++)
{
if (n%7!=0)
continue;
printf("%d ",n);
}
}
輸出100以內能被7整除的數。
int n;
for(n=7;n<=100;n++)
{
if (n%7!=0)
continue;
printf("%d ",n);
}
本例中,對7~100的每一個數進行測試,如該數不能被7整除,即模運算不為0,則由continus語句轉去下一次迴圈。只有模運算為0時,才能執行後面的printf語句,輸出能被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;
}
}
檢查輸入的一行中有無相鄰兩字元相同。
char a,b;
printf("input a string:\n");
b=getchar();
while((a=getchar())!='\n'){
if(a==b){
printf("same character\n");
break;
}b=a;
}
本常式序中,把第一個讀入的字元送入b。然後進入迴圈,把下一字元讀入a,比較a,b是否相等,若相等則輸出提示串並中止迴圈,若不相等則把a中的字元賦予b,輸入下一次迴圈。
輸出100以內的素數。素數是只能被1 和本身整除的數。可用窮舉法來判斷一個數是否是素數。
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);
}
本常式序中,第一層迴圈表示對1~100這100個數逐個判斷是否是素數,共迴圈100次,在第二層迴圈中則對數n用2~n-1逐個去除,若某次除盡則跳出該層迴圈,說明不是素數。 如果在所有的數都是未除盡的情況下結束迴圈,則為素數,此時有i>=n, 故可經此判斷後輸出素數。然後轉入下一次大迴圈。實際上,2以上的所有偶數均不是素數,因此可以使迴圈變數的步長值改為2,即每次增加2,此外只需對數n用2~n去除就可判斷該數是否素數。這樣將大大減少迴圈次數,減少程式已耗用時間。
#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);
}
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.