1. 程式人生 > >第二章 使用變數、操作符和表示式

第二章 使用變數、操作符和表示式

2.1理解語句

  1. 語句是執行操作的命令,如計算值,儲存結果,或者向用戶顯示訊息。我們組合使用各種語句來建立方法。
  2. 對語句的格式和構成進行描述,稱為語法
  3. 描述語句做什麼的規範稱為語義

2.2使用識別符號

  1. 識別符號是對程式中各個元素進行標識的名稱。
  2. C#識別符號必須遵循以下語法規則:

只能使用字母(大寫和小寫)、數字和下劃線
識別符號必須以字母或下劃線開頭

2.3使用變數

變數是容納值的儲存位置。

可將變數想象成容納臨時資訊的容器,我們用名稱引用變數容納的值。

變數命名建議:

不要以下劃線開頭
不要建立僅大小寫不同的識別符號。
名稱以小寫字母開頭
在包含多個單詞的識別符號中,從第二個單詞起,每個單詞首字母大寫(稱為camelCase記號法)
不要使用匈牙利記號法。

宣告變數

  • 宣告變數時,必須制定她要容納的資料的型別。
  • 變數的型別和名稱在宣告語句中宣告。

    例如,以下語句宣告 age 變數,它容納 int 值。和任何語句一樣,該語句必須用分號終止:

int age;

int 是 C#基元資料型別之一。
【注意】C#不允許隱式變數宣告。所有變數使用前必須明確宣告。
變數宣告好後就可以賦值。以下語句將值 42 賦給 age。同樣,最後的分號必不可少:

age = 42;

等號(=)是賦值操作符,作用是將右側值賦給左側變數。賦值後可在程式碼中使用 age 這個名稱來引用變數容納的值。

2.4使用基本資料型別

c#常用的資料型別及其取值範圍
這裡寫圖片描述


c#不允許使用未賦值的變數,變數只有賦值後才能使用,否則程式無法編譯。
例如,以下語句造成編譯錯誤,因為 age 尚未賦值:

int age;
Console.WriteLine(age); // 編譯錯誤

【注】在開啟c#工程檔案時,一定要選擇對檔案,假如開啟專案而不是解決方案,Visual Studio 2013 自動為它建立新的解決方案檔案。不注意的話可能造成困擾,你可能不慎為同一個專案生成多個解決方案。

  • 在 Windows 8.1 中可按 Windows+B 返回正在顯示 Visual Studio 2013 的桌面

  • 如果螢幕不夠大,窗體不能顯示完全,可以利用快捷鍵 Ctrl+Alt+=和Ctrl+Alt+-放大或縮小窗體,或者從設計檢視左下角的下拉列表中選擇顯示比例。

  • 查詢當前專案的特定內容時按快捷鍵 Ctrl+F 進行快速查詢,按快捷鍵Ctrl+H 進行快速替換。

2.5 使用算術操作符

  • 操作符或運算子:例如:加號(+)執行加法,減號(-)執行減法,星號(*)執行乘法,正斜槓(/)則執行除法。
  • 操作符或運算子操作/運算的是 運算元或 運運算元在表示式 750 * 20 中,*是操作符,750 和 20 是運算元。
  • 不是所有操作符都適用於所有資料型別。
  • 可對 char,int,long,float,double 或 decimal 型別的值使用任何算術操作符。但除了加法操作符(+),不能對 string 型別的值使用其他任何算術操作符。對於 bool 型別的值,則什麼算術操作符都不能用。所以以下語句是不允許的,因為 string 型別不支援減法操作符(根據設計,從一個字串減另一個字串沒有意義):
// 編譯時錯誤
Console.WriteLine("Gillingham" - "Forest Green Rovers");

+操作符可用於連線字串值。使用需謹慎,因為可能得到出乎意料的結果。例如,以下語 句在控制檯中寫入”431”(而不是”44”):

