天天看點

初識C語言之條件結構篇——帶你認知程式設計世界的邏輯之美!

目錄

​​IF語句​​

​​if語句​​

​​IF語句的基本的形式​​

​​if…else語句形式​​

​​else if語句形式​​

​​IF嵌套形式​​

​​if的嵌套形式​​

​​條件運算符​​

​​switch語句​​

​​switch語句的基本形式​​

​​多路開關模式的switch語句​​

​​if else語句和switch語句的差別​​

​​選擇結構程式應用​​

​​每文一語​​

IF語句

if語句

在日常生活中,為了使交通暢通有序,一般會在路口設立交通信号燈。在信号燈顯示為綠色時車輛可以行駛通過,當信号燈轉為紅色時車輛就要停止行駛。可見,信号燈給出了信号,人們通過不同的信号進行判斷,然後根據判斷的結果進行相應的操作。

在C語言程式中,想要完成這樣的判斷操作,利用的就是if語句。if語句的功能就像路口的信号燈一樣,根據判斷不同的條件,決定是否進行操作。

據說第一台數字計算機是用來進行決策操作的,使得之後的計算機都繼承了這項功能。程式員将決策表示成對條件的檢驗,即判斷一個表達式值的真假。除了沒有任何傳回值的函數和傳回無法判斷真假的結構函數外,幾乎所有表達式的傳回值都可以判斷真假。

IF語句的基本的形式

if語句通過對表達式進行判斷,根據判斷的結果選擇是否進行相應的操作。if語句的一般形式為:

if(表達式)  語句

其語句執行流程如圖所示。

初識C語言之條件結構篇——帶你認知程式設計世界的邏輯之美!

【執行個體6.1】 使用if語句模拟信号燈指揮車輛行駛。在本執行個體中,為了模拟十字路口上信号燈指揮車輛行駛,要使用if語句判斷信号燈的狀态。如果信号燈為綠色,則說明車輛可以行駛通過,通過輸出語句進行資訊提示說明車輛的行動狀态。

#include<stdio.h>
int main()
{
  int iSignal;  /*定義變量表示信号燈的狀态*/
  printf("the Red Light is 0,the Green Light is 1\n");/*輸出提示資訊*/
  scanf("%d",&iSignal); /*輸入iSignal變量*/
  if(iSignal==1)  /*使用if語句進行判斷*/
  {
    printf("the Light is green,cars can run\n");      /*判斷結果為真時輸出*/
  }
  return 0;
}      
初識C語言之條件結構篇——帶你認知程式設計世界的邏輯之美!

【執行個體6.2】 完善if語句的使用。原程式中僅對綠燈情況下做出相應的操作,為進一步完善信号燈為紅燈時的操作,在程式中再添加一次if語句對信号燈為紅燈時的判斷,并且在條件成立時給出相應的操作。

#include<stdio.h>
int main()
{
  int iSignal;  /*定義變量表示信号燈的狀态*/
  printf("the Red Light is 0,the Green Light is 1\n");/*輸出提示資訊*/
  scanf("%d",&iSignal); /*輸入iSignal變量*/
  if(iSignal==1)    /*使用if語句進行判斷*/
  {
    printf("the Light is green,cars can run\n");/*判斷結果為真時輸出*/
  }
  if(iSignal==0)  /*使用if語句進行判斷*/
  {
    printf("the Light is red,cars can't run\n");/*判斷結果為真時輸出*/
  }
  return 0;
}      

if…else語句形式

除了可以指定在條件為真時執行某些語句外,還可以在條件為假時執行另外一段代碼。這在C語言中是利用else語句來完成的,其一般形式為:

if(表達式)

  語句塊1;

else

  語句塊2;

其語句執行流程如圖所示。

初識C語言之條件結構篇——帶你認知程式設計世界的邏輯之美!

【執行個體6.3】 使用if…else語句進行選擇判斷。在本執行個體中,使用if…else語句判斷使用者輸入的數值,輸入的數字為0表示條件為假,輸入的數字為非0表示條件為真。

#include<stdio.h>
int main()
{
  int iNumber;    /*定義變量*/
  printf("Enter a number\n"); /*顯示提示資訊*/
  scanf("%d",&iNumber); /*輸入數字*/
  if(iNumber) /*判斷變量的值*/

  { 
    /*判斷為真時執行輸出*/
    printf("the value is true and the number is: %d\n",iNumber);
  }

  else  /*判斷為假時執行輸出*/
  {
    printf("the value is flase and the number is: %d\n",iNumber);
  }
  return 0;
}      
初識C語言之條件結構篇——帶你認知程式設計世界的邏輯之美!

