C#入門經典 Chapter4 流程式控制制

來源:互聯網
上載者:User

標籤:條件   沒有   img   放大   label   利用   賦值運算   參數   公式   

4.1布爾邏輯

  布爾比較子

  ==  !=   <   >    <=    >=

  處理布爾值的布爾值運算子

  ! & | ^(異或)

  條件布林運算子

  &&   ||  比&和|效能更好    比如&&只需判斷前面的布爾值為false,整體值就為false,不用計算後面的布爾值

  1.布爾賦值運算子

    &=  |=  ^=

  2.按位元運算符

    &  |  ^  ~

    位移運算子 >>  <<

    位移賦值運算子>>=   <<=

  3.運算子優先順序(更新)

    ++,--(用作首碼);(),+,-(一元),!,~

    *,/,%

    +,-

    <<,>>

    <,>,<=,>=

    ==,!=

    &

    ^

    |

    &&

    ||

    =,*=,/=,%=,+=,-=,>>=,<<=,&=,^=,|=賦值運算子

    ++,--(用作尾碼)

4.2 goto語句

  goto  <labelName>

4.3 分支

  1.三元運算子

    ? : 

  2.if語句

    if(){}else{}

  3.switch語句

    switch()

    {

       case val1:……;break;

       case val2:……;break;

       ……

       default:如果沒有匹配的val值,有default,執行default中的代碼

     }

    聲明常量:指定變數類型和關鍵字const,同時必須給它們賦值。

4.4.迴圈:重複執行語句

  1.do迴圈

    do

    {先執行一次判斷while()內的值,為true則再次執行,false退出迴圈

    }while();

  2.while迴圈

      while(){}先判斷while()內的值,true才開始執行

  3.for迴圈

    for(int i=0;i<4,i++){}

  4.迴圈中斷

    break:立即終止迴圈

    continue:立即終止當前迴圈,進入下一次迴圈

    goto:跳出迴圈到指定標記位置上

    return:跳出迴圈及包含該迴圈的函數

  5.無限迴圈

    while(true){}    利用break等退出

