2018年11月13日學習日誌
一. 關於運算子;
1. 算術運算子;
運算子 描述 例項
+ 把兩個運算元相加 A + B 將得到 30
- 從第一個運算元中減去第二個運算元 A - B 將得到 -10
* 把兩個運算元相乘 A * B 將得到 200
/ 分子除以分母 B / A 將得到 2
% 取模運算子,整除後的餘數 B % A 將得到 0
++ 自增運算子,整數值增加 1 A++ 將得到 11
-- 自減運算子,整數值減少 1 A-- 將得到 9
2. 關係運算符;
運算子 描述 例項
== 檢查兩個運算元的值是否相等,如果相等則條件為真。 (A == B) 不為真。
!= 檢查兩個運算元的值是否相等,如果不相等則條件為真。 (A != B) 為真。
> 檢查左運算元的值是否大於右運算元的值,如果是則條件為真。 (A > B) 不為真。
< 檢查左運算元的值是否小於右運算元的值,如果是則條件為真。 (A < B) 為真。
>= 檢查左運算元的值是否大於或等於右運算元的值,如果是則條件為真。 (A >= B) 不為真。
<= 檢查左運算元的值是否小於或等於右運算元的值,如果是則條件為真。 (A <= B) 為真。
3. 邏輯運算子;
運算子 描述 例項
&& 稱為邏輯與運算子。如果兩個運算元都非零,則條件為真。 (A && B) 為假。
|| 稱為邏輯或運算子。如果兩個運算元中有任意一個非零,則條件為真。 (A || B) 為真。
! 稱為邏輯非運算子。用來逆轉運算元的邏輯狀態。如果條件為真則邏輯非運算子將使其為假。 !(A && B) 為真。
4. 賦值運算子;
運算子 描述 例項
= 簡單的賦值運算子,把右邊運算元的值賦給左邊運算元 C = A + B 將把 A + B 的值賦給 C
+= 加且賦值運算子,把右邊運算元加上左邊運算元的結果賦值給左邊運算元 C += A 相當於 C = C + A
-= 減且賦值運算子,把左邊運算元減去右邊運算元的結果賦值給左邊運算元 C -= A 相當於 C = C - A
*= 乘且賦值運算子,把右邊運算元乘以左邊運算元的結果賦值給左邊運算元 C *= A 相當於 C = C * A
/= 除且賦值運算子,把左邊運算元除以右邊運算元的結果賦值給左邊運算元 C /= A 相當於 C = C / A
%= 求模且賦值運算子,求兩個運算元的模賦值給左邊運算元 C %= A 相當於 C = C % A
<<= 左移且賦值運算子 C <<= 2 等同於 C = C << 2
>>= 右移且賦值運算子 C >>= 2 等同於 C = C >> 2
&= 按位與且賦值運算子 C &= 2 等同於 C = C & 2
^= 按位異或且賦值運算子 C ^= 2 等同於 C = C ^ 2
|= 按位或且賦值運算子 C |= 2 等同於 C = C | 2
5. 位運算子;
運算子 描述 例項
& 如果同時存在於兩個運算元中,二進位制 AND 運算子複製一位到結果中。 (A & B) 將得到 12,即為 0000 1100
| 如果存在於任一運算元中,二進位制 OR 運算子複製一位到結果中。 (A | B) 將得到 61,即為 0011 1101
^ 如果存在於其中一個運算元中但不同時存在於兩個運算元中,二進位制異或運算子複製一位到結果中。 (A ^ B) 將得到 49,即為 0011 0001
~ 按位取反運算子是一元運算子,具有"翻轉"位效果,即0變成1,1變成0,包括符號位。 (~A ) 將得到 -61,即為 1100 0011,一個有符號二進位制數的補碼形式。
<< 二進位制左移運算子。左運算元的值向左移動右運算元指定的位數。 A << 2 將得到 240,即為 1111 0000
>> 二進位制右移運算子。左運算元的值向右移動右運算元指定的位數。 A >> 2 將得到 15,即為 0000 1111
6. 其他運算子;
運算子 描述 例項
sizeof() 返回資料型別的大小。 sizeof(int),將返回 4.
typeof() 返回 class 的型別。 typeof(StreamReader);
& 返回變數的地址。 &a; 將得到變數的實際地址。
* 變數的指標。 *a; 將指向一個變數。
? : 條件表示式 如果條件為真 ? 則為 X : 否則為 Y
is 判斷物件是否為某一型別。 If( Ford is Car) // 檢查 Ford 是否是 Car 類的一個物件。
as 強制轉換,即使轉換失敗也不會丟擲異常。 Object obj = new StringReader("Hello");
StringReader r = obj as StringReader;
7. 運算子的優先順序:
類別 運算子 結合性
字尾 () [] -> . ++ - - 從左到右
一元 + - ! ~ ++ - - (type)* & sizeof 從右到左
乘除 * / % 從左到右
加減 + - 從左到右
移位 << >> 從左到右
關係 < <= > >= 從左到右
相等 == != 從左到右
位與 AND & 從左到右
位異或 XOR ^ 從左到右
位或 OR | 從左到右
邏輯與 AND && 從左到右
邏輯或 OR || 從左到右
條件 ?: 從右到左
賦值 = += -= *= /= %=>>= <<= &= ^= |= 從右到左
逗號 , 從左到右
8. 三元運算子:表示式?值1:值2
當表示式為真,返回值1 ,當表示式為假,返回值2
//獲取第一個字母的值;
Console.WriteLine("請問今天下雨了嗎?");
int a = int.Parse(Console.ReadLine());
int b = 1;
string c = a == b ? "下雨了" : "沒有下雨";
Console.WriteLine(c);
Console.ReadLine();
二. 關於if else 語句的應用:
作為流程控制語句的一種,if eles語句有多種表現形式,常見的包括下列三種;
1. If() {};
2. If() {}else{};
3. If() {} esleif{} ;
4. If() {} else if{} else{};
5. If巢狀;
雖然表現形式多種多樣,但是if語句的核心在於做出判斷,進行流程控制;
//if (a == b )
//{
// Console.WriteLine("你的判斷是對的");
// Console.ReadLine();
//}
//else
//{
// Console.WriteLine("你的判斷是錯的");
// Console.ReadLine();
//}
三. 關於switch 語句的應用
Switch語句和if語句的功能類似,都是用來進行流程控制的,不同的是switch語句的應用範圍要更小一些,但是效率更高;
語法:switch (表示式)
{
Case 值1:
語句;
Break;
Case 值2:
語句;
Break;
Case 值3:
語句;
Break;
Defaule :
語句;
Break;
}
程式碼例項:
Console.WriteLine("請輸入你的身高:");
int shengao = int.Parse(Console.ReadLine());
switch (shengao)
{
case 1:
Console.WriteLine("您的身材偏瘦1");
break;
case 2:
Console.WriteLine("您的身材層號2");
break;
case 3:
Console.WriteLine("您的身材偏瘦3");
break;
case 4:
Console.WriteLine("您的身材偏瘦4");
break;
case 5:
Console.WriteLine("您的身材偏瘦5");
break;
default:
Console.WriteLine("您不瘦啦");
break;
}
Console.ReadLine();
四. 關於for迴圈的應用:
For迴圈和前面記錄的if或者switch語句類似,都是用來控制流程的,不同的是if或者switch是控制選擇的,而for語句是用來控制迴圈的,語句結構如下:
For(int I = 0 ; I < 次數值;i++){}
For迴圈經常使用內外巢狀的方式來實現二位形式的資料輸出;
for (int a = 1; a <= 9; a++)
{
for(int b = 1; b <= a; b ++ )
{
Console.Write("*");
}
Console.WriteLine();
}
Console.ReadLine();
巢狀語句的精髓在於外層迴圈決定二維表格的行數,而內層迴圈決定二維表格的列數,或則叫個數,通過二者的數量來確定變數的關係,進而實現想要的效果;
五. 關於while迴圈的應用:
1. While迴圈的兩種表現形式:
While(迴圈條件){迴圈體}
do{迴圈體} while(迴圈條件)
二者的區別while是先判斷迴圈條件是否成立,成立執行迴圈體,do while
是先執行一次迴圈體,然後再判斷迴圈條件,這樣就能達到一個效果,無論迴圈條件成立或者不成立,迴圈體都會被執行一次;
關於迴圈需要特別注意的是,可以在迴圈中使用break 和continue 語句;
Break語句的作用是跳出所在的一個迴圈(無論改迴圈應該被執行多少次,一下子跳出來,不再執行);
Continue語句的作用是跳出所在的一次迴圈(跳出本次迴圈的執行過程,其他次繼續執行);
for (int a = 1; a <= 9; a++)
{
for(int b = 1; b <= 9-a; b ++ )
{
continue;
Console.Write(" ");
}
for (int b = 1; b <= a; b++)
{
Console.Write("*");
}
Console.WriteLine();
}
Console.ReadLine();
for (int a = 1; a <= 9; a++)
{
for(int b = 1; b <= 9-a; b ++ )
{
break ;
Console.Write(" ");
}
for (int b = 1; b <= a; b++)
{
Console.Write("*");
}
Console.WriteLine();
}
Console.ReadLine();
六. 關於程式除錯的應用:
1. 程式除錯的用途:發現並解決程式中的邏輯錯誤,檢視程式執行的業務邏輯;
2. 程式除錯的三步:
根據經驗和認知,在可能出現錯誤的位置新增斷點(選中行+f9 或者直接新增);
啟動除錯(f5),觀察變數值的變化和程式碼執行過程,進行分析;
解決問題;
3. 斷點除錯過程中:f11 表示逐行執行,f10表示逐過程執行