程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> VC#2005快速入門之使用if語句

VC#2005快速入門之使用if語句

編輯:關於C語言
快速入門|語句  如果想根據一個布爾表達式的結果選擇執行兩個不同的代碼塊,就可以使用if語句。

  理解if語句的語法

  if語句的語法格式如下(if和else是關鍵字):

if ( booleanExpression )
 statement-1;
else
 statement-2;

  如果booleanExpression求值為true,就運行 statement-1;否則就運行statement-2。else關鍵字和後續的statement-2是可有可無的。如果沒有else子句,那麼在booleanExpression為false的前提下,什麼都不會發生。

  例如,以下if語句用於遞增一個秒表的秒針(暫時忽略分鐘)。如果seconds的值是59,就重置為0;否則就使用操作符++來遞增:

int seconds;
...
if (seconds == 59)
seconds = 0;
else
seconds++;


  只使用布爾表達式!

  if語句中的表達式必須放在一對圓括號中。除此之外,表達式必須是布爾表達式。在另一些語言中(尤其是C和C++),還可以使用一個整數表達式,編譯器能自動將整數值轉換成true(非零值)或false(零值)。C#不允許這樣做。如果寫這樣的一個表達式,編譯器會報錯。

  假如在if語句中不慎寫了一個賦值表達式,而不是執行一個相等性測試,C#編譯器也能識別你的錯誤。例如:

int seconds;
...
if (seconds = 59) // 編譯時錯誤
...
if (seconds == 59) // 正確

  不慎而寫成賦值表達式,是C和C++程序容易出現bug的另一個原因。在C和C++中,會將所賦的值(59)悄悄地轉換成一個布爾值(任何非零的值都會被視為true),造成每次都必定執行if語句之後的代碼。

  最後,可以將一個布爾變量作為表達式使用,如下例所示:

bool inWord;
...
if (inWord == true) // 可以,但不常用
...
if (inWord) // 更好

  使用塊來分組語句

  有時,需要在一個布爾表達式為true的前提下運行兩個或者更多的語句。可以將要運行的語句分組到一個新方法中,然後調用那個方法。但是,一個更簡單的做法是將語句分組到一個塊(block)中。塊是指用一對大括號來封閉的一系列語句。在下例中,兩個語句將seconds變量重置為零,並使minutes變量遞增。我們用一個塊來分組這兩個語句。假如seconds的值等於59,就執行該塊:

int seconds = 0;
int minutes = 0;
...

if (seconds == 59)
{
seconds = 0;
minutes++;
}
else
seconds++;


  重要提示 假如遺漏大括號,將造成兩個嚴重後果。首先,C#編譯器只將第一個語句(seconds=0)與if語句關聯起來,下一個語句(minutes++)將不再成為if語句的一部分。其次,當編譯器遇到else關鍵字時,不會將它與前一個if語句關聯起來,所以會報告語法錯誤。

  嵌套if語句

  可以在一個if語句中嵌套其他if語句。這樣一來,就可以將一系列布爾表達式鏈接起來,它們將依次測試,直到其中一個求值為true。在下例中,假如day值為0,則第一個測試求值為true,值"Sunday"將賦給dayName變量。假如day值不為0,則第一個測試失敗,控制將傳遞給else子句。該子句將運行第二個if語句,將day的值與1進行比較。注意,只有在第一個if測試為false的前提下,才會執行第二個if。類似地,只有在第一個和第二個if測試為false的前提下,才會執行第三個if。

if (day == 0)
dayName = "Sunday";
else if (day == 1)
dayName = "Monday";
else if (day == 2)
dayName = "Tuesday";
else if (day == 3)
dayName = "Wednesday";
else if (day == 4)
dayName = "Thursday";
else if (day == 5)
dayName = "Friday";
else if (day == 6)
dayName = "Saturday";
else
dayName = "unknown";

  在下面的練習中,我們將寫一個方法,以便使用嵌套的if語句來比較兩個日期。

  一、編寫if語句

  1. 啟動Microsoft Visual Studio 2005。

  2. 打開Selection項目,它位於My Documents文件夾下的\Microsoft Press\Visual CSharp Step by Step\Chapter 4\Selection子文件夾中。

  3. 選擇“調試”|“開始執行(不調試)”。

  Visual Studio 2005將生成並運行應用程序。窗體上顯示了兩個DateTimePicker控件,分別名為first和second(這種控件將顯示一個日歷,便於用戶通過單擊下拉按鈕來選擇一個日期)。兩個控件當前都設置成今天的日期。

  4. 單擊Compare按鈕。

  文本框中會顯示以下內容:

first == second : False
first != second : True
first < second : False
first <= second : False
first > second : True
first >= second : True

  上述結果明顯有問題!如圖1所示布爾表達式first == second應該為true,因為first和second都被設置成今天的日期。事實上,在上述結果中,似乎只有操作符<和操作符>=的結果才是正確的!


圖1 文本框內的內容

  5. 單擊Quit。

  隨後將返回Visual Studio 2005編程環境。

  6. 在“代碼和文本編輯器”窗口中顯示Form1.cs的代碼,找到compare_Click方法,如下所示:

private int compare_Click(object sender, System.EventArgs e)
{
int diff = dateCompare(first.Value, second.Value);
info.Text = "";
show("first == second", diff == 0);
show("first != second", diff != 0);
show("first < second", diff < 0);
show("first <= second", diff <= 0);
show("first > second", diff > 0);
show("first >= second", diff >= 0);
}

  單擊窗體上的Compare按鈕,就會執行這個方法。該方法獲取窗體上的first和second這兩個DateTimePicker控件中顯示的日期值,並調用另一個名為dateCompare的方法來比較它們。我們將在下一個步驟中具體討論dateCompare方法,這裡只是簡單地說一下。該方法的作用是比較它的兩個參數值,並根據比較結果來返回一個整數值。如果兩個值相同,就返回零;如果first的值小於second的值,就返回-1;如果first的值大於second的值,就返回+1(假如一個日期在日歷上排在另一個日期的後面,就說前者大於後者)。

  show方法用於在窗體上的info文本框控件中顯示比較結果。

  7. 找到dateCompare方法,如下所示:

private int dateCompare(DateTime leftHandSide, DateTime rightHandSide)
{
 // TO DO
 return 42;
}

  該方法目前在調用後始終返回同一個值,而不是通過比較參數值來返回0,-1或+1。這解釋了為什麼應用程序不像我們期望的那樣工作!現在,需要實現這個方法,讓它正確地比較兩個日期。

  8. 從dateCompare方法中移除// TO DO注釋和return語句。

  9. 在dateCompare方法主體中輸入以下語句:

int result;
if (leftHandSide.Year < rightHandSide.Year)
 result = -1;
else if (leftHandSide.Year > rightHandSide.Year)
 result = +1;
else if (leftHandSide.Month < rightHandSide.Month)
 result = -1;
else if (leftHandSide.Month > rightHandSide.Month)
 result = +1;
else if (leftHandSide.Day < rightHandSide.Day)
 result = -1;
else if (leftHandSide.Day > rightHandSide.Day)
 result = +1;
else
 result = 0;
 return result;

  假如leftHandSide.Year < rightHandSide.Year和leftHandSide.Year > rightHandSide.Year為false,那麼leftHandSide.Year == rightHandSide.Year肯定為true,程序流程將正確轉移,開始比較lhs和rhs的Month屬性。類似地,假如leftHandSide.Month < rightHandSide.Month和leftHandSide.Month > rightHandSide.Month為false,那麼leftHandSide.Month == rightHandSide.Month肯定為true,程序將開始比較lhs和rhs的Day屬性。最後,假如leftHandSide.Day < rightHandSide.Day和leftHandSide.Day > rightHandSide.Day為false,那麼leftHandSide.Day == rightHandSide.Day肯定為true;另外,由於在這時候,Month和Year屬性也肯定為true,所以兩個日期肯定是相同的。

  10. 選擇“調試”|“開始執行(不調試)”。

  應用程序將重新生成並重新啟動。同樣地,兩個DateTimePicker控件(first和second)將設置成今天的日期。

  11. 單擊Compare按鈕。

  文本框中會顯示以下內容:

first == second : True
first != second : False
first < second : False
first <= second : True
first > second : False
first >= second : True

  這個結果才是正確的。

  12. 將second這個DateTimePicker控件的日期調到明天。

  13. 再次單擊Compare按鈕。

  文本框中會顯示以下內容:

first == second : False
first != second : True
first < second : True
first <= second : True
first > second : False
first >= second : False

  同樣地,這些結果是正確的。

  14. 單擊Quit。

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