C#編程基礎

基礎

.NET概述

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

什么是.NET框架

.NET框架(.NET

Framework是由微軟開發(fā)平挑,一個軟件開發(fā)平臺京景。

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

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

.NET框架結(jié)構(gòu)圖

語言

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

Basic、Visual C++腥寇、Visual C#和JScript成翩。然而,.NET框架的模塊化特性使得由第三方創(chuàng)作的其他語言也可以集成到Visual Studio .NET中赦役。此類語言有20多種麻敌,包括Perl、Component Pascal掂摔、SmallScript和Smalltalk术羔。

公共語言規(guī)范

此規(guī)范是實現(xiàn).NET框架的所有語言的基礎,定義了公共類型系統(tǒng)的標準和所有語言必須實現(xiàn)的功能乙漓。這是第三方語言與框架集成的基礎级历。

Windows窗體

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

ASP.NET

這是Web窗體和XML Web services的基礎技術(shù)嚼贡。Web窗體用于前端Web開發(fā),而XML Web services通過Intranet或Internet提供相應的功能同诫。

數(shù)據(jù)管理

ADO.NET代替ADO作為.NET框架中的數(shù)據(jù)處理機制粤策,它是使用XML進行數(shù)據(jù)傳輸?shù)母叨瓤缮炜s技術(shù)。

基類庫

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

公共語言運行時(CLR)

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

什么是公共語言架構(gòu)

通用語言架構(gòu)(Common Language Infrastructure,簡稱CLI)是一個開放的技術(shù)規(guī)范沼琉。

CLI有時候會和CLR混用北苟。但嚴格意義上說,這是錯誤的打瘪。因為CLI是一種規(guī)范友鼻,而CLR則是對這種規(guī)范的一個實現(xiàn)。

CLI標準包包含以下更詳細的規(guī)范

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

l元數(shù)據(jù)系統(tǒng)(Metadata)

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

l虛擬執(zhí)行系統(tǒng)(VirtualExecution System, VES)

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

l框架(Framework)

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

什么是公共語言運行時

通用語言運行庫(Common

Language Runtime僻爽,簡稱CLR)是微軟為他們的.NET的虛擬機所選用的名稱虫碉。這是通用語言架構(gòu)(簡稱CLI)的微軟實現(xiàn)版本,它定義了一個代碼運行的環(huán)境胸梆。CLR運行一種被稱為通用中間語言的字節(jié)代碼敦捧,這個是微軟的通用中間語言的實現(xiàn)版本。

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

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

CLR運行在windows上济蝉。查看通用語言架構(gòu)可以找到該規(guī)格的實現(xiàn)版本列表。其中有一些版本是運行在非Windows的操作系統(tǒng)中菠发。

什么是中間語言

通用中間語言(Common Intermediate Language王滤,簡稱CIL,原名叫做MSIL)是一種屬于公共語言規(guī)范和.NET框架的低階(lowest-level)的人類可讀的編程語言滓鸠,一種特殊的字節(jié)代碼雁乡。CIL類似一個面向?qū)ο蟮膮R編語言,并且它是完全基于堆棧的糜俗。面向.NET框架的語言都會被各自的編譯器編譯為中間語言(CIL)踱稍,運行時再經(jīng)由特定的編譯器(JIT編譯器曲饱,Just In tIME,JITer)編譯為機器代碼,以供操作系統(tǒng)執(zhí)行珠月。

什么是托管代碼

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

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

簡單點說就是:所有運行在CLR上的代碼就叫做托管代碼啤挎,具有與平臺無關(guān)的特性驻谆。

什么是程序集

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

其中包括了:

l程序清單

描述了程序集的版本庆聘,語言文化胜臊,發(fā)布者,共有導出類型伙判,以及組成該程序集的所有文件象对。

l元數(shù)據(jù)

提供有關(guān)程序集中定義的類型的信息,包括類型的名稱澳腹,可見性织盼,基類和類型所實現(xiàn)的接口。注意:程序集清單和元數(shù)據(jù)說明了程序集是自我描述的酱塔。

lCIL:中間語言

l資源集:諸如位圖沥邻,指針,靜態(tài)文本等羊娃。

