C#編程基礎

基礎

.NET概述

參考:http://www.cnblogs.com/yplong/p/3279934.html

什么是.NET框架

.NET框架(.NET

Framework是由微軟開發,一個軟件開發平臺。

.NET框架是以一種采用系統虛擬機運行的編程平臺,以公共語言運行時(Common Language Runtime)為基礎,支持多種語言(C#、VB.NET、C++、Python等)的開發。

.NET Framework具有兩個主要組件:公共語言運行庫和.NET Framework類庫。

.NET框架結構圖

語言

Visual Studio .NET自身包含四種語言:Visual

Basic、Visual C++、Visual C#和JScript。然而,.NET框架的模塊化特性使得由第三方創作的其他語言也可以集成到Visual Studio .NET中。此類語言有20多種,包括Perl、Component Pascal、SmallScript和Smalltalk。

公共語言規范

此規范是實現.NET框架的所有語言的基礎,定義了公共類型系統的標準和所有語言必須實現的功能。這是第三方語言與框架集成的基礎。

Windows窗體

所有語言都共享公共Windows窗體引擎。窗體設計器在所有語言中都是一致的,因此所有語言都可以訪問提供相同屬性和方法的相同固有控件。即使使用不同的語言開發,其界面也都具有相同的外觀。

ASP.NET

這是Web窗體和XML Web services的基礎技術。Web窗體用于前端Web開發,而XML Web services通過Intranet或Internet提供相應的功能。

數據管理

ADO.NET代替ADO作為.NET框架中的數據處理機制,它是使用XML進行數據傳輸的高度可伸縮技術。

基類庫

這些類提供了一致且易于使用的方法,用于訪問各種信息(例如,系統信息、用戶信息等),而以前要訪問這些信息,必須使用特殊的組件或API。

公共語言運行時(CLR)

CLR為編譯器提供了托管執行環境和編譯服務。CLR編譯器將源代碼編譯成中間語言(IL),然后再以實時(JIT)方式執行IL。所有源語言都共享CLR,并編譯成相同的IL。

什么是公共語言架構

通用語言架構(Common Language Infrastructure,簡稱CLI)是一個開放的技術規范。

CLI有時候會和CLR混用。但嚴格意義上說,這是錯誤的。因為CLI是一種規范,而CLR則是對這種規范的一個實現。

CLI標準包包含以下更詳細的規范

l通用類型系統(CommonType System, CTS)

l元數據系統(Metadata)

l通用語言規范(CommonLanguage Specification, CLS)

l虛擬執行系統(VirtualExecution System, VES)

l通用中間語言(CommonIntermediate Language, CIL)

l框架(Framework)

適合CLI規范的程序都會被編譯成通用中間語言(CIL),一種特殊的字節代碼。而不是能直接在你的電腦上運行的機器碼。

什么是公共語言運行時

通用語言運行庫(Common

Language Runtime,簡稱CLR)是微軟為他們的.NET的虛擬機所選用的名稱。這是通用語言架構(簡稱CLI)的微軟實現版本,它定義了一個代碼運行的環境。CLR運行一種被稱為通用中間語言的字節代碼,這個是微軟的通用中間語言的實現版本。

CLR的主要功能如下

l基類庫支持BaseClass Libray Support

l存儲器管理MemoryManagement

l線程管理ThreadManagement

l存儲器自動回收Garbage Collection

l安全性Security

l類型檢查TypeChecker

l例外管理Exception Manager

l除錯管理DebugEngine

l中間碼(MSIL)到機器碼(Native)編譯

l類型裝載ClassLoader

開發人員使用高級編程語言撰寫程序。接下來編譯器將代碼編譯成微軟的中間語言(CIL)。之后在執行過程中CLR會將CIL編譯為操作系統的原生碼(Native code)從而執行。CLR自帶有實時編譯器(JIT)。

CLR運行在windows上。查看通用語言架構可以找到該規格的實現版本列表。其中有一些版本是運行在非Windows的操作系統中。

什么是中間語言

通用中間語言(Common Intermediate Language,簡稱CIL,原名叫做MSIL)是一種屬于公共語言規范和.NET框架的低階(lowest-level)的人類可讀的編程語言,一種特殊的字節代碼。CIL類似一個面向對象的匯編語言,并且它是完全基于堆棧的。面向.NET框架的語言都會被各自的編譯器編譯為中間語言(CIL),運行時再經由特定的編譯器(JIT編譯器,Just In tIME,JITer)編譯為機器代碼,以供操作系統執行。

什么是托管代碼

所有.NET語言都可以編寫面向CLR的程序代碼,這種代碼在.NET中被稱為托管代碼(Managed

Code),所有的Managed Code都直接運行在CLR上

簡單點說就是:所有運行在CLR上的代碼就叫做托管代碼,具有與平臺無關的特性。

什么是程序集

程序集:顧名思義就是一個集合。

其中包括了:

l程序清單

描述了程序集的版本,語言文化,發布者,共有導出類型,以及組成該程序集的所有文件。

l元數據

提供有關程序集中定義的類型的信息,包括類型的名稱,可見性,基類和類型所實現的接口。注意:程序集清單和元數據說明了程序集是自我描述的。

lCIL:中間語言

l資源集:諸如位圖,指針,靜態文本等。

程序集有兩種:

一種是可執行的應用程序文件(.exe擴展名文件)

一種是供其他應用程序使用的庫(.dll擴展名文件)

編譯器生成的中間語言(CIL)就被封裝在程序集中,該程序集中包含了描述你所創建的類,方法和屬性(例如安全需求)的所有元數據。你可以拷貝這個程序集到另一臺服務器上部署它。

C#與.NET的關系

C#是一個程序設計語言,僅僅是一個語言,是.NET框架中眾多開發語言中的一種。

C#程序的開發執行流程

1)編寫C#源程序(.cs)

2)通過編譯器編譯生成(.dll或.exe)

