1. 程式人生 > >C#安裝和基礎學習

C#安裝和基礎學習

C#安裝

VisualStudio2015安裝參考教程:

基礎知識

編碼規範

這裡寫圖片描述

初識C#程式碼

using System;
using System.Collections.Generic;
using System.Text;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            const string CITY = "布宜諾斯艾利斯";//常量,城市
            const string NAME 
= "列奧波爾多·福圖納託·加爾鐵裡·卡斯特利";//常量,姓名 Console.WriteLine(NAME+"出生在"+CITY+"的一個工人家庭");//使用常量 Console.Write('hello word');//輸出不換行 } } }
  1. ///是文件註釋,只能寫在類、方法、屬性的前面。不能用來註釋單個變數。
  2. c#中的關鍵字都是小寫,比如static,namespace ,void ,const ……..
  3. double關鍵字表示一種資料型別——雙精度浮點型。const才是宣告常量的關鍵字。
  4. C#中沒有boolean型別

C#的資料型別

我們知道宣告變數需要寫出資料型別,我們今天要學習的是最常用的幾種型別。
字元型別 char ,儲存用 ” (單引號)括起來的一個字元,例如:

char sex='男';//儲存性別

字串型別 string ,儲存用“”(雙引號)括起來的一串字元,例如:

string address="北京市宣武區牛街北口";//儲存地址

整數型別 int ,儲存整數,例如:

int age=23;//儲存年齡

雙精度浮點型 double ,儲存小數,例如:

double salary=7991.63;//儲存工資

以上四種是最常用的資料型別,其他常用型別,我們會隨著深入慢慢介紹。

需要注意的是,某種型別的變數,只能儲存這種型別的資料,否則,可能會出錯。

C#的型別轉換

有時候真的需要把不同型別的值放在一起運算,比如這種:3.5+8 這時候怎麼辦呢?有下面2種情況:

自動型別轉換:
(只能由精度低的自動轉換為精度高的,不能由精度高的轉為精度低的)
2種不同型別的資料運算,低精度型別會自動轉換為較高精度的型別。
以3.5+8為例,顯然數字8的精度較低(int),而3.5的精度較高(double),所以,8會自動轉換為double型,即轉換為3.5+8.0進行運算,結果為11.5。

請看這個例子:double d=2; 2的精度顯然低於變數d的精度,所以2會自動轉換為2.0然後賦值給d。
再看這個例子:int i=3.0;變數i的精度低於3.0,但是由於i已經宣告為int型的變數,變數的值可以變,但變數的型別可不能變來變去的,所以這條命令會出錯的。

強制型別轉換:
無法自動轉換為我們需要的型別,可以用強制型別轉換,比如上例可以這樣完成:

int i=(int)3.0;

int i = 2.3;//double型的2.3賦值給int型變數i,double型精度高,無法自動轉換為int型別,所以會出現編譯錯誤。

數字前面的(int)表示轉換的目標型別為int,3.0會被強制轉換為3。
需要注意, double 型強制轉換為int型將失去小數部分,比如(int)2.8,我們得到的將是2。

C#識別符號的命名規則

程式中的變數名、常量名、類名、方法名,都叫做識別符號。C#有一套識別符號的命名規則,如果命名時不遵守規則,就會出錯。這套規則簡單說有下面三條:

①識別符號只能由英文字母、數字和下劃線組成,不能包含空格和其他字元。

錯誤的識別符號宣告:

string $user; //錯在使用了其他字元

②變數名不能用數字開頭。

錯誤的識別符號宣告:

double 6h;//錯在用數字開頭

③不能用關鍵字當變數名。

錯誤的識別符號宣告:

char static ;//錯在用關鍵字static做變數名

C#的算術運算子(一)

算術運算子中的加、減、乘、除。

加:+ 。加號有2個用途:當用加號連線兩個數字時,會計算出這兩個數字的和。比如:

Console.WriteLine(9+2.2);//輸出11.2

另一種情況,當加號兩邊包含字串的時候,會把兩邊的表示式連線成新的字串。比如:

