C#程序設(shè)計(jì) 課件 第7章 結(jié)構(gòu)體及其集合與枚舉_第1頁
C#程序設(shè)計(jì) 課件 第7章 結(jié)構(gòu)體及其集合與枚舉_第2頁
C#程序設(shè)計(jì) 課件 第7章 結(jié)構(gòu)體及其集合與枚舉_第3頁
C#程序設(shè)計(jì) 課件 第7章 結(jié)構(gòu)體及其集合與枚舉_第4頁
C#程序設(shè)計(jì) 課件 第7章 結(jié)構(gòu)體及其集合與枚舉_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第7章結(jié)構(gòu)體及其集合與枚舉7.1結(jié)構(gòu)體類型定義7.2結(jié)構(gòu)體變量及其使用7.3結(jié)構(gòu)體數(shù)組7.4結(jié)構(gòu)體變量的應(yīng)用實(shí)例7.5結(jié)構(gòu)體數(shù)組集合7.6枚舉及其應(yīng)用7.7綜合應(yīng)用實(shí)例7.1

結(jié)構(gòu)體類型結(jié)構(gòu)體概念:結(jié)構(gòu)體是一種自定義的數(shù)據(jù)類型,與類的結(jié)構(gòu)非常相似,同樣包含數(shù)據(jù)成員和函數(shù)成員。structStructName{

成員…}//聲明一個(gè)結(jié)構(gòu)體//重要區(qū)別:類是引用類型,而結(jié)構(gòu)體是值類型;結(jié)構(gòu)體是隱式密封的,這意味著不能從它們派生其他結(jié)構(gòu)。結(jié)構(gòu)體——輕量化的

“類”。說明:結(jié)構(gòu)體實(shí)例比類實(shí)例需要更少的消耗,所以對于僅由幾個(gè)基礎(chǔ)類型組成的新類型,優(yōu)先推薦使用結(jié)構(gòu)。7.2

結(jié)構(gòu)體變量及其使用結(jié)構(gòu)體變量概念:結(jié)構(gòu)體變量是指對聲明的結(jié)構(gòu)體類型進(jìn)行實(shí)例化后的變量。結(jié)構(gòu)體是值類型,因此結(jié)構(gòu)體變量存儲在棧上。structStudent{publicstringname;publicintage;publicStudent(stringname,intage)

{=name;this.age=age;}}//聲明結(jié)構(gòu)體//構(gòu)造函數(shù)初始化與構(gòu)造函數(shù):可以定義構(gòu)造函數(shù)對結(jié)構(gòu)變量進(jìn)行初始化。構(gòu)造函數(shù)無返回值,函數(shù)名與結(jié)構(gòu)名必須相同。結(jié)構(gòu)體類型定義時(shí),將隱式自動產(chǎn)生無參構(gòu)造函數(shù)。7.2

結(jié)構(gòu)體變量及其使用結(jié)構(gòu)體變量初始化與構(gòu)造函數(shù):可以定義構(gòu)造函數(shù)對結(jié)構(gòu)變量進(jìn)行初始化。構(gòu)造函數(shù)無返回值,函數(shù)名與結(jié)構(gòu)名必須相同。結(jié)構(gòu)體類型定義時(shí),將隱式自動產(chǎn)生無參構(gòu)造函數(shù)。staticvoidMain(string[]args){

Students1=newStudent();

Console.WriteLine();//輸出:(空)

Console.WriteLine(s1.age);//輸出:0="zhangshan";s1.age=11;Console.WriteLine();//輸出:zhangshanConsole.WriteLine(s1.age);//輸出:11

Students2=newStudent("wangwu",5);Console.WriteLine();//輸出:wangwuConsole.WriteLine(s2.age);//輸出:5 }//調(diào)用缺省無參構(gòu)造函數(shù)//調(diào)用有參構(gòu)造函數(shù)說明:用戶在結(jié)構(gòu)體中定義構(gòu)造函數(shù)后,但無參構(gòu)造函數(shù)仍然存在(與類不同)——結(jié)構(gòu)體變量在使用前必須保證所有字段/屬性能正確初始化。7.2

結(jié)構(gòu)體變量及其使用結(jié)構(gòu)體變量初始化:也可以不使用new運(yùn)算符創(chuàng)建結(jié)構(gòu)體實(shí)例,如structPoint{publicintX;publicintY;}classProgram{staticvoidMain(){

Pointfirst,second,third;first.X=10;first.Y=10;second.X=20;second.Y=20;third.X=first.X+second.X;third.Y=first.Y+second.Y;Console.WriteLine($"first:{first.X},{first.Y}");Console.WriteLine($"second:{second.X},{second.Y}");Console.WriteLine($"third:{third.X},{third.Y}");}}//聲明結(jié)構(gòu)體//定義字段(成員變量)//不使用new運(yùn)算符,實(shí)例化結(jié)構(gòu)體7.2

結(jié)構(gòu)體變量及其使用結(jié)構(gòu)體變量初始化:也可以不使用new運(yùn)算符創(chuàng)建結(jié)構(gòu)體實(shí)例。說明:如果不使用new運(yùn)算符,則顯式設(shè)置數(shù)據(jù)成員的值后,才能使用它們的值(不會調(diào)用構(gòu)造函數(shù)進(jìn)行初始化)對所有數(shù)據(jù)成員賦值后,才能調(diào)用函數(shù)成員。屬性和字段初始化語句:不允許使用實(shí)例屬性和字段初始化語句。如下所示。structSimple{publicintx=0;publicintage{get;set;}=1;publicstaticstringname="Coordinates";}//聲明類//錯(cuò)誤!//錯(cuò)誤!//正確,可對靜態(tài)屬性和字段使用初始化語句7.2

結(jié)構(gòu)體變量及其使用結(jié)構(gòu)體變量靜態(tài)構(gòu)造函數(shù)*:與類相似,結(jié)構(gòu)的靜態(tài)構(gòu)造函數(shù)創(chuàng)建并初始化靜態(tài)數(shù)據(jù)成員,而且不能引用實(shí)例成員。結(jié)構(gòu)的靜態(tài)構(gòu)造函數(shù)遵從與類的靜態(tài)構(gòu)造函數(shù)一樣的規(guī)則,但允許有不帶參數(shù)的靜態(tài)構(gòu)造函數(shù)。以下兩種行為,任意一種發(fā)生之前,將會調(diào)用靜態(tài)構(gòu)造函數(shù)。調(diào)用顯式聲明的構(gòu)造函數(shù)。引用結(jié)構(gòu)的靜態(tài)成員。析構(gòu)函數(shù)*:結(jié)構(gòu)體不能聲明析構(gòu)函數(shù)。7.1

結(jié)構(gòu)體類型結(jié)構(gòu)體對比結(jié)構(gòu)體與類:相同點(diǎn)1.類型訪問權(quán)限:在C#中,結(jié)構(gòu)體(struct)和類(class)的訪問權(quán)限修飾符(accessmodifiers)在大多數(shù)方面是相似的,通常為public(不同程序集)或者internal(默認(rèn),當(dāng)前程序集)。internalstructStructName{

成員…}//聲明一個(gè)結(jié)構(gòu)體//相同點(diǎn)2.成員訪問權(quán)限:結(jié)構(gòu)體成員的訪問權(quán)限修飾符包括public、private(默認(rèn))和internal,但不包括protected(僅限于類)。相同點(diǎn)3.成員數(shù)據(jù)類型:結(jié)構(gòu)體(Struct)的成員的數(shù)據(jù)類型可以是任何合法的數(shù)據(jù)類型,包括基本數(shù)據(jù)類型、自定義數(shù)據(jù)類型、枚舉類型、指針類型、數(shù)組類型、委托類型以及其他.NET支持的數(shù)據(jù)類型。7.1

結(jié)構(gòu)體類型結(jié)構(gòu)體對比結(jié)構(gòu)體與類:不同點(diǎn)1.實(shí)例的存儲位置classCSimple{publicintX;publicintY;}structSimple{publicintX;publicintY;}classProgram{staticvoidMain(){CSimplecs=newCSimple();Simpless=newSimple();...}}//聲明類//聲明結(jié)構(gòu)體//實(shí)例化7.1

結(jié)構(gòu)體類型結(jié)構(gòu)體對比結(jié)構(gòu)體與類:不同點(diǎn)2.兩個(gè)實(shí)例的賦值classCSimple{publicintX;publicintY;}structSimple{publicintX;publicintY;}classProgram{staticvoidMain(){CSimplecs1=newCSimple(),

cs2

=

null;Simpless1=newSimple(),ss2=newSimple();cs1.X=ss1.X=5;cs1.Y=ss1.Y=10;cs2=cs1;ss2=ss1;}}//聲明類//聲明結(jié)構(gòu)體//實(shí)例化//結(jié)構(gòu)體變量不能賦值為null7.1

結(jié)構(gòu)體類型結(jié)構(gòu)體當(dāng)結(jié)構(gòu)體包含引用類型的成員:usingSystem;publicstructMyStruct{

publicint[]array;}classProgram{staticvoidMain(){MyStructmyStruct=newMyStruct();myStruct.array=newint[3]{1,2,3};}}//聲明結(jié)構(gòu)體//引用類型成員//實(shí)例化,結(jié)構(gòu)體實(shí)例存儲在棧上//但是數(shù)組實(shí)際數(shù)據(jù)存儲在堆上7.1

結(jié)構(gòu)體類型結(jié)構(gòu)體當(dāng)結(jié)構(gòu)體包含引用類型的成員:publicstructMyStruct{publicint[]array;}classProgram{staticvoidMain(){MyStructoriginalStruct=newMyStruct();originalStruct.array=newint[3]{1,2,3};

MyStructcopiedStruct=originalStruct;

copiedStruct.array[0]=100;Console.WriteLine("Originalarray:");foreach(variteminoriginalStruct.array){Console.WriteLine(item);}

Console.WriteLine("Copiedarray:");foreach(varitemincopiedStruct.array){Console.WriteLine(item);}}}//聲明結(jié)構(gòu)體//將一個(gè)結(jié)構(gòu)體實(shí)例賦值給另一個(gè)結(jié)構(gòu)體變量//修改其中一個(gè)結(jié)構(gòu)體變量所引用的數(shù)組//輸出原始結(jié)構(gòu)體中的數(shù)組//輸出復(fù)制結(jié)構(gòu)體中的數(shù)組//7.3

枚舉及其應(yīng)用枚舉概念:與類或結(jié)構(gòu)體類似,枚舉是一種自定義的數(shù)據(jù)結(jié)構(gòu),用于聲明一組命名的常量。說明:枚舉是值類型;枚舉的成員——命名的整型(默認(rèn)基礎(chǔ)類型)常量;成員之間采用逗號分隔;默認(rèn)第一個(gè)成員的值為0,第2個(gè)成員的值為1,依次類推。也可以在枚舉定義中給定枚舉元素的枚舉數(shù)值。enum枚舉變量名{成員1,成員2,…};//聲明枚舉例如:enumWeekDays{Sunday,Monday,Wednesday,Thursday,Friday,Saturday};//聲明枚舉enumWeekDays{Sunday=1,Monday=10,Wednesday,Thursday=50,Friday,Saturday};7.3

枚舉及其應(yīng)用枚舉聲明枚舉變量:WeekDaystoday=WeekDays.Monday;//聲明枚舉intresult=(int)WeekDays.Monday;//獲取成員值:反向轉(zhuǎn)換(不建議):WeekDayssomeday=(WeekDays)1;//enumTrafficlight{Green=10,Yellow15,Red=15}////值可以重復(fù)7.3

枚舉及其應(yīng)用枚舉stringstr1="Lilei";stringstr2="lilei";boolresult=str1.Equals(str2);////result=false;枚舉的應(yīng)用:boolresult2=str1.Equals(str2,StringComparison.OrdinalIgnoreCase);//true不區(qū)分大小寫:publicenumStringComparison{CurrentCulture,CurrentCultureIgnoreCase,InvariantCulture,InvariantCultureIgnoreCase,Ordinal,OrdinalIgnoreCase}//0,使用區(qū)分區(qū)域性的排序規(guī)則和當(dāng)前區(qū)域性比較字符串。//1通過使用區(qū)分區(qū)域性的排序規(guī)則、當(dāng)前區(qū)域性,并忽略所比較的字符串的大小寫,來比較字符串。//2使用區(qū)分區(qū)域性的排序規(guī)則和固定區(qū)域性比較字符串。//3通過使用區(qū)分區(qū)域性的排序規(guī)則、固定區(qū)域性,并忽略所比較的字符串的大小寫,來比較字符串。//4使用序號(二進(jìn)制)排序規(guī)則比較字符串。//5通過使用序號(二進(jìn)制)區(qū)分區(qū)域性的排序規(guī)則并忽略所比較的字符串的大小寫,來比較字符串。7.3

枚舉及其應(yīng)用枚舉設(shè)置底層類型*:enumTrafficlight:ulong{…}//可以是任何整數(shù)類型7.4

綜合應(yīng)用綜合應(yīng)用實(shí)例1:存儲和處理學(xué)生信息假設(shè)我們有以下學(xué)生信息:學(xué)生姓名、學(xué)號、年齡、和三門科目的成績(語文、數(shù)學(xué)、英語)。我們可以使用一個(gè)結(jié)構(gòu)體來表示學(xué)生信息,并使用數(shù)組來存儲多個(gè)學(xué)生的數(shù)據(jù)。publicstructStudent{publicstringName;publicintStudentID;publicintAge;publicintChineseScore;publicintMathScore;publicintEnglishScore;publicdoubleCalculateAverage(){return(ChineseScore+MathScore+EnglishScore)/3.0;}}//學(xué)生結(jié)構(gòu)體//方法:計(jì)算學(xué)生的平均分7.4

綜合應(yīng)用綜合應(yīng)用實(shí)例1:存儲和處理學(xué)生信息publicclassProgram{publicstaticvoidMain(){

Student[]students=newStudent[3];for(inti=0;i<students.Length;i++){Console.WriteLine($"請輸入第{i+1}個(gè)學(xué)生的信息:");Console.Write("姓名:");students[i].Name=Console.ReadLine();Console.Write("學(xué)號:");students[i].StudentID=int.Parse(Console.ReadLine());students[i].StudentID=int.Parse(Console.ReadLine());Console.Write("年齡:");students[i].Age=int.Parse(Console.ReadLine());Console.Write("語文成績:");students[i].ChineseScore=int.Parse(Console.ReadLine());Console.Write("數(shù)學(xué)成績:");students[i].MathScore=int.Parse(Console.ReadLine());Console.Write("英語成績:");students[i].EnglishScore=int.Parse(Console.ReadLine());Console.WriteLine();}//程序類//創(chuàng)建一個(gè)學(xué)生數(shù)組,用于存儲多個(gè)學(xué)生信息//輸入學(xué)生信息7.4

綜合應(yīng)用綜合應(yīng)用實(shí)例1:存儲和處理學(xué)生信息Console.WriteLine("學(xué)生信息及平均分:");Console.WriteLine("姓名\t學(xué)號\t年齡\t語文\t數(shù)學(xué)\t英語\t平均分");for(inti=0;i<students.Length;i++){Console.WriteLine($"{students[i].Name}\t{students[i].StudentID}\t{students[i].Age}\t{students[i].ChineseScore}\t{students[i].MathScore}\t{students[i].EnglishScore}\t{students[i].CalculateAverage()}");}}}//輸出學(xué)生信息及平均分7.4

綜合應(yīng)用綜合應(yīng)用實(shí)例1:將三門課的成績改為使用一個(gè)整型數(shù)組來表示。//定義學(xué)生信息的結(jié)構(gòu)體publicstructStudent{publicstringName;publicintStudentID;publicintAge;

publicint[]Scores;//計(jì)算學(xué)生的平均分

publicdoubleCalculateAverage(){return(Scores[0]+Scores[1]+Scores[2])/3.0;}}//輸出學(xué)生信息及平均分7.4

