C語言流程控制??

  • 版權聲明:本文為博主原創文章,未經博主允許不得轉載。

一、流程控制結構

(1)順序結構:按書寫順序執行每一條語句。

(2)選擇結構:對給定的條件進行判斷,根據判斷結果決定執行哪一段代碼。

(3)循環結構:在給定條件成立的情況下,反復執行某一段代碼。

二、選擇結構-if

(一)if簡單使用

  • (1) 第一種結構:
a) 如果條件為真,就執行后面的語句,否則不執行。

if(條件)

{

語句1;

語句2;

····

}```

- (2) 第二種結構:

a) 如果條件成立就執行語句1,否則執行語句2。

if(條件)

{

語句1;

}

else

{

語句2;

}```

  • (3) 第三種結構:
a) 先判斷條件1,若成立則執行語句1,其它不執行;若條件1不成立,則檢查條件2···,【注意】如果條件3成立,則說明前面的都不成立。所有的語句塊只有一個會被執行。

if(條件1)

{

語句1;

}

else if(條件2)

{

語句2;

}

else (條件3)

{

語句3;

}```

- (4) 第四種結構:

a) 在這種情況下,當條件成立,只執行語句1,語句2不屬于次條件結構,但不推薦此種寫法。

If(條件)

語句1;

語句2;```

(二)if使用注意

①. 比較大小時,可以把常量值放在左邊,變量值放在右邊以避免錯誤。因為if(a==0)也容易被寫成if(a=0),而這種情況,編譯器并不會報錯,推薦使用if(0==a)這種寫法。

②. 注意賦值運算符,不要把=寫成是==。

③. If(條件)后面不要加分號,這代表是一個空語句,后面的代碼塊將成為一個獨立的代碼塊。如if(條件);{.....}//需要多加注意

④. 注意作用域的問題,如果要在if后面定義新的變量,則一定要使用大括號。

if(10>6)

{

Int a;//a的作用域在代碼塊結束后失效

}

Printf(“a=%d”,a);//編譯器報錯,找不到標識符

 

if(10>6)

Int a; //這種情況下報錯,a的作用域不明確

Printf(“a=%d”,a); //編譯器報錯,找不到標識符

 

⑤. If(0){...}隨便挑一個數值也可以做條件```

>(三)if結構練習

>問題:輸入一個整數seore代表分數,根據分數輸出等級(A-E)。

>A 90-100  B80-89 C70-79 D60-69 E0-60

代碼:

include<stdio.h>

int main()
{

//定義變量存儲分數值

int score;

//提示輸入

printf("請輸入分值:\n");

//接受輸入

scanf("%d",&score);

//判斷等級

if(score>=90&&score<=100)
{
printf("A\n");
}
else if(score>=80)
{
printf("B\n");
}
else if(score>=70)
{
printf("C\n");
}
else if(score>=60)
{
printf("D\n");
}
else
{
printf("E\n");
}
return 0;
}```

三、選擇結構-switch

  • (一)switch結構
switch(值) //通常是變量
{

  case 數值1:

  語句1;

  break;

  case 數值2:

  語句2;

  break;

  case 數值3:

  語句3;

  break;

  default :

  語句4;

  break;

}```

>######解說:該結構把數值與數值1進行比較,若相等,則執行后面的所有語句,直到遇見break語句跳出整個循環,若前面的條件都不滿足,則最終會執行default后面的語句。如果不寫break語句,則后面的語句會接連執行,直到遇到break語句或者是全部語句執行完畢,只要前面的條件成立,則后面的判斷就直接被忽略。


####(二)Switch使用注意

char c=‘A’;

switch(c)
{
case ‘A’:

語句1;

break;

case 65://不能這樣寫,因為‘A’的ASCII值就是65,會報錯

語句2;

break;

case 數值3:

int a=10;

//a的作用域不明確報錯,c語言檢查變量的作用域根據{}決定,這里可以加{}

break;

default :

語句4;

break;

}```

注意:如果要在case后面的語句中定義變量,則必須使用大括號包住。

(三)switch結構練習

問題:輸入一個整數seore代表分數,根據分數輸出等級(A-E)。

A 90-100 B80-89 C70-79 D60-69 E0-60

代碼:
#include<stdio.h>

