C#基礎學習筆記


第一章:c#基礎

一、程序設計語言的發展及歷史

1、程序設計語言

通俗也叫編程語言,實現人與機器交互的工具

 

2、歷史

1)機器語言:0,1

2)匯編語言:包含一些機器語言,同時增加了一些指令,便於理解

3)C語言:和我們的自然語言非常像

4)C++:在C語言的基礎上進行發展,增加了面向對象的特性

5)Java:SUN公司開發,被Oracle公司收購

6)C#:面向對象的程序設計語言

7)易語言:源代碼是使用中文來編寫的

...

注:不同的編程語言,應用場景是不一樣的

java、C#是面向企業級的應用開發

機器語言(0,1) 匯編語言(Add 1,2) 高級語言(1+2)

void main() {

printf("我愛你的錢!") ;

}

 

3、編譯器(翻譯者)

把源代碼編譯(翻譯)成計算機能讀懂的代碼(0、1)

 

二、.NET框架(.NET Framework)

1、概述

是所有.NET程序運行的平台

C#、C++、F#……

 

2、組成

通用語言運行庫(CLR):運行程序的環境

類庫:.NET程序的工具集合

 

3、C#

"面向對象"的程序設計語言

微軟公司研發的

與Java語言競爭

 

4、Visual Studio(VS) : 開發軟件的"集成"工具

 

5、第一個C#程序

第一:新建一個以.cs為后綴的文件

第二:編寫源代碼

using System ;

namespace Xxxx

{

class Yyyy

{

static void Main()

{

//在此編寫程序,實現功能

}

}

}

第三:把源代碼編譯成二進制的代碼(機器代碼、目標代碼)

csc Xxxxx.cs -> Xxxxx.exe

第四:運行程序

Xxxxx

注:Xxxxx表示CS文件名

 

6、.NET程序的編譯機制(執行過程)

.NET源代碼 -> MSIL -> 機器代碼

兩次編譯

 

三、算法、指令、程序、軟件的關系

算法:解決問題的步驟/過程

指令:編寫每一條代碼

程序:指令的集合

軟件:程序+數據的集合

 

四、C#語言的基本結構及其含意(重要)

using System;

namespace ch01

{

class HelloWorld

{

static void Main(string[] args)

{

Console.WriteLine("hello,world") ;

}

}

}

說明:

1)C#程序必須以cs為后綴

2)C#程序嚴格區分大小寫

3)標識符 : 是一個符號,用於命名。標識符的命名規則為:

一般由字母、數字、下划線組成

首字符必須使用字母或下划線

命名有意義

name、age、aGE123、a123b、_123A、123_C

4)using System; : 使用命名空間

命名空間:文件夾,用於組織和管理類

5)namespace Ch01 : 自定義命名空間,語法如下:

namespace 命名空間名稱

{

...

}

6)class Programe :自定類(類別),語法如下:

class 類名稱

{

...

}

注:類名要首字母要大寫

7)static void Main(string[] args) :主函數,是程序的入口

注:一個C#程序,至少要有一個Main方法

static:靜態

void: 空的

string[] args:傳入參數

8)Console.WriteLine("我愛你C#!") ;

Console:

是系統中的一個類,表示控制台

此類在System這個命名空間

因此,使用此類,必須using System ;

或者:

System.Console.WriteLine(".".") ;

WriteLine("打印輸出的內容")

是一個輸出函數,把雙引號的內容,

打印輸出到屏幕

雙引號必須是英文狀態下輸入

9)每一個語句必須以分號結束

10)轉義字符 -> 把特殊字符轉換為對應意義的字符

轉義字符都是以\開始

\ -> \

\" -> "

\' -> '

\t -> 一個制表位(8個空格)

\n -> 換行

11)注釋 : 注釋的代碼不會被執行,便於程序員閱讀或理解代碼

//單行注釋

/*

多行注釋

*/

注:養成注釋的習慣

 

五、輸出函數(重要)

1、Console.Write("內容"):輸出內容后,不換行

2、Console.WriteLine("內容"):輸出內容后,換行

3、占位符輸出:

{N},N從0開始,有多少個占位符,就有多少個數據

Console.Write("姓名:張三,年齡:18") ;

Console.Write("姓名:{0},年齡:{1}","張三",18) ;

 

六、.Net程序的類型

1、控制台程序

2、窗體程序

3、ASP.NET應用程序 -> web應用

 

七、程序的錯誤類型

1、語法錯誤(編譯時錯誤)

2、運行時錯誤

3、邏輯錯誤

 

第二章:數據類型

一、計算機的組成

