C語言入門教程之五條件語句

 一個表達式的返回值都可以用來判斷真假,除非沒有任何返回值的void型和返回無法判斷真假的結構。當表達式的值不等於0時,它就是“真”,否則就是假。一樣個表達式可以包含其他表達式和運算符,並且基於整個表達式的運算結果可以得到一個真/假的條件值。因此,當一個表達式在程序中被用於檢驗其真/假的值時,就稱爲一個條件。

一、if語句
        if(表達式)  語句1;
    如果表達式的值爲非0,則執行語句1,否則跳過語句繼續執行下面的語句。
    如果語句1有多於一條語句要執行時, 必須使用{和} 把這些語句包括在其中, 此時條件語句形式爲: 
        if(表達式)
        {
            語句體1;
        }
    例如:
        if(x>=0)  y=x;
        if(a||b&&c) 
        {
            z=a+b;
            c+=z;
        }

二、if--else語句
    除了可以指定在條件爲真時執行某些語句外,還可以在條件爲假時執行另外一段代碼。在C語句中利用else語句來達到這個木的。
        if(表達式)  語句1;
        else  語句2;
    同樣,當語句1或語句2是多於一個語句時,需要用{}把語句括起來。
    例如:
        if(x>=0)  y=x;
        else  y=-x;

三、if--else if--else結構。
        if(表達式1) 
            語句1; 
        else if(表達式2) 
            語句2; 
        else if(表達式3) 
            語句3; 
              . 
              . 
              . 
        else 
            語句n; 
    這種結構是從上到下逐個對條件進行判斷,一旦發現條件滿點足就執行與它有關的語句, 並跳過其它剩餘階梯;若沒有一個條件滿足,則執行最後一個else 語句n。最後這個else常起着缺省條件的作用。同樣,如果每一個條件中有多於一條語句要執行時,必須使用{和}把這些語句包括在其中。
    條件語句可以嵌套,這種情況經常碰到,但條件嵌套語句容易出錯,其原因主要是不知道哪個if對應哪個else。
    例如: 
        if(x>20||x<-10) 
            if(y<=100&&y>x) 
                printf(Good); 
            else 
                printf(Bad); 
    對於上述情況, Turbo C2.0規定: else語句與最近的一個if語句匹配, 上例中的else與if(y<=100&&y>x)相匹配。爲了使else與if(x>20||x<-10)相匹配, 必須用花括號。如下所示: 
        if(x>20||x<-10)
        { 
            if(y<=100&&y>x) 
                printf(Good); 
        } 
        else 
            printf(Bad); 

    下面舉幾個例子:
    1.輸入一個數,如果大於0,輸出plus;如果是負數,輸出negative;如果正好是0,則輸出zero。
        main()
        {
            float num;
            scanf(%f,&f);
            if(num>0)
                printf(plus/n);
            else if(num<0)
                printf(negative/n);
            else
                printf(zero/n); 
        }
     先定義兩個變量,然後輸入一個數,然後判斷這個數的範圍,輸出對應的字符串。

     2.輸入一個數x,輸出y。其中y是x的絕對值。
         main()
         {
             float x,y;
             scanf(%f,&x);
             if(x>=0) y=x;
             else y=-x;
             printf(%f/n,y);
         }
     程序比較簡單,這兒就不分析了。
     其實Trubo C 2.0把一些常用的功能都寫好了,我們只需要使用就可。例如求絕對值的功能在C的庫裏面就有。看下面的:
         #include math.h
         main()
         {
             float x,y;
             scanf(%f,&x);
             y=fabs(x);   /*求x的絕對值,然後賦值給y*/
             printf(%f/n,y);
         }
                
     這個程序和上面的程序完成的功能是一模一樣的,都是求絕對值。可以看出,用下面這個方法比上面就要好一些。由於fabs()是一個函數,系統自帶的,所以在使用它的時候,我們必須把它所在的庫文件math.h包含都程序中,即程序最前面一行。類似的還有求開方sqrt(),求指數冪exp()等等,這些與數學方面有關的函數都在math.h裏面。具體哪些有哪些沒有,在什麼庫裏面,可以查看一些手冊。
     
     3.輸入x,輸出y,x和y滿足關係:
           x<-5     y=x;
           -5<=x<1  y=2*x+5;
           1<=x<4   y=x+6;
           x>=4     y=3*x-2;
     程序如下:
         main()
         {
             float x,y;
             scanf(%f,&x);
             if(x<-5)
                 y=x;
             else if(-5<=x&&x<1)
                 y=2*x+5;
             else if(1<=x&&x<4)
                 y=x+6;
             else
                 y=3*x-2;
             printf(%f/n,y);
         }
     
    這裏要說明兩點:
        (1).-5<=x&&x<1不能寫成-5<=x<1;1<=x&&x<4也不能寫成1<=x<4;在C語言中,不能認識連續不等式。
        (2).y=2*x+5不能寫成y=2x+5;y=3*x-2也不能寫成y=3x-2;這與我們平時所寫的方法不一樣。
       
     4.輸入三個數x,y,z,然後按從大到小輸出。
         main()
         {
             float x,y,z;
             scanf(%f%f%f,&x,&y,&z);
             if(x>=y&&x>=z)
             {
                 printf(%f/t,x);
                 if(y>=z) printf(%f/t%f/n,y,z);
                 else printf(%f/t%f/n,z,y);
             }
             else if(y>=x&&y>=z)
             {
                 printf(%f/t,y);
                 if(x>=z) printf(%f/t%f/n,x,z);
                 else printf(%f/t%f/n,z,x);
             }
             else
             {
                 printf(%f/t,z);
                 if(x>=y) printf(%f/t%f/n,x,y);
                 else printf(%f/t%f/n,y,x);
             }
        }
        說明:這是一個典型的if語句嵌套結構,如果不使用括號,那麼if和else的對應關係就亂了。

四、switch--case語句
    在編寫程序時, 經常會碰到按不同情況分轉的多路問題,  這時可用嵌套if -else-if語句來實現, 但if-else-if語句使用不方便, 並且容易出錯。對這種情況, Turbo C2.0提供了一個開關語句。開關語句格式爲: 
        switch(變量) 
        { 
            case 常量1: 
                 語句1或空; 
            case 常量2: 
                 語句2或空; 
                   . 
                   . 
                   . 
            case 常量n: 
                 語句n或空; 
            default: 
                 語句n+1或空; 
        } 
                
    執行switch開關語句時,將變量逐個與case後的常量進行比較,若與其中一個相等,則執行該常量下的語句,若不與任何一個常量相等,則執行default後面的語句。
    注意: 
        1.switch中變量可以是數值,也可以是字符,但必須是整數。
        2.可以省略一些case和default。
        3.每個case或default後的語句可以是語句體,但不需要使用{和}括起來。
    例如:
        main()
        {
            int x,y;
            scanf(%d,&x);
            witch(x)
            {
                case 1:
                     y=x+1;
                     break;  /*退出開關語句,遇到break才退出*/
                case 4:
                     y=2*x+1;
                     break;
                default:
                     y=x--;
                     break;
            }
            printf(%d/n,y);
        }
                
    從上面的例子可以看出,用開關語句編的程序一定可以用if語句做。那麼在什麼情況下需要用switch語句呢?一般在出現比較整的情況下或者能轉化成比較整數的情況下使用。看下面的例子:
    
    例子:一個學生的成績分成五等,超過90分的爲&apos;A&apos;,80-89的爲&apos;B&apos;,70-79爲&apos;C&apos;,60-69爲&apos;D&apos;,60分以下爲&apos;E&apos;。現在輸入一個學生的成績,輸出他的等級。

        (1).用if語句
        main()
        {
            float num;
            char grade;
            scanf(%d,&num);
            if(num>=90)  grade=&apos;A&apos;;
            else if(num>=80&&num<89) grade=&apos;B&apos;;
            else if(num>=70&&num<79) grade=&apos;C&apos;;
            else if(num>=60&&num<69) grade=&apos;D&apos;;
            else grade=&apos;E&apos;;
            printf(%c,grade);
        }
      
       (2).用switch語句
       main()
       {
           int num;
           char grade;
           scanf(%d,&num);
           num/=10;
           switch(num)
           {
               case 10:
               case 9:
                    grade=&apos;A&apos;;
                    break;
               case 8:
                    grade=&apos;B&apos;;
                    break;
               case 7:
                    grade=&apos;C&apos;;
                    break;
               case 6:
                    grade=&apos;D&apos;;
                    break;
               default:
                    grade=&apos;E&apos;;
                    break;
           }
           printf(%c,grade);
       }
                
       說明一點,並不是每個case裏面有都語句,有時侯裏面是空的,就好象這一題。switch語句執行的順序是從第一case判斷,如果正確就往下執行,直到break;如果不正確,就執行下一個case。所以在這裏,當成績是100分時,執行case 10:然後往下執行,grade=&apos;A&apos;;break;退出。
       想想看,這裏爲什麼要用num/=10;?
       假設當程序中有浮點數時怎麼辦呢?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章