中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中程序功能如何實現

發布時間:2020-10-24 16:44:35 來源:億速云 閱讀:125 作者:小新 欄目:編程語言

小編給大家分享一下C#中程序功能如何實現,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

 

  接觸C#語言只有短短幾天時間,想要寫出什么高大上的深入性研究文章,估計也是滿篇的猜想和一些沒有邏輯的推斷。截至目前而言,從語言入門知識(大多數程序員的入門儀式——輸出“Hello,world!”)、數據和數據類型、數據運算、程序功能實現流程和循環、數組和集合這些分塊的小知識到將所學知識串聯應用,并沒有承受太大的困難, 像是在用描述的語言來求解應用題,再通過代碼將這些描述的語句表達出來。

  記得開班時做了三道趣味題。第一題是主人運送草、羊和狼過河,狼吃羊,羊吃草,主人看管情況不會發生任何事,一次只能運送一樣過河,這道題給我的感覺是用來引導學員思維方式,順便觀察學員是否有一個清晰的思路來分析和解答問題,找到關鍵點就是羊只能單獨存在或者隨主人一起,這樣就能很好的解決問題。第二題是三個和尚和三個怪物過河,只有一只空船,船一次可以運兩人,每當出現怪物數量大于和尚數量,游戲就結束了,這道題也是考驗思考問題的方式,但是還要注意怪物和和尚運輸流程的正確性,必須保證和尚安全的先全部到達對岸,圍繞這個中心來解決問題。第三題印象比較深刻,做完后,旁邊的同學說可以27s,然后我就進行了反復的嘗試(只能是29s)。要求是利用一盞只能亮30s的燈引導5人過橋,一次只能兩人持燈通過,5人所需時間分別為1s、3s、6s、8s、12s當然,這道題要抓住重點,就是盡量將1s小孩用來反方向運燈,而且必須將12s的老人和8s的胖子一趟完成通過,在多次嘗試中,我發現只要保證1s的小孩返回兩趟,3s小孩返回一趟,耗時最長的兩位一次通過,不管其余怎樣排序設置,都不會影響到最后的結果。

  回顧一下這個有意義的開課儀式,再回到C#的世界中,其實兩者有很多的共同之處,現在就寫一下不同代碼的同樣實現效果這一回事!


  先舉一個簡單的例子,在求水仙花數時,需要將一個百位數的每一位的數值進行求解,答案中給出的代碼是這樣的:

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++;
}

  而我在解答時使用了兩種不同的方法,第一種是:

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++;
}

  以上均是正確的、可實現的代碼,代碼之所以存在差異,就是在運算時,對問題分析和思考的角度不同。第一種是將所求位數后面的內容拋棄,再將剩余的數對10取余,因為切除后剩余的數的個位總是對應所求位數的值。第二種也是將這個數拆分,將這個數對所求位數的10的倍數求余,將所求位數之前的數全部拋棄,得到的是的第一位總是所求位數的值,再用除法就能得到想要的值。第三種就是個死辦法,多余的全減掉再除就可以了。總而言之,不同的思路、不同的解題方法,并不會影響代碼的實現,但是選擇簡短、優雅的代碼,能夠提高整個代碼的美感,這一點還是需要注意。就自己感悟而言,肯定是優先選擇自己能夠理解的代碼,這樣用起來才會得心應手,同時可要擴大自己的見識,多想想不同的思路的實現方式。


  但是,說到這里,也許有人會有質疑,上面就是一道數學題,和編碼的思路有什么關系。那么再來看一下我和其余人不同的實現思路,這個問題是關于建立一個數組并賦值后,讓用戶輸入一個要查找的數字,判斷該數字在數組中是否存在。

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("數組中存在該數");
}else{
    Console.WriteLine("數組中不存在該數");
}

  我思考的方法是:

int[] nums = { 4, 8, 12, 333, -9, 1 };
Console.Write("請輸入需要查找的數字:");int input2 = int.Parse(Console.ReadLine());for (int i = 0; i < 5; i++)
 {   if (nums[i] == input2)
       Console.WriteLine("在數組中查找到該數值,該數為數組中的第" + (i + 1) + "項!");   if(i==4&&nums[i]!=input2)
       Console.WriteLine("未在數組中找到對應項!");
 }

  第一種代碼是通過定義一個bool類型數據isFind,如果找到,就改變isFind的數據,然后通過isFind的數據完成實現。而我在思考時,是想如果沒有找到,那么循環完成后循環次數就會達到最大值,但是此時最后一位數與輸入的數相同,兩個輸出對應條件都能滿足,所以,排查到最后并且最后一位的值也不等,才能滿足輸出未找到結果。通過這樣的分析,就寫出了這兩段代碼。這就是不同思路采用不同代碼來實現相同功能的方式。


  關于不同代碼實現相同功能,還有一個最經典的例子,是不能不提的,那就是數組和集合的排序,下面介紹三種思路:交換排序、冒泡排序和選擇排序。

  交換排序中心思想是從第一個數組項開始,固定nums[i],依次第i+1個后面的數據進行比較,如果有比num[i]小的值,就對其進行交換。

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;
         }
   }
}

  冒泡排序是將最大的數沉到底部,先將最后一個位置固定,再從第一個數開始比較,每遇到一個大的數,這個數就與后一位交換,就像氣泡一樣,這個變動的尋找中的值越滾越大,直到最后一位。這時,再確定倒數第二位,再次進行替換。(第二個for循環中,每次循環,nums[j]的值總是逐漸變大。)實現代碼如下:

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;
            }
   }
}

  選擇排序從第一個數開始,先假設第一個數為最小的數,將其與后面每一個數進行比較,如果遇到小的,就記錄這個數的下標,循環完成后,記錄的下標對應的數一定是數據組的最小值,此時替換最小值到第一位。后面依次循環,完成排序。

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;
}

  有上面三種排序方法可以看出,只要能夠實現功能,思路和代碼并不重要。只要能找到解決問題的關鍵點,并圍繞關鍵點弄懂解決問題的方法,根據方法確定流程,再完成代碼的編寫,這樣想要達到功能的實現并不難。不過為了整個代碼的便于查看和修改,在使用這些代碼時,在能夠理解代碼書寫的思路前提下,盡量使用結構優良,語句簡潔的語句。當然,如果一些方法難以理解,最好還是使用自己理解的代碼書寫,便于自己完成查看和修改,如果必要,注釋也是必不可少。

  總而言之,多觀察別人的思路,多看多想多開拓,總是沒有壞處。畢竟是編程,難以理解或者使用不熟練,解決的方法還是多練多敲,沒有其他的捷徑。

看完了這篇文章,相信你對C#中程序功能如何實現有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江城| 万宁市| 故城县| 诸暨市| 台南市| 项城市| 历史| 舞钢市| 都安| 香港| 宜城市| 皮山县| 北川| 昭觉县| 平定县| 锡林郭勒盟| 隆德县| 紫阳县| 吴堡县| 墨竹工卡县| 昂仁县| 洪湖市| 汕尾市| 锡林浩特市| 民和| 明水县| 玉溪市| 舞钢市| 买车| 大足县| 玉屏| 塔河县| 中江县| 怀来县| 翁源县| 五家渠市| 新乡县| 丰顺县| 金沙县| 乌拉特中旗| 淮滨县|