CPU、硬盤、主板、顯示器、內存、鍵盤、鼠標、打印機

顯卡、網卡、電源、光驅....

輸入設備:輸入數據

輸出設備:輸出數據

運算器:加工處理數據

控制器:控制各部件有條不紊的工作

存儲器:存儲數據

 

外存(輔存) -> 硬盤、U盤、移動硬盤、光驅 ->容量大、速度慢、成本低、永久存放數據

內存(主存)-> 容量小、速度快、成本高、斷電后數據丟失

CPU當前處理的數據存儲在內存中

 

二、計算機的執行過程

編寫C#語言程序的目的為了"處理數據"

C#語言中處理的數據都是從主存(內存)中獲取

 

三、變量、常量 

內存中開辟的某個空間,用於存儲程序即將處理的數據(變量)

1、概念:

變量:可以改變的量

常量:一旦賦值,就不能改變

變量名/常量名:用於指定內存空間的名稱,方便操作內存空間中的數據

 

2、標識符

是一個符號,用於命名(變量、命名空間、類、方法...)

在C#語言中,標識符具有以下命名規則:

1)由字母、數字、下划線組成,且第一個字符必須是字母或下划線

2)嚴格區分大小寫

3)不能使用關鍵字(關鍵字[保留字]:已經具體特殊意義且被程序設計語言占用)

4)取名要有意義

命名規范

規則一:Pascal規則(帕斯卡命名):每個單詞開頭的字母大寫(如:TestCounter)

命名空間、類、方法名

規則二:Camel規則(大駝峰和小駝峰命名):除了第一個單詞外的其他單詞的開頭字母大寫, 如testCounterHello

變量名

規則三:Upper規則:僅用於一兩個字符長的常量的縮寫命名,超過三個字符長度應該應用Pascal規則

常量,PI -> 圓周率

 

3、變量的定義

1)語法如下

[訪問修飾符] 數據類型 變量名 ;

注:訪問修飾符->控制訪問變量的權限

2)賦值 -> 給變量對應的內存空間存放數據

變量名 = 值 ;

3)其它用法

[訪問修飾符] 數據類型 變量名1,...,變量名n ;

int a,b,c,d;

在定義變量的同時,給變量賦值

[訪問修飾符] 數據類型 變量名 = 值 ;

可以通過輸入方法給變量賦值

string 變量 = Console.ReadLine() ;

注:

變量在同一個范圍中,只能定義一個

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

 

4.常量的定義(基本同變量)

[訪問修飾符] const 數據類型 常量名 = 值 ;

注:

使用const關鍵字聲明常量

在定義常量的時候,必須賦值

 

四、數據類型

具體數據的分類(歸類),指定內存空間存放數據的種類

1、好處

增加安全性

規范化數據

 

2、數據類型的種類

1)整型(整數)

默認是int

A、sbyte,byte 字節

B、short,ushort

C、int,unit

D、long,ulong

2)浮點數型(實型、小數)

A、單精度浮點型 -> float -> F

B、雙精度浮點型 -> double -> 默認

C、財務專用類型 -> decimal -> M

注:(數值型)整數和浮點數都能表示某個范圍的數據

溢出:超出類型所示的范圍

3.14

3.14F

3.14M

sbyte age = 130 ; //報錯,溢出

3)布爾類型(邏輯)

bool

true

false

4)字符型

char

注:

字符型數據必須使用單引號;

同時,字符型數據和整型數據可以相互轉換(ASCII表)

'a' -> 97

'A' -> 65

'張'(2個字符)

5)字符串型

string

0個或多個字符的序列

注:

字符串型數據必須使用雙引號;

string name ;

name = "張三" ;

string cls ;

cls = "s1s148" ;

 

五、輸入數據

Console.ReadLine():返回輸入的字符串

注:+號運算符有兩種運算法則

1、+號左右兩邊的數據如果有一邊是字符串,則進行字符串連接運算

"Abc" + 100 = "Abc100"

3.14 + "AAA" = "3.14AAA"

"555" + "AAA" = "555AAA"

 

2、+號左右兩邊的數據都是數值型數據,則進行算術運算

100 + 200 = 300

100 + 3.14 = 103.14

 

六、類型轉換

1、為什么需要類型轉換

1)數據進行運算時,得不到我們想要的結果

"1" + "2" = "12" ;

2)相同類型的數據,才可以進行正常的運算

1 + 3.14 = 4.14 ;

 

2、隱式轉換(小 -> 大)

也叫自動轉換,遵循的原則是:

小的數據類型自動的向大的數據轉換