【執行個體6.4】 使用if…else語句得到兩個數的最大值。本執行個體要實作的功能是比較兩個數值的大小,這兩個數值由使用者輸入,然後将其中相對較大的數值輸出顯示。

#include<stdio.h>
int main()
{
  int iNumber1,iNumber2;    /*定義變量*/
  printf("please enter two numbers:\n");  /*資訊提示*/

  scanf("%d%d",&iNumber1,&iNumber2);  /*輸入資料*/

  if(iNumber1>iNumber2) /*判斷iNumber1是否大于iNumber2*/
  {
    printf("the bigger number is %d\n",iNumber1);
  }
  else  /*判斷結果為假,則執行下面語句*/
  {
    printf("the bigger number is %d\n",iNumber2);
  }
  return 0;
}      
初識C語言之條件結構篇——帶你認知程式設計世界的邏輯之美!

【執行個體6.5】 使用if…else語句模拟信号燈。多數路口的信号燈還有一個黃燈,是用來提示車輛準備行駛或者停車的。6.2.1節使用if語句模拟信号燈,在本執行個體中使用if…else語句進一步完善這個程式,使得信号燈具有黃燈相應的功能。

#include<stdio.h>
int main()
{
  int iSignal;  /*定義變量表示信号燈的狀态*/
  printf("the Red Light is 0,\nthe Green Light is 1,\nthe Yellow Light is other number\n");   /*輸出提示資訊*/
  scanf("%d",&iSignal);   /*輸入iSignal變量*/
  if(iSignal==1)    /*當信号燈為綠色時*/
  {
    printf("the Light is green,cars can run\n");/*判斷結果為真時輸出*/
  }
  if(iSignal==0)  /*當信号燈為紅燈時*/
  {
    printf("the Light is red,cars can't run\n");  /*判斷結果為真時輸出*/
  }
  else  /*當信号燈為黃燈時*/
  {
    printf("the Light is yellow,cars are ready\n");
  }
  return 0;
}      
初識C語言之條件結構篇——帶你認知程式設計世界的邏輯之美!

else if語句形式

利用if和else關鍵字的組合可以實作else if語句,這是對一系列互斥的條件進行檢驗,其一般形式如下:

if(表達式1) 語句1

else if(表達式2) 語句2

else if(表達式3) 語句3

  …

else if(表達式m) 語句m

else 語句n

else if語句執行流程如圖

初識C語言之條件結構篇——帶你認知程式設計世界的邏輯之美!

IF嵌套形式

if的嵌套形式

在if語句中又包含一個或多個if語句稱為if語句的嵌套。一般形式如下:

if(表達式1)

  if(表達式2)  語句塊1

  else  語句塊2

else

  if(表達式3)  語句塊3

  else  語句塊4

使用if語句嵌套的形式功能是對判斷的條件進行細化,然後進行相應的操作。

這就好比人們在生活中,每天早上醒來的時候想一下今天是星期幾,如果是周末就是休息日,如果不是周末就要上班;同時,休息日可能是星期六或者是星期日,星期六就和朋友去逛街,星期日就陪家人在家。

根據這個比喻來看一下上述一般形式表示:if語句判斷表達式1就像判斷今天是星期幾,假設判斷結果為真,則用if語句判斷表達式2,這就好像判斷出今天是休息日,然後去判斷今天是不是周六;如果if語句判斷表達式2為真,那麼執行語句塊1中的内容。如果不為真,那麼執行語句塊2中的内容。就比如,如果為星期六就陪朋友逛街,如果為星期日就陪家人在家。外面的else語句表示不為休息日時的相應操作。代碼如下所示。

if(iDay>Friday) /*判斷為休息日的情況*/
{
  if(iDay==Saturday)    /*判斷為周六時的操作*/
  {}
  else    /*為周日時的操作*/
  {}
}
else      /*不為休息日的情況*/
{
  if(iDay==Monday)    /*判斷為周一時的操作*/
  {}
  else
  {}
}      

條件運算符

在使用if語句時,可以通過判斷表達式為“真”或“假”,而執行相應的表達式。例如:

if(a>b)

  {max=a;}

else

  {max=b;}

上面的代碼可以用條件運算符“? :”來進行簡化,例如:

max=(a>b)?a:b;

條件運算符對一個表達式的真或假值結果進行檢驗,然後根據檢驗結果傳回另外兩個表達式中的一個。條件運算符的一般形式:

表達式1?表達式2:表達式3;