3)通過CLR運行,將CIL實時編譯編譯為機器碼,運行

HelloWorld案例的編寫和運行

(1)定義類

(2)寫main方法

(3)寫輸出語句

(4)C#程序開發運行與工作原理

(5)編譯和運行程序

---------------------------------------------------------------------------

classHelloWorld {

public static void Main(string[] args) {

Console.WriteLine("HelloWorld");

}

}

---------------------------------------------------------------------------

(1)程序解釋:

A:C#程序的最基本單位是類,所以我們要定義一個類。

格式:class類名

舉例:classHelloWorld

B:在類中寫內容的時候,用大括號括起來。

C:C#程序要想執行,必須有Main方法。

格式:publicstatic void Main(String[] args)

D:要指向那些東西呢,也用大括號括起來。

E:你要做什么呢?今天我們僅僅做了一個簡單的輸出

格式:Console.WriteLine("HelloWorld");

注意:""里面的內容是可以改動的。

常見的問題

lC#語言嚴格區分大小寫,請注意。

l見到非法字符:

\65307肯定是中文問題。我們寫程序要求標點符號必須全部是英文狀態。

l括號的配對問題。一般來說,括號都是成對出現的。

l遇到在類HelloWorld中找不到主方法,肯定是主方法的格式問題。

標識符

1)就是給類,接口,方法,變量等起名字時使用的字符序列

2)組成規則:

A.英文字母

B.數字

C.下劃線(_)

3)注意事項

A.不能包含空格和其他字符

B.不能以數字開頭

C.不能是C#中的關鍵字

D.區分大小寫

4)常見的命名規則

A.命名空間

單級命名空間:首字母大寫

舉例:System

多級命名空間:每個單詞首字母大寫(駝峰),并用.隔開

舉例:System.Text

B.類或者接口

一個單詞:首字母大寫

舉例:Console

多個單詞:每個單詞首字母大寫(駝峰)

舉例:HelloWorld,StudentName

C.變量

一個單詞:小寫

舉例:num

多個單詞:第一個單詞小寫,從第二個單詞開始,每個單詞首字母大寫

舉例:myName

D.屬性、方法

一個單詞:首字母大寫

舉例:Name

多個單詞:每個單詞首字母大寫

舉例:GetName

E.常量

一個單詞:全部大寫

舉例:AGE

多個單詞:全部大寫,并用_隔開

舉例:YOUR_AGE

注釋

1)就是對程序進行解釋說明的文字

2)分類:

A:單行注釋//

B:多行注釋/**/

