版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第2章基本語法(二)2.1音像店管理2.2競賽分數(shù)統(tǒng)計2.3總結(jié)2.4上機部分
2.1音像店管理
如果我們有一個音像影碟的出租店,那么該如何管理呢?面對成千上萬的各種影碟如何快速找到用戶所需要的那一個?此時,我們需要有一個完善的管理體系、良好的管理制度以及高效的管理工具。本章要討論的就是這個高效的管理工具。2.1.1問題我們?nèi)匀唤柚绦騺碇谱鬟@個管理工具,其運行界面如圖2-1所示。很顯然這是一個相對復(fù)雜的程序,我們需要完成以下功能:(1)在程序中保存我們所擁有的電影信息,至少是電影的名稱。(2)根據(jù)用戶的輸入查找相應(yīng)的電影編號。(3)如果用戶輸入的電影沒有找到,就繼續(xù)輸入查找。2.1.2需求分析1.數(shù)組要完成音像店管理程序,第一個要面對的問題就是如何保存成千上萬部電影的信息,至少是電影的名稱。稍加分析我們就會發(fā)現(xiàn),這些電影的名稱需要用字符串類型的變量來保存,而且這些變量的數(shù)量還不少,很顯然我們不可能在程序中定義幾百個字符串類型的變量,所以我們需要用數(shù)組來完成這個任務(wù)。數(shù)組就是一組具有相同類型變量的集合,數(shù)組成員具有相同的名稱,區(qū)別它們的方式是下標,這點很吸引人,因為不用考慮為每一個變量起名字了。C#中定義變量的語法如下:數(shù)據(jù)類型[]數(shù)組名稱;很奇怪,為什么C#中的數(shù)組沒有指定長度?原因在于C#中的數(shù)組需要初始化,其長度是在初始化的時候指定的,初始化的方式是使用new關(guān)鍵字:int[]arr1=newint[5];int[]arr2=newint[5]{1,2,3,4,5};int[]arr3=newint[]{1,2,3,4,5};int[]arr4={1,2,3,4,5};以上代碼都是C#中數(shù)組的初始化方式,比較C語言中的數(shù)組我們會發(fā)現(xiàn)明顯的不同。當然也存在相同的地方,通過下標操作就是其中一個,C#數(shù)組成員都有一個從零開始的下標,所以使用起來很方便:inti=arr1[0];arr2[1]=100;在使用數(shù)組的時候也要特別小心,因為經(jīng)常會出現(xiàn)一些錯誤:intarr1[]=newint[5];int[]arr1=newint[3]{1,2};int[]arr2=newstring[5];第一行代碼中數(shù)組名稱放在了類型和中括號中間;第二行代碼中數(shù)組的長度和賦值的數(shù)量不相等;第三行代碼中數(shù)據(jù)類型不一致。這些都是我們在使用數(shù)組的過程中經(jīng)常會碰到的問題?,F(xiàn)在我們就可以解決電影名稱保存的問題了,我們只需要一個字符串類型的數(shù)組就夠了:string[]films=newstring[5];films[0]="超級戰(zhàn)艦";films[1]="變形金剛3";films[2]="阿甘正傳";films[3]="肖申克的救贖";films[4]="失戀33天";在上面的代碼中我們首先聲明了一個長度為5的字符串類型的數(shù)組,然后通過5條賦值語句分別為數(shù)組的5個成員進行賦值,這樣我們就在程序中保存了5部電影的名稱。2.循環(huán)接下來我們就要面對第二個問題了:如何在數(shù)組中查找相應(yīng)電影的編號。一個很明顯的思路是將數(shù)組中的每一個成員的值和用戶所要查找的值依次進行對比,相同的就是用戶所要找的那部電影。這里有一個對比的過程,因此肯定要用到第1章中學(xué)習(xí)到的分支判斷。那么,依次進行比較很自然就要用到循環(huán)了。在C語言中,我們學(xué)習(xí)過三種循環(huán)結(jié)構(gòu):do…while結(jié)構(gòu)、while結(jié)構(gòu)和for結(jié)構(gòu),在C#語言中有四種循環(huán)結(jié)構(gòu),表2-1中列出了C語言和C#語言循環(huán)結(jié)構(gòu)的對比。在表2-1的前三種循環(huán)結(jié)構(gòu)中,我們會發(fā)現(xiàn)它們是有一些共同點的,例如它們都有一個顯式的條件判斷以決定是否開始或者繼續(xù)循環(huán),它們都需要一個循環(huán)控制變量來控制循環(huán)條件成立與否。而在foreach循環(huán)結(jié)構(gòu)中這些都不存在了。事實上foreach循環(huán)結(jié)構(gòu)是一個完整的遍歷過程,它主要用于遍歷集合或數(shù)組,其語法結(jié)構(gòu)如下:foreach(元素類型變量名in集合或數(shù)組){ 語句}foreach結(jié)構(gòu)的工作過程是這樣的:將數(shù)據(jù)或集合中的元素依次提取出來,放入到“變量名”中,在循環(huán)體語句中就可以通過對這個變量的操作來間接操作數(shù)組或集合成員。因此就要求“變量名”的數(shù)據(jù)類型,也就是“元素類型”,要和集合或數(shù)組的類型相同或者能夠進行自動轉(zhuǎn)換。我們可以通過下面的例子來學(xué)習(xí)foreach結(jié)構(gòu):staticvoidMain(){stringstr=null;Console.Write("請輸入一個字符串:");str=Console.ReadLine();Console.WriteLine("轉(zhuǎn)換結(jié)果:");foreach(charcinstr){Console.WriteLine(c);}Console.ReadLine();}上面例子的作用是將用戶輸入的字符串轉(zhuǎn)換成豎向輸出,在這個例子中我們首先聲明了一個字符串類型的變量用于接收用戶的輸入,然后通過foreach結(jié)構(gòu)進行輸出。我們知道字符串實際上可以看做一個字符數(shù)組,因此在上面的循環(huán)結(jié)構(gòu)中“數(shù)據(jù)或集合”自然就是我們聲明的那個字符串變量了,而“元素類型”自然就是字符類型的了。接下來我們就來使用foreach循環(huán)結(jié)構(gòu)實現(xiàn)電影查找功能:foreach(stringsinfilms){if(s==name)Console.WriteLine("找到了!");}Console.WriteLine("沒找到!");在上面的代碼中,films就是我們定義的存放電影名稱的數(shù)組,name則是用來存放用戶輸入的電影名稱的變量,這里我們做了簡化處理,只是通知用戶有沒有找到。3.break和continue在正常情況下,循環(huán)會按照我們事先的設(shè)定完成整個過程,但是有些時候我們并不需要完成所有的循環(huán)就可以實現(xiàn)功能。優(yōu)化的方式就是采用break和continue。break的作用是強制結(jié)束循環(huán),并執(zhí)行循環(huán)后的語句。continue的作用是強制結(jié)束本次循環(huán),開始下一次循環(huán)。我們會發(fā)現(xiàn)它們的用法和C語言中的是一樣的:這樣我們就可以將我們的程序進行適當?shù)母倪M:foreach(stringsinfilms){if(s==name){Console.WriteLine("找到了!");break;}}在上面的代碼中我們增加了一行break語句,這樣如果用戶輸入的電影名稱找到了,程序就會跳出循環(huán)結(jié)構(gòu)。2.1.3實現(xiàn)音像店管理下面是完整的音像店管理程序:staticvoidMain(string[]args){string[]films=newstring[5];films[0]="超級戰(zhàn)艦";films[1]="變形金剛3";films[2]="阿甘正傳";films[3]="肖申克的救贖";films[4]="失戀33天";while(true){Console.Write("請輸入您要查找的電影名稱:");stringname=Console.ReadLine();for(inti=0;i<films.Length;i++)
{if(films[i]==name){Console.WriteLine("電影{0}的編號是:{1}",name,(i+1));Console.ReadLine();return;}}Console.WriteLine("電影{0}沒有找到!請重新輸入!",name);Console.WriteLine();}}將上面的代碼與分析階段所寫的代碼進行對比,多了一個大大的while循環(huán),而且還是一個死循環(huán),這是為了實現(xiàn)讓用戶反復(fù)輸入的功能,當然這么做是有些問題的,因為可能會出現(xiàn)無法退出的問題。其次,我們將原來for循環(huán)中的break換成了return,原因是break只能退出for循環(huán),而在這個循環(huán)之外還有一個while循環(huán),所以用break將無法達到我們想要的效果,而return的作用就是退出當前過程,用在Main函數(shù)中就可以起到結(jié)束程序的效果。
2.2競賽分數(shù)統(tǒng)計
2.2.1問題在比賽結(jié)束后都需要進行分數(shù)的統(tǒng)計,原來的手工統(tǒng)計不但速度慢,而且還容易出現(xiàn)錯誤,因此學(xué)院打算通過計算機來完成這個工作,現(xiàn)在需要我們制作一個簡單的驗證程序,以證明計算機評分是可行的,驗證程序的運行結(jié)果如圖2-2所示。因為這只是一個驗證程序,需要處理的數(shù)據(jù)不多,功能需求也比較簡單:(1)只有3個班,每班4位學(xué)員參加比賽。(2)需要按照不同的班級接收這些學(xué)員的分數(shù)信息。(3)統(tǒng)計每班的總分和平均分并輸出。2.2.2需求分析1.二維數(shù)組在這個測試程序中,雖然需要我們處理的數(shù)據(jù)量并不大,但是卻比以前我們制作的程序要復(fù)雜,實際上我們需要保存的數(shù)據(jù)是兩組:班級和學(xué)員。很明顯一般的數(shù)組是無法滿足這個需求的,所以我們就需要引入新的數(shù)組——二維數(shù)組。二維數(shù)組就是用兩個索引標識特定元素的數(shù)組。二維數(shù)組也是數(shù)組,因此訪問的時候依然是通過下標來訪問的,和普通數(shù)組的區(qū)別在于普通數(shù)組只有一個下標,而二維數(shù)組有兩個下標,這兩個下標我們習(xí)慣稱為行下標和列下標,如圖2-3所示。二維數(shù)組在定義的時候需要在方括號中加上一個逗號,而在初始化的時候需要指定每一維的大小:int[,]arr=newint[3,4];接下來,就可以使用兩個整數(shù)作為索引來訪問數(shù)組中的元素:arr[0,0]=1;arr[0,2]=2;arr[1,1]=3;arr[2,2]=4;如果事先知道元素的值,也可以使用數(shù)組索引來初始化二維數(shù)組:int[,]arr={ {1,2,3}, {4,5,6}, {7,8,9}};可以看到,用這種方式聲明二維數(shù)組的時候,需要用一組嵌套在一起的大括號,外層的用來定義一維的長度,內(nèi)層的用于定義二維的長度和初始值。這樣我們就可以通過一個二維數(shù)組來解決班級和學(xué)員信息的保存問題://聲明二維數(shù)組int[,]arr=newint[3,4];//錄入數(shù)據(jù)for(inti=0;i<3;i++){Console.WriteLine("請輸入{0}班的成績:",(i+1));for(intj=0;j<4;j++){Console.WriteLine("學(xué)員{0}的分數(shù):",(j+1));arr[i,j]=int.Parse(Console.ReadLine());}Console.WriteLine();}在上面的代碼中我們首先聲明了一個3行4列的二維數(shù)組,然后通過循環(huán)的方式讓用戶輸入數(shù)據(jù),由于是二維數(shù)組,因此需要用一個復(fù)雜的嵌套循環(huán)來完成。2.嵌套循環(huán)嵌套循環(huán)就是將兩個以上的循環(huán)結(jié)構(gòu)嵌套在一起使用。一般來說,在多維數(shù)組的操作過程中,嵌套循環(huán)是一個很有用的手段。比如在上面的例子中,我們用到了二重嵌套循環(huán),因此我們手中就會有兩個循環(huán)變量i和j,這兩個變量剛好幫助我們操作二維數(shù)組的行下標和列下標。那么以此類推,如果是三維數(shù)組,我們就需要一個三重嵌套結(jié)構(gòu)。嵌套循環(huán)是一種特殊的循環(huán),比如循環(huán)變量要區(qū)分開來,否則循環(huán)結(jié)構(gòu)就很難按照我們的想法來運行。其次,在嵌套循環(huán)中外層循環(huán)每運行一次,內(nèi)層循環(huán)都要重新開始,就像鐘表一樣,時針從1點變?yōu)?點,分針就要從零開始重新計算。另外,在大部分情況下,具體的操作都是在嵌套循環(huán)結(jié)構(gòu)的內(nèi)層循環(huán)中完成的,因為外層循環(huán)只能控制一個下標,而內(nèi)層循環(huán)能夠控制多個下標。最后需要注意的是,嵌套循環(huán)是個比較復(fù)雜的結(jié)構(gòu),除非必要,否則盡量不要選擇使用。3.嵌套循環(huán)中的break和continue在循環(huán)結(jié)構(gòu)中,break的作用是跳出循環(huán),而continue的作用是結(jié)束本次循環(huán),進入下一輪循環(huán)。那么在嵌套循環(huán)中它們又會起到什么作用呢?事實上,即使是在嵌套循環(huán)結(jié)構(gòu)中,它們的作用依然沒有發(fā)生變化,但是,所在的位置不同,所產(chǎn)生的效果也會發(fā)生很大的變化,例如:for() for(){ { for() for(){ { break; }} break;} }在上面的第一段代碼中,break語句的作用是退出內(nèi)層循環(huán),但是會繼續(xù)實行外層循環(huán),而在第二段代碼中,break語句的位置已經(jīng)移到了外層循環(huán)中,因此將會退出整個嵌套循環(huán)結(jié)構(gòu)。相應(yīng)的,continue語句的作用也是這樣的,不同的位置會有不同的效果。其實這個時候我們會發(fā)現(xiàn)一個復(fù)雜的循環(huán)嵌套結(jié)構(gòu)再加上break和continue語句,整個程序會變得異?;靵y,這時候一個條理清晰的流程圖會給我們帶來很大的幫助。事實上混亂的思路所帶來的麻煩要遠遠大于復(fù)雜的代碼,因此對于程序員尤其是對新手來說,繪制流程圖可以幫助我們整理出清晰的思路,從而避免不必要的錯誤。2.2.3實現(xiàn)競賽分數(shù)統(tǒng)計在綜合運用二維數(shù)組和嵌套循環(huán)后,我們就可以來完成競賽分數(shù)統(tǒng)計了:staticvoidMain(){//聲明二維數(shù)組int[,]arr=newint[3,4];//錄入數(shù)據(jù)for(inti=0;i<3;i++){Console.WriteLine("請輸入{0}班的成績:",(i+1));
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合伙入股合同范例
- 中廳拆除合同范例
- 德州購房合同范例
- 裝潢材料合同范例
- 汕頭大學(xué)《食品添加劑線上線下》2023-2024學(xué)年第一學(xué)期期末試卷
- 陜西職業(yè)技術(shù)學(xué)院《水彩粉風(fēng)景寫生》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024至2030年角磨齒輪項目投資價值分析報告
- 搜索合作合同范例
- 2024至2030年潔凈操作臺項目投資價值分析報告
- 2024至2030年工業(yè)伺服系統(tǒng)項目投資價值分析報告
- 浙江科學(xué)技術(shù)出版社小學(xué)五年級下冊綜合實踐活動完全教案(教學(xué)計劃-進度計劃-共14節(jié)課時)新疆有
- 四川音樂學(xué)院附屬中等音樂學(xué)校輔導(dǎo)員招聘考試真題2023
- 第1課《北京的春節(jié)》課件 2023-2024學(xué)年統(tǒng)編版(五四學(xué)制)語文六年級下冊
- 2024版國開電大法律事務(wù)??啤睹穹▽W(xué)(1)》期末考試總題庫
- 山東建筑大學(xué)混凝土結(jié)構(gòu)原理期末考試復(fù)習(xí)題
- 永康電動工具市場行業(yè)報告
- 護理病例報告范文5篇
- 班主任基本功大賽:模擬情景題及參考答案匯編(小學(xué)組)
- 兒童房間管理制度
- 中國石油大學(xué)(華東)2008年化工原理(含答案)考研真題
- 湖南課件大學(xué)
評論
0/150
提交評論