久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2778|回復: 2
打印 上一主題 下一主題
收起左側

C語言goto,break和continue語句,C語言goto,break和continue跳轉語句詳解

[復制鏈接]
跳轉到指定樓層
樓主
ID:896066 發表于 2021-3-30 01:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
控制程序流程跳轉的通常有 goto、break、continue 等語句。
goto語句goto 語句是一種無條件流程跳轉語句,通常 goto 語句與 if 語句結合使用,當滿足一定條件時,程序流程跳轉到指定標號處,接著往下執行。

定義語句標識的格式如下。
語句標識:語句;
其中,“語句標識”可以是任一個合法的標識符,如 pos_1、pos_2、label_1、label_2 等都是合法的語句標識。注意,語句標識后的冒號不能省略。

goto 語句的調用語法格式為:
goto 語句標號;
程序將從對應“語句標號”的代碼處開始往下執行。

【例 1】分析以下程序,了解 goto 語句的使用。
  • #include<stdio.h>
  • int main (void){
  •     int n;
  •     pos_1:
  •         printf("請輸入一個正整數:");
  •         scanf("%d",&n);
  •         if(n<0)
  •         {
  •             printf("輸入錯誤!\n");
  •             goto pos_1;
  •         }
  •         printf("成功輸入正整數:%d\n",n);
  •         return 0;
  • }


代碼分析:在上述程序代碼中,有一個語句標號 pos_1。該程序的執行流程如下:
  • pos_1 標號處。先提示用戶“請輸入一個正整數:”。
  • 如果用戶輸入的是正整數,則提示“成功輸入正整數:***”。執行第 4 步。
  • 如果用戶輸入的是負數,則進入循環體,提示“輸人錯誤!”。程序執行流程跳轉到 pos_1 處,即跳轉到第 1 步,繼續往下執行。
  • 程序結束。

程序運行結果:假設某次運行,依次輸入 -2、-6、3 等數字,其運行結果如下:
請輸人一個正整數:-2
輸入錯誤!
請輸入一個正整數:-6
輸入錯誤!
請輸入一個正整數:3
成功輸入正整數:3

通過上述執行流程及運行結果的分析,可以發現該例中使用 goto 跳轉語句實現了循環的功能。故可以使用循環結構的代碼替換該 goto 結構的代碼。

等價實現代碼:
  • #include<stdio.h>
  • int main (void)
  • {
  •     int n;
  •     printf ("請輸入一個正整數:");
  •     scanf("%d",&n);
  •     while(n<0)
  •     {
  •         printf ("輸入錯誤!\n");
  •         printf ("請輸入一個正整數:");
  •         scanf("%d",&n);
  •     }
  •     printf ("成功輸入正整數:%d\n",n);
  •     return 0;
  • }


使用 goto 語句可能會造成程序層次不清晰,可讀性差,故在實際編程中,應盡量少使用或避免使用 goto 語句。
break語句當執行到循環體中的 break 語句時,將終止 break 所在該層的循環,從該層循環體之后的語句開始繼續執行。

break 的執行流程如下所示。

單重循環情況:選用 while 循環結構示意,do-while 循環、for 循環同樣適用。
while (循環判斷表達式)
{
    ...
    if(條件表達式)
        break;
    循環體中break后的語句;
}
循環體后的第 1 條語句;
循環體后的第 2 條語句;
...
在循環體中,當滿足一定條件執行到 break 語句時,終止 break 所在的該層循環,即“循環體中 break 后的語句”部分將不再被執行,程序執行流程轉向從“循環結構后的第 1 條語句”處,開始繼續往后執行。

雙重循環情況:使用雙重 for 循環嵌套結構示意,其他類型的循環嵌套組合同樣適用。
for (;循環判斷表達式1;)
{
    ...
    for(;循環判斷表達式2;)
    {
        ...
        if(條件表達式)
            break;
        內層循環體中break后的語句;
    }
    內層循環結構后的第1條語句; 內層循環結構后的第2條語句;
    ...
}
在內層循環中,當滿足一定條件執行到 break 語句時,僅結束 break 所在內層循環的執行(在本輪外層循環中,“內層循環體中 break 后的語句”部分不再被執行),程序執行流程跳轉到“內層循環結構后的第 1 條語句”所在的外層循環體處,開始繼續執行。