1 + 3.14 = 4.14 ;

int + double = double ;

3 + 3.14F = 6.14F ;

int + float = float ;

 

3.顯式轉換(大 -> 小)

也叫強制類型轉換,語法如下:

數據類型 變量 = (數據類型)數據 ;

數據類型 變量 = (數據類型)(表達式) ;

int a = (int)3.14 ;

注:強制類型轉換可能會丟失精度

int a = (int)3.14 + 2.5 ; //錯誤

int a = (int)3.94 + (int)2.5 ; //5

int a = (int)(3.914+2.5) ;//6

注:強制類型轉換一般用於數值型數據

 

4.特殊方法轉換

1)數據類型.Parse(string): 把字符串類型轉化為其他類型

string s1 = "100" ;

int a = int.Parse(s1) ;

double d = double.Parse(s1) ;

2)Convert.ToXxx():其中Xxx是你要轉換的數據

3)ToString():將其它類型的數據轉換為字符串

 

C#字符串的大小寫轉換

using System;

namespace g

{

class g

{

static void Main()

{

string c="H";

string d="e";

d=d.ToUpper();//把小寫的a轉換成大寫的A,再賦值給str1,這時候str1就是大寫的A了。

c=c. ToLower();//把大寫的B轉換成小寫的b,再賦值給str2,這時候str2就是小寫的b了。

Console.WriteLine("c={0},d={1}",c,d);

}

}

}

 

第三章:選擇(if和swich)

加工處理

1、C#程序的基本結構

using System ;

namespace Xxx

{

class Yyy

{

static void Main()

{

//在此處編寫代碼,實現具體的功能

}

}

 

2、輸入/輸出

Console.ReadLine() ;

Console.Write() ;

Console.WriteLine() ;

Console是一個類

使用Console類必須引用Console類所在的命名空間(System)

命名空間是組織和管理類的地方

在使用某個類之前,必須using相關的命名空間

 

3、變量、數據類型

數據類型 : 指定內存空間存放數據的種類

int,unit

short,ushort

long,ulong

sbyte,byte

float,double,decimal

bool

char,string

變量 : 變量是內存中開辟空間

 

4.類型轉換

1)隱式轉換,自動轉換 : 小 -> 大

2)顯式轉換,強制轉換 : 大 -> 小

數據類型 變量名 = (數據類型)變量/數據/表達式 ;

3)特殊方法

數據類型.Parse() ;

Convert.ToXxxx() ;

數據.ToString() ;

 

一、表達式

由數據和運算符號組成的式子

1、概念

1 + 1

a + 2

"100" + c + 3.14

10 * 10 - 20

 

2、作用

加工處理數據

計算表達式要遵循兩個法則:

1)優先級

算術運算符 > 關系運算符 > 邏輯運算符

2)結合方向

a * b * c/2

 

3、運算符

運算的符號,它結合表達式,用於對數據進行加工處理

+-*/...

 

二、運算符

加工處理

1、運算符的分類

1)單目運算符:只有一個操作數

2)雙目運算符:有兩個操作數

3)三目運算符:有三個操作數

1 + 1

a++ ;

a ? "aa" : "bb"

 

2、賦值運算符

給變量賦值

分類:

=、+=、-=、*=、/=、%=

要點:

1)把右邊的數據,賦值給左邊的變量

2)左邊必須是變量

3)左邊變量的數據類型必須大於或等於右邊數據的類型

int a ;

a = 100 ;//正確,類型相同

float a ;

a = 100 ;//正確,類型大於

float a ;

a = 3.14 ;//錯誤,類型小於

100 = 100 ;//錯誤,左邊不是變量

int a = 1 ;

a += 100 ; ==> a = a + 100 ;

a *= 100 ; ==> a = a * 100 ;

 

3、算術運算符

1)+ - * / % ++ --

注:/ : 表示除,如果兩個操作數都為整數,

則進行整除運算,小數點部分直接舍棄

5 / 2 = 2

如果要計算正常的小數,則需要其中一個操作數變成浮點數

++ : 自增1

-- : 自減1

有兩種形式:

前綴++ -> ++ 變量 ;前綴++,先運算后取值

后綴++ -> 變量 ++ ;后綴++,先取值后運算

前綴-- -> -- 變量 ;

后綴-- -> 變量-- ;

1++ ? ==> 1 = 1 + 1 ;//錯誤

int a = 1 ;

a ++ ; //2 ==> a = a + 1 ;

int a = 1 ;

++a ; //2 ==> a = a + 1 ;

 

int a = 1 ;