Console.WriteLine(9+"2.2");//輸出92.2,因為"2.2"是字串,所以9也被轉換為"9",+起的作用是連線字串

減:- 。減號的作用就是減法。比如:

Console.WriteLine(15-23);//輸出-8

乘:* 。乘號的作用是求2數的乘積。比如:

Console.WriteLine(0.8*3);//輸出2.4

除:/ 。除號的作用是求2數相除的商。比如:

Console.WriteLine(2/0.5);//輸出4.0

但是,2個整數相除,結果僅保留整數部分,小數部分會被捨去。

Console.WriteLine(5/10);//輸出0

C#的算術運算子(二)

C#中的取餘運算子就是%。除號的作用是求2個數字相除的商,而取餘運算子%的作用是求兩個數字相除的餘數。比如:

Console.WriteLine(19/5);//求19除以5的商,輸出3
Console.WriteLine(19%5);//求19除以5的餘數,輸出4(商3餘4)

程式設計中,%常常用來檢查一個數字是否能被另一個數字整除。比如下面的程式碼片段:

int number = 29;
Console.WriteLine(number%2);//求number除以2的餘數

如果輸出0,表示沒有餘數,即number能夠被2整除(是偶數);如果輸出1,表示有餘數,即number不能被2整除(是奇數)。

C#的算術運算子(三)

這一節學習兩個特別的運算子++和–。

++,叫做自加運算子。比如你今年18歲,明年長了一歲,用程式碼寫出來是這樣:

int age=18;//今年18歲
age=age+1;//明年,在今年的年齡上加1歲
也可以寫成這樣:

int age=18;//今年18歲
age++;//明年,在今年的年齡上加1歲
age++;與age=age+1;作用相同,都是變數的值+1

–,叫做自減運算子。同理,你今年18歲,用了XX護膚水以後,明年變成17歲了,可以這樣寫:

int age=18;//今年18歲
age--;//等同於 age=age-1;
另外,age++;與age--;也可以寫作++age;或--age;

但請注意:如果與其他運算在同一語句中,++寫在變數前面或後面,演算法不一樣,請看下例:

Console.WriteLine(age++);作用等同於下面兩句:

Console.WriteLine(age);//先列印
age=age+1;//後自加
Console.WriteLine(++age);作用等同於下面兩句:

age=age+1;//先自加
Console.WriteLine(age);//後列印

你看,運算順序不一樣吧,所以輸出的結果也不會相同。

C#的比較運算子

比較數字大小,或者比較數字相等的運算子是比較運算子。C#中的比較運算子有:

==  //等於
>  //大於
<  //小於
>= //大於等於
<= //小於等於
!= //不等於

注意:表示兩個值相等的“等於”是由2個“=”組成的。

比較運算的結果,都是布林型別( bool ),bool型別我們是第一次提到,它表示邏輯上的真(成立)與假(不成立)。真與假用關鍵字 true 和 false 表示。

using System;
using System.Collections.Generic;
using System.Text;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            double x = 3.5;
            int y = 3;
            Console.WriteLine((int)x==y);// 結果:true
        }
    }
}

C#的邏輯運算子(一)

邏輯運算子用來連線多個 bool 型別表示式,實現多個條件的複合判斷。C#中的邏輯運算子包括:邏輯非( ! )、邏輯與( && )、邏輯或( || )。

邏輯非用來對某一個 bool 型別表示式取反,即“真變假”或“假變真”。請看下面的程式碼:

Console.WriteLine(1 > 0);//條件表示式為true,輸出True
Console.WriteLine(!(1 > 0));//用邏輯非對條件表示式取反,輸出False

邏輯與用來判斷 2 個 bool 型別表示式是否同時為 true 。請看下面的程式碼:

int x = 5, y = 2;//同時宣告2個int型變數並賦值
Console.WriteLine(x>3 && y>3);//判斷x>3和y>3是否同時為true,由於y>3為false,所以整個表示式為false

只有當&&兩邊的表示式均為 true 時,整個表示式才為 true ;若任意一個表示式為 false ,整個表示式即為 false 。