程序集有兩種:

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

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

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

C#與.NET的關(guān)系

C#是一個程序設計語言,僅僅是一個語言垃帅,是.NET框架中眾多開發(fā)語言中的一種延届。

C#程序的開發(fā)執(zhí)行流程

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

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

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

HelloWorld案例的編寫和運行

(1)定義類

(2)寫main方法

(3)寫輸出語句

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

(5)編譯和運行程序

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

classHelloWorld {

public static void Main(string[] args) {

Console.WriteLine("HelloWorld");

}

}

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

(1)程序解釋:

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

格式:class類名

舉例:classHelloWorld

B:在類中寫內(nèi)容的時候酱固,用大括號括起來械念。

C:C#程序要想執(zhí)行,必須有Main方法运悲。

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

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

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

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

注意:""里面的內(nèi)容是可以改動的班眯。

常見的問題

lC#語言嚴格區(qū)分大小寫希停,請注意烁巫。

l見到非法字符:

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

l括號的配對問題程拭。一般來說,括號都是成對出現(xiàn)的棍潘。

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

標識符

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

2)組成規(guī)則:

A.英文字母

B.數(shù)字

C.下劃線(_)

3)注意事項

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

B.不能以數(shù)字開頭

C.不能是C#中的關(guān)鍵字

D.區(qū)分大小寫

4)常見的命名規(guī)則

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:可以幫助我們調(diào)試程序媚创。

后面我們會講解一個更高端的一個調(diào)試工具

常量

1)在程序執(zhí)行的過程中渗钉,其值不發(fā)生改變的量

2)常量可以是任何基本數(shù)據(jù)類型

3)分類:

A:字面值常量

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

4)字面值常量

A.字符串常量"hello"

B.整數(shù)常量12,23

C.小數(shù)常量12.345

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

E.布爾常量true,false

F.空常量null(后面講)

G.等等……

5)在C#中針對整數(shù)常量提供了四種表現(xiàn)形式

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

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

C.十進制由0本刽,1鲸湃,...9組成。整數(shù)默認是十進制盅安。

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

進制轉(zhuǎn)換(了解)

1)其他進制到十進制s

系數(shù):就是每一個位上的數(shù)值

基數(shù):x進制的基數(shù)就是x

權(quán):對每一個位上的數(shù)據(jù),從右蝙寨,并且從0開始編號晒衩,對應的編號就是該數(shù)據(jù)的權(quán)嗤瞎。

結(jié)果:系數(shù)*基數(shù)^權(quán)次冪之和。

2)十進制到其他進制

除基取余听系,直到商為0贝奇,余數(shù)反轉(zhuǎn)。

3)進制轉(zhuǎn)換的快速轉(zhuǎn)換法

A.十進制和二進制間的轉(zhuǎn)換

8421碼靠胜。

128掉瞳、64、32浪漠、16陕习、8、4址愿、2该镣、1

B.二進制到八進制,十六進制的轉(zhuǎn)換

原碼反碼補碼(了解)

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

后面要學習強制類型轉(zhuǎn)換,如果不知道有原反補會看不懂結(jié)果

2)有符號數(shù)據(jù)表示法的幾種方式

A.原碼

就是二進制定點表示法响谓,即最高位為符號位损合,“0”表示正,“1”表示負娘纷,其余位表示數(shù)值的大小嫁审。

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

0(符號位)0000111

1(符號位)1000111

B.反碼

正數(shù)的反碼與其原碼相同;負數(shù)的反碼是對其原碼逐位取反赖晶,但符號位除外土居。

C.補碼

正數(shù)的補碼與其原碼相同;負數(shù)的補碼是在其反碼的末位加1嬉探。

3)練習

A.已知原碼求補碼

0b10110100

B.已知補碼求原碼

0b11101110

變量

1)在程序的執(zhí)行過程中擦耀,其值在某個范圍內(nèi)可以發(fā)生改變的量

2)變量的定義格式:

A.數(shù)據(jù)類型變量名=初始化值;

B.數(shù)據(jù)類型變量名;

變量名=初始化值;

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

A.作用域

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