Mandelbrot集合樣本(書中給出的範例程式碼用C#)

 class Program    {        //Mandelbrot映像中的每個位置都對應於公式N=x+y*i中的一個複數。其實數部分是x,虛數部分是y,i是-1的平方根。映像中各個位置的x和y座標組應於虛數的x和y部分        //映像中的每個位置用參數N來表示,它是x*x+y*y的平方根。如果這個值大於或等於2,則這個數字對應的位置值是0。如果參數N的值小於2,就把N的值改為N*N-N(N=(x* x-y* y-x)+(2*x* y-y)*i)),並再次測試這個新N值。如果這個值大於或等於2,則這個數字對應的位置值是1。這個過程一直繼續下去,直到我們給映像中的位置賦一個值,或迭代執行的次數多於指定的次數為止。”        static void Main(string[] args)        {            //N的實數和虛數部分            double realCoord, imagCoord;            //儲存計算過程中的臨時資訊            double realTemp, imagTemp, realTemp2, arg;            //記錄在參數N(arg)等於或大於2之前的迭代次數            int iterations;            //選擇合適的邊界值來顯示Mandelbrot映像的主要部分,如果想放大這個映像,可以放大這些邊界值。            for (imagCoord = 1.2; imagCoord >= -1.2; imagCoord -= 0.05)            {                //兩個for迴圈處理映像中的一個點,給N指定一個值。                for (realCoord = -0.6; realCoord <= 1.77; realCoord += 0.03)                {                    //初始設定變數                    iterations = 0;                    realTemp = realCoord;                    imagTemp = imagCoord;                    arg = (realCoord * realCoord) + (imagCoord * imagCoord);                    //2是4的平方根,所以僅計算x^2+y^2的值,while迴圈執行迭代,                    while ((arg < 4) && (iterations < 40))                    {                        //N*N-N的實數部分                        realTemp2 = (realTemp * realTemp) - (imagTemp * imagTemp)                              - realCoord;                        //N*N-N的虛數部分                        imagTemp = (2 * realTemp * imagTemp) - imagCoord;                        realTemp = realTemp2;                        arg = (realTemp * realTemp) + (imagTemp * imagTemp);                        //當前點的值儲存在iterations中                        iterations += 1;                    }                    //選擇要輸出的字元                    switch (iterations % 4)                    {                        case 0:                            Console.Write(".");                            break;                        case 1:                            Console.Write("o");                            break;                        case 2:                            Console.Write("O");                            break;                        case 3:                            Console.Write("@");                            break;                    }                }                //內層迴圈結束後需要結束一行,所以輸出分行符號。                Console.Write("\n");            }            Console.ReadKey();        }    }

示範結果為:

章節習題要求使用者輸入映像的邊界,並顯示選中的映像部分。當前代碼輸出的字元應正好能放在控制台應用程式的一行上,考慮如何使每個選中的映像正好佔據

大小相同的空間,以最大化可視地區。

  class Program    {        //Mandelbrot映像中的每個位置都對應於公式N=x+y*i中的一個複數。其實數部分是x,虛數部分是y,i是-1的平方根。映像中各個位置的x和y座標組應於虛數的x和y部分        //映像中的每個位置用參數N來表示,它是x*x+y*y的平方根。如果這個值大於或等於2,則這個數字對應的位置值是0。如果參數N的值小於2,就把N的值改為N*N-N(N=(x* x-y* y-x)+(2*x* y-y)*i)),並再次測試這個新N值。如果這個值大於或等於2,則這個數字對應的位置值是1。這個過程一直繼續下去,直到我們給映像中的位置賦一個值,或迭代執行的次數多於指定的次數為止。”        static void Main(string[] args)        {            //N的實數和虛數部分            double realCoord, imagCoord;            double realMax = 1.77;            double realMin = -0.6;            double imagMax = -1.2;            double imagMin = 1.2;            double realStep;            double imagStep;            //儲存計算過程中的臨時資訊            double realTemp, imagTemp, realTemp2, arg;            //記錄在參數N(arg)等於或大於2之前的迭代次數            int iterations;            //選擇合適的邊界值來顯示Mandelbrot映像的主要部分,如果想放大這個映像,可以放大(其實是減小)這些邊界值。            while (true)            {                //設定跨度以保證每個選中的映像正好佔據大小相同的空間,以最大化可視地區。                realStep = (realMax - realMin) / 79;                imagStep = (imagMax - imagMin) / 48;                for (imagCoord = imagMin; imagCoord >= imagMax; imagCoord += imagStep)                {                    //兩個for迴圈處理映像中的一個點,給N指定一個值。                    for (realCoord = realMin; realCoord <= realMax; realCoord += realStep)                    {                        //初始設定變數                        iterations = 0;                        realTemp = realCoord;                        imagTemp = imagCoord;                        arg = (realCoord * realCoord) + (imagCoord * imagCoord);                        //2是4的平方根,所以僅計算x^2+y^2的值,while迴圈執行迭代,                        while ((arg < 4) && (iterations < 40))                        {                            //N*N-N的實數部分                            realTemp2 = (realTemp * realTemp) - (imagTemp * imagTemp)                                  - realCoord;                            //N*N-N的虛數部分                            imagTemp = (2 * realTemp * imagTemp) - imagCoord;                            realTemp = realTemp2;                            arg = (realTemp * realTemp) + (imagTemp * imagTemp);                            //當前點的值儲存在iterations中                            iterations += 1;                        }                        //選擇要輸出的字元                        switch (iterations % 4)                        {                            case 0:                                Console.Write(".");                                break;                            case 1:                                Console.Write("o");                                break;                            case 2:                                Console.Write("O");                                break;                            case 3:                                Console.Write("@");                                break;                        }                    }                    //內層迴圈結束後需要結束一行,所以輸出分行符號。                    Console.Write("\n");                }                //當前邊界值                Console.WriteLine("Current limits:");                Console.WriteLine("realCoord:from {0} to {1} ", realMin, realMax);                Console.WriteLine("imagCoord:from {0} to {1} \n", imagMin, imagMax);                                //輸入新的邊界值                Console.WriteLine("Enter new limits:");                //實數                Console.WriteLine("realCoord:from:");                realMin = Convert.ToDouble(Console.ReadLine());                Console.WriteLine("realCoord:to:");                realMax = Convert.ToDouble(Console.ReadLine());                //虛數                Console.WriteLine("imagCoord:from:");                imagMin = Convert.ToDouble(Console.ReadLine());                Console.WriteLine("imagCoord:to:");                imagMax = Convert.ToDouble(Console.ReadLine());            }        }    }

原邊界(-0.6,1.2)  (1.77,-1.2)

現邊界(-0.6,1.2) (0,0)

相當於放大了原來的映像的一部分:大概是這一部分?目前只能理解到這個程度了

 

 

 

 

C#入門經典 Chapter4 流程式控制制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.