程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 三 C語言流程控制語句

三 C語言流程控制語句

編輯:關於C語言

簡介:流程控制語句

1.分支語句(條件語句)

 if/else(重點)

 switch/case

2.循環語句

 for(重點)

 while

 do while

  1. 分支語句

    1> if/else

    按照一定的條件執行不同的代碼,可以使用分支語句。

    if(邏輯表達式條件1){   //如果 必須出現1次

        滿足條件1時執行的語句;

    }

    else if(邏輯表達式條件2){  //或者  出現0-n次

        滿足條件2時執行的語句;

    }

    else{  //否則   出現0-1次

        以上條件都不滿足時執行的語句

    }

    練習:輸入一個整數,判斷 是正數、負數、零。


    int a;
     if(a>0){
        printf("%d是正數\n",a);
     }else if(a==0){
        printf("%d是零\n",a);
     }else{
        printf("%d是負數\n",a);
     }

    注:

     a> if/else 只會執行一個分支,因此,如果第一個分支滿足條件了,不再執行後面的分支。-> 如果執行到了第n個分支,前面n-1個分支一定不成立。

     b> 有else的分支語句必選其一執行,沒有else的分支語句可選其一執行。

     c> 如果分支內部只有一條語句,{}可以省略。一般執行:break/continue/return 語句時,{}通常省略。

     d> 流程控制語句 需要 注意臨界點的處理。

     e> 經常 用於 處理 業務的需求。

    #include <stdio.h>
    /*
      使用if語句來判斷輸入輸入 某年某月 有幾天
    */
    int main()
    {
        printf("請輸入年月\n");
        int y,m,maxDay=31;
        scanf("%d%d",&y,&m);
        if(m<1 || m>12){
            printf("輸入非法\n");
            return -1;
        }
        if(m==4||m==6||m==9||m==11){
            maxDay = 30;
        }
        else if(m==2){
          maxDay=28+
          (y%4==0 && y%100!=0 || y%400==0);
         /*if((y%4==0 && y%100!=0)||y%400==0)
                maxDay = 29;
           else
                maxDay = 28;*/
        }
        printf("%d\n",maxDay);
        return 0;
    }

    注:

     a> if/else 只會執行一個分支,因此,如果第一個分支滿足條件了,不再執行後面的分支。-> 如果執行到了第n個分支,前面n-1個分支一定不成立。

     b> 有else的分支語句必選其一執行,沒有else的分支語句可選其一執行。

     c> 如果分支內部只有一條語句,{}可以省略。一般執行:break/continue/return 語句時,{}通常省略。

     d> 流程控制語句 需要 注意臨界點的處理。

     e> 經常 用於 處理 業務的需求。


    #include <stdio.h>
    /*
      使用if語句來判斷輸入輸入 某年某月 有幾天
    */
    int main()
    {
        printf("請輸入年月\n");
        int y,m,maxDay=31;
        scanf("%d%d",&y,&m);
        if(m<1 || m>12){
            printf("輸入非法\n");
            return -1;
        }
        if(m==4||m==6||m==9||m==11){
            maxDay = 30;
        }
        else if(m==2){
          maxDay=28+
          (y%4==0 && y%100!=0 || y%400==0); 
         /*if((y%4==0 && y%100!=0)||y%400==0)
                maxDay = 29;
           else
                maxDay = 28;*/
        }
        printf("%d\n",maxDay);
        return 0;
    }

    2> switch/case

      格式:  

       switch(控制表達式){

           case 常量表達式 :語句; break;

           …

           default: 語句;

       }

      控制表達式被當做整數處理,可以是字符,不能是浮點數或字符串

      常量表達式必須是常量,如: 3   ‘A’   2+5  

      語句 可以是 零到多條

      不允許重復分支(值不能相同)

      default不一定在最後但一般都在最後)

      switch的執行機制,語句只有遇到break或者結束才能退出,否則會一直向下執行下去。      

switch(a){
   case 1:
     printf("1\n");
     break;
   case 2:
     printf("2\n");
     break;
   case 3:
     printf("3\n");
     break;
   default:
     printf("d\n");
 }

2. 循環語句

1> for循環

     循環語句 用於 反復執行某段代碼,直到滿足某些條件(退出條件而非循環條件)後退出。

     for 循環的語法結構:

     for(循環變量的初始化1;循環條件2;步進語句3){

         需要反復執行的代碼段 //循環體4

     }