B.初始化值

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

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

inta,b,c...;

數(shù)據(jù)類型

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

如吁系,在c#中聲明一個int類型的數(shù)據(jù)時,聲明的實際上是.net結(jié)構(gòu)System.Int32的一個實例白魂。這聽起來似乎很深奧汽纤,但其意義深遠:這表示在語法上,可以把所有的基礎數(shù)據(jù)類型看作是支持某些方法的類福荸。

類型實際上仍存儲為基本類型蕴坪。基本類型在概念上用.Net結(jié)構(gòu)表示,所以肯定沒有性能損失背传。

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

2)分類:

A.基本數(shù)據(jù)類型:4類8種

B.引用數(shù)據(jù)類型:string径玖,Dynamic痴脾,類租冠,接口艘儒,數(shù)組,指針通砍。

3)基本數(shù)據(jù)類型

A.整數(shù)CTS占用字節(jié)數(shù)

byteSystem.Byte1

shortSystem.Int162

intSystem.Int324

longSystem.Int648

B.浮點數(shù)

floatSystem.Single4

doubleSystem.Double8

C.字符

charSystem.Char2

D.布爾

boolSystem.Boolean1

注意:

整數(shù)默認是int類型冤灾,浮點數(shù)默認是double薯定。

長整數(shù)要加L或者l。

單精度的浮點數(shù)要加F或者f瞳购。

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

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

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

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

Unicode編碼中的每個字符占用兩個字節(jié)吞杭。中文也是占的兩個字節(jié)盏浇。

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

數(shù)據(jù)類型轉(zhuǎn)換

1)bool類型不參與轉(zhuǎn)換

2)默認轉(zhuǎn)換

A.從小到大

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

C.byte,short,char之間不相互轉(zhuǎn)換绢掰,直接轉(zhuǎn)成int類型參與運算。其他類型進行混合運算的是小的數(shù)據(jù)類型提升為大的

3)強制轉(zhuǎn)換

A.從大到小

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

C.格式:

目標數(shù)據(jù)類型變量名= (目標數(shù)據(jù)類型) (被轉(zhuǎn)換的數(shù)據(jù));

D.例子:

int a = 10;

byte b = 20;

b = (byte)(a + b);

4)思考題和面試題:

A.下面兩種方式有區(qū)別嗎?

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#有常量優(yōu)化機制,就是在編譯的的時候直接把3和4的結(jié)果賦值給b4了

C.下面的操作結(jié)果是什么呢?

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

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

而C#里一個byte取值范圍是0~255萧芙,所以結(jié)果還是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)算術(shù)運算符

A.+,-假丧,*双揪,/,%包帚,++渔期,--

B.+的用法

a)加法

b)正號

c)字符串連接符

A./和%的區(qū)別

數(shù)據(jù)做除法操作的時候,/取得是商渴邦,%取得是余數(shù)

B.%運算符的特點

當左邊的絕對值小于右邊絕對值時,結(jié)果是左邊

當左邊的絕對值等于右邊或是右邊的倍數(shù)時,結(jié)果是0

當左邊的絕對值大于右邊絕對值時,結(jié)果是余數(shù)

%運算符結(jié)果的符號只和左邊有關(guān)系,與右邊無關(guān)

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

C.++和--的用法

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

b)使用

**單獨使用

放在操作數(shù)據(jù)的前面和后面效果一樣擎场。

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

**參與操作使用

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

inta = 10;

intb = ++a;

放在操作數(shù)的后面:先參與操作迅办,再自增或者自減

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.擴展的賦值運算符的特點

隱含了自動強制轉(zhuǎn)換矾策。

D.面試題:

short s = 1;

s= s + 1;//報錯磷账,改為s = (s的數(shù)據(jù)類型)(s +1);

shorts = 1;

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

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

3)比較運算符

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

B.無論運算符兩端簡單還是復雜最終結(jié)果是boolean類型贾虽。

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

4)邏輯運算符

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

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

C.表達式:

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

算術(shù)表達式:a + b

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

D.結(jié)論

&:有false則false

|:有true則true

^:相同則false蓬豁,不同則true绰咽。//情侶關(guān)系。