綜合應(yīng)用綜合應(yīng)用實(shí)例1:將三門課的成績改為使用一個(gè)整型數(shù)組來表示。publicclassProgram{publicstaticvoidMain(){

Student[]students=newStudent[3];

for(inti=0;i<students.Length;i++){Console.WriteLine($"請輸入第{i+1}個(gè)學(xué)生的信息:");Console.Write("姓名:");students[i].Name=Console.ReadLine();Console.Write("學(xué)號:");students[i].StudentID=int.Parse(Console.ReadLine());Console.Write("年齡:");students[i].Age=int.Parse(Console.ReadLine());//初始化成績數(shù)組

students[i].Scores=newint[3];Console.Write("語文成績:");students[i].Scores[0]=int.Parse(Console.ReadLine());Console.Write("數(shù)學(xué)成績:");students[i].Scores[1]=int.Parse(Console.ReadLine());Console.Write("英語成績:");students[i].Scores[2]=int.Parse(Console.ReadLine());Console.WriteLine();}//7.4

綜合應(yīng)用綜合應(yīng)用實(shí)例1:將三門課的成績改為使用一個(gè)整型數(shù)組來表示。//輸出學(xué)生信息及平均分

Console.WriteLine("學(xué)生信息及平均分:");Console.WriteLine("姓名\t學(xué)號\t年齡\t語文\t數(shù)學(xué)\t英語\t平均分");for(inti=0;i<students.Length;i++){Console.WriteLine($"{students[i].Name}\t{students[i].StudentID}\t{students[i].Age}\t{students[i].Scores[0]}\t{students[i].Scores[0]}\t{students[i].Scores[0]}\t{students[i].CalculateAverage()}");}}}//7.4

綜合應(yīng)用綜合應(yīng)用實(shí)例2:管理圖書信息假設(shè)我們需要管理一本書的信息,包括書名、作者、出版日期和價(jià)格。我們可以使用一個(gè)結(jié)構(gòu)體來表示這些數(shù)據(jù)。usingSystem;publicstructBook{publicstringTitle;publicstringAuthor;publicDateTimePublishDate;publicdoublePrice;}//學(xué)生結(jié)構(gòu)體7.4

綜合應(yīng)用綜合應(yīng)用實(shí)例2:管理圖書信息假設(shè)我們需要管理一本書的信息,包括書名、作者、出版日期和價(jià)格。我們可以使用一個(gè)結(jié)構(gòu)體來表示這些數(shù)據(jù)。publicclassProgram{publicstaticvoidMain(){//創(chuàng)建一個(gè)Book結(jié)構(gòu)體實(shí)例

Bookbook1;book1.Title="C#入門教程";book1.Author="JohnSmith";book1.PublishDate=newDateTime(2021,6,15);book1.Price=39.99;//7.4

綜合應(yīng)用綜合應(yīng)用實(shí)例2:管理圖書信息假設(shè)我們需要管理一本書的信息,包括書名、作者、出版日期和價(jià)格。我們可以使用一個(gè)結(jié)構(gòu)體來表示這些數(shù)據(jù)。//輸出書籍信息Console.WriteLine("書籍信息:");Console.WriteLine($"書名:{book1.Title}");Console.WriteLine($"作者:{book1.Author}");Console.WriteLine($"出版日期:{book1.PublishDate.ToShortDateString()}");Console.WriteLine($"價(jià)格:${book1.Price}");//7.4

綜合應(yīng)用綜合應(yīng)用實(shí)例3:結(jié)構(gòu)體和枚舉聯(lián)合使用,以創(chuàng)建更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和應(yīng)用程序。在C#中聯(lián)合使用結(jié)構(gòu)體和枚舉來創(chuàng)建一個(gè)簡單的學(xué)生管理系統(tǒng)://枚舉類型:學(xué)生的年級enumGrade{Freshman,Sophomore,Junior,Senior}//7.4

綜合應(yīng)用綜合應(yīng)用實(shí)例3:結(jié)構(gòu)體和枚舉聯(lián)合使用,以創(chuàng)建更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和應(yīng)用程序。在C#中聯(lián)合使用結(jié)構(gòu)體和枚舉來創(chuàng)建一個(gè)簡單的學(xué)生管理系統(tǒng)://結(jié)構(gòu)體:學(xué)生信息structStudent{publicintStudentId;publicstringFirstName;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論