int b = a++ + 1 ;//b=2,a=2

Console.Write(a) ;

Console.Write(b) ;

 

int a = 1 ;

int b = ++a + 1 ;//b=3,a=2

Console.Write(a) ;

Console.Write(b) ;

 

int a = 1 ;

int b = a-- + 1 ; //b=2,a=0

Console.Write(a) ;

Console.Write(b) ;

 

int a = 1 ;

int b = --a + 1 ;//b=1,a=0

Console.Write(a) ;

Console.Write(b) ;

 

4、關系(比較)運算符

用於比較兩個數

分類:> 、 < 、 >= 、<= 、 != 、==

運算結果:要么真(成立)->true,要么假(不成立)->false

1 > 1 = false

100 > 2 = true

100 == 100 = true

100 != 100 = false

注意:

int a == 100 ; //錯誤,賦值運算符是=

 

5、邏輯運算符

運算結果:

邏輯運算符和關系運算符運算的結果一樣。

要么真(成立)->true,要么假(不成立)->false

分類:

1)邏輯與:&&

true && true = true ;

false && true = false ;

true && false = false ;

false && false = false ;

總結:

兩個操作數同時為真,結果為真。否則,為假

例子:

100>2 && 20>2 ==> true

100>2 && 20<2 ==> false

 

2)邏輯或:||

true || true = true ;

true || false = true ;

false || true = true ;

false || false = false ;

總結:

兩個操作數同時為假,結果為假。否則,為真。

例子:

100<2 || 20<2 ==> false

100>2 || 20<2 ==> true

 

3)邏輯非:!

真的為假,假的為真

!true = false ;

!false = true ;

例子:

100<2 || !(20<2) ==> true

100>2 || 20<2 ==> true

 

補充:邏輯運算符 -> 短路運算

 

100 < 0 && 1 > 0 ==> false

int a = 10 ;

(a=3)<=10 && (a=2)<=2 ==> false

a = 3

總結:

短路運算:進行邏輯與運算時,如果左邊操作數為假,結果為假。

而右邊的操作數據不需要運算。

 

int a = 10 ;

(a=3)<=10 || (a=2)<=2 ==> true

a = 3

int a = 10 ;

(a=3)>=10 || (a=2)<=2 ==> true

a = 2

總結:

進行邏輯或運算時,如果左邊操作數為真,結果為真。

而右邊的操作數據不需要運算。

 

6、逗號運算符 , -> 分隔,減少篇幅

int a = 10 , b = 20 ;

int a = 10 ;

int b = 20 ;

 

7、三目運算符 -> ? : (x>y?1:2) x>y為真輸出1,反之為2

 

三、程序控制語句

控制程序語句執行的順序(流程)

1、概念

去銀行辦卡

第一:拿身份證,打扮一下

第二:坐603

第三:吉大站下車

第四:走到銀行

第五:按號、辦卡

第六:回家

 

第一:拿身份證,打扮一下

第二:坐603

如果603被打劫了,並且被搶傷了

去醫院

第三:吉大站下車

第四:走到銀行

第五:按號、辦卡

第六:回家

 

2、分類

1)順序語句:程序代碼,從上往下,一行代碼一行的執行

2)條件語句:根據滿足某個條件,執行相關的代碼

3)循環語句:重復的執行相關代碼

 

四、條件語句

1、if ... else

2、三目運算符 : 功能同if...else...

條件?表達式1:表達式2 ;

3、switch語句

switch(表達式/變量)

{

case 常量表達式1:語句1 ;

case 常量表達式2:語句2 ;

case 常量表達式3:語句3 ;

case 常量表達式n:語句n ;

default:語句n+1

}

注:

1)break表示退出switch語句,一般在各個case后面都加break

2)default語句可以放在switch語句的任意位置,但一般放在最后面,且不需要加break語句

3)常量表達式必須是一個常量值,數據類型必須和switch后面的表達式一致

4)case后面的常量表達式的值必須不一樣, 不允許重復

5)多個case語句可以共用一組執行語句(不寫break語句)

6)case后面的語句可以是多條,可不用{}括起來。

 

第四章:循環(for和while)

一、作用

重復做某些操作->循環

舉例在生活中,重復做的事情?

人活的每一天

追女孩

吃飯、睡覺

 

二、循環的四個要素

1、循環變量(i,j,k)

1)控制循環的次數

2)表示要處理的數據

 

2、循環條件

控制是否要重復做某些操作

 

3、遞增/遞減循環變量

控制循環能正常的結束

避免死循環

使循環變量發生改變,進而使用循環條件為假,

從而結束循環

 