!:非true則false地粪,非false則true

&&:結(jié)果和&是一樣的取募,只不過有短路效果。左邊是false蟆技,右邊不執(zhí)行玩敏。

||:結(jié)果和|是一樣的,只不過有短路效果质礼。左邊是true旺聚,右邊不執(zhí)行。

5)位運算符(了解)

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

A.位運算符的特點

都是針對補碼進行操作的

B.結(jié)論:

&(位與):有0則0

|(位或):有1則1

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

~:按位取反

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

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

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

C.^的特殊用法

一個數(shù)據(jù)針對另一個數(shù)據(jù)位異或兩次,該數(shù)不變

D.面試題

a)請實現(xiàn)兩個變量的交換

**采用第三方變量

**用位異或運算符

左邊a,b,a

右邊a^b

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

2<<3

6)三元運算符

A.格式

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

B.執(zhí)行流程:

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

如果是true,表達式1就是結(jié)果圣拄。

如果是false嘴秸,表達式2就是結(jié)果。

C.案例:

a)比較兩個數(shù)據(jù)是否相等

b)獲取兩個數(shù)據(jù)中的最大值

c)獲取三個數(shù)據(jù)中的最大值

鍵盤錄入

1)實際開發(fā)中,數(shù)據(jù)是變化的岳掐,為了提高程序的靈活性凭疮,我們加入鍵盤錄入數(shù)據(jù)。

2)如何實現(xiàn)呢?目前就記住

引入命名空間

usingSystem;

位置:

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

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

獲取數(shù)據(jù)

Console.ReadLine();

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

流程控制語句

1)順序結(jié)構(gòu)

從上往下,依次執(zhí)行

2)選擇結(jié)構(gòu)

按照不同的選擇纲酗,執(zhí)行不同的代碼

3)循環(huán)結(jié)構(gòu)

做一些重復的代碼

if語句

1)三種格式

A.格式1

if(比較表達式) {

語句體;

}

執(zhí)行流程:

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

如果是true,就執(zhí)行語句體

如果是false觅赊,就不執(zhí)行語句體

B.格式2

if(比較表達式) {

語句體1;

}else{

語句體2;

}

執(zhí)行流程:

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

如果是true,就執(zhí)行語句體1

如果是false吮螺,就執(zhí)行語句體2

C.格式3

if(比較表達式1) {

語句體1;

}elseif(比較表達式2){

語句體2;

}

...

else{

語句體n+1;

}

執(zhí)行流程:

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

如果是true,就執(zhí)行語句體1

如果是false鸠补,就繼續(xù)判斷比較表達式2的值萝风,看是true還是false

如果是true,就執(zhí)行語句體2

如果是false莫鸭,就繼續(xù)判斷比較表達式3的值,看是true還是false

...

如果都不滿足横殴,就執(zhí)行語句體n+1

2)注意事項

A.比較表達式無論簡單還是復雜被因,結(jié)果是boolean類型

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

C.一般來說粥鞋,有左大括號,就沒有分號瞄崇,有分號呻粹,就沒有左大括號。

D.else后面如果沒有if苏研,是不會出現(xiàn)比較表達式的等浊。

E.三種if語句其實都是一個語句,只要有一個執(zhí)行摹蘑,其他的就不再執(zhí)行筹燕。

3)案例:

A.比較兩個數(shù)是否相等

B.獲取兩個數(shù)中的最大值

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

D.根據(jù)成績輸出對應的等級

E.根據(jù)月份,輸出對應的季節(jié)

F.根據(jù)x計算對應y的值并輸出

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

所有的三元運算符能夠?qū)崿F(xiàn)的,if語句的第二種格式都能實現(xiàn)撒踪。

反之不成立过咬。

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

因為三元運算符是一個運算符掸绞,必須要有一個結(jié)果返回,不能是一個輸出語句忍捡。

switch語句

1)格式:

switch(表達式) {

case值1:

語句體1;

break;

case值2:

語句體2;

break;

default:

語句體n+1;

break;

}

2)格式解釋說明:

switch:說明這是switch語句集漾。