C:文檔注釋(后面講) /** */

3)注釋的作用

A:解釋說明程序,提高了代碼的閱讀性。

B:可以幫助我們調試程序。

后面我們會講解一個更高端的一個調試工具

常量

1)在程序執行的過程中,其值不發生改變的量

2)常量可以是任何基本數據類型

3)分類:

A:字面值常量

B:自定義常量(后面講)

4)字面值常量

A.字符串常量"hello"

B.整數常量12,23

C.小數常量12.345

D.字符常量'a','A','0'

E.布爾常量true,false

F.空常量null(后面講)

G.等等……

5)在C#中針對整數常量提供了四種表現形式

A.二進制由0,1組成。以0b開頭。

B.八進制由0,1,...7組成。以0開頭。

C.十進制由0,1,...9組成。整數默認是十進制。

D.十六進制由0,1,...9,a,b,c,d,e,f(大小寫均可)組成。以0x開頭。

進制轉換(了解)

1)其他進制到十進制s

系數:就是每一個位上的數值

基數:x進制的基數就是x

權:對每一個位上的數據,從右,并且從0開始編號,對應的編號就是該數據的權。

結果:系數*基數^權次冪之和。

2)十進制到其他進制

除基取余,直到商為0,余數反轉。

3)進制轉換的快速轉換法

A.十進制和二進制間的轉換

8421碼。

128、64、32、16、8、4、2、1

B.二進制到八進制,十六進制的轉換

原碼反碼補碼(了解)

1)為什么要學習原碼反碼補碼?

后面要學習強制類型轉換,如果不知道有原反補會看不懂結果

2)有符號數據表示法的幾種方式

A.原碼

就是二進制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其余位表示數值的大小。

通過一個字節,也就是8個二進制位表示+7和-7

0(符號位)0000111

1(符號位)1000111

B.反碼

正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。

C.補碼

正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。

3)練習

A.已知原碼求補碼

0b10110100

B.已知補碼求原碼

0b11101110

變量

1)在程序的執行過程中,其值在某個范圍內可以發生改變的量

2)變量的定義格式:

A.數據類型變量名=初始化值;

B.數據類型變量名;

變量名=初始化值;

3)使用變量的注意事項:

A.作用域

變量定義在哪一級大括號中,哪個大括號的范圍就是這個變量的作用域。相同的作用域中不能定義兩個同名變量。

B.初始化值

局部變量在使用之前必須賦值

C.一條語句可以定義多個變量(不建議)

inta,b,c...;

數據類型

首先要了解一點:C#認可的基礎數據類型并沒有內置于C#語言中,而是內置于.net Framework中(CTS)。

如,在c#中聲明一個int類型的數據時,聲明的實際上是.net結構System.Int32的一個實例。這聽起來似乎很深奧,但其意義深遠:這表示在語法上,可以把所有的基礎數據類型看作是支持某些方法的類。

類型實際上仍存儲為基本類型。基本類型在概念上用.Net結構表示,所以肯定沒有性能損失。

1)C#是一種強類型語言,針對每種數據都提供了對應的數據類型,在內存中分配了不同大小的內存空間

2)分類:

A.基本數據類型:4類8種

B.引用數據類型:string,Dynamic,類,接口,數組,指針。

3)基本數據類型

A.整數CTS占用字節數

byteSystem.Byte1

shortSystem.Int162

intSystem.Int324

longSystem.Int648

B.浮點數

floatSystem.Single4

doubleSystem.Double8

C.字符

charSystem.Char2

D.布爾

boolSystem.Boolean1

注意:

整數默認是int類型,浮點數默認是double。

長整數要加L或者l。

單精度的浮點數要加F或者f。

4)char數據類型特點(掌握)

A.char c = (char)97;//結果為'a',char范圍0到65535

B.C#語言中的字符char可以存儲一個中文漢字嗎?為什么呢?

可以。因為在.NET里,類型System.Char代表一個Unicode字符。

Unicode編碼中的每個字符占用兩個字節。中文也是占的兩個字節。

所以,C#中的字符可以存儲一個中文漢字。

數據類型轉換

1)bool類型不參與轉換

2)默認轉換

A.從小到大

B.byte,short,char -- int -- long-- float -- double

