4.1布爾邏輯函數
布爾比較運算符性能
== != < > <= >=測試
處理布爾值的布爾值運算符spa
! & | ^(異或)code
條件布爾運算符blog
&& || 比&和|性能更好 好比&&只需判斷前面的布爾值爲false,總體值就爲false,不用計算後面的布爾值string
1.布爾賦值運算符it
&= |= ^=io
2.按位運算符for循環
& | ^ ~
位移運算符 >> <<
位移賦值運算符>>= <<=
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)
至關於放大了原來的圖像的一部分:大概是這一部分?目前只能理解到這個程度了