C#圖文說明教程第二課:表達(dá)式,分類與變量
發(fā)表時(shí)間:2024-02-22 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]本節(jié)課將介紹C# 語言的表達(dá)式,類型和變量。本節(jié)課要達(dá)到如下幾個(gè)目的:1.了解什么是"變量"2.學(xué)習(xí)C#的簡(jiǎn)單類型3.對(duì)C#表達(dá)式有個(gè)初步的了解4.了解什么是String類型5.學(xué)習(xí)如何使用數(shù)組"變量"僅僅是數(shù)據(jù)的存儲(chǔ)位置。你可以把數(shù)據(jù)存放到其中,或者從中取...
本節(jié)課將介紹C# 語言的表達(dá)式,類型和變量。本節(jié)課要達(dá)到如下幾個(gè)目的:
1.了解什么是"變量"
2.學(xué)習(xí)C#的簡(jiǎn)單類型
3.對(duì)C#表達(dá)式有個(gè)初步的了解
4.了解什么是String類型
5.學(xué)習(xí)如何使用數(shù)組
"變量"僅僅是數(shù)據(jù)的存儲(chǔ)位置。你可以把數(shù)據(jù)存放到其中,或者從中取出來作為C#表達(dá)式的一部分。變量中所存放的數(shù)據(jù)的含義是通過類型來控制的。
C#是個(gè)強(qiáng)類型(???)的語言。這樣,一切對(duì)變量的操作都是針對(duì)該變量的類型而進(jìn)行的。為了保證變量中所存放數(shù)據(jù)的合法性和一致性,對(duì)不同類型的變量進(jìn)行操作有相應(yīng)的規(guī)則。
C#語言的簡(jiǎn)單類型包含布爾類型和三種數(shù)值類型:整型,浮點(diǎn)型和小數(shù)。
1.清單1-1 顯示布爾值:Boolean.cs
using System;
class Booleans {
public static void Main() {
bool content = true;
bool noContent = false;
Console.WriteLine("It is {0} that C# Station provides C# programming language content.", content);
Console.WriteLine("The statement above is not {0}.", noContent);
}
}
說明
1.在清單1-1中,布爾值作為句子的一部分輸出到控制臺(tái)中。"bool"類型的取值要么為真,要么為假。程序運(yùn)行結(jié)果如下:
>It is True that C# Station provides C# programming language content.
>The statement above is not False.
2.下列表格顯示了各種整數(shù)類型,所占字節(jié)大小和所能表示的數(shù)的范圍。
類型 位 范圍
sbyte 8 -128 to 127
byte 8 0 to 255
short 16 -32768 to 32767
ushort 16 0 to 65535
int 32 -2147483648 to 2147483647
uint 32 0 to 4294967295
long 64 -9223372036854775808 to 9223372036854775807
ulong 64 0 to 18446744073709551615
char 16 0 to 65535
在對(duì)整數(shù)進(jìn)行計(jì)算時(shí),除了字符類型之外,上述這些類型都是適合的。字符類型代表一個(gè)Unicode字符。正如在上表中可以看到的,你可以從中選擇適合你需要的類型。
3.下列表格顯示了單精度類型,雙精度類型和小數(shù)類型的數(shù)據(jù),它們所占的字節(jié),精度和所能表示的數(shù)的范圍。
類型 位 精度 范圍
float 32 7 digits 1.5 x 10-45 to 3.4 x 1038
double 64 15-16 digits 5.0 x 10-324 to 1.7 x 10308
decimal 128 28-29 decimal places 1.0 x 10-28 to 7.9 x 1028
當(dāng)你需要進(jìn)行涉及到分?jǐn)?shù)的操作時(shí),就需要用到實(shí)型,然而,對(duì)于金融財(cái)經(jīng)方面的數(shù)據(jù)的計(jì)算,小數(shù)類型也許是你最好的選擇。
4.表達(dá)式計(jì)算之后可以得出結(jié)果。這些表達(dá)式把變量和運(yùn)算符一同放到語句中。下表列出了C#允許的運(yùn)算符,優(yōu)先級(jí)和結(jié)合性。
分類 運(yùn)算符 結(jié)合性
初級(jí) (x) x.y f(x) a[x] x++ x-- new typeof sizeof checked unchecked 左
單目 + - ! ~ ++x --x (T)x 左
乘法等 * / % 左
加法等 + - 左
移位 << >> 左
關(guān)系 < > <= >= is 左
相等 == != 右
邏輯與 & 左
邏輯異或 ^ 左
邏輯或 左
條件與 && 左
條件或 左
條件 ?: 右
賦值等 = *= /= %= += -= <<= >>= &= ^= = 右
左結(jié)合意味著運(yùn)算符是從左到右進(jìn)行運(yùn)算的。右結(jié)合意味著所有的運(yùn)算是從右到左進(jìn)行的,如賦值運(yùn)算符,要等到其右邊的計(jì)算出來之后,才把結(jié)果放到左邊的變量中。
2.清單 1-2. 單目運(yùn)算符: Unary.cs
using System;
class Unary {
public static void Main() {
int unary = 0;
int preIncrement;
int preDecrement;
int postIncrement;
int postDecrement;
int positive;
int negative;
sbyte bitNot;
bool logNot;
preIncrement = ++unary;
Console.WriteLine("Pre-Increment: {0}", preIncrement);
preDecrement = --unary;
Console.WriteLine("Pre-Decrement: {0}", preDecrement);
postDecrement = unary--;
Console.WriteLine("Post-Decrement: {0}", postDecrement);
postIncrement = unary++;
Console.WriteLine("Post-Increment: {0}", postIncrement);
Console.WriteLine("Final Value of Unary: {0}", unary);
positive = -postIncrement;
Console.WriteLine("Positive: {0}", positive);
negative = +postIncrement;
Console.WriteLine("Negative: {0}", negative);
bitNot = 0;
bitNot = (sbyte)(~bitNot);
Console.WriteLine("Bitwise Not: {0}", bitNot);
logNot = false;
logNot = !logNot;
Console.WriteLine("Logical Not: {0}", logNot);
}
}
說明
1.當(dāng)計(jì)算表達(dá)式的時(shí)候,在后置增一和后置減一運(yùn)算符進(jìn)行運(yùn)算時(shí),先返回其值,再進(jìn)行增一或者減一運(yùn)算。當(dāng)使用前置加號(hào)和減號(hào)運(yùn)算符進(jìn)行運(yùn)算時(shí),是先進(jìn)行增一或者減一的運(yùn)算,然后再返回其結(jié)果值。
2.在清單1-2中, 變量unary初始化為0,進(jìn)行++x 運(yùn)算時(shí),"unary"的值加1,再把其值1賦給"preIncrement"變量。在進(jìn)行--x運(yùn)算時(shí),先把"unary"的值減到0, 再把值0賦給"preDecrement"變量。
3.進(jìn)行x-運(yùn)算時(shí),先把"unary"的值0賦給"postDecrement" 變量,之后再把"unary"減到-1。進(jìn)行x++運(yùn)算時(shí),先把"unary"的值-1賦給"postIncrement"變量,之后再對(duì)"unary"加1,使得"unary"變量現(xiàn)在的值為0。
4.變量"bitNot"初始值為0,進(jìn)行按位取反運(yùn)算,本例中,數(shù)0表示為二進(jìn)制"00000000",按位取反之后變?yōu)?1,其二進(jìn)制表示為"11111111"。
5.了解一下表達(dá)式"(sbyte)(~bitNot)", 任何對(duì)類型sbyte, byte, short 或者 ushort 類型數(shù)據(jù)的運(yùn)算,返回結(jié)果都是整數(shù)。要把值賦給bitNot變量,我們必須使用cast (類型)運(yùn)算符(強(qiáng)制類型轉(zhuǎn)換),其中Type表示你希望轉(zhuǎn)換成的類型(本例中為sbyte)。 Cast運(yùn)算符把大范圍類型的數(shù)據(jù)轉(zhuǎn)換為小范圍類型的數(shù)據(jù)時(shí),須特別謹(jǐn)慎,因?yàn)榇藭r(shí)有丟失數(shù)據(jù)的危險(xiǎn)。一般來說,把小類型的數(shù)據(jù)賦給大類型變量,并沒有問題, 因?yàn)榇蠓秶鷶?shù)據(jù)類型的變量具有足夠的空間存放小類型數(shù)據(jù)。 注意在signed 和unsigned類型之間進(jìn)行Cast運(yùn)算時(shí),也存在此類危險(xiǎn)。 許多初級(jí)程序設(shè)計(jì)教程對(duì)變量的位表示作出了很好的講解,同時(shí)也介紹了直接進(jìn)行Cast運(yùn)算的危險(xiǎn)。
邏輯非(!)運(yùn)算符可以處理布爾變量值。本例中,"logNot"變量從false 變?yōu)閠rue。
上述程序的輸出結(jié)果如下:
>Pre-Increment: 1
>Pre-Decrement 0
>Post-Decrement: 0
>Post-Increment -1
>Final Value of Unary: 0
>Positive: 1
>Netative: -1
>Bitwise Not: -1
>Logical Not: True
3.清單 1-3. 二元運(yùn)算符 Binary.cs
using System;
class Binary {
public static void Main() {
int x, y, result;
float floatResult;
x = 7;
y = 5;
result = x+y;
Console.WriteLine("x+y: {0}", result);
result = x-y;
Console.WriteLine("x-y: {0}", result);
result = x*y;
Console.WriteLine("x*y: {0}", result);
result = x/y;
Console.WriteLine("x/y: {0}", result);
floatResult = (float)x/(float)y;
Console.WriteLine("x/y: {0}", floatResult);
result = x%y;
Console.WriteLine("x%y: {0}", result);
result += x;
Console.WriteLine("result+=x: {0}", result);
}
}
說明
清單1-3 演示了二元操作符的幾個(gè)例子。加法(+),減法(-),乘法(*)和除法(/)的運(yùn)算結(jié)果,就是我們通常進(jìn)行的的四則運(yùn)算的結(jié)果。
因?yàn)?quot;floatResult"變量是浮點(diǎn)運(yùn)算類型,所以整型變量"x"和"y" 被強(qiáng)制轉(zhuǎn)換成浮點(diǎn)類型來計(jì)算FloatResult。
這里有個(gè)求余數(shù)的運(yùn)算符,兩個(gè)操作數(shù)相除,返回余數(shù)。
最后一條語句給出了另外一種賦值形式,這里用了(+=)運(yùn)算符.無論什么時(shí)候你使用(+=)運(yùn)算符,那么這個(gè)二進(jìn)制運(yùn)算符就應(yīng)該在運(yùn)算符左右兩邊都進(jìn)行運(yùn)算,然后把值賦給左邊的參數(shù)。本語句相當(dāng)于"result = result + x",并返回同樣的值。
前面的課程中,你看到的使用次數(shù)較多的一種類型是"string" (字符串)類型。"string"類型是由包含在引號(hào)內(nèi)的Unicode編碼的字符構(gòu)成。例如"This is a string."
另外一種數(shù)據(jù)類型是數(shù)組。數(shù)組可以看成是同種類型的元素構(gòu)成的集合。當(dāng)聲明數(shù)組時(shí),你要指定類型名,數(shù)組名,維數(shù)和數(shù)組大小。
4.清單 1-4. Array Operations: Array.cs
using System;
class Array {
public static void Main() {
int[] myInts = { 5, 10, 15 };
bool[][] myBools = new bool[2][];
myBools[0] = new bool[2];
myBools[1] = new bool[1];
double[,] myDoubles = new double[2, 2];
string[] myStrings = new string[3];
Console.WriteLine("myInts[0]: {0}, myInts[1]: {1}, myInts[2]: {2}", myInts[0], myInts[1], myInts[2]);
myBools[0][0] = true;
myBools[0][1] = false;
myBools[1][0] = true;
Console.WriteLine("myBools[0][0]: {0}, myBools[1][0]: {1}", myBools[0][0], myBools[1][0]);
myDoubles[0, 0] = 3.147;
myDoubles[0, 1] = 7.157;
myDoubles[1, 1] = 2.117;
myDoubles[1, 0] = 56.00138917;
Console.WriteLine("myDoubles[0, 0]: {0}, myDoubles[1, 0]: {1}", myDoubles[0, 0], myDoubles[1, 0]);
myStrings[0] = "Joe";
myStrings[1] = "Matt";
myStrings[2] = "Robert";
Console.WriteLine("myStrings[0]: {0}, myStrings[1]: {1}, myStrings[2]: {2}", myStrings[0], myStrings[1], myStrings[2]);
}
}
說明
清單 1-4 演示了數(shù)組的各種不同實(shí)現(xiàn)方法。第一個(gè)例子是"myInts"數(shù)組,它在聲明的同時(shí)進(jìn)行了初始化。
接著是個(gè)二維數(shù)組,可以把它理解為數(shù)組的數(shù)組。我們需要使用"new"運(yùn)算符來實(shí)例化初始數(shù)組的大小,之后,再對(duì)每個(gè)子數(shù)組使用new運(yùn)算符。
第三個(gè)例子是個(gè)二維數(shù)組。數(shù)組可以是多維的,每一維可以通過逗號(hào)隔開,也必須用"new"運(yùn)算符進(jìn)行實(shí)例化。
最后定義了一個(gè)一維的字符串?dāng)?shù)組。
每種情況下,對(duì)于數(shù)據(jù)元素的訪問可以通過引用元素的位置(下標(biāo))來進(jìn)行。數(shù)組的大小可以是任何整型值。其下標(biāo)從0開始。
小結(jié)
到現(xiàn)在為止,你已經(jīng)了解了C# 的變量,簡(jiǎn)單數(shù)據(jù)類型,數(shù)組和字符串。我們還學(xué)習(xí)了如何用C#的運(yùn)算符構(gòu)成表達(dá)式。