C.byte,short,char之間不相互轉換,直接轉成int類型參與運算。其他類型進行混合運算的是小的數據類型提升為大的

3)強制轉換

A.從大到小

B.可能會有精度的損失,一般不建議這樣使用。

C.格式:

目標數據類型變量名= (目標數據類型) (被轉換的數據);

D.例子:

int a = 10;

byte b = 20;

b = (byte)(a + b);

4)思考題和面試題:

A.下面兩種方式有區別嗎?

float f1 = 12.345f;

float f2 = (float)12.345;//有精度損失

B.下面的程序有問題嗎,如果有,在哪里呢?

byte b1 = 3;

byte b2 = 4;

byte b3 = b1 + b2;//byte類型的變量在進行運算的時候,會自動類型提升為int類型(報錯)

byte b4 = 3 + 4;//3和4都是常量,C#有常量優化機制,就是在編譯的的時候直接把3和4的結果賦值給b4了

C.下面的操作結果是什么呢?

byte b = (byte)130;//byte的范圍-128-127,

JAVA里一個byte取值范圍是-128~127,所以結果會是-126

而C#里一個byte取值范圍是0~255,所以結果還是130

D.字符參與運算

是查找ASCII里面的值

'a'97

'A'65

'0'48

Console.WriteLine('a');//97

Console.WriteLine('a'+ 1);//98

E.字符串參與運算

這里其實是字符串的連接

Console.WriteLine ("hello" + 'a' + 1);

Console.WriteLine ('a + 1 + "hello");

Console.WriteLine ("5 + 5 = " + 5 + 5);

Console.WriteLine (5 + 5 + "= 5 + 5");

運算符

1)算術運算符

A.+,-,*,/,%,++,--

B.+的用法

a)加法

b)正號

c)字符串連接符

A./和%的區別

數據做除法操作的時候,/取得是商,%取得是余數

B.%運算符的特點

當左邊的絕對值小于右邊絕對值時,結果是左邊

當左邊的絕對值等于右邊或是右邊的倍數時,結果是0

當左邊的絕對值大于右邊絕對值時,結果是余數

%運算符結果的符號只和左邊有關系,與右邊無關

任何一個正整數%2結果不是0就是1可以用來當作切換條件

C.++和--的用法

a)他們的作用是自增或者自減

b)使用

**單獨使用

放在操作數據的前面和后面效果一樣。

a++或者++a效果一樣。

**參與操作使用

放在操作數的前面:先自增或者自減,再參與操作

inta = 10;

intb = ++a;

放在操作數的后面:先參與操作,再自增或者自減

inta = 10;

intb = a++;

a)練習

(1)請分別計算出a,b,c的值?

int a = 10;

int b = 10;

int c = 10;

a= b++;

c= --a;

b= ++a;

a= c--;

答案:a:9,b:10,c:8

(2)請分別計算出x,y的值?

int x = 4;

//4//6//60

int y =(x++)+(++x)+(x*10);

答案:x:6,y:70

2)賦值運算符

A.=,+=,-=,*=,/=,%=等

B.=叫做賦值運算符,也是最基本的賦值運算符

int x = 10;把10賦值給int類型的變量x。

C.擴展的賦值運算符的特點

隱含了自動強制轉換。

D.面試題:

short s = 1;

s= s + 1;//報錯,改為s = (s的數據類型)(s +1);

shorts = 1;

s+= 1;//等價于s = (s的數據類型)(s +1);

請問上面的代碼哪個有問題?

3)比較運算符

A.==,!=,>,>=,<,<=

B.無論運算符兩端簡單還是復雜最終結果是boolean類型。

C.千萬不要把==寫成了=

4)邏輯運算符

A.&,|,^,!,&&,||

B.邏輯運算符一般用于連接boolean類型的表達式或者值。

C.表達式:

就是用運算符把常量或者變量連接起來的符合java語法的式子。

算術表達式:a + b

比較表達式:a == b(條件表達式)

D.結論

&:有false則false

|:有true則true

^:相同則false,不同則true。//情侶關系。

!:非true則false,非false則true

&&:結果和&是一樣的,只不過有短路效果。左邊是false,右邊不執行。

||:結果和|是一樣的,只不過有短路效果。左邊是true,右邊不執行。