【例 2】分析以下程序輸出結果,掌握 break 語句的使用方法。
  • #include<stdio.h>
  • int main (void)
  • {
  •     int s=0,i;
  •     for(i=1;i<=10;i++)
  •     {
  •         if (6==i)
  •             break;
  •         s+=i;
  •     }
  •     printf("sum=%d\n", s);
  •     return 0;
  • }


當 i< 6時,均不執行 break 語句,可以將其忽略。即 i<6 時,等價于如下代碼。
  • for(i=1;i<=10;i++)
  • {
  •     s+=i;
  • }


相當于執行了加法運算 s=1+2+3+4+5=15。

當 i=6 時,執行 break 語句,立即終止 break 語句所在的該層 for 循環,故 i=6 并沒有累加到 s 上,接著從 for 循環結構后的第一條語句 printf("sum=%d\n",s); 處開始繼續執行。

程序運行結果為:
sum=15
continue語句在循環體中設置 continue 語句,同樣可以改變循環的執行流程,只不過它不像 break 那樣結束整個循環體,而是僅結束本次循環體的執行,提前進入下一次循環。

continue 語句的執行流程如下所示(選用 for 循環結構示意)。
for(初始表達式;循環判斷表達式;增量表達式)
{
   ...
   if(條件表達式)
       continue;
    循環體中continue后的所有語句;
}
當在上述 for 循環中執行到 continue 語句時,本次循環體的執行流程將跳過“循環體中 continue 后的所有語句”,接著執行“增量表達式”部分,然后執行“循環判斷表達式”,即提前進入下一次循環的準備工作。

【例 3】分析以下程序輸出結果,掌握 continue 語句的使用方法。
  • #include<stdio.h>
  • int main (void)
  • {
  •     int s=0,i;
  •     for(i=1;i<=10;i++)
  •     {
  •         if(6==i)
  •             continue;
  •         s+=i;
  •     }
  •     printf("sum=%d\n",s);
  •     return 0;
  • }


程序分析:
1) 當 i≠6 時,也就是 i≤5 時,忽略 continue 語句,相當于:
  • for(i=1;i<=10; i++)
  • {
  •     s+=i;
  • }


即:s=1+2+3+4+5

2) 當 i=6 時,執行 continue 語句,本次循環(i=6)體中 continue 后的語句 s+=i; 將被忽略,接著執行增量表達式 i++,相當于 i=6 沒有累加到 s 上。

3) 后續的循環中 i 不再可能等于 6,故 continue 語句也將被忽略。故程序功能相當于把 1〜10 中除 6 之外的 9 個數累加到 s 上。即 s=1+2+3+4+5+7+8+9+10=49。

運行結果為:
sum=49
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:46065 發表于 2021-3-30 09:54 | 只看該作者
非常好的總結,感謝樓主!
回復

使用道具 舉報

板凳
ID:299193 發表于 2021-4-11 21:49 | 只看該作者
不錯,謝謝分享!好資料,51黑有你更精彩!!!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩av第一页 | 中文字幕在线精品 | 一区二区三区免费在线观看 | 蜜臀久久99精品久久久久野外 | 欧美日韩不卡 | 麻豆av网站 | 91精品国产欧美一区二区 | 亚洲精品乱码 | 中文字幕免费在线 | 在线视频一区二区 | 欧美二区乱c黑人 | 成人福利网 | 成人超碰在线 | 久久成人国产 | 特黄色一级毛片 | 不卡的av在线 | 亚洲国产一区二区视频 | 九色在线视频 | 日韩av一区二区在线观看 | 国产精品久久久久久久免费大片 | 国产乱码精品1区2区3区 | 国产一级在线 | 在线精品一区 | av一区二区三区四区 | 亚洲国产精品久久久久 | 亚欧洲精品在线视频免费观看 | 2022精品国偷自产免费观看 | 成人性视频免费网站 | 中文字幕精品一区二区三区精品 | 欧美日韩成人影院 | 97久久精品午夜一区二区 | 久久久青草婷婷精品综合日韩 | 天天爽夜夜爽精品视频婷婷 | 国产乱精品一区二区三区 | 日韩精品一区二区三区视频播放 | 中文字幕成人av | av日韩在线播放 | 在线观看中文字幕视频 | 色.com | 精品久久一区 | 天天操伊人 |