4、循環體

重復要做的事情

 

三、循環的三種寫法

1、while

語法如下:

while(條件)

{

語句塊 ;

}

注:

1>條件一般是關系運算或邏輯運算或兩個的混合

2>語法有點類似if語句if

if(條件)

{

語句塊 ;

}

3>執行過程

當條件為真的時候,執行大括號的語句塊

語句塊執行完后,回到條件繼續判斷

如果為真,則繼續執行大括號中的語句塊

直到條件為假時,while語句結束

 

2、do...while

語法如下:

do

{

循環體 ;

}

while(條件) ;

區別:

1)語法格式不相同

2)執行過程不相同

當循環條件為假時,while循環的循環體一次都不執行

當循環條件為假時,do...while循環中的循環體會被執行一次

執行過程:

先執行循環體,然后判斷條件

如果條件為假,則循環結束,循環體被執行了一次

如果條件為真,則繼續的執行循環體

循環體執行完后,繼續判斷循環條件,...

直到循環條件為假時,整個循環結束

注:

do...while語句后面的分號不能省略

而while語句后面不要加分號

 

3、for

語法如下:

for(表達式1;表達式2;表達式3)

{

循環體 ;

}

執行過程:

首先,執行表達式1(定義循環變量,給循環變量賦值),表達式只執行一次

然后,執行表達式2,表達式2是循環條件,判斷是否為真

如果為假,循環結束

如果為真,則執行循環體

循環體執行后,則執行表達式3(遞增/遞減循環變量)

接着,執行表達式3后,則執行的判斷循環條件(表達式2)

...

注:

1)表達式1:定義循環變量,並給循環變量賦初值,且只執行一次

表達式2:循環條件,就是while后面的條件

表達式3:遞增/遞減循環變量

2)表達式1可以省略,則一般在for語句之前編寫

3)表達式3也可以省略,則一般在for語句之內編寫

4)當表達式1和表達式3省略,則等同於以下內容:

for(;i<=3;)

{

printf("你好\n") ;

i++ ;

}

5)表達式2也可以省略,則此for語句就成了死循環

for(表達式1;;表達式3)

{

}

 

for(;;)

{

}

 

四、特殊語句(break&continue)

1、break:只能使用在switch語句或循環語句內(跳出)

1)switch:表示退出switch語句

2)循環:表達終止(退出)循環

 

2、continue:只能在循環語句內容使用(跳過)

表示跳過本次循環,繼續下一次循環

注:break和continue語句,不能獨立存在

 

五、死循環

循環條件永遠為真

在開發中,要避免死循環

在開發過程中,我們有時候也要使用死循環,常用的形式有:

while(true)

{

//1.生成密碼

//2.匹配

}

for( ; ; )

{

}

do

{

}while(true) ;

 

六、嵌套循環(難點)

1、定義 : 在循環內部,嵌套地使用循環

 

2、分類:根據嵌套的層數,分為雙重循環、三重循環、四、五...

 

3、雙重語法

for(;;)

{

for(;;)

{

}

}

for(;;)

{

while()

{

}

}

 

for(;;)

{

do

{

}

while() ;

}

 

4、三重循環

//注:以下是雙重循環

for(;;)

{

for(;;)

{

}

for(;;)

{

}

}

for(;;)

{

for(;;)

{

for(;;)

{

}

}

}

 

5、雙重循環的執行過程

注:

雙重循環,可以實現二維表格的效果

外循環用於控制行

內循環用於控制列,且在內循環下要換行

從外循環到內循環進行執行,

當外循環執行結束后,雙重循環才結束

金字塔代碼:

using System;

namespace jzt

{

class f

{

static void Main()

{

int n=4;//表示有多少層

for(int i=1;i<=n;i++)

{

//找出規律

//1->3 2->2 3->1 4->0找出空格

for(int k=1;k<=n-i;k++)

{

Console.Write(" ");

}

//打印*

//1->1 2->3 3->5 4->7找出星的規律

for(int j=1;j<=(i-1)*2+1;j++)

{

Console.Write("*");

}

Console.WriteLine();//換行

}

}

}

 

第五章:數組

一、回顧數據類型

1、作用:指定內存空間存放數據的種類

 

2、分類

1)基本數據類型

整型

sbyte,byte

short,ushort

int(默認),uint

long,ulong

浮點型

float

double(默認)

decimal

布爾型

bool

字符型

char

字符串型

string

2)構造數據類型(對象類型)

依賴基本類型,根據實際需求,用戶構造的特殊的數據類型(數組)

 

二、概念