邏輯或用來判斷2個 bool 型別表示式中是否有一個為 true 。請看下面的程式碼:

int x = 5, y = 2;//同時宣告2個int型變數並賦值
Console.WriteLine(x>3 || y>3);//判斷x>3和y>3是否有一個為true,由於x>3為true,所以整個表示式為true

只要||兩邊的表示式有一個為 true ,整個表示式即為 true ;若兩邊的表示式均為 false ,整個表示式為 false 。

對比一下,就是說: && 運算子,兩邊同真才算真,一邊為假就算假; || 運算子,一邊為真即為真,兩邊同假才是假。

C#的賦值運算子

前面,我們已經學過一個賦值運算子“=”,這次我們學習一下其他的賦值運算子:

加賦值“+=”:先加後賦值。請看下面的例子:

int x=5;
x += 2;//這句等同於x=x+2;執行後,x的值為7

減賦值“-=”:先減後賦值。請看下面的例子:

int x=5;
x -= 2;//這句等同於x=x-2;執行後,x的值為3

乘賦值“*=”:先乘後賦值。請看下面的例子:

int x=5;
x *= 2;//這句等同於x=x*2;執行後,x的值為10

除賦值“/=”:先除後賦值。請看下面的例子:

int x=5;
x /= 2;//這句等同於x=x/2;執行後,x的值為2

取餘賦值“%=”:先取餘後賦值。請看下面的例子:

int x=5;
x %= 2;//這句等同於x=x%2;執行後,x的值為1

與其他運算子從左向右計算不同,賦值運算子從右向左計算。

C#的運算子優先順序

前面我們學習了那麼多運算子,如果程式設計中同時使用了多個運算子,到底哪一個會先運算呢?這就是優先順序的問題。C#運算子的優先順序請參考下面的順序:

①括號。學數學的時候我們就知道,要先計算括號裡面的內容。C#語言也是一樣,如果有多層括號,要從裡向外計算。括號優先順序最高。

②一元運算子。有些運算子兩邊有2個運算元,比如2+3、6%5等等,這些叫做二元運算子。只有一個運算元的叫做一元運算子,它們的優先順序高於二元運算子。一元運算子包括:++(自加) 、 –(自減) 、 !(邏輯非)。

③*(乘)、/(除)、%(取餘)。

④+(加)、-(減)。

⑤>(大於)、<(小於)、>=(大於等於)、<=(小於等於)。

⑥==(等於)、!=(不等於)。

⑦&&(邏輯與)。

⑧||(邏輯或)。

⑨賦值運算子。包括:=、+=、-=、*=、/=、%=。

另外,還需要注意一點:優先順序相同的運算子從左向右計算(賦值運算子相反)。

請看下面這段程式碼:

bool b = 20 - (15 - 8) * 2 > 10 && (2 % 2 * 2 + 2) > 2;
Console.WriteLine(b);

分析:首先計算優先順序最高的括號,(15-8)得到7,(2%2*2+2)則需要先計算%和*,後算+,結果是2,表示式就變成了:

bool b=20 - 7*2 >10 && 2>2;

接下來優先順序最高的是7*2,然後是減法,變成:

bool b = 6 > 10 && 2 > 2;

繼續計算兩個大於號,得到:

bool b=false && false;

最後的結果當然是false

C#用流程圖描述程式邏輯
流程圖是程式步驟的圖形化表示方法。流程圖中包括如下符號:
這裡寫圖片描述

以上圖形中,流程線用來連線相鄰的兩個步驟;每一個程式都有且僅有一個開始和結束。

參考下面的流程圖,完成程式碼。
這裡寫圖片描述

using System;
using System.Collections.Generic;
using System.Text;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            double x = 13.9, y = 24.4;
            double sum = x + y;
            double avg = sum /2;
            Console.WriteLine(avg);
        }
    }
}