int main()
{

  //定義變量存儲分數值

  int score;

  //提示輸入

  printf("請輸入分值:\n");

  //接受輸入

  scanf("%d",&score);

  //判斷等級

  switch(score/10)
  {

    case 10:

    case 9:

    printf("A\n");

    case 8:

    printf("B\n");

    break;

    case 7:

    printf("C\n");

    break;

    case 6:

    printf("D\n");

    break;

    default:

    printf("E\n");

    break;

  }

return 0;
}```

######【對比】if與switch:

>1. If語句能夠完成的功能,switch有時并不能夠完成,如判斷if(a>100)

>2. 在有些情況下,if語句和switch語句可以互換

>3. Switch語句能完成的功能,if語句都可以完成


####四、循環結構-while

- (一)簡單使用

while(條件)
{
語句;
}```

解說:先判斷條件是否成立,成立則執行,執行完代碼后再次判斷條件是否成立(判斷條件-》執行代碼塊-》判斷條件-》執行代碼塊···)1.首先確定循環執行的操作,2.在確定約束條件,即需要循環多少次,3.定義一個變量來記錄循環的次數。

  • 提示:在while循環體內使用if...break(跳出整個循環)或if...continue語句(跳出本次循環,繼續下一次循環判斷)。

  • while結構的運行原理:

①. 如果一開始條件不成立,則永遠不會執行循環體。

②. 如果條件成立,則執行一次循環體,執行完畢后再次判斷條件是否成立。

③. break:直接退出整個循環。

④. continue:結束當前循環體,進行下一輪循環判斷。

  • (二)使用注意
  1. while(1){.....}是一個死循環
  1. while(a<10);{...}在條件后面加逗號表示循環體是一個空語句,而非{}部分
  1. while條件語句后推薦使用{},否則只有第一條語句時循環體
  1. 最簡單的死循環 while(1);//永遠執行空語句,讓程序崩潰
  • (三)while練習

問題:編程實現,提示輸入一個正整數n,計算1+2+3+...n的值。

代碼:

#include<stdio.h>

int main()
{

  //定義變量保存用戶輸入的整數

  int n;

  while(n<=0)
  {

    //提示輸入

    printf("請輸入一個正整數:\n");

    //接受輸入

    scanf("%d",&n);

  }

  int sum=0;

  int number=0;//默認被加的數值

  while(number<n)
  {

    number++;

    sum=sum+number;
  }

  printf("計算結果為:%d\n",sum);

  return 0;

}```


####五、循環結構-do while

do
{
語句
}while(條件)```

特點:do while循環至少會執行一次循環體

六、循環結構-for

  • (一)基本使用
for(語句1,條件,語句2)
{

  //循環體
}```

>語句1:一般為初始化語句

>語句2:一般為增量語句(執行完循環體后再執行的語句)

- for循環原理:

  1. for循環一開始就會執行語句1(整個for循環只會執行一次)

  2. 判斷條件是否成立,若成立,則執行一次循環體,然后執行語句2,再次判斷條件是否成立,若條件不成立則結束循環

  3. 順序為:(語句1-》判斷條件-》循環體—》語句2-》判斷條件-》循環體···)```

【對比】for和while:

在性能上,for循環稍勝一籌,因為while循環只能使用外部的變量,而for循環可以對變量進行及時回收。

  • (二)for使用注意

①. 不要隨便在for語句后面寫上分號,如for();{....}

②. 定義變量的作用域不明確錯誤
for(int i=0;i<5;i++)
int a=10; //編譯器報錯,變量作用域不明確

③. For語句中最簡單的死循環for(;;);

④. 需要注意變量定義的作用域

int a=10;

for(int i=0,int a=9;i<5;i++)
{

  int a=10;

  printf(“a=%d\n”,a);//這里打印的a的值是多少?
}```

 

- (三)for循環嵌套

>用以輸出特定格式的內容,如QQ好友列表等,提升可擴展性。

for(in i=0;i<5;i++)
{

//外面的循環控制行數

printf(“好友列表%d\n”,i);

//內部的循環控制列數

for(int j=1;j<=6;j++)
{

printf(“好友%d\n”,j);

}

}```

  • (四)for練習

使用for循環輸出九九乘法表。//先控制行數,在控制列數

代碼:

#include<stdio.h>

int main()
{
  for(int i=1;i<=9;i++)
  {
    for(int j=1;j<=i;j++)
    {
      printf("%d*%d=%d\t",i,j,i*j);
    }
    printf("\n");
  }
  return 0;
}```
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容