數組:數據的集合,數據類型相同,有序的

double[] cj = new double[3] ;

多個相同數據類型的有序集合

數組是一個特殊的數據類型,由用戶根據需求構造出來的新的數據類型

數組依賴基本數據類型

 

三、為什么要使用數組

方便開發者對數據進行操作、管理

 

四、數組定義的語法

數據類型[] 數組名 ;

注:

1)數據類型可以為任意的基本數據類型或構造類型

2)數組名的命名必須嚴格符合標識符的命名規范

 

五、數組的操作步驟

1、定義(聲明)數組

數據類型[] 數組名 ;

double[] cj ;

數據類型 變量名 ;

int age ;

注:聲明數組,且聲明數組中各元素的數據類型

 

2、創建數組:在內存中,開辟連續的空間

數組名 = new 數據類型[長度] ;

注:一般在開發中,第一步和第二步可以合並一起

也就是說,在聲明數組的同時創建數組,語法如下:

數據類型[] 數組名 = new 數組類型[長度] ;

 

3.初始化數組(給數組賦值)

語法如下:

數組名[下標索引] = 值 ;

例如:

數組名[0] = 值1 ;

...

數組名[n] = 值n ;

或:在聲明數組的同時,給數組賦值

數據類型[] 數組名 = {值1,...,值n} ;

 

4.使用

數組名[下標]

注:

1)引用數組時,下標從0開始,最大值為長度-1

2)Length屬性:返回數組的長度大小

3)數組中的數據,稱之為元素

4)遍歷數組:循環

foreach循環是針對數組和集合的遍歷操作

foreach(元素類型 迭代變量名 in 數組名稱或集合名稱)

{

...

}

 

六、算法實現

1、最大值、最小值

2、求和、平均值

3、搜索數據

4、排序(難點)

升序:小->大

降序:大->小

實現排序的算法有:

1)冒泡排序

數據的個數:5

比較的輪數:1 2 3 4

每輪比較的次數:4 3 2 1

誰跟誰比:相鄰的兩個數進行比較

2)選擇排序

3)插入排序

 

七、多維數組

最大值,最小值,總和,平均舉例:

using System;

namespace f

{

class g

{

static void Main()

{

float[] num=new float[10];

float sum=0;

float avg=0;

for(int i=0;i<num.Length;i++)

{

Console.Write("請輸入第{0}個數:",i+1);

num[i]=float.Parse(Console.ReadLine());

if(num[i]>=0&&num[i]<=100)

{

sum+=num[i];

continue;

}

else

{

Console.Write("輸入不合法,請重新輸入第{0}個數:",i+1);

num[i]=int.Parse(Console.ReadLine());

}

}

Array.Sort(num);

foreach(int m in num)

Console.WriteLine(m+"\t");

avg=sum/10;

float max=num[0];

for(int i=1;i<num.Length;i++)

{

if(max<num[i])

{

max=num[i];

}

float min=num[0];

for(int i=1;i<num.Length;i++)

{

if(min>num[i])

min=num[i];

}

Console.WriteLine("最高分為:{0},最低分為:{1},總分為:{2},平均分為:{3}",max,min,sum,avg);

}

}

}

 

冒泡舉例:

using System ;

namespace Test01

{

class Programe

{

static void Main()

{

int[] arr = {23,90,9,25,16,1,8,7,6,5} ;

int t ;

Console.WriteLine("排序前") ;

foreach(int a in arr)

{

Console.Write("{0}\t",a) ;

}

for(int i=0;i<arr.Length-1;i++) //輪數

{

for(int j=0;j<arr.Length-1-i;j++) //每輪的次數

{

if(arr[j]<arr[j+1])

{

t = arr[j] ;

arr[j] = arr[j+1] ;

arr[j+1] = t ;

}

}

}

Console.WriteLine("排序后") ;

foreach(int a in arr)

{

Console.Write("{0}\t",a) ;

}

Console.ReadKey();

}

}

 

第六章:類與對象

一、編程思想

編寫程序的指導思想(方法、思路、模式)

面向過程 VS 面向對象

面向過程:把各種操作步驟,封裝為相應的方法(函數)(C語言)

取號

排隊

填表

辦理

回去

面向對象:通過描述某個對象的屬性和行為進行各種各樣的操作(c#與java)

張三

1、屬性(描述對象的特征)

心情

姓名

身份證

手機號碼

2、行為(描述對象的動作、功能、業務)

取號

排隊

填表

辦理

回去

與現實要符合

更容易理解、維護、擴展

 

二、類與對象(重點、難點)

1、類是對象的抽象(抽取、概括、歸納)->抽取有用的、本質的、共同的信息 -> 形成的一個類別(概念)

類是模糊的、不具體的、抽象的

類中包含三個部分內容:

1)屬性 : 描述對象的特征

2)行為 : 描述對象的功能、技能、動作

3)事件