C#中判斷和分支
走到岔路口,需要選擇方向。編寫程式也會遇到判斷和分支。請看下面的流程圖,判斷手機賬戶餘額是否不足10元,如果不足給出提示:
這裡寫圖片描述
這個程式在“balance<10”這個步驟出現了分支,“balance<10”被稱為判斷( bool 型別),當判斷為 true 時,執行左邊的分支,輸出提示;當判斷為 false 時,執行右邊的分支,不輸出任何內容。

在C#中,這個結構成為條件結構,通常用 if 關鍵字來實現:

using System;
using System.Collections.Generic;
using System.Text;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            double banlance = 9.78;//餘額
            if(balance < 10)
            {
                Console.WriteLine("餘額不足,請充值);    
            }
        }
    }
}

C#中if…else條件結構

前一節我們學習了 if 條件結構。條件結構可以有2個分支,比如下面的流程圖,判斷一個整數是奇數還是偶數:
這裡寫圖片描述
這個流程圖從C#實現如下,其中,條件為 true 時執行的分支寫在 if() 後面的{}中;條件為 false 時執行的分支寫在 else 後面的{}中。
這裡寫圖片描述
這個由 if 和 else 組成的結構是條件結構的一種,它的基本邏輯是:當條件為 true 時,執行分支1,否則,執行分支2。這段程式中,變數num能夠被2整除時會執行分支1,不能被2整除時執行分支2。

每一個 if…else 結構都包含 1 個條件和 2 個分支,而程式會根據條件的真與假,選擇執行其中的某一個分支。條件必須為 bool 型別的表示式。

C#中巢狀的if結構

程式開發中,往往需要先判斷一個條件是否成立,再判斷另一個條件。比如下面的例子:驗證賬號是否為“admin”,如果不是則提示錯誤;如果是,則驗證密碼是否為“bj2022”:

這裡寫圖片描述

用C#實現如下:

這裡寫圖片描述

C#中多重if結構

如果,有多個條件,其中只有一個成立,應該怎樣判斷呢?比如小明考試,90分以上獎勵一臺手機,80-89分獎勵一個滑板,60-79分獎勵一個燒餅,60以下沒有獎勵,0-100的分數被劃分為4檔,需要做3次條件判斷。如果用上一節學習的巢狀if結構完成,3層if的巢狀會使程式變得很複雜。本節我們使用多重 if 結構實現,它的基本語法為:
這裡寫圖片描述
程式執行時,將從上到下依次判斷條件,若某個條件為 true ,則執行對應的分支,並且停止後面條件的判斷。比如下面的程式碼,將輸出“獎勵一個燒餅”:
這裡寫圖片描述

C#中else與if的匹配

if…else 條件結構中,如果某個分支只包含一條命令,那麼是可以省略大括號{}的。比如上一節的練習,可以簡化為:
這裡寫圖片描述

請注意,如果分支中包含2條以上的命令,是不能省略{}的。

C#的條件運算子

C#提供了一種條件運算子,能夠代替簡單的 if…else 結構。這種條件運算子的語法如下:

條件表示式 ? 分支1 : 分支2

?: 就是條件運算子,可以看到它有3個運算元,所以又被稱為三元運算子
它的運算邏輯是:當條件表示式為 true 時,執行分支1;當條件表示式為 false 時,執行分支2。

下面的例子中,根據年齡的大小,輸出“成年人”或“未成年人”:
這裡寫圖片描述

C#的switch結構

if…else 之外,C#中還有一種 switch 條件結構,可以用來對變數進行多個分支的等值判斷。
語法如下:
這裡寫圖片描述
(變數)與每一個 case 後面的常量進行等值比較,如果相等,就執行對應的分支。執行分支以後, break 關鍵字會使 switch 結構中止,不會再判斷後面的常量。如果變數與所有的常量都不相同,則執行 default 後面的分支。

下面的程式碼,根據運算子完成了四則運算中的一項:
這裡寫圖片描述
上面的程式碼,因為變數oper的值與 case ‘*’ 匹配,所以會輸出乘積“18”。

switch 中的(變數)只能是3種類型:整型(如 int )、字元型( char )、字串型別( string )。

C#迴圈流程圖和while迴圈