5)位運算符(了解)

&,|,^,~ ,>>,>>>,<<

A.位運算符的特點

都是針對補碼進行操作的

B.結論:

&(位與):有0則0

|(位或):有1則1

^(位異或):相同則0,不同則1

~:按位取反

<<:左移左邊最高位丟棄,右邊補齊0

>>:右移最高位是0,左邊補齊0;最高為是1,左邊補齊1

>>>:無符號右移無論最高位是0還是1,左邊補齊0

C.^的特殊用法

一個數據針對另一個數據位異或兩次,該數不變

D.面試題

a)請實現兩個變量的交換

**采用第三方變量

**用位異或運算符

左邊a,b,a

右邊a^b

b)請用最有效率的方式計算出2乘以8的結果

2<<3

6)三元運算符

A.格式

比較表達式?表達式1:表達式2;

B.執行流程:

首先計算比較表達式的值,看是true還是false。

如果是true,表達式1就是結果。

如果是false,表達式2就是結果。

C.案例:

a)比較兩個數據是否相等

b)獲取兩個數據中的最大值

c)獲取三個數據中的最大值

鍵盤錄入

1)實際開發中,數據是變化的,為了提高程序的靈活性,我們加入鍵盤錄入數據。

2)如何實現呢?目前就記住

引入命名空間

usingSystem;

位置:

可以是在namespace的上面或namespace里頭class上面

可以在class上面,沒有namespace的情況

獲取數據

Console.ReadLine();

3)把三元運算符的案例加入鍵盤錄入改進。

流程控制語句

1)順序結構

從上往下,依次執行

2)選擇結構

按照不同的選擇,執行不同的代碼

3)循環結構

做一些重復的代碼

if語句

1)三種格式

A.格式1

if(比較表達式) {

語句體;

}

執行流程:

判斷比較表達式的值,看是true還是false

如果是true,就執行語句體

如果是false,就不執行語句體

B.格式2

if(比較表達式) {

語句體1;

}else{

語句體2;

}

執行流程:

判斷比較表達式的值,看是true還是false

如果是true,就執行語句體1

如果是false,就執行語句體2

C.格式3

if(比較表達式1) {

語句體1;

}elseif(比較表達式2){

語句體2;

}

...

else{

語句體n+1;

}

執行流程:

判斷比較表達式1的值,看是true還是false

如果是true,就執行語句體1

如果是false,就繼續判斷比較表達式2的值,看是true還是false

如果是true,就執行語句體2

如果是false,就繼續判斷比較表達式3的值,看是true還是false

...

如果都不滿足,就執行語句體n+1

2)注意事項

A.比較表達式無論簡單還是復雜,結果是boolean類型

B.if語句控制的語句體如果是一條語句,是可以省略大括號的;如果是多條,不能省略。建議:永遠不要省略。

C.一般來說,有左大括號,就沒有分號,有分號,就沒有左大括號。

D.else后面如果沒有if,是不會出現比較表達式的。

E.三種if語句其實都是一個語句,只要有一個執行,其他的就不再執行。

3)案例:

A.比較兩個數是否相等

B.獲取兩個數中的最大值

C.獲取三個數中的最大值(if語句的嵌套)

D.根據成績輸出對應的等級

E.根據月份,輸出對應的季節

F.根據x計算對應y的值并輸出

4)三元運算符和if語句第二種格式的關系

所有的三元運算符能夠實現的,if語句的第二種格式都能實現。

反之不成立。

如果if語句第二種格式控制的語句體是輸出語句,就不可以。

因為三元運算符是一個運算符,必須要有一個結果返回,不能是一個輸出語句。

switch語句

1)格式:

switch(表達式) {

case值1:

語句體1;

break;

case值2:

語句體2;

break;

default:

語句體n+1;

break;

}

2)格式解釋說明:

switch:說明這是switch語句。

表達式:與JAVA不同,在C#中可以是整數(byte,short,int,long)、char、string、bool、enum

case:后面的值就是要和表達式進行比較的值

break:表示程序到這里中斷,跳出switch語句

default:如果所有的情況都不匹配,就執行這里,相當于if語句中的else

3)面試題

switch語句的表達式可以是byte嗎?可以是long嗎?可以是String嗎?