類是對象的模板,對象是這個模板的實例

 

2、對象是具體的類,是類的實例(實際的例子)

對象是具體的,實際存在的、清晰的

世界萬物都是對象

 

三、面向對象的實現

第一:定義類

[訪問修飾符] class 類名 {

1、字段 -> 表示具體的數據,訪問修飾符一般是private

[訪問修飾符] 數據類型 字段名稱 ;

2、屬性 -> 封裝字段,設置和訪問數據(字段) ,訪問修飾符一般使用public

[訪問修飾符] 數據類型 屬性名稱

{

get{return 字段名稱;}

set{字段名稱=value;}

}

說明:

set : 設置數據,並可以對數據進行驗證處理

get : 獲取數據

set、get根據情況可以省略不寫

屬性的訪問修飾符一般是public

如果字段沒有初始化,那么字段會有相應的默認值

屬性名稱和字段名稱一般相同,但要使用帕斯卡命名規則

 

3、構造方法 -> 對象的初始化,在創建對象的同時,初始化對象;在構造方法中,可以對數據進行合法性判斷

[訪問修飾符] 構造方法名([參數列表])

{

構造方法體 ;

}

 

4、方法 -> 描述對象的動作、功能(操作) -> 成員方法(四種形式)

[訪問修飾符] 數據類型 方法名([參數列表]) {

方法體 ;

[return 數據;]

}

說明:

1)訪問修飾符:控制修飾內容的訪問權限,分類有:

public:公有訪問,不受任何訪問限制,公開的

protected:保護訪問,只能在本類或子類中訪問

private:私有訪問,只能在本類內訪問

internal:內部訪問,只能在本項目內訪問

對於類來說,默認的訪問修飾符是internal,但一般使用public

對於類成員來說,默認的訪問修飾符是private

2)命名

類名、屬性名使用帕斯卡命名法

字段名使用駝峰命名法

3)自動屬性 -> .Net Framework2.0之后新的特性,方便簡單

public class 類名

{

public 數據類型 屬性名1{get;set;}

...

public 數據類型 屬性名N{get;set;}

}

說明:

不需要定義屬性對象的字段

get,set簡寫了,但必須同時存在get,set

無法對數據進行驗證

4)構造方法 -> 在創建對象的同時,初始化對象

訪問修飾符一般使用public

構造方法名稱必須與類名相同

參數列表表示要給對象初始化的數據,可以省略,在構造方法內指定具體的數據

語法:數據類型 參數名1,...,數據類型 參數名n

this表示當前對象

在創建對象(new)的時候,構造方法會被自動的調用

在類的內部,如果用戶沒有自定義構造方法,則類的內部會默認定義一個無參構造方法,形式如下:

public 構造方法名()

{

}

字段如果沒有被初始化,則不同類型的字段會有相應的默認值

數值型默認為0

布爾型默認為False

字符串默認為""

字符型默認為''

 

第二:創建對象(實例化對象)

類名 對象名 = new 類名([參數]) ;

注:

new后面的是"構造方法",而參數就是初始化的具體數據

 

第三:初始化對象

方法一:

對象名.屬性 = 值

方法二:

... = new 類名(值1,...,值n) ;

 

第四:操作(方法)

訪問屬性:

[數據類型 變量名 = ]對象名.屬性名 ;

訪問方法:

[數據類型 變量名 = ]對象名.方法名稱([實參列表]) ;

 

四、編寫程序的四個基本步驟

第一:定義變量 -> 開辟內存空間

第二:初始化,給變量賦值 -> 把數據添加到變量對應的內存空間

第三:加工處理(核心)

第四:打印輸出

 

例子一:變量+數據類型的使用 -> 一個空間一個空間地開辟

int age ;

age = 100 ;

age = age + 1 ;

Console.WriteLine("年齡:{0}",age) ;

 

例子二:數組+數據類型的使用 -> 可以一次開辟多個空間(數據類型一樣)

數組是一個構造類型,依賴基本類型構造的新的類型

float[] score = new float[100] ;

score[0] = 120 ;

..

score[99] = 135 ;

score[0] = score[0] + 20 ;

Console.WriteLine("分數1:{0}",score[0]) ;

...

Console.WriteLine("分數N:{0}",score[99]) ;

 

例子三:類+數據類型的使用