Console.WriteLine("43" + "1");
  • 算術運算的結果型別取決於運算元型別。例如,表示式 5.0 / 2.0 的值是 2.5。兩個運算元的型別均為 double,所以結果也為double。(在 C#中,帶小數點的字面值肯定是double 值,而不是 float 值,目的是保留儘可能高的精度。)
  • 表示式 5 / 2 的結果值是2。 兩個運算元的型別均為 int, 所以結果也為 int。 C#在這種情況下總是對值進行向下取整。
  • 假如混用不同的運算元型別,情況會變得更加複雜。例如,表示式 5 / 2.0 中包含 int值和 double 值。C#編譯器檢測到這種不一致的情況,自動生成程式碼將 int 轉換成 double 再執行計算。所以,以上表達式的結果是 double 值(2.5)。

    取模(餘數)操作符。它用百分號(%)表示:

x % y 的結果就是用 x 除以 y 所得的餘數。例如,9 % 2 結果是 1,因為 9 除以 2,結果是 4餘 1。
C#允許對所有數值型別進行取模操作,但是結果不一定為整數。例如,表示式 7.0 % 2.4 結果是 2.2。

數值型別和無窮大:

C#語言中的數字,還有另外兩個特性是你必須瞭解的。例如,任何數除以 0 所得的結果是無窮大,不在 int,long 和 decimal> 型別的範圍內。所以,計算 5 / 0 之類的表示式會出錯。 但是, double 和 float 型別實際上有一個可以表示無窮大的特殊值,因此表示式 5.0 / 0.0的值是Infinity(無窮大)。這個規則的唯一例外是表示式 0.0 / 0.0 的值。通常,如果 0 除以任何數,結果都為 0,但如果用任何數除以 0,結果就為無窮大。表示式 0.0 / 0.0 會陷入一種自相矛盾的境地:值既為 0,又無窮大。針對這種情況,C#語言提供了另一個值 NaN,即“not a number”所以,如果計算表示式 0.0 / 0.0,則結果NaN。NaN 和 Infinity 可在表示式中使用。計算 10 + NaN,結果為 NaN。計算 10 + Infinity,結果為 Infinity。規則的唯一例外是 Infinity * 0,其結果為 0。而 NaN * 0 的結果仍為 NaN。**

2.6 變數遞增和遞減

++和–是一元操作符,即只有一個運算元。它們具有相同的優先順序和左結合性
增(++)和遞減(–)操作符與眾不同之處在於,它們既可以放在變數前面,也可以放在變數後面。在變數之前使用,稱為這個操作符的字首形式;在變數之後使用,則稱為這個操作符的字尾形式。如下面幾個例子所示:

count++; // 字尾遞增
++count; // 字首遞增
count--; // 字尾遞減
--count; // 字首遞減

對於被遞增或遞減的變數,++或–的字首和字尾形式沒有區別。例如,count++使 count 的值遞增 1,++count 也會使其遞增 1。那麼為何還要提供兩種不同的形式?為了理解這個問題,必須記住一點:++和–都是操作符,而所有操作符都對已經有一個值的表示式進行求值。count++返回遞增發生前的 count 值,++count 返回遞增發生後的 count 值。例如:

int x;
x = 42;
Console.WriteLine(x++); // 執行這個語句後,x等於43,但控制檯上輸出的是42
x = 42;
Console.WriteLine(++x); // 執行這個語句後,x等於43,控制檯上輸出的也是43

其實很好記,只需看錶達式各個元素(操作符和運算元)的順序即可。在表示式 x++中,變數x 首先出現,所以先返回它現在的值,然後再遞增;在表示式++x 中,++操作符首先出現,所以先對 x 進行遞增,再將新值作為表示式的值返回。

2.7 宣告隱式型別的區域性變數

  • 賦給變數的值必須具有和變數相同的型別。例如,只能將 int 值賦給 int 變數
    C#編譯器可以根據表示式推斷變數型別,並在宣告變數時自動使用該型別。為此,只需用 var 關鍵字代替型別名稱,如下所示:
var myVariable = 99;
var myOtherVariable = "Hello";

兩個變數 myVariable 和 myOtherVariable 稱為隱式型別變數。var 關鍵字告訴編譯器根據用於初始化變數的表示式推斷變數型別。 在本例中, myVariable 是 int 型別, 而 myOtherVariable是 string 型別。
只有提供表示式來初始化變數,才能使用關鍵字 var。以下宣告非法,會導致編譯錯誤:

var yetAnotherVariable; // 錯誤 - 編譯器不能推斷型別

var 只是在宣告變數時提供一些方便。但變數一經宣告,就只能將編譯器推斷的那種型別的值賦給它。例如,不能再將 float,double,string 值賦給myVariable。