表達式:與JAVA不同,在C#中可以是整數(shù)(byte,short,int,long)砸脊、char具篇、string、bool凌埂、enum

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

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

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

3)面試題

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

答:都可以。

4)執(zhí)行流程:

A.首先計算表達式的值

B.和每一個case進行匹配瞳抓,如果有就執(zhí)行對應的語句體埃疫,看到break就結(jié)束。

C.如果沒有匹配孩哑,就執(zhí)行default的語句體n+1栓霜。

5)注意事項:

A.case后面只能是常量,不能是變量横蜒,而且胳蛮,多個case后面的值不能出現(xiàn)相同的

B.default可以省略嗎?

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

特殊情況:

case就可以把值固定。

A,B,C,D

C.break可以省略嗎?

與java不同澎蛛,在C#中不可以省略抚垄,C#中不允許出現(xiàn)case穿透。

但是可以多case:

switch (l)

{

case 4:

case 5:

Console.Write(4);

break;

}

D.default一定要在最后嗎?

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

E.switch語句的結(jié)束條件

(1)遇到break就結(jié)束了

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

(2)執(zhí)行到末尾就結(jié)束了

6)案例:

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

B.單項選擇題

C.根據(jù)給定的月份,輸出對應的季節(jié)

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

A.if

針對boolean類型的判斷

針對一個范圍的判斷

針對幾個常量的判斷

B.switch

針對幾個常量的判斷

循環(huán)語句

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

2)for循環(huán)語句

A.格式

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

循環(huán)體語句;

}

執(zhí)行流程:

(1)執(zhí)行初始化語句

(2)執(zhí)行判斷條件語句

如果這里是true,就繼續(xù)

如果這里是false荧恍,循環(huán)就結(jié)束

(3)執(zhí)行循環(huán)體語句

(4)執(zhí)行控制條件語句

(5)回到b

B.注意事項

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

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

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

C.案例

(1)輸出10次HelloWorld

(2)輸出1-10的數(shù)據(jù)

(3)輸出10-1的數(shù)據(jù)

(4)求1-10的和

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

(6)求5的階乘

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

(8)統(tǒng)計水仙花個數(shù)

(9)改進版的回文數(shù)

一個五位數(shù)

個位=萬位

十位=千位

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

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

x%3==2

x%5==3

x%7==2

3)while循環(huán)

A.格式:

基本格式

while(判斷條件語句) {

循環(huán)體語句;

}

擴展格式:

初始化語句;

while(判斷條件語句){

循環(huán)體語句;

控制條件語句;

}

通過查看這個格式盒卸,我們就知道while循環(huán)可以和for循環(huán)等價轉(zhuǎn)換。

B.執(zhí)行流程:

(1)執(zhí)行初始化語句

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

如果是true次氨,就繼續(xù)執(zhí)行

如果是false蔽介,就結(jié)束循環(huán)

(3)執(zhí)行循環(huán)體語句;

(4)執(zhí)行控制條件語句

(5)回到B繼續(xù)。

C.while的練習

把for語句的練習用while改進

D.for和while的區(qū)別

(1)使用上的區(qū)別

for語句的那個控制條件變量,在循環(huán)結(jié)束后不能在使用了煮寡。

而while的可以繼續(xù)使用虹蓄。

(2)理解上的區(qū)別

for適合于一個范圍的判斷

while適合次數(shù)不明確的

舉例:吃葡萄

E.案例:

(1)珠穆朗瑪峰問題

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

4)do...while循環(huán)

A.格式

基本格式

do{

循環(huán)體語句;

}while(判斷條件語句);

擴展格式:

初始化語句;

do{

循環(huán)體語句;

控制條件語句;

}while(判斷條件語句);

通過查看格式,我們就可以看出其實三種循環(huán)的格式可以是統(tǒng)一的幸撕。

B.執(zhí)行流程:

(1)執(zhí)行初始化語句

(2)執(zhí)行循環(huán)體語句;

(3)執(zhí)行控制條件語句

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

如果是true薇组,就繼續(xù)執(zhí)行

如果是false,就結(jié)束循環(huán)

(5)回到b繼續(xù)坐儿。

5)三種循環(huán)語句的區(qū)別:

do...while循環(huán)至少執(zhí)行一次循環(huán)體律胀。

而for,while循環(huán)必須先判斷條件是否成立,然后決定是否執(zhí)行循環(huán)體語句貌矿。

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

A.一定要注意修改控制條件,否則容易出現(xiàn)死循環(huán)炭菌。

B.最簡單的死循環(huán)格式

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

(2)for(;;){}

7)練習:

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

*****

*****

*****

*****

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

*

**

***

****

*****

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

控制跳轉(zhuǎn)語句

1)break:中斷的意思

A.用在循環(huán)和switch語句中,離開此應用場景無意義酌毡。

B.作用

(1)跳出單層循環(huán)

(2)跳出多層循環(huán)克握,需要標簽語句的配合

2)continue:繼續(xù)

A.用在循環(huán)中,離開此應用場景無意義阔馋。

B.作用

跳出單層循環(huán)的一次玛荞,可以繼續(xù)下一次

C.填空題

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

if(x%3== 0) {

//補齊代碼

}

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

}

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

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

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

3)標號+ goto:

A.作用

標記某個循環(huán)對其控制

B.組成規(guī)則

其實就是合法的標識符

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

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

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:返回

用于結(jié)束方法的娇掏,后面還會在繼續(xù)講解和使用呕寝。

一旦遇到return,程序就不會在繼續(xù)往后執(zhí)行婴梧。

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

return是結(jié)束方法

break是跳出循環(huán)

continue是終止本次循環(huán)繼續(xù)下次循環(huán)

6)練習題:

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

if(x%3==0) {

//在此處填寫代碼

}

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

}

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

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

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

方法

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

注意:在很多語言里面有函數(shù)的定義塞蹭,而在Java中孽江,函數(shù)被稱為方法。

2)格式:

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

方法體語句;

return返回值;

}

3)格式說明:

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

返回值類型:就是功能結(jié)果的數(shù)據(jù)類型

方法名:符合命名規(guī)則即可岗屏,方便我們調(diào)用該方法辆琅。

參數(shù)類型:就是參數(shù)的數(shù)據(jù)類型

參數(shù)名:就是變量

參數(shù)分類:

實參:實際參與運算的數(shù)據(jù)

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

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

return:結(jié)束方法

返回值:就是功能的結(jié)果这刷,由return帶給調(diào)用者婉烟。

4)兩個明確:

返回值類型:結(jié)果的數(shù)據(jù)類型

參數(shù)列表:參數(shù)的個數(shù)及對應的數(shù)據(jù)類型

5)方法調(diào)用

A.有明確返回值的方法

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

(2)輸出調(diào)用暇屋,不是很好似袁,因為我可能需要不結(jié)果進行進一步的操作。但是講課一般我就用了咐刨。

(3)賦值調(diào)用昙衅,推薦方案

B.void類型修飾的方法

單獨調(diào)用

6)方法的注意事項

A.方法不調(diào)用不執(zhí)行

B.方法之間是平級關(guān)系,不能嵌套定義

C.方法定義的時候定鸟,參數(shù)是用而涉,隔開的

D.方法在調(diào)用的時候,不用在傳遞數(shù)據(jù)類型

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

7)案例:

A.求和方案

B.獲取兩個數(shù)中的較大值

C.比較兩個數(shù)據(jù)是否相同

D.獲取三個數(shù)中的最大值

E.輸出m行n列的星形

F.輸出nn乘法表

8)方法重載

A.在同一個類中,方法名相同躯泰,參數(shù)列表不同谭羔。與返回值無關(guān)。

B.參數(shù)列表不同:

(1)參數(shù)的個數(shù)不同麦向。

(2)參數(shù)的對應的數(shù)據(jù)類型不同瘟裸。

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

9)方法重載案例

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

數(shù)組

1)數(shù)組:存儲同一種數(shù)據(jù)類型的多個元素的容器诵竭,既可以存儲基本數(shù)據(jù)類型话告,也可以存儲引用數(shù)據(jù)類型。

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

編號的專業(yè)叫法:索引

3)定義格式

數(shù)據(jù)類型[]數(shù)組名;