這裡寫圖片描述
這個迴圈結構,會首先判斷 x<=10 ,條件為真時執行迴圈體(“輸出x”和“x++”),之後,再次判斷條件 x<=10 ,若條件為真則繼續執行迴圈體……若條件為假,則結束迴圈。

簡單的說,迴圈是由迴圈體(需要重複執行的命令)和迴圈條件組成的。執行時,先判斷迴圈條件,若條件為 true ,就執行迴圈體一次,然後再判斷條件…當條件為 false 時,結束迴圈。上面的流程圖,當變數 x 累加到 11 時,迴圈條件為 false ,迴圈就會結束。

C#中,可以用 while 迴圈結構來實現:
這裡寫圖片描述

C#中do…while迴圈

C#中, do…while 迴圈也是一種常用的迴圈結構。迴圈結構各部分執行順序如下:

這裡寫圖片描述

從上面的示意可以看出, do…while 迴圈第一次執行迴圈體是沒有經過條件判斷的,也就是說會無條件的執行一次迴圈體,此後的邏輯

順序就與while迴圈相同了——先判斷條件,條件為true再執行迴圈體一次。請看下面的例子:
這裡寫圖片描述
儘管迴圈條件始終為 false ,但由於 do…while 迴圈第一次執行迴圈體不判斷條件,所以迴圈體還是執行了一次。

我們已經學習了C#中最常用的三種迴圈結構,下面我們小小總結一下:
這裡寫圖片描述

C#迴圈結構之continue

迴圈中可以應用 continue 關鍵字中止一次迴圈,直接進入下一次。請看下面的例子:
這裡寫圖片描述
當程式執行到到 continue; 的時候,會立即停止本次迴圈體,直接進入下一次迴圈。所以,第三行輸出比其他行少一些

C#迴圈結構之break

前面學習 switch 結構時,我們曾經遇到過 break 關鍵字, break 在 switch 結構的作用是“跳出 switch 結構”。
break 關鍵字還可以用在迴圈中,作用是“結束迴圈”。下面的迴圈程式碼中,當 x==3 的時候會執行 break :
這裡寫圖片描述
對比程式碼和執行結果可知,當執行到 break ,迴圈結束(儘管此時迴圈條件仍然為 true )。

利用 break 關鍵字和 true 關鍵字,我們可以用另一種方式編寫迴圈,下面的程式碼是輸出1-5的整數:
這裡寫圖片描述

C#的宣告陣列和賦值

程式設計中有這樣一種情形:我們需要儲存多個同類型資料。比如,儲存 1600 個學生的年齡。是否需要宣告 1600 個 int 型別的變數?過了一年,學生們長了 1 歲,是否需要給每個變數重新賦值?這件事情,想想就怕怕。好在C#中有一種陣列,專門儲存一組相同型別的資料。陣列的宣告和初始化語法如下:

資料型別[ ] 陣列名 = new 資料型別[長度]; 

注意:陣列名像變數名一樣要遵循識別符號的命名規則;長度必須是整數

下面我們來比較變數和陣列的宣告與初始化,右邊是在記憶體中為變數和陣列分配空間的示意:

這裡寫圖片描述

對比變數 x 和陣列 y 就會發現,陣列 y 中其實包含了 3 個 double 型別的變數,為什麼是 3 個?因為初始化陣列時在 [ ] 中宣告的長度為 3 。既然都在陣列 y 中,所以 3 個變數(應該叫陣列元素)的名字都叫 y ,為了區分它們,按照順序給它們加上索引 [0]、[1]、[2] 。請注意:陣列的索引從 0 開始遞增。那麼,陣列 y 中 3 個元素的名字就變成了 y[0]、y[1]、y[2] 。
最後再注意一點:
陣列經過初始化以後,陣列元素有預設的初始值, double 型別為 0.0 , int 型別為 0 , char 型別為 ‘a’ , bool 型別為 false , string 型別為 null

陣列元素的賦值與普通變數相同。下面的示例中,我們聲明瞭一個長度為 3 的 string 型別陣列,逐個賦值,然後列印:
這裡寫圖片描述

上例中,需要注意的是元素的索引,陣列元素索引從 0 開始遞增,所以長度為 3 的陣列,其元素索引為 [0]、[1]、[2] 。

如何知道一個數組的長度呢? 陣列.Length 屬性會返回陣列的長度(即陣列元素的個數)。請看下面的例子:

這裡寫圖片描述

程式碼中的 friends.Length 會返回 friends 陣列的長度

C#訪問陣列元素

上一節我們學習了陣列的宣告和初始化,以及陣列元素的訪問方法。其實,C#中陣列元素有多種初始化方式,請看下例:
這裡寫圖片描述
上例中,陣列 a 的初始化方式我們已經學習過了;陣列 b、c、d 是在初始化時為陣列元素指定初始值,請注意陣列 d 用 [3] 聲明瞭陣列長度,後面 { } 中的初始值個數要與 [ ] 中宣告的長度相同。陣列 b、c 初始化沒有宣告長度,長度由 { } 中的初始值個數確定。

上一節我們還學習了陣列的一個屬性 Length , Length 能夠返回陣列的長度,利用它和陣列元素的索引,我們可以迴圈訪問每一元素。上一節中列印名字的程式碼,可以這樣改進:
這裡寫圖片描述
Length 屬性返回陣列的長度,如上例中,陣列長度為 3 , Length 就返回 3 ,即迴圈變數 i 從 0 迴圈到 2 。為什麼不迴圈到 3 呢?因為陣列元素的索引是從 0 開始的呀!長度為 3 的陣列,索引為 0 - 2 。

通過上例,我們看到,使用陣列就能迴圈訪問一組相同型別的變量了,是不是比使用單個變數要輕鬆呢?

看下方程式碼哪裡錯了:

using System;
using System.Collections.Generic;
using System.Text;

    namespace Test
    {
        class Program
        {
            static void Main(string[] args)
            {
                //宣告整型陣列,儲存一組整數
                int[] num = new int[] { 3,34,42,2,11,19,30,55,20};
                //請完善程式碼,迴圈列印陣列中的偶數
                for(int i = 0 ; i<num.Length;i++ ){
                    if(num[i]%2 == 0){
                        Console.Write(num[i]+',');//這裡不能用單引號,int型別和char型別相加了
                        // Console.Write(num[i]+",");//雙引號才是正確的
                    }

                }
            }
        }
    }

C#的foreach關鍵字

for 迴圈使我們可以通過索引訪問陣列元素;而 foreach 迴圈則可以不依賴索引而讀取每一個數組元素。下面的示例程式碼聲明瞭一個整型陣列,然後通過兩種方法列印陣列元素:
這裡寫圖片描述

執行結果是相同的

使用 foreach 的語法:
這裡寫圖片描述
需要解釋一下 ④ ,如上面的示例程式碼,迭代變數 x 只能用於讀取陣列 num 中的值,但是不能給陣列元素賦值,如果嘗試給 x 賦值,則會有下面的錯誤提示:
這裡寫圖片描述
瞭解了 foreach 迴圈的語法,你可能會有疑問:好像 foreach 迴圈能做的 for 都能做, foreach 存在的意義是什麼呢?其實,C#中還存在一些類似於陣列的資料組織方式,它們中有一些是沒有元素索引的,對於這些元素,只能通過 foreach 遍歷。

查詢演算法的另一種應用,是檢查一組資料中是否包含符合條件的元素,也就是要給出“有”或“沒有”的結論。

要解決這種問題,首先要宣告一個“開關變數”,用來記錄查詢的狀態;通常,我們把開關變數初始化為 false ,表示沒有找到,迴圈中如果發現了符合條件的元素,則給變數賦值為 true ,並結束查詢。迴圈結束後,就可以判斷開關變數: true 表示“有”, false 表示“沒有”。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            //宣告整型陣列,儲存一組整數
            int[] num = new int[] { 3, 34, 43, 2, 11, 19, 30, 55, 20 };
            //請完善程式碼,判斷陣列中有沒有7的整倍數
            bool has7 = false;//要宣告一個“開關變數”
            foreach (int x in num)
            {
                if (x % 7 == 0)
                {
                    has7 = true;//如果發現了符合條件的元素,則給變數賦值為 true ,並結束查詢
                    break;
                }
            }
            if (has7)

                Console.WriteLine("有7的整倍數");

            else
                Console.WriteLine("沒有7的整倍數");
        }
    }
}