答:都可以。

4)執行流程:

A.首先計算表達式的值

B.和每一個case進行匹配,如果有就執行對應的語句體,看到break就結束。

C.如果沒有匹配,就執行default的語句體n+1。

5)注意事項:

A.case后面只能是常量,不能是變量,而且,多個case后面的值不能出現相同的

B.default可以省略嗎?

可以省略,但是不建議,因為它的作用是對不正確的情況給出提示。

特殊情況:

case就可以把值固定。

A,B,C,D

C.break可以省略嗎?

與java不同,在C#中不可以省略,C#中不允許出現case穿透。

但是可以多case:

switch (l)

{

case 4:

case 5:

Console.Write(4);

break;

}

D.default一定要在最后嗎?

不是,可以在任意位置。但是建議在最后。

E.switch語句的結束條件

(1)遇到break就結束了

注:與java不同,在C#中每個case或default中都必須有break

(2)執行到末尾就結束了

6)案例:

A.鍵盤錄入一個數字(1-7),輸出對應的星期幾。

B.單項選擇題

C.根據給定的月份,輸出對應的季節

7)if語句和switch語句各自的場景

A.if

針對boolean類型的判斷

針對一個范圍的判斷

針對幾個常量的判斷

B.switch

針對幾個常量的判斷

循環語句

1)有三種:for,while,do...while

2)for循環語句

A.格式

for(初始化語句;判斷條件語句;控制條件語句){

循環體語句;

}

執行流程:

(1)執行初始化語句

(2)執行判斷條件語句

如果這里是true,就繼續

如果這里是false,循環就結束

(3)執行循環體語句

(4)執行控制條件語句

(5)回到b

B.注意事項

(1)判斷條件語句無論簡單還是復雜,結果是boolean類型

(2)循環體語句如果是一條,可以省略大括號,但是不建議

(3)有分號就沒有左大括號,有左大括號就沒有分號

C.案例

(1)輸出10次HelloWorld

(2)輸出1-10的數據

(3)輸出10-1的數據

(4)求1-10的和

(5)求1-100的和,求1-100的偶數和,求1-100的奇數和

(6)求5的階乘

(7)在控制臺打印水仙花數

(8)統計水仙花個數

(9)改進版的回文數

一個五位數

個位=萬位

十位=千位

個位+十位+千位+萬位=百位

(10)統計1-1000之間同時滿足如下條件的數據有多少個

x%3==2

x%5==3

x%7==2

3)while循環

A.格式:

基本格式

while(判斷條件語句) {

循環體語句;

}

擴展格式:

初始化語句;

while(判斷條件語句){

循環體語句;

控制條件語句;

}

通過查看這個格式,我們就知道while循環可以和for循環等價轉換。

B.執行流程:

(1)執行初始化語句

(2)執行判斷條件語句,看其返回值是true還是false

如果是true,就繼續執行

如果是false,就結束循環

(3)執行循環體語句;

(4)執行控制條件語句

(5)回到B繼續。

C.while的練習

把for語句的練習用while改進

D.for和while的區別

(1)使用上的區別

for語句的那個控制條件變量,在循環結束后不能在使用了。

而while的可以繼續使用。

(2)理解上的區別

for適合于一個范圍的判斷

while適合次數不明確的

舉例:吃葡萄

E.案例:

(1)珠穆朗瑪峰問題

(2)小芳存錢問題(break以后才能做)

4)do...while循環

A.格式

基本格式

do{

循環體語句;

}while(判斷條件語句);

擴展格式:

初始化語句;

do{

循環體語句;

控制條件語句;

}while(判斷條件語句);

通過查看格式,我們就可以看出其實三種循環的格式可以是統一的。

B.執行流程:

(1)執行初始化語句

(2)執行循環體語句;

(3)執行控制條件語句

(4)執行判斷條件語句,看其返回值是true還是false

如果是true,就繼續執行

如果是false,就結束循環

(5)回到b繼續。

5)三種循環語句的區別:

do...while循環至少執行一次循環體。

而for,while循環必須先判斷條件是否成立,然后決定是否執行循環體語句。

6)循環使用的注意事項(死循環)

A.一定要注意修改控制條件,否則容易出現死循環。

B.最簡單的死循環格式