在運算中,首先對第一個表達式的值進行檢驗。如果值為真,則傳回第二個表達式的結果值;如果值為假,則傳回第3個表達式的結果值。例如上面使用條件運算符的代碼,首先判斷表達式a>b是否成立,成立則說明結果為真,否則為假。當為真時,将a的值賦給max變量;如果為假,則将b的值賦給max變量。

switch語句

switch語句的基本形式

switch語句是多分支選擇語句。例如,如果隻需要檢驗某一個整型變量的可能取值,那麼可以用更簡便的switch語句。switch語句的一般形式如下:

switch (表達式)
{
  case 情況1:
    語句塊1;
  case 情況2:
    語句塊2;
  …
  case 情況n:
    語句塊n;
  default:
    預設情況語句塊;
}      

switch語句的程式流程如圖所示 

初識C語言之條件結構篇——帶你認知程式設計世界的邏輯之美!

多路開關模式的switch語句

設計多路開關模式的switch語句,其形式如下:

switch(表達式)
{
  case 1:
    語句1
    break;
  case 2:
  case 3:
    語句2
    break;
  ……
default:
    預設語句
    break;
}      

可以看到如果在case 2後不使用break語句,那麼符合檢驗時與符合case 3檢驗時的效果是一樣的。也就是說,使用多路開關模式使得多種檢驗條件使用一種解決方式。

if else語句和switch語句的差別

if else語句和switch語句都用于根據不同的情況檢驗條件做出相應的判斷。那麼if else語句和switch語句有什麼差別呢?下面從兩者的文法和效率的比較進行講解。

文法的比較

if是配合else關鍵字進行使用的,而switch是配合case使用的;if語句先對條件進行判斷,而switch後進行判斷。

效率的比較

if else結構對開始少量的檢驗判斷速度比較快,但是随着檢驗的增長會逐漸變慢,其中的預設情況是最慢的。使用if else結構可以判斷表達式,但是也不能減少選擇深度的增加使得檢驗速度變慢的趨勢,并且也不容易進行後續的添加擴充。

switch結構中,對其中每一項case檢驗的速度都是相同的,但除去default的預設情況,default預設情況比其他情況都快。

當判定的情況占少數時,if else結構比swtich結構檢驗速度快。也就是說,如果分支在3或者4個以下,用if else比較好,否則選擇switch結構。

選擇結構程式應用

【執行個體6.14】 使用switch語句計算運輸公司的計費。某運輸公司的收費按照使用者運送貨物的路程進行計費。路程(s)越遠,每公裡運費越低,收費标準如表6.1所示。

路程(KM) 運費
s<250 沒有折扣
250≤s<500 2%折扣
500≤s<1000 5%折扣
1000≤s<2000 8%折扣
2000≤s<3000 10%折扣
3000≤s 15%折扣
#include<stdio.h>
int main()
{
  int iDiscount;    /*表示折扣*/
  int iSpace;   /*表示路程*/
  int iSwitch;    /*表示折扣的檢驗情況*/
  float fPrice,fWeight,fAllPrice;
  printf("enter the price , weight and space\n");
  scanf("%f%f%d",&fPrice,&fWeight,&iSpace);
  if(iSpace>3000)
  {
    iSwitch=12;   /*折扣的檢驗情況為12*/
  }
  else
  {
    iSwitch=iSpace/250; /*計算折扣的檢驗情況*/
  }
  switch(iSwitch)   /*使用switch進行檢驗*/
  {
  case 0:
    iDiscount=0;  
    break;
  case 1:
    iDiscount=2;
    break;
        case 2:
  case 3:
    iDiscount=5;
    break;
  case 5:
  case 6:
  case 7:
    iDiscount=8;
    break;
  case 8:
  case 9:
  case 10:
  case 11:
    iDiscount=10;
    break;
  case 12:  
    iDiscount=12;
    break;
  default:
    break;
  }
  fAllPrice=fPrice*fWeight*iSpace*(1-iDiscount/100.0);  /*計算總價格*/
  printf("AllPrice is :%.4f\n",fAllPrice);  /*輸出結果*/
  return 0;
}      
初識C語言之條件結構篇——帶你認知程式設計世界的邏輯之美!

本本介紹了選擇結構的程式設計方式,包括if語句和switch語句。同時對if…else語句和else if語句的形式也進行了介紹,為選擇結構程式提供了更多的控制方式。然後介紹了switch語句,當switch語句用在當檢驗的條件較多時,如果使用if語句進行嵌套也是可以實作的,不過其程式的可讀性會降低。最後通過兩種選擇語句的比較來進行區分。

每文一語

繼續閱讀