4)數(shù)組的初始化

就是為數(shù)組開辟連續(xù)的內(nèi)存空間裳朋,并為每個數(shù)組元素賦予值

A.動態(tài)初始化

只給長度病线,系統(tǒng)給出默認值

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

B.靜態(tài)初始化

給出值,系統(tǒng)決定長度

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

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

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

A.數(shù)組索引越界異常

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

B.空指針異常

原因:數(shù)組已經(jīng)不在指向堆內(nèi)存了送挑。而你還用數(shù)組名去訪問元素。

例子:

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

arr= null;

Console.WriteLine(arr[0]);

6)C#的內(nèi)存分配

A.棧存儲局部變量

B.堆存儲所有new出來的

C.方法區(qū)(面向?qū)ο蟛糠衷敿氈v解)

D.本地方法區(qū)(系統(tǒng)相關(guān))

E.寄存器(CPU使用)

注意:

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

b:棧內(nèi)存和堆內(nèi)存的區(qū)別

棧:數(shù)據(jù)使用完畢惕耕,就消失。

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

每一個變量都有默認值

byte,short,int,long0

float,double 0.0

char'\u0000'

booleanfalse

引用類型null

數(shù)據(jù)使用完畢后诫肠,在垃圾回收器空閑的時候回收司澎。

(7)數(shù)組內(nèi)存圖

A:一個數(shù)組

B:二個數(shù)組

C:三個數(shù)組(兩個棧變量指向同一個堆內(nèi)存)

(8)數(shù)組的常見操作

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;

}

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末欺缘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挤安,更是在濱河造成了極大的恐慌浪南,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漱受,死亡現(xiàn)場離奇詭異络凿,居然都是意外死亡,警方通過查閱死者的電腦和手機昂羡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門絮记,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人虐先,你說我怎么就攤上這事怨愤。” “怎么了蛹批?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵撰洗,是天一觀的道長。 經(jīng)常有香客問我腐芍,道長差导,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任猪勇,我火速辦了婚禮设褐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泣刹。我一直安慰自己助析,他們只是感情好,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布椅您。 她就那樣靜靜地躺著外冀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪掀泳。 梳的紋絲不亂的頭發(fā)上雪隧,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音开伏,去河邊找鬼膀跌。 笑死遭商,一個胖子當著我的面吹牛固灵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播劫流,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼巫玻,長吁一口氣:“原來是場噩夢啊……” “哼丛忆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起仍秤,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤熄诡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后诗力,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凰浮,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年苇本,在試婚紗的時候發(fā)現(xiàn)自己被綠了袜茧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡瓣窄,死狀恐怖笛厦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情俺夕,我是刑警寧澤裳凸,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站劝贸,受9級特大地震影響姨谷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜映九,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一菠秒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧氯迂,春花似錦践叠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至轿曙,卻和暖如春弄捕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背导帝。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工守谓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人您单。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓斋荞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親虐秦。 傳聞我的和親對象是個殘疾皇子平酿,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 第1章 第一個C程序第2章 C語言基礎第3章 變量和數(shù)據(jù)類型第4章 順序結(jié)構(gòu)程序設計第5章 條件結(jié)構(gòu)程序設計第6章...
    小獅子365閱讀 10,655評論 3 71
  • Win7下如何打開DOS控制臺蜈彼? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,599評論 4 12
  • 1. Java基礎部分 基礎部分的順序:基本語法筑辨,類相關(guān)的語法,內(nèi)部類的語法幸逆,繼承相關(guān)的語法棍辕,異常的語法,線程的語...
    子非魚_t_閱讀 31,639評論 18 399
  • 上周五和這周五还绘,我都在和同事Myran整理檔案痢毒,然后運送到樓下的存儲室里面。Myran對我說蚕甥,你是我在這里工作以來...
    生如如花閱讀 464評論 0 0
  • 故事中哪替,有一位青年,一直以來無論做什么事情都是不盡人意菇怀,不是事業(yè)的失敗凭舶,就是生意的虧損,無論他怎么做爱沟,都會出現(xiàn)和...
    閱動視界閱讀 504評論 1 8