(1)while(true){...}

(2)for(;;){}

7)練習:

A.請輸出一個4行5列的星星(*)圖案。如圖:

*****

*****

*****

*****

B.請輸出正三角形,如圖:

*

**

***

****

*****

C.在控制臺輸出九九乘法表。

控制跳轉語句

1)break:中斷的意思

A.用在循環和switch語句中,離開此應用場景無意義。

B.作用

(1)跳出單層循環

(2)跳出多層循環,需要標簽語句的配合

2)continue:繼續

A.用在循環中,離開此應用場景無意義。

B.作用

跳出單層循環的一次,可以繼續下一次

C.填空題

for(intx=1; x<=10; x++) {

if(x%3== 0) {

//補齊代碼

}

Console.WriteLine("C#基礎班");

}

如何讓控制臺輸出2次:C#基礎班

如何讓控制臺輸出7次:C#基礎班

如何讓控制臺輸出13次:C#基礎班

3)標號+ goto:

A.作用

標記某個循環對其控制

B.組成規則

其實就是合法的標識符

C.例子:(跳出多層循環)

------------------------------------------------------------------------

publicstaticvoidMain(string[] args)

{

for(inti = 0; i < 5;i++)

{

for(intj = 0; j < 5; j++)

{

if(j == 3)

gotook;

else{

Console.WriteLine("i="+ i +",j="+ j);

}

}

}

ok:

Console.WriteLine("goto");

}

------------------------------------------------------------------------

4)return:返回

用于結束方法的,后面還會在繼續講解和使用。

一旦遇到return,程序就不會在繼續往后執行。

5)return和break以及continue的區別?

return是結束方法

break是跳出循環

continue是終止本次循環繼續下次循環

6)練習題:

for(intx=1; x<=10; x++) {

if(x%3==0) {

//在此處填寫代碼

}

Console.WriteLine(“C#基礎班”);

}

我想在控制臺輸出2次:“C#基礎班“

我想在控制臺輸出7次:“C#基礎班“

我想在控制臺輸出13次:“C#基礎班“

方法

1)方法:就是完成特定功能的代碼塊,提高代碼的復用性。

注意:在很多語言里面有函數的定義,而在Java中,函數被稱為方法。

2)格式:

修飾符返回值類型方法名(參數類型參數名1,參數類型參數名2...) {

方法體語句;

return返回值;

}

3)格式說明:

修飾符:目前就用public static。后面再詳細講解其他修飾符

返回值類型:就是功能結果的數據類型

方法名:符合命名規則即可,方便我們調用該方法。

參數類型:就是參數的數據類型

參數名:就是變量

參數分類:

實參:實際參與運算的數據

形參:方法上定義的,用于接收實際參數的變量

方法體語句:就是完成功能的代碼塊

return:結束方法

返回值:就是功能的結果,由return帶給調用者。

4)兩個明確:

返回值類型:結果的數據類型

參數列表:參數的個數及對應的數據類型

5)方法調用

A.有明確返回值的方法

(1)單獨調用,沒有意義

(2)輸出調用,不是很好,因為我可能需要不結果進行進一步的操作。但是講課一般我就用了。

(3)賦值調用,推薦方案

B.void類型修飾的方法

單獨調用

6)方法的注意事項

A.方法不調用不執行

B.方法之間是平級關系,不能嵌套定義

C.方法定義的時候,參數是用,隔開的

D.方法在調用的時候,不用在傳遞數據類型

E.如果方法有明確的返回值類型,就必須有return語句返回。

7)案例:

A.求和方案

B.獲取兩個數中的較大值

C.比較兩個數據是否相同

D.獲取三個數中的最大值

E.輸出m行n列的星形

F.輸出nn乘法表

8)方法重載

A.在同一個類中,方法名相同,參數列表不同。與返回值無關。

B.參數列表不同:

(1)參數的個數不同。

(2)參數的對應的數據類型不同。

(3)參數的順序不同(算重載,但是在開發中不用)

9)方法重載案例

不同的類型的多個同名方法的比較。

數組

1)數組:存儲同一種數據類型的多個元素的容器,既可以存儲基本數據類型,也可以存儲引用數據類型。

2)特點:每一個元素都有編號,從0開始,最大編號是長度-1。