C#的二維陣列的宣告和訪問

二維陣列,就是以陣列作為元素的陣列。挺拗口的,看看它跟一維陣列的對比:
這裡寫圖片描述
左邊的 a 是一維陣列,陣列中包含 4 個 int 型變數:a[0]、a[1]、a[2]、a[3] 。

右邊的 b 是二維陣列,陣列中包含 2 個 int 型一維陣列:b[0]、b[1] 。而 b[0] 和 b[1] 中又分別包含 3 個 int 型變數:b[0,0]、b[0,1]、b[0,2]、b[1,0]、b[1,1]、b[1,2] 。

總結一下,二維陣列這樣宣告:

int[,] arr = new int[2,3]; //包含2個一維陣列,每個一維陣列包含3個變數,總共2*3=6個數組元素

二維陣列元素這樣賦值和列印:

arr[1,0] = 28; //二維陣列元素有2個索引,都是從0開始,以arr陣列為例,元素索引從[0,0]到[1,2]
Console.Write( arr[1,0] );

我們可以用二維陣列管理相關的資料,比如有 4 名同學參加語文和數學兩門考試,我們用二維陣列儲存他們的成績,每位同學的 2 門課分數,儲存在一個一維陣列中:
這裡寫圖片描述

輸出分數最高的同學的姓名和分數

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            string[,] info = new string[8, 2] { { "吳鬆", "89" }, { "錢東宇", "90" }, { "伏晨", "98" }, { "陳陸", "56" }, { "周蕊", "60" }, { "林日鵬", "9" }, { "何昆", "93" }, { "關欣", "85" } };
            string name = "";
            string score = "";
            for (int i = 0; i < info.GetLongLength(0); i++)
            {
                if (string.Compare(info[i, 1], score) > 0)
                {
                    score = info[i, 1];
                    name = info[i, 0];
                }
            }
            Console.WriteLine("分數最高的是" + name + ",分數是" + score);
        }
    }
}

C#通過控制檯接收使用者輸入

接收使用者輸入,並輸出使用者輸入的內容

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            string name;
            Console.WriteLine("請輸入姓名:");
            name = Console.ReadLine();
           Console.WriteLine("你好," + name);
        }
    }
}

輸入5位同學的姓名和分數,求平均分和總分

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            // 輸入分數 求平均分
            //宣告陣列 name
            string[] name = new string[5];
            //宣告陣列score
            int[] score = new int[5];
            //迴圈
            for (int i = 0; i < name.Length; i++)
            {
                Console.Write("請輸入" + (i + 1) + "同學的姓名:");
                name[i] = Console.ReadLine();
                Console.Write("請輸入" + (i + 1) + "同學的分數:");
                score[i] = int.Parse(Console.ReadLine());//使用者輸入的是string,這裡需要強制轉換為int
            }
            int sum = 0;
            int avg;
            for (int i = 0; i < score.Length; i++)
            {
                sum += score[i];
            }
            avg = sum / score.Length;
            Console.Write("總分:{0},平均分{1}", sum, avg);
        }
    }
}

int型別的接收語句:int.Parse(Console.WriteLine());(Ps:其他型別模仿)

C#除錯程式技巧

新增/撤銷斷點:F9,或直接在左側點選

除錯:F5(第一次開始除錯;第二次直接輸出結果)

單步執行:F10(一直按F10,則逐步執行,方便檢視結果)

停止除錯:Shift+F5

註釋快捷鍵:ctrl + k +c
取消註釋快捷鍵:ctrl + k +u

匯入名稱空間:shift + alt +F10