int i;
 for(i=0;i<10;i++){
    printf("%d\n",i);
 }

     如果退出條件永遠不能滿足,叫 死循環(無限循環),ctrl+c可以退出死循環。

     無限循環最簡單寫法: for(;;){  }

     在C99中,支持:for(int i=0;i<10;i++){ },但是編譯時要使用std=c99

#include <stdio.h>
/*
   練習:計算某班學生的總分、平均分和最高分。
    分數需要輸入,無需保存分數。
    人數的問題:
     1 先輸入人數,在輸入分數。(用這個)
     2 可以用 -1 做退出的條件。
*/
int main()
{
    int sum=0,max=0x80000000;//表示最小的int型整數1000...0000
    double avg;
    int i,num=0;
    /*printf("請輸入人數\n");
    scanf("%d",&num);
    if(num<1){
        printf("非法人數\n");
        return -1;
    }
    for(i=0;i<num;i++){
        int temp;
        scanf("%d",&temp);
        sum = sum+temp;
        if(max<temp) max = temp;
    }*///次數在循環前確定
    for(;;){//循環次數不能確定,輸入-1表示輸入結束
        int temp;
        scanf("%d",&temp);
        if(temp == -1) break;//退出循環
        sum = sum+temp;
        if(max<temp) max = temp;
        num++;
    }
    printf("sum=%d,avg=%lf,max=%d\n",
        sum,1.0*sum/num,max);
    return 0;
}

   break 可以退出 循環/switch,退出函數用return。

    循環可以分為:次數確定、次數不確定、無限循環。

    次數確定的: int i; for(i=0;i<num;i++){...}

    次數不確定:  for(;;){...if(條件) break; ...}

    無限循環:   for(;;){...}

    循環中經常嵌套另外的循環,叫多重循環,最常用的是二重循環

   二重循環的難點在於內層循環次數的控制,具體公式如下:

    i如果遞增1,那麼

    j< m*i + n ;j++

     m 是 內層循環遞增的次數,如果遞減取負數

     n 是 內層循環第一次循環的次數

    前提:i和j的初始值保持一致,最好都為0。

#include <stdio.h>
/*
  使用雙重for循環打印
  *
  ***
  *****
  *******
  *********
*/
int main()
{
    int i,j;//i控制行,j控制列
    for(i=0;i<5;i++){
        for(j=0;j<2*i+1;j++){
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
#include <stdio.h>
/*
  使用雙重for循環
  打印9*9乘法表
     j*i      
     1*1=1
     1*2=2 2*2=4
     ......
*/
int main()
{
    int i,j;
    for(i=1;i<10;i++){
        for(j=1;j<i+1;j++){
            printf("%d*%d=%d ",j,i,j*i);
        }
        printf("\n");
    }
    return 0;
}

  2> while循環

    while循環和for循環 除了語法不同,其他都可以互通。

    語法:

    循環變量的聲明和初始化;

    while(條件){

       循環體;

       步進語句;

    }

#include <stdio.h>
int main()
{
    int sum=0;
    while(1){
        int temp;
        printf("請輸入數字(0退出)\n");
        scanf("%d",&temp);
        if(temp == 0) break;
        sum += temp;
    }
    printf("sum = %d\n",sum);
    return 0;
}
int i=0;
   while(i<10){
       printf("%d\n",i);
       i++;
   }

    while(1){} // 死循環

3> do-while循環

     do while循環

     語法:

     循環變量的聲明和初始化;

     do{

        循環體;

        步進語句;

     }while(條件);

     do-while 循環 先do 後判斷條件,所以 至少執行一次。

int i=10,j=10;
   do{
       printf("%d\n",i);
       i++;
   }while(i<10);
   while(j<10){
       printf("%d\n",j);
       j++;
   }
  // 當i,j 初始 不滿足條件時,do循環打印i,while不打印j。
  // 當i,j 初始 滿足條件時,無區別。
  // 很多情況下,do循環和while(1){ ...if() break; }可以互通。
#include <stdio.h>
/*
    使用do-while來計算輸入數字的位數
    注意:do-while();分號結束
*/
int main()
{
    int num,count=0;
    printf("請輸入一個整數\n");
    scanf("%d",&num);
    do{
        num = num/10;
        count++;
        if(num==0) break;
    }while(1/*num!=0*/);
    printf("%d\n",count);
    return 0;
}

   注:

break和continue

    continue用於循環內部,結束本次循環,繼續下一次循環,如果下一次循環條件不成立,也會退出。

    break 用於循環內部,中斷所有循環,結束整個循環如果是嵌套循環,break只是退出本層循環)。

本文出自 “雪狼” 博客,請務必保留此出處http://wolfzhxp.blog.51cto.com/2409990/1285967

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved