您現在的位置是:首頁 > 綜合

C語言學習之-----(六)  條件語句

  • 由 夢筱歆 發表于 綜合
  • 2021-07-01
簡介*退出開關語句,遇到break才退出*case 4:y=2*x+1

條件是什麼意思

(六) 條件語句

一個表示式的返回值都可以用來判斷真假,除非沒有任何返回值的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分的為‘A’,80-89的為‘B’,70-79為‘C’,60-69為‘D’,60分以下為‘E’。現在輸入一個學生的成績,輸出他的等級。

(1)。用if語句

main()

{

float num;

char grade;

scanf(%d,&num);

if(num>=90) grade=‘A’;

else if(num>=80&&num<89) grade=‘B’;

else if(num>=70&&num<79) grade=‘C’;

else if(num>=60&&num<69) grade=‘D’;

else grade=‘E’;

printf(%c,grade);

}

(2)。用switch語句

main()

{

int num;

char grade;

scanf(%d,&num);

num/=10;

switch(num)

{

case 10:

case 9:

grade=‘A’;

break;

case 8:

grade=‘B’;

break;

case 7:

grade=‘C’;

break;

case 6:

grade=‘D’;

break;

default:

grade=‘E’;

break;

}

printf(%c,grade);

}

說明一點,並不是每個case裡面有都語句,有時侯裡面是空的,就好象這一題。switch語句執行的順序是從第一case判斷,如果正確就往下執行,直到break;如果不正確,就執行下一個case。所以在這裡,當成績是100分時,執行case 10:然後往下執行,grade=‘A’;break;退出。

想想看,這裡為什麼要用num/=10;?

假設當程式中有浮點數時怎麼辦呢?

Top