?計算機發展史
第一代語言:機器語言 0101
第二代語言:匯編語言, 用一些簡潔的英文字母、符號串來替代一個特定指令的二進制串
第三代語言:接近于數學語言或人的自然語言,同時又不依賴于計算機硬件,編出的程序能在所有機器上通用
?編譯運行過程:
C#語言—公共語言規范(CLS)的編譯器—MSIL(中間語言或程序集)
—公共語言運行庫(CLR)中編譯器—操作系統執行代碼
?兩次編譯過程用途:
第一次是為了將不同語言編譯成中間語言形成程序集;
第二次為了CLR針對不同操作系統做優化。
改變了字符的原始含義。
引號——/“”換行——/n 水平制表——/t 問號——/?
反斜線——// 加多個反斜線(防止轉義)——@“字符串”
程序運行在哪里?
程序處理的是什么?
1、定義
?內存中開辟的一塊用于存儲數據的空間
?可以存放單詞、數值、日期以及屬性。
2、聲明
?變量類型 變量名稱;
?也可以一次聲明多個變量。string str1, str2;
3、命名規則
?有字母、數字和下劃線組成,且不能以數字開頭。
?不能使用保留關鍵字(藍色)。
4、建議命名規則
【望文生義】
?以小寫字母開頭。
?如果包括多個單詞,建議除第一個單詞外其他單詞的首字母大寫。
?增加類型前綴便于理解。
5、變量的賦值
?在使用前必須賦值。
?賦值的數據類型和變量聲明時的類型必須相同
?同一變量名只能聲明一次,但可以多次賦值。
6、數據類型
1)整形
2)非整型(小數)
?非整形變量賦值要加上后綴,如果不加默認為double
3)非數值型
?Char 字符,存儲單個字符,使用單引號。
?Bool類型 可以直接賦值true真false假,或者賦表達式做判斷。
7、占位符
1、算數運算符
+ — * / % ++ --
?i++、++i
i++,后綴增量操作。表達式結果是操作數增加之前的值,后加:后自增。
++i,前綴。表達式結果是操作數加1之后的值,先加:先自增。
2、比較運算符
? > < >= <= == !=
3、邏輯運算符
?&&——與 一假俱假 相當于“并且” 都得是真的
?||——或 一真俱真 相當于“或者” 有一個是真的就行
?!——非 原來是真,非后為假
4、快捷運算符
+= -= *= /= %=
變量聲明后,類型固定了,只能賦值某種類型的數值,如果要賦值其他類型的值需要轉換類型。
1、隱式轉換(數值類型間轉換):由小范圍(空間)到大范圍的數值類型轉換。不會失敗,不會丟失精度,一般發生在數值類型間。
2、顯式轉換(強制轉換):(數值類型間轉換)存在風險,由程序員決定是非轉換。還可能會丟失精度。
語法: 新類型 名稱=(待轉類型名)名稱
.NET默認不檢測強制轉換錯誤,使用checked代碼塊可以檢測強制轉換錯誤。
3、parse(轉出)將字符串轉換對應的類型:內置的數據類型都提供了parse方法,用來實現字符串和對應類型的轉換。
int a=int.Parse(“1”);
Double d=double.Parse(“1”);
4、ToString(轉入)從其他類型到字符串:
5、Convert轉換:任意兩種類型之間的轉換 int i2 = Convert.ToInt32("9");
?內容不發生變化的值
?使用const聲明; 如:
?建議命名全部大寫以區分
1、定義:方法就是對一系列語句的命名,表示一個行為或功能。
2、作用:代碼的重用,實現模塊式開發
3、語法
如Public、PRivate 聲明靜態:static /*給一個參數返回一個結果值*/
訪問級別 [可選修飾符] 返回類型 方法名稱(參數類型 參數名稱)
{
//方法體
Return 結果;
}
無返回值聲明為void 參數列表
4、調用語句:方法名稱(參數)
5、返回值:理解為方法的結果
?void代表無返回值。
?如果方法有返回值,方法體中必須有return語句;沒有返回值,有沒有都可以。
?Return關鍵字后必須返回相同類型的數據。
?Return后面的語句不再執行。
?調用方法時,如果需要結果,聲明相應類型變量接收返回值數據。
6、參數列表:方法設計者需要調用者傳遞的信息
?定義方法時叫形參
?調用方法是叫實參
?實參與形參要一一對應
?確定參數的原則:自己能確定的數據自己內部解決,自己確定不了的數據通過參數傳遞。
7、方法盡可能小,以便完成一個獨立的工作。
8、可以調用同一個類或者其他類中的方法;內部也可以調用其他方法。
1、值參數
?方法默認值傳遞,傳遞的是變量的副本。
?值類型參數傳遞給方法時,傳遞的是數據的副本而不是數據本身。
?方法內部對形式參數的修改,不會影響方法外的實際參數。
2、引用參數
?將引用類型的對象傳遞給方法時,引用類型的變量不直接包含其數據;它包含的是對其數據的引用(地址),即引用指向原始對象而不是副本。ref是關鍵字。
?方法內修改形式參數,會影響實際參數。
?在方法中修改外面已有變量時使用,更側重于改變一個。
/*添加了ref,兩個參數就一致了。*/
3、輸出參數
?Out關鍵字會導致參數通過引用來傳遞。這與ref關鍵字類似。若要使用out參數,方法定義和調用方法都必須使用out關鍵字。
?側重于輸出一個值。
4、區別
Ref要求變量必須在傳遞前進行初始化(賦初值)。而作為out參數傳遞的變量不必在傳遞之前進行初始化,但是在離開方法之前,必須為變量賦值,有賦值操作。
5、用途
方法需要返回多個值時使用。
?通過Bool表達式配合TryParse使用,防止類型轉換失敗。
?語法: TryParse(待轉字符串,out 轉出的變量名)
?方法簽名:方法的訪問級別、可選修飾符 、返回值、名稱和任何方法參數,統稱為方法的“簽名”。
?方法重載:在同一個作用域中,兩個方法的名稱相同,參數列表(個數、類型)不同稱為方法重載(OverLoad)。用來解決同一類型的問題。[out與ref的區別不可以構成]
?作用:減少記憶量,方便使用,便于理解
If(bool表達式)
{
//表達式為真,執行
}
else
{
//表達式為假執行
}
?C#規定,每個else部分分總屬于前面最近的那個缺少對應的else部分的if語句。
?注意:Else可有可無;
單行語句可以不寫{},但是提倡單行也要寫;
If條件后不能加分號;
?多路判斷語句
?計算條件表達式并對照多個常數值進行檢查
1、注意
?Break不能少
?Switch()中的變量可以是int、string、bool、char、枚舉類型,
但必須有一個定值。
?每個case標簽后是常量表達式的值,不必連續,也不必按特定
順序排列,但不能相同,否則會出現錯誤。
?每個case標簽之后的語句數不限,有多個語句,也可以不用{}。
?default標簽可選。意思是其余的結果。
2、區別
?相同點:都可以用來實現多路分支。
?不同點
多重if結構用來實現兩路、三路分支比較方便,Switch結構實現三路以上分支比較方便。
If結構用來判斷一個值是否在某個區間的情況,在使用switch時,case語句后面必須是常量表達式
要求只在對特點條件進行判斷后才允許執行循環,用于將某個語句或語句塊重復執行預定次數的情形。
For(初始值;條件;增減變量)
{
…………z
}
?首先賦初值,只執行一次。
?判斷條件表達式是否滿足,如果是執行{}內語句,如果不是,退出循環。
?每次執行完循環體內的語句都要執行增減變量。
?break用于退出循環
?continue用于跳出當前循環并開始本for的下一次循環。
?可以有死循環for(;;)
例子:
While(條件true)
{
//退出條件
//語句
}
?執行一個語句或語句塊,直到指定的表達式計算為false退出循環。
?先判斷表達式是否滿足條件,是,執行語句;否,退出。
?大多數情況下,while語句可以和for語句互換,while常用語計算次數不確定的情形。
Do
{
//循環體
}
While(條件)
?重復執行{}內的語句,直到指定的表達式為false退出。
?與while區別:循環體至少執行一次。
例子:正三角
例子:倒三角 正三角:
例子:乘法表
?定義:存放一組類型相同的變量,是一種空間連續的數據結構。
?這些變量都可以通過計算索引(位置)進行訪問。
?數組的索引從零開始,具有n個元素(變量)的數組的索引時從0到n-1(因為從0開始).
?數組元素可以使任何類型,包括數組類型(數組嵌套)。
?數組類型是從抽象基類型Array派生的引用類型。
?可以對c#中的所有數組使用foreach遍歷。
一維數組
多維數組(有行還有列或者高)
交錯數組
●數組聲明后必須賦值才能使用。
●訪問數組,通過索引,使用for、foreach循環遍歷。
●For循環可以讀取、設置元素值,不必訪問所有元素。
●循環遍歷的方法:foreach和for
Foreach循環,不能對元素賦值,按順序依次遍歷,不能跳躍,拿不到索引。
1、 Length 長度
獲取32位整數,該整數表示Array的所有維數中元素的總值。
語法:數組名稱.Length
2、 Rank 維度
獲取Array的維數。
語法:數組名稱.Rank
3、 Array.Clear()清除元素值
將數組中的元素設置為0、null或fasle,具體取決于數組元素的數據類型。
語法:Array.Clear(被清除坐標數組名稱,起始坐標,結束坐標)
4、 Array.copy 復制
將一個數組的一部分元素復制到另一個數組中,從索引0開始復制一定長度的元素。
語法:Array.Copy(被復制的數組名,復制到的數組名, 元素個數);
5、 CopyTo 復制
將源數組元素內容復制到目標數組,從目標數組的某個索引處開始到結束復制,目標數組長度必須大于等于源數組長度。
語法:源數組名稱.CopyTo(目標數組名,目標數組開始復制的元素位置)
注意:目標數組長度必須大于源數組;
從設定的起始元素起替換目標數組元素,目標數組大于源數組的的內容將保留
6、 Clone 克隆
克隆是將已知數組復制給新定義的數組,所以需要聲明新數組用于接收;
克隆必須進行強制轉換,即:(數組類型[])
語法:新定義的數組=(數組類型[])目標數組名.Clone();
7、 Array.IndexOf() 正向查找第一個匹配項的索引(元素位置)
Array.LastIndexOf( ) 反向查找第一個匹配項的索引
返回一對數組或部分數組中某個值第一個匹配項的索引,找不到返回-1。
語法:Array.IndexOf(數組名稱,元素)
8、Array.Sort() 排序
語法:Array.Sort(數組名稱)
9、Array.Reverse() 反轉
反轉數組中元素的順序
語法:Array.Reverse(需要反轉的數組名稱)
練習:冒泡排序
兩兩比較,大的放到后
2 8 6 1
第一輪:
2 6 1 8 比較3次 4-1
第二輪:
2 1 6 8 比較2次 4-2
第三輪:
1 2 6 8 比較1次 4-3
4個數比較
4-1輪
每輪:元素總數-當前輪數(i+1)
●二維數組就像具有行和列的表格。
●二維數組具有兩個索引,分別代表行(前面)、列(后面)。
●int[,] score=new int[5,2];
名稱[行,列]
練習:5個學生參加了2門課的考試,統計出每個學生平均成績,2門課的平均成績。
●交錯數組就是元素為數組的數組(數組的嵌套)。
●交錯數組元素大小可以不同(元素就是數組,指的是交錯數組中的數組大小可以不同)。
●聲明一個由5個元素組成的一維數組,其中每個元素都是一個一維整數數組。
●Int[][] score =new int [5][] 5為外圍數組(行) []為內在數組
練習:錄入學生個數,考試科目數量,及相應成績
●通過關鍵字params定義參數數組
●用于方法參數不固定的場合
●可以傳遞數組,也可以傳遞類型相同的多個變量。
●在對數組長度未知(可變)的情況下進行函數聲明。
●數量不限。
●參數數組必須是方法聲明中的最后一個參數。
●方法最多只能有一個參數數組。
●只能在一維數組上使用params關鍵字。
●Console.WriteLine中使用占位符,就是使用參數數組實現的。
●直接存儲值。(數據存儲在棧中)
●一個值類型變量賦給另一個值類型變量時,會復制一個數據副本給它(在棧中產生2個數據)。
●改變值類型不影響其他數值。(因為是2個數據,互不影響)
●存儲對數據的引用地址。(變量定義在棧中,而數據實際存儲在堆中,數據只是引用到變量)
●賦值時只復制對對象的引用地址,而不復制對象本身。(實際數據只有一份)
●兩個引用類型的變量可以指向同一對象。
●改變一個引用類型的變量可能會影響其他對象。(因為是一份數據)
●值類型:枚舉,結構(基礎類型)
●引用類型:類(包括數組,字符串),接口,委托
●String是特殊的引用類型。(因為引用類型存在堆中,可以存大量內容,所以string定義為引用類型)
●字符串常量具備字符串池特性(字符串變量拼接后形成新對象)
●String再賦值后(s1=“二毛”),不會影響s1的值。但是原數據就會是垃圾。
●String賦值后的值,是不可以改變的(所以才會產生垃圾)。
●可變字符字符串:stringBuilder。
stringBuilder在原有字符串上修改,string創建新的字符串替換。
內存的??纱娣艛祿。\行速度快 ; 堆可存儲空間大,但是運行速度慢。所以值類型在棧,引用類型在堆。
使用關鍵字 null 進行釋放數據(賦值空字符串)。
釋放之后就形成了垃圾,會被自動回收。
在做==和!= 比較時,比較的是存儲的數值(真實數據)。
在做=和!= 比較時,比較的是引用的位置是不是同一個,而不是所引用的值。
●定義:列舉某個數據的所有取值。
●作用:增強代碼的可讀性,限定取值。
●適用性:取值范圍較小。
●使用enum關鍵字定義枚舉數據類型。
●語法: enum 名字{值1,值2,值3,值4}
●每個枚舉元素都是有枚舉值。默認情況下,第一個枚舉的值為0,后面每個枚舉的值一次遞增1,可以修改值,后面的枚舉數的值一次遞增。
●枚舉元素默認基礎類型為int,準許使用的枚舉類型有byte、sbyte、short、ushort、int、uint、long或ulong。
●類型轉換
//string類型轉換為枚舉
Sex s1 = (Sex)Enum.Parse(typeof(Sex), "男");
//枚舉轉換為字符串
string str = Sex.女.ToString();
//int類型轉換為枚舉
Sex s2 = (Sex)3;
//枚舉類型轉換為int類型
int i = (int)Sex.男;
●標志枚舉
可以同時賦值多個枚舉值
[Flags]//標志枚舉
enum Sex
{
男=1, //000001
女=2, //000010
未知=4 //000100
}
Sex s3 = Sex.男 | Sex.女;
//System.Drawing.FontStyle
●判斷標志枚舉值中是否包含某項值
bool b = (s2 & Sex.男) == Sex.男;
// 00011
// 00001
// 00001
●使用s.Length屬性來獲得字符串中的字符個數。
●字符串的內容一旦聲明就不可變。所以只能讀取,不能修改。
●如要修改字符串內容,先創建一個新的字符串,用s.ToArray()方法得到字符串的char數組,對數組進行修改后再調用new string(char[])這個構造函數來創建char數組的字符串。一旦字符串被創建,那么char數組的修改也不會造成字符串的改變。
●StringBuilder 可變字符串。
●字符串中插入字符.Insert();
●查找字符中是否有該字符,返回bool值。
●ToLower();得到字符串的小寫形式。
或
●ToUpper();得到字符串的大寫形式。
●查找字符串位置
●取子串
●Trim();移除字符串兩頭的空白字符。用于避免用戶錯誤的錄入。
●兩個字符串(si、s2)忽略大小寫的比較。
●將字符串按照指定的char分隔符拆分為字符數組,和拼接
●將字符串按照指定的char分隔符拆分成字符數組后忽略空字符
●替換字符串中個別內容,使用replace。
●取子串
練習:
1、字符串反轉:“我要學習”
string str = "我要學習";
char[] toChar = str.ToArray();
Array.Reverse(toChar);
string toStrint = new string(toChar);
Console.WriteLine(toStrint);
2、單詞反轉:I want to learn
string str = "I want to learning";
string[] toArry= str.Split(' ');
Array.Reverse(toArry);
string toString=string.Join(" ", toArry);
Console.WriteLine(toString);
奇數字符大寫偶數字符小寫:
string str = " I want to learning ";
string result = string.Empty;
char temp='/0';
for (int i = 0; i < str.Length; i++)
{
if (i % 2 == 0)
{
temp =char.ToUpper(str[i]);
}
else
{
temp =char.ToLower(str[i]);
}
result += temp;
}
Console.WriteLine(result);
新聞熱點
疑難解答