編號的專業叫法:索引

3)定義格式

數據類型[]數組名;

4)數組的初始化

就是為數組開辟連續的內存空間,并為每個數組元素賦予值

A.動態初始化

只給長度,系統給出默認值

舉例:int[] arr= new int[3];

B.靜態初始化

給出值,系統決定長度

舉例:int[] arr= new int[]{1,2,3};

簡化版:int[] arr= {1,2,3};

5)數組操作的兩個常見小問題:

A.數組索引越界異常

原因:你訪問了不存在的索引。

B.空指針異常

原因:數組已經不在指向堆內存了。而你還用數組名去訪問元素。

例子:

int[]arr = {1,2,3};

arr= null;

Console.WriteLine(arr[0]);

6)C#的內存分配

A.棧存儲局部變量

B.堆存儲所有new出來的

C.方法區(面向對象部分詳細講解)

D.本地方法區(系統相關)

E.寄存器(CPU使用)

注意:

a:局部變量在方法定義中或者方法聲明上定義的變量。

b:棧內存和堆內存的區別

棧:數據使用完畢,就消失。

堆:每一個new出來的東西都有地址

每一個變量都有默認值

byte,short,int,long0

float,double 0.0

char'\u0000'

booleanfalse

引用類型null

數據使用完畢后,在垃圾回收器空閑的時候回收。

(7)數組內存圖

A:一個數組

B:二個數組

C:三個數組(兩個棧變量指向同一個堆內存)

(8)數組的常見操作

A:遍歷

---------------------------------------------------------------------------

方式1:

publicstatic void printArray(int[] arr) {

for(intx=0; x

System.out.println(arr[x]);

}

}

方式2:

publicstatic void printArray(int[] arr) {

System.out.print("[");

for(intx=0; x

if(x== arr.length-1) {

System.out.println(arr[x]+"]");

}else{

System.out.println(arr[x]+",");

}

}

}

---------------------------------------------------------------------------

B:最值

---------------------------------------------------------------------------

最大值:

publicstatic int getMax(int[] arr) {

intmax = arr[0];

for(intx=1; x

if(arr[x]> max) {

max= arr[x];

}

}

returnmax;

}

最小值:

publicstatic int getMin(int[] arr) {

intmin = arr[0];

for(intx=1; x

if(arr[x]< min) {

min= arr[x];

}

}

returnmin;

}

---------------------------------------------------------------------------

C:逆序

---------------------------------------------------------------------------

方式1:

publicstatic void reverse(int[] arr) {

for(intx=0; x

inttemp = arr[x];

arr[x]= arr[arr.length-1-x];

arr[arr.length-1-x]= temp;

}

}

方式2:

publicstatic void reverse(int[] arr) {

for(intstart=0,end=arr.length-1; start<=end; start++,end--) {

inttemp = arr[start];

arr[start]= arr[end];

arr[end]= temp;

}

}

---------------------------------------------------------------------------

D:查表

---------------------------------------------------------------------------

publicstatic String getString(String[] strArray,int index) {

returnstrArray[index];

}

---------------------------------------------------------------------------

E:基本查找

---------------------------------------------------------------------------

方式1:

publicstatic int getIndex(int[] arr,int value) {

for(intx=0; x

if(arr[x]== value) {

returnx;

}

}

return-1;

}

方式2:

publicstatic int getIndex(int[] arr,int value) {

intindex = -1;

for(intx=0; x

if(arr[x]== value) {

index= x;

break;

}

}

returnindex;

}

---------------------------------------------------------------------------

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 第1章 第一個C程序第2章 C語言基礎第3章 變量和數據類型第4章 順序結構程序設計第5章 條件結構程序設計第6章...
    小獅子365閱讀 10,719評論 3 71
  • Win7下如何打開DOS控制臺? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,614評論 4 12
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • 上周五和這周五,我都在和同事Myran整理檔案,然后運送到樓下的存儲室里面。Myran對我說,你是我在這里工作以來...
    生如如花閱讀 476評論 0 0
  • 故事中,有一位青年,一直以來無論做什么事情都是不盡人意,不是事業的失敗,就是生意的虧損,無論他怎么做,都會出現和...
    壹想閱讀 517評論 1 8