類和數組一樣,也是構造類型->可以開辟多個空間,且數據類型可以不一樣

第一:定義類 -> 創建新的數據類型

class Student

{

//1.字段

private string name ;

int age ;

float weight ;

....

public string Name

{

set{name = value;}

get{return name ;}

}

}

第二:創建對象 -> 本質上就是定義變量

Student stu = new Student() ;

第三:初始化對象

對象名.屬性 = 值 ;

stu.Name = "aaa" ;

第四:加工處理/操作

第五:打印輸出

 

第七章:方法

一、方法

對象能做什么、實現具體的功能、業務 -> 提高代碼重用性、維護性

1、語法:

[訪問修飾符] 數據類型 方法名([參數列表])

{

方法體 -> 此方法具體功能的實現

[return 返回值;]

}

注:

數據類型表示返回值的數據類型(注:數據類型要大於或等於返回值的類型)

數據類型使用void表示方法沒有返回值

 

2、兩個角色

主調方法 : 調用被調方法所在方法(地方) - Main

被調方法 : 被調用的方法 - kai

 

3、方法四要素

1)參數:主調方法向被調方法傳遞的數據,參數的個數:0個或多個

2)返回值:被調方法向主調方法返回的數據,返回值的個數:0個或1個 (注:返回多個 -> 數組或集合)

3)方法體-功能(業務)的實現->變量、表達式、程序控制語句

4)方法名

 

4、參數

1)語法:

數據類型 參數名1,...,數據類型 參數名n

2)分類:

形參(形式參數):[定義時]形式意義的表示(代表) -> int du, string where

實參(實際參數):[調用時]實際傳遞的數據  -> 18,"后面"

 

5、方法調用

數據類型 變量 = 方法名([參數列表]);

注:必須通過對象(實例)來調用的方法,叫實例方法

 

6、方法的分類

根據參數、返回值,方法分為以下四類

1)無參無返

[訪問修飾符] void 方法名()

{

方法體 -> 此方法具體功能的實現

}

注:無返回值方法,數據類型使用void聲明

2)無參有返

[訪問修飾符] 返回值的數據類型 方法名()

{

方法體 -> 此方法具體功能的實現

return 返回值 ;

}

注:有返的方法,一般在方法內直接把結果返回,不會做過多的處理

在調用有返的方法時,一般需要定義變量,接收返回值

3)有參無返

[訪問修飾符] void 方法名(數據類型 參數名1,...,數據類型 參數名n)

{

方法體 -> 此方法具體功能的實現

}

 

4)有參有返

[訪問修飾符] 返回值的數據類型 方法名(數據類型 參數名1,...,數據類型 參數名n)

{

方法體 -> 此方法具體功能的實現

return 返回值 ;

}

 

根據方法的調用,分為以下兩類

1)實例方法 : 必須通過對象(實例)調用的方法

類名 對象名 = new 類名([...]) ;

對象名.方法([參數列表]) ;

2)靜態方法 : 不需要通過對象調用,而直接通過類名調用的方法

定義 -> 使用static聲明的方法,就是靜態方法

[訪問修飾符] static 數據類型 方法名([參數列表])

{

方法體 -> 此方法具體功能的實現

[return 返回值;]

}

調用 -> 直接通過類名調用

類名.方法名([參數列表])

3)特殊方法

構造方法 -> 創建對象 + 初始化對象

A)方法名與類名相同

B)構造方法沒有返回值

重載方法

方法名相同 && (方法參數的個數不同 || 方法參數的數據類型不同)

public int sum(int a,int b)

{

return a + b;

}

public int sum(int a,int b,int c)

{

return a + b + c;

}

public double sum(double a,double b)

{

return a + b;

}

public double sum(int a,double b)

{

return a + b;

}

public double sum(double a,int b)

{

return a + b;

}

//出錯

public double sum(int b,int a)

{

return a + b;

}

//出錯

public double sum(int a,int b)

{

return a + b;

}

public static int sum(int a,int b)

{

return a + b;

}

public static int sum(int a,int b,int c)

{

return a + b + c;

}

注:靜態方法也可以重載

class Animal

{

...

public Animal(){}

public Animal(string name)

{

this.name = name ;

}

public Animal(string name,int age)

{

this.name = name ;

this.age = age ;

}

public Animal(int age)

{

this.age = age ;

}

...

}

注:構造方法也可以重載

如何調用重載方法呢?

方法名

方法參數的個數

方法參數的數據類型

4)根據方法的定義,分為以下兩類

用戶自定義方法

系統方法

Console.WriteLine() ;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM