小編給大家分享一下C#中程序功能如何實(shí)現(xiàn),希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
成都創(chuàng)新互聯(lián)公司長(zhǎng)期為千余家客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為津南企業(yè)提供專(zhuān)業(yè)的做網(wǎng)站、成都網(wǎng)站設(shè)計(jì),津南網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
接觸C#語(yǔ)言只有短短幾天時(shí)間,想要寫(xiě)出什么高大上的深入性研究文章,估計(jì)也是滿(mǎn)篇的猜想和一些沒(méi)有邏輯的推斷。截至目前而言,從語(yǔ)言入門(mén)知識(shí)(大多數(shù)程序員的入門(mén)儀式——輸出“Hello,world!”)、數(shù)據(jù)和數(shù)據(jù)類(lèi)型、數(shù)據(jù)運(yùn)算、程序功能實(shí)現(xiàn)流程和循環(huán)、數(shù)組和集合這些分塊的小知識(shí)到將所學(xué)知識(shí)串聯(lián)應(yīng)用,并沒(méi)有承受太大的困難, 像是在用描述的語(yǔ)言來(lái)求解應(yīng)用題,再通過(guò)代碼將這些描述的語(yǔ)句表達(dá)出來(lái)。
記得開(kāi)班時(shí)做了三道趣味題。第一題是主人運(yùn)送草、羊和狼過(guò)河,狼吃羊,羊吃草,主人看管情況不會(huì)發(fā)生任何事,一次只能運(yùn)送一樣過(guò)河,這道題給我的感覺(jué)是用來(lái)引導(dǎo)學(xué)員思維方式,順便觀察學(xué)員是否有一個(gè)清晰的思路來(lái)分析和解答問(wèn)題,找到關(guān)鍵點(diǎn)就是羊只能單獨(dú)存在或者隨主人一起,這樣就能很好的解決問(wèn)題。第二題是三個(gè)和尚和三個(gè)怪物過(guò)河,只有一只空船,船一次可以運(yùn)兩人,每當(dāng)出現(xiàn)怪物數(shù)量大于和尚數(shù)量,游戲就結(jié)束了,這道題也是考驗(yàn)思考問(wèn)題的方式,但是還要注意怪物和和尚運(yùn)輸流程的正確性,必須保證和尚安全的先全部到達(dá)對(duì)岸,圍繞這個(gè)中心來(lái)解決問(wèn)題。第三題印象比較深刻,做完后,旁邊的同學(xué)說(shuō)可以27s,然后我就進(jìn)行了反復(fù)的嘗試(只能是29s)。要求是利用一盞只能亮30s的燈引導(dǎo)5人過(guò)橋,一次只能兩人持燈通過(guò),5人所需時(shí)間分別為1s、3s、6s、8s、12s當(dāng)然,這道題要抓住重點(diǎn),就是盡量將1s小孩用來(lái)反方向運(yùn)燈,而且必須將12s的老人和8s的胖子一趟完成通過(guò),在多次嘗試中,我發(fā)現(xiàn)只要保證1s的小孩返回兩趟,3s小孩返回一趟,耗時(shí)最長(zhǎng)的兩位一次通過(guò),不管其余怎樣排序設(shè)置,都不會(huì)影響到最后的結(jié)果。
回顧一下這個(gè)有意義的開(kāi)課儀式,再回到C#的世界中,其實(shí)兩者有很多的共同之處,現(xiàn)在就寫(xiě)一下不同代碼的同樣實(shí)現(xiàn)效果這一回事!
先舉一個(gè)簡(jiǎn)單的例子,在求水仙花數(shù)時(shí),需要將一個(gè)百位數(shù)的每一位的數(shù)值進(jìn)行求解,答案中給出的代碼是這樣的:
int i = 100;while (i < 1000) { int a = i / 100 % 10; int b = i / 10 % 10; int c = i % 10; if (a * a * a + b * b * b + c * c * c == i) { Console.WriteLine(i); } i++; }
而我在解答時(shí)使用了兩種不同的方法,第一種是:
int i = 100;while (i < 1000) { int a = i /100; int b = i % 10 / 10; int c = i % 10; if (a * a * a + b * b * b + c * c * c == i) { Console.WriteLine(i); } i++; }
第二種方法是:
int i = 100;while (i < 1000) { int a = i / 100; int b = (i - a * 100) / 10; int c = i -a * 100 - b * 10; if (a * a * a + b * b * b + c * c * c == i) { Console.WriteLine(i); } i++; }
以上均是正確的、可實(shí)現(xiàn)的代碼,代碼之所以存在差異,就是在運(yùn)算時(shí),對(duì)問(wèn)題分析和思考的角度不同。第一種是將所求位數(shù)后面的內(nèi)容拋棄,再將剩余的數(shù)對(duì)10取余,因?yàn)榍谐笫S嗟臄?shù)的個(gè)位總是對(duì)應(yīng)所求位數(shù)的值。第二種也是將這個(gè)數(shù)拆分,將這個(gè)數(shù)對(duì)所求位數(shù)的10的倍數(shù)求余,將所求位數(shù)之前的數(shù)全部拋棄,得到的是的第一位總是所求位數(shù)的值,再用除法就能得到想要的值。第三種就是個(gè)死辦法,多余的全減掉再除就可以了??偠灾?,不同的思路、不同的解題方法,并不會(huì)影響代碼的實(shí)現(xiàn),但是選擇簡(jiǎn)短、優(yōu)雅的代碼,能夠提高整個(gè)代碼的美感,這一點(diǎn)還是需要注意。就自己感悟而言,肯定是優(yōu)先選擇自己能夠理解的代碼,這樣用起來(lái)才會(huì)得心應(yīng)手,同時(shí)可要擴(kuò)大自己的見(jiàn)識(shí),多想想不同的思路的實(shí)現(xiàn)方式。
但是,說(shuō)到這里,也許有人會(huì)有質(zhì)疑,上面就是一道數(shù)學(xué)題,和編碼的思路有什么關(guān)系。那么再來(lái)看一下我和其余人不同的實(shí)現(xiàn)思路,這個(gè)問(wèn)題是關(guān)于建立一個(gè)數(shù)組并賦值后,讓用戶(hù)輸入一個(gè)要查找的數(shù)字,判斷該數(shù)字在數(shù)組中是否存在。
int[] nums = { 4, 8, 12, 333, -9, 1 };bool isFind = false;for (int i = 0; i < nums.Length; i++) { if (nums[i] == n) { isFind = true; break; } }if (isFind) { Console.WriteLine("數(shù)組中存在該數(shù)"); }else{ Console.WriteLine("數(shù)組中不存在該數(shù)"); }
我思考的方法是:
int[] nums = { 4, 8, 12, 333, -9, 1 }; Console.Write("請(qǐng)輸入需要查找的數(shù)字:");int input2 = int.Parse(Console.ReadLine());for (int i = 0; i < 5; i++) { if (nums[i] == input2) Console.WriteLine("在數(shù)組中查找到該數(shù)值,該數(shù)為數(shù)組中的第" + (i + 1) + "項(xiàng)!"); if(i==4&&nums[i]!=input2) Console.WriteLine("未在數(shù)組中找到對(duì)應(yīng)項(xiàng)!"); }
第一種代碼是通過(guò)定義一個(gè)bool類(lèi)型數(shù)據(jù)isFind,如果找到,就改變isFind的數(shù)據(jù),然后通過(guò)isFind的數(shù)據(jù)完成實(shí)現(xiàn)。而我在思考時(shí),是想如果沒(méi)有找到,那么循環(huán)完成后循環(huán)次數(shù)就會(huì)達(dá)到最大值,但是此時(shí)最后一位數(shù)與輸入的數(shù)相同,兩個(gè)輸出對(duì)應(yīng)條件都能滿(mǎn)足,所以,排查到最后并且最后一位的值也不等,才能滿(mǎn)足輸出未找到結(jié)果。通過(guò)這樣的分析,就寫(xiě)出了這兩段代碼。這就是不同思路采用不同代碼來(lái)實(shí)現(xiàn)相同功能的方式。
關(guān)于不同代碼實(shí)現(xiàn)相同功能,還有一個(gè)最經(jīng)典的例子,是不能不提的,那就是數(shù)組和集合的排序,下面介紹三種思路:交換排序、冒泡排序和選擇排序。
交換排序中心思想是從第一個(gè)數(shù)組項(xiàng)開(kāi)始,固定nums[i],依次第i+1個(gè)后面的數(shù)據(jù)進(jìn)行比較,如果有比num[i]小的值,就對(duì)其進(jìn)行交換。
for( int i = 0; i < arrays.Length - 1; i++) { for(int j = i+1; j < arrays.Length; j++) { if(arrays[i]>arrays[j]) { int temp=arrays[i]; arrays[i]=arrays[j]; arrays[j]=temp; } } }
冒泡排序是將最大的數(shù)沉到底部,先將最后一個(gè)位置固定,再?gòu)牡谝粋€(gè)數(shù)開(kāi)始比較,每遇到一個(gè)大的數(shù),這個(gè)數(shù)就與后一位交換,就像氣泡一樣,這個(gè)變動(dòng)的尋找中的值越滾越大,直到最后一位。這時(shí),再確定倒數(shù)第二位,再次進(jìn)行替換。(第二個(gè)for循環(huán)中,每次循環(huán),nums[j]的值總是逐漸變大。)實(shí)現(xiàn)代碼如下:
for(int i = nums.Length - 1; i > 0; i--) { for(int j = 0; j < i; j++) { if( nums[j] > nums[j+1] ) { int temp = nums[j]; nums[j] = nums[j+1]; nums[j+1] = temp; } } }
選擇排序從第一個(gè)數(shù)開(kāi)始,先假設(shè)第一個(gè)數(shù)為最小的數(shù),將其與后面每一個(gè)數(shù)進(jìn)行比較,如果遇到小的,就記錄這個(gè)數(shù)的下標(biāo),循環(huán)完成后,記錄的下標(biāo)對(duì)應(yīng)的數(shù)一定是數(shù)據(jù)組的最小值,此時(shí)替換最小值到第一位。后面依次循環(huán),完成排序。
for(int i = 0; i < nums.Length - 1; i++) { int index = 1; for(int j = i+1; j < nums.Length; j++) { if(nums[j])<nums[index]) { index=j; } } int temp = nums[i]; nums[i] = nums[index]; nums[index] = temp; }
有上面三種排序方法可以看出,只要能夠?qū)崿F(xiàn)功能,思路和代碼并不重要。只要能找到解決問(wèn)題的關(guān)鍵點(diǎn),并圍繞關(guān)鍵點(diǎn)弄懂解決問(wèn)題的方法,根據(jù)方法確定流程,再完成代碼的編寫(xiě),這樣想要達(dá)到功能的實(shí)現(xiàn)并不難。不過(guò)為了整個(gè)代碼的便于查看和修改,在使用這些代碼時(shí),在能夠理解代碼書(shū)寫(xiě)的思路前提下,盡量使用結(jié)構(gòu)優(yōu)良,語(yǔ)句簡(jiǎn)潔的語(yǔ)句。當(dāng)然,如果一些方法難以理解,最好還是使用自己理解的代碼書(shū)寫(xiě),便于自己完成查看和修改,如果必要,注釋也是必不可少。
總而言之,多觀察別人的思路,多看多想多開(kāi)拓,總是沒(méi)有壞處。畢竟是編程,難以理解或者使用不熟練,解決的方法還是多練多敲,沒(méi)有其他的捷徑。
看完了這篇文章,相信你對(duì)C#中程序功能如何實(shí)現(xiàn)有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
網(wǎng)頁(yè)名稱(chēng):C#中程序功能如何實(shí)現(xiàn)
文章URL:http://jinyejixie.com/article48/pgeiep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、網(wǎng)站設(shè)計(jì)、搜索引擎優(yōu)化、動(dòng)態(tài)網(wǎng)站、品牌網(wǎng)站制作、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)