版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2章基本語(yǔ)法(二)2.1音像店管理2.2競(jìng)賽分?jǐn)?shù)統(tǒng)計(jì)2.3總結(jié)2.4上機(jī)部分
2.1音像店管理
如果我們有一個(gè)音像影碟的出租店,那么該如何管理呢?面對(duì)成千上萬(wàn)的各種影碟如何快速找到用戶所需要的那一個(gè)?此時(shí),我們需要有一個(gè)完善的管理體系、良好的管理制度以及高效的管理工具。本章要討論的就是這個(gè)高效的管理工具。2.1.1問(wèn)題我們?nèi)匀唤柚绦騺?lái)制作這個(gè)管理工具,其運(yùn)行界面如圖2-1所示。很顯然這是一個(gè)相對(duì)復(fù)雜的程序,我們需要完成以下功能:(1)在程序中保存我們所擁有的電影信息,至少是電影的名稱。(2)根據(jù)用戶的輸入查找相應(yīng)的電影編號(hào)。(3)如果用戶輸入的電影沒(méi)有找到,就繼續(xù)輸入查找。2.1.2需求分析1.?dāng)?shù)組要完成音像店管理程序,第一個(gè)要面對(duì)的問(wèn)題就是如何保存成千上萬(wàn)部電影的信息,至少是電影的名稱。稍加分析我們就會(huì)發(fā)現(xiàn),這些電影的名稱需要用字符串類型的變量來(lái)保存,而且這些變量的數(shù)量還不少,很顯然我們不可能在程序中定義幾百個(gè)字符串類型的變量,所以我們需要用數(shù)組來(lái)完成這個(gè)任務(wù)。數(shù)組就是一組具有相同類型變量的集合,數(shù)組成員具有相同的名稱,區(qū)別它們的方式是下標(biāo),這點(diǎn)很吸引人,因?yàn)椴挥每紤]為每一個(gè)變量起名字了。C#中定義變量的語(yǔ)法如下:數(shù)據(jù)類型[]數(shù)組名稱;很奇怪,為什么C#中的數(shù)組沒(méi)有指定長(zhǎng)度?原因在于C#中的數(shù)組需要初始化,其長(zhǎng)度是在初始化的時(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語(yǔ)言中的數(shù)組我們會(huì)發(fā)現(xiàn)明顯的不同。當(dāng)然也存在相同的地方,通過(guò)下標(biāo)操作就是其中一個(gè),C#數(shù)組成員都有一個(gè)從零開(kāi)始的下標(biāo),所以使用起來(lái)很方便:inti=arr1[0];arr2[1]=100;在使用數(shù)組的時(shí)候也要特別小心,因?yàn)榻?jīng)常會(huì)出現(xiàn)一些錯(cuò)誤:intarr1[]=newint[5];int[]arr1=newint[3]{1,2};int[]arr2=newstring[5];第一行代碼中數(shù)組名稱放在了類型和中括號(hào)中間;第二行代碼中數(shù)組的長(zhǎng)度和賦值的數(shù)量不相等;第三行代碼中數(shù)據(jù)類型不一致。這些都是我們?cè)谑褂脭?shù)組的過(guò)程中經(jīng)常會(huì)碰到的問(wèn)題。現(xiàn)在我們就可以解決電影名稱保存的問(wèn)題了,我們只需要一個(gè)字符串類型的數(shù)組就夠了:string[]films=newstring[5];films[0]="超級(jí)戰(zhàn)艦";films[1]="變形金剛3";films[2]="阿甘正傳";films[3]="肖申克的救贖";films[4]="失戀33天";在上面的代碼中我們首先聲明了一個(gè)長(zhǎng)度為5的字符串類型的數(shù)組,然后通過(guò)5條賦值語(yǔ)句分別為數(shù)組的5個(gè)成員進(jìn)行賦值,這樣我們就在程序中保存了5部電影的名稱。2.循環(huán)接下來(lái)我們就要面對(duì)第二個(gè)問(wèn)題了:如何在數(shù)組中查找相應(yīng)電影的編號(hào)。一個(gè)很明顯的思路是將數(shù)組中的每一個(gè)成員的值和用戶所要查找的值依次進(jìn)行對(duì)比,相同的就是用戶所要找的那部電影。這里有一個(gè)對(duì)比的過(guò)程,因此肯定要用到第1章中學(xué)習(xí)到的分支判斷。那么,依次進(jìn)行比較很自然就要用到循環(huán)了。在C語(yǔ)言中,我們學(xué)習(xí)過(guò)三種循環(huán)結(jié)構(gòu):do…while結(jié)構(gòu)、while結(jié)構(gòu)和for結(jié)構(gòu),在C#語(yǔ)言中有四種循環(huán)結(jié)構(gòu),表2-1中列出了C語(yǔ)言和C#語(yǔ)言循環(huán)結(jié)構(gòu)的對(duì)比。在表2-1的前三種循環(huán)結(jié)構(gòu)中,我們會(huì)發(fā)現(xiàn)它們是有一些共同點(diǎn)的,例如它們都有一個(gè)顯式的條件判斷以決定是否開(kāi)始或者繼續(xù)循環(huán),它們都需要一個(gè)循環(huán)控制變量來(lái)控制循環(huán)條件成立與否。而在foreach循環(huán)結(jié)構(gòu)中這些都不存在了。事實(shí)上foreach循環(huán)結(jié)構(gòu)是一個(gè)完整的遍歷過(guò)程,它主要用于遍歷集合或數(shù)組,其語(yǔ)法結(jié)構(gòu)如下:foreach(元素類型變量名in集合或數(shù)組){ 語(yǔ)句}foreach結(jié)構(gòu)的工作過(guò)程是這樣的:將數(shù)據(jù)或集合中的元素依次提取出來(lái),放入到“變量名”中,在循環(huán)體語(yǔ)句中就可以通過(guò)對(duì)這個(gè)變量的操作來(lái)間接操作數(shù)組或集合成員。因此就要求“變量名”的數(shù)據(jù)類型,也就是“元素類型”,要和集合或數(shù)組的類型相同或者能夠進(jìn)行自動(dòng)轉(zhuǎn)換。我們可以通過(guò)下面的例子來(lái)學(xué)習(xí)foreach結(jié)構(gòu):staticvoidMain(){stringstr=null;Console.Write("請(qǐng)輸入一個(gè)字符串:");str=Console.ReadLine();Console.WriteLine("轉(zhuǎn)換結(jié)果:");foreach(charcinstr){Console.WriteLine(c);}Console.ReadLine();}上面例子的作用是將用戶輸入的字符串轉(zhuǎn)換成豎向輸出,在這個(gè)例子中我們首先聲明了一個(gè)字符串類型的變量用于接收用戶的輸入,然后通過(guò)foreach結(jié)構(gòu)進(jìn)行輸出。我們知道字符串實(shí)際上可以看做一個(gè)字符數(shù)組,因此在上面的循環(huán)結(jié)構(gòu)中“數(shù)據(jù)或集合”自然就是我們聲明的那個(gè)字符串變量了,而“元素類型”自然就是字符類型的了。接下來(lái)我們就來(lái)使用foreach循環(huán)結(jié)構(gòu)實(shí)現(xiàn)電影查找功能:foreach(stringsinfilms){if(s==name)Console.WriteLine("找到了!");}Console.WriteLine("沒(méi)找到!");在上面的代碼中,films就是我們定義的存放電影名稱的數(shù)組,name則是用來(lái)存放用戶輸入的電影名稱的變量,這里我們做了簡(jiǎn)化處理,只是通知用戶有沒(méi)有找到。3.break和continue在正常情況下,循環(huán)會(huì)按照我們事先的設(shè)定完成整個(gè)過(guò)程,但是有些時(shí)候我們并不需要完成所有的循環(huán)就可以實(shí)現(xiàn)功能。優(yōu)化的方式就是采用break和continue。break的作用是強(qiáng)制結(jié)束循環(huán),并執(zhí)行循環(huán)后的語(yǔ)句。continue的作用是強(qiáng)制結(jié)束本次循環(huán),開(kāi)始下一次循環(huán)。我們會(huì)發(fā)現(xiàn)它們的用法和C語(yǔ)言中的是一樣的:這樣我們就可以將我們的程序進(jìn)行適當(dāng)?shù)母倪M(jìn):foreach(stringsinfilms){if(s==name){Console.WriteLine("找到了!");break;}}在上面的代碼中我們?cè)黾恿艘恍衎reak語(yǔ)句,這樣如果用戶輸入的電影名稱找到了,程序就會(huì)跳出循環(huán)結(jié)構(gòu)。2.1.3實(shí)現(xiàn)音像店管理下面是完整的音像店管理程序:staticvoidMain(string[]args){string[]films=newstring[5];films[0]="超級(jí)戰(zhàn)艦";films[1]="變形金剛3";films[2]="阿甘正傳";films[3]="肖申克的救贖";films[4]="失戀33天";while(true){Console.Write("請(qǐng)輸入您要查找的電影名稱:");stringname=Console.ReadLine();for(inti=0;i<films.Length;i++)
{if(films[i]==name){Console.WriteLine("電影{0}的編號(hào)是:{1}",name,(i+1));Console.ReadLine();return;}}Console.WriteLine("電影{0}沒(méi)有找到!請(qǐng)重新輸入!",name);Console.WriteLine();}}將上面的代碼與分析階段所寫的代碼進(jìn)行對(duì)比,多了一個(gè)大大的while循環(huán),而且還是一個(gè)死循環(huán),這是為了實(shí)現(xiàn)讓用戶反復(fù)輸入的功能,當(dāng)然這么做是有些問(wèn)題的,因?yàn)榭赡軙?huì)出現(xiàn)無(wú)法退出的問(wèn)題。其次,我們將原來(lái)for循環(huán)中的break換成了return,原因是break只能退出for循環(huán),而在這個(gè)循環(huán)之外還有一個(gè)while循環(huán),所以用break將無(wú)法達(dá)到我們想要的效果,而return的作用就是退出當(dāng)前過(guò)程,用在Main函數(shù)中就可以起到結(jié)束程序的效果。
2.2競(jìng)賽分?jǐn)?shù)統(tǒng)計(jì)
2.2.1問(wèn)題在比賽結(jié)束后都需要進(jìn)行分?jǐn)?shù)的統(tǒng)計(jì),原來(lái)的手工統(tǒng)計(jì)不但速度慢,而且還容易出現(xiàn)錯(cuò)誤,因此學(xué)院打算通過(guò)計(jì)算機(jī)來(lái)完成這個(gè)工作,現(xiàn)在需要我們制作一個(gè)簡(jiǎn)單的驗(yàn)證程序,以證明計(jì)算機(jī)評(píng)分是可行的,驗(yàn)證程序的運(yùn)行結(jié)果如圖2-2所示。因?yàn)檫@只是一個(gè)驗(yàn)證程序,需要處理的數(shù)據(jù)不多,功能需求也比較簡(jiǎn)單:(1)只有3個(gè)班,每班4位學(xué)員參加比賽。(2)需要按照不同的班級(jí)接收這些學(xué)員的分?jǐn)?shù)信息。(3)統(tǒng)計(jì)每班的總分和平均分并輸出。2.2.2需求分析1.二維數(shù)組在這個(gè)測(cè)試程序中,雖然需要我們處理的數(shù)據(jù)量并不大,但是卻比以前我們制作的程序要復(fù)雜,實(shí)際上我們需要保存的數(shù)據(jù)是兩組:班級(jí)和學(xué)員。很明顯一般的數(shù)組是無(wú)法滿足這個(gè)需求的,所以我們就需要引入新的數(shù)組——二維數(shù)組。二維數(shù)組就是用兩個(gè)索引標(biāo)識(shí)特定元素的數(shù)組。二維數(shù)組也是數(shù)組,因此訪問(wèn)的時(shí)候依然是通過(guò)下標(biāo)來(lái)訪問(wèn)的,和普通數(shù)組的區(qū)別在于普通數(shù)組只有一個(gè)下標(biāo),而二維數(shù)組有兩個(gè)下標(biāo),這兩個(gè)下標(biāo)我們習(xí)慣稱為行下標(biāo)和列下標(biāo),如圖2-3所示。二維數(shù)組在定義的時(shí)候需要在方括號(hào)中加上一個(gè)逗號(hào),而在初始化的時(shí)候需要指定每一維的大?。篿nt[,]arr=newint[3,4];接下來(lái),就可以使用兩個(gè)整數(shù)作為索引來(lái)訪問(wèn)數(shù)組中的元素:arr[0,0]=1;arr[0,2]=2;arr[1,1]=3;arr[2,2]=4;如果事先知道元素的值,也可以使用數(shù)組索引來(lái)初始化二維數(shù)組:int[,]arr={ {1,2,3}, {4,5,6}, {7,8,9}};可以看到,用這種方式聲明二維數(shù)組的時(shí)候,需要用一組嵌套在一起的大括號(hào),外層的用來(lái)定義一維的長(zhǎng)度,內(nèi)層的用于定義二維的長(zhǎng)度和初始值。這樣我們就可以通過(guò)一個(gè)二維數(shù)組來(lái)解決班級(jí)和學(xué)員信息的保存問(wèn)題://聲明二維數(shù)組int[,]arr=newint[3,4];//錄入數(shù)據(jù)for(inti=0;i<3;i++){Console.WriteLine("請(qǐng)輸入{0}班的成績(jī):",(i+1));for(intj=0;j<4;j++){Console.WriteLine("學(xué)員{0}的分?jǐn)?shù):",(j+1));arr[i,j]=int.Parse(Console.ReadLine());}Console.WriteLine();}在上面的代碼中我們首先聲明了一個(gè)3行4列的二維數(shù)組,然后通過(guò)循環(huán)的方式讓用戶輸入數(shù)據(jù),由于是二維數(shù)組,因此需要用一個(gè)復(fù)雜的嵌套循環(huán)來(lái)完成。2.嵌套循環(huán)嵌套循環(huán)就是將兩個(gè)以上的循環(huán)結(jié)構(gòu)嵌套在一起使用。一般來(lái)說(shuō),在多維數(shù)組的操作過(guò)程中,嵌套循環(huán)是一個(gè)很有用的手段。比如在上面的例子中,我們用到了二重嵌套循環(huán),因此我們手中就會(huì)有兩個(gè)循環(huán)變量i和j,這兩個(gè)變量剛好幫助我們操作二維數(shù)組的行下標(biāo)和列下標(biāo)。那么以此類推,如果是三維數(shù)組,我們就需要一個(gè)三重嵌套結(jié)構(gòu)。嵌套循環(huán)是一種特殊的循環(huán),比如循環(huán)變量要區(qū)分開(kāi)來(lái),否則循環(huán)結(jié)構(gòu)就很難按照我們的想法來(lái)運(yùn)行。其次,在嵌套循環(huán)中外層循環(huán)每運(yùn)行一次,內(nèi)層循環(huán)都要重新開(kāi)始,就像鐘表一樣,時(shí)針從1點(diǎn)變?yōu)?點(diǎn),分針就要從零開(kāi)始重新計(jì)算。另外,在大部分情況下,具體的操作都是在嵌套循環(huán)結(jié)構(gòu)的內(nèi)層循環(huán)中完成的,因?yàn)橥鈱友h(huán)只能控制一個(gè)下標(biāo),而內(nèi)層循環(huán)能夠控制多個(gè)下標(biāo)。最后需要注意的是,嵌套循環(huán)是個(gè)比較復(fù)雜的結(jié)構(gòu),除非必要,否則盡量不要選擇使用。3.嵌套循環(huán)中的break和continue在循環(huán)結(jié)構(gòu)中,break的作用是跳出循環(huán),而continue的作用是結(jié)束本次循環(huán),進(jìn)入下一輪循環(huán)。那么在嵌套循環(huán)中它們又會(huì)起到什么作用呢?事實(shí)上,即使是在嵌套循環(huán)結(jié)構(gòu)中,它們的作用依然沒(méi)有發(fā)生變化,但是,所在的位置不同,所產(chǎn)生的效果也會(huì)發(fā)生很大的變化,例如:for() for(){ { for() for(){ { break; }} break;} }在上面的第一段代碼中,break語(yǔ)句的作用是退出內(nèi)層循環(huán),但是會(huì)繼續(xù)實(shí)行外層循環(huán),而在第二段代碼中,break語(yǔ)句的位置已經(jīng)移到了外層循環(huán)中,因此將會(huì)退出整個(gè)嵌套循環(huán)結(jié)構(gòu)。相應(yīng)的,continue語(yǔ)句的作用也是這樣的,不同的位置會(huì)有不同的效果。其實(shí)這個(gè)時(shí)候我們會(huì)發(fā)現(xiàn)一個(gè)復(fù)雜的循環(huán)嵌套結(jié)構(gòu)再加上break和continue語(yǔ)句,整個(gè)程序會(huì)變得異?;靵y,這時(shí)候一個(gè)條理清晰的流程圖會(huì)給我們帶來(lái)很大的幫助。事實(shí)上混亂的思路所帶來(lái)的麻煩要遠(yuǎn)遠(yuǎn)大于復(fù)雜的代碼,因此對(duì)于程序員尤其是對(duì)新手來(lái)說(shuō),繪制流程圖可以幫助我們整理出清晰的思路,從而避免不必要的錯(cuò)誤。2.2.3實(shí)現(xiàn)競(jìng)賽分?jǐn)?shù)統(tǒng)計(jì)在綜合運(yùn)用二維數(shù)組和嵌套循環(huán)后,我們就可以來(lái)完成競(jìng)賽分?jǐn)?shù)統(tǒng)計(jì)了:staticvoidMain(){//聲明二維數(shù)組int[,]arr=newint[3,4];//錄入數(shù)據(jù)for(inti=0;i<3;i++){Console.WriteLine("請(qǐng)輸入{0}班的成績(jī):",(i+1));
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京市朝陽(yáng)區(qū)北京中學(xué)2024-2025學(xué)年八年級(jí)上學(xué)期期中物理試卷(無(wú)答案)
- 滄州臨港經(jīng)濟(jì)技術(shù)開(kāi)發(fā)區(qū)東區(qū)支三路道路及配套項(xiàng)目環(huán)評(píng)報(bào)告表
- 2014-2020年全球IP電話機(jī)行業(yè)市場(chǎng)調(diào)研分析報(bào)告
- 2014-2018年糖蜜行業(yè)戰(zhàn)略投資分析研究報(bào)告
- 2024至2030年中國(guó)抗靜電PVC托盤數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2012注冊(cè)會(huì)計(jì)師考試審計(jì)真題及答案B卷
- 2011-2015年氯磺化聚乙烯運(yùn)營(yíng)態(tài)勢(shì)及前景預(yù)測(cè)分析報(bào)告
- 2024至2030年中國(guó)對(duì)夾式雙瓣止回閥數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024至2030年中國(guó)雙流程板網(wǎng)組合式板式換熱器行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024至2030年中國(guó)三色果凍機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 英語(yǔ)面試介紹我的家鄉(xiāng)-浙江省諸暨市
- 2023學(xué)年完整公開(kāi)課版餡餅
- 小學(xué)道德與法治-行行出狀元教學(xué)課件設(shè)計(jì)
- 支氣管哮喘指南解讀
- 二氧化碳安全技術(shù)說(shuō)明書MSDS
- 定稿過(guò)敏性紫癜等6種疾病診療指南
- 2023年四川高考真題及答案理科數(shù)學(xué)
- 婦產(chǎn)科感染性休克
- 六年級(jí)上冊(cè)數(shù)學(xué)課件西師大版 按比例分配的方法解決實(shí)際問(wèn)題
- 2023年全國(guó)初中數(shù)學(xué)聯(lián)合競(jìng)賽試題及參考答案
- WS/T 89-2015尿中氟化物測(cè)定離子選擇電極法
評(píng)論
0/150
提交評(píng)論