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 = ;
realTemp = realCoord;
imagTemp = imagCoord;
arg = (realCoord * realCoord) + (imagCoord * imagCoord); //2是4的平方根,所以仅计算x^2+y^2的值,while循环执行迭代,
while ((arg < ) && (iterations < ))
{
//N*N-N的实数部分
realTemp2 = (realTemp * realTemp) - (imagTemp * imagTemp)
- realCoord;
//N*N-N的虚数部分
imagTemp = ( * realTemp * imagTemp) - imagCoord;
realTemp = realTemp2;
arg = (realTemp * realTemp) + (imagTemp * imagTemp);
//当前点的值存储在iterations中
iterations += ;
} //选择要输出的字符
switch (iterations % )
{
case :
Console.Write(".");
break;
case :
Console.Write("o");
break;
case :
Console.Write("O");
break;
case :
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 = ;
realTemp = realCoord;
imagTemp = imagCoord;
arg = (realCoord * realCoord) + (imagCoord * imagCoord); //2是4的平方根,所以仅计算x^2+y^2的值,while循环执行迭代,
while ((arg < ) && (iterations < ))
{
//N*N-N的实数部分
realTemp2 = (realTemp * realTemp) - (imagTemp * imagTemp)
- realCoord;
//N*N-N的虚数部分
imagTemp = ( * realTemp * imagTemp) - imagCoord;
realTemp = realTemp2;
arg = (realTemp * realTemp) + (imagTemp * imagTemp);
//当前点的值存储在iterations中
iterations += ;
} //选择要输出的字符
switch (iterations % )
{
case :
Console.Write(".");
break;
case :
Console.Write("o");
break;
case :
Console.Write("O");
break;
case :
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 流程控制的更多相关文章

  1. JAVA入门基础及流程控制

    JAVA入门基础及流程控制 数据类型 位 存储单位 eg:0001 0011 八位 字节 byte 处理数据单位 一字节等于八位 eg:1b=0011 0001 类变量: static int num ...

  2. Shell入门教程:流程控制(1)命令的结束状态

    在Bash Shell中,流程控制命令有2大类:“条件”.“循环”.属于“条件”的有:if.case:属于“循环”的有:for.while.until:命令 select 既属于“条件”,也属于“循环 ...

  3. Python 入门基础3 --流程控制

    今日目录: 一.流程控制 1. if 2. while 3. for 4. 后期补充内容 一.流程控制--if 1.if判断: # if判断 age = 21 weight = 50 if age & ...

  4. 【重点】Shell入门教程:流程控制(3)条件判断式的真假值

    之前曾提到,在Bash中什么是真什么是假,是以命令的结束状态是否为0来做判断.传回0,即为真:传回非0,即为假. 在Bash中,这种可以影响程序流程的式子,称为条件判断式.判断式的操作数分成“单元”及 ...

  5. Shell入门教程:流程控制(5)for 循环

    for循环的运作方式,是将 串行 的元素的元素一一取出,依序放入制定的变量中,然后重复执行含括的命令区域(在 do 与 done 之间),直到所有元素取尽为止. 其中,串行是一些字符串的组合,彼此用 ...

  6. Shell入门教程:流程控制(6)while 循环

    while循环的语法: while 条件测试 do     命令区域 done 举例: #!/bin/bash declare -i i=1 declare -i sum=0 while ((i< ...

  7. Java入门教程三(流程控制)

    概述 程序有 3 种结构:顺序结构.选择结构和循环结构.分别为:if elseswitch case,while与do while,for, foreach,return,break ,continu ...

  8. 【重点】Shell入门教程:流程控制(2)条件判断的写法

    第三节:条件判断的写法 if条件判断中,if的语法结构中的“条件判断”可以有多种形式.测试结果是真是假,就看其传回的值是否为0. 条件测试的写法,有以下10种: 1.执行某个命令的结果 这里的命令,可 ...

  9. Shell入门教程:流程控制(4)case 条件判断

    case的语法结构: case 待测项 in 样式串1] 命令区域1 ;; (样式串2) 命令区域2 ;; 样式串3) 命令区域3 ;; *) 命令区域 ;; esac 命令区域,可以是单一指令或多行 ...

随机推荐

  1. nyoj 1112 求次数(map, set)

    求次数 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 题意很简单,给一个数n 以及一个字符串str,区间[i,i+n-1] 为一个新的字符串,i 属于[0,strl ...

  2. Linux下汇编语言学习笔记75 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  3. Project导入错误 36D27C48

    做后台系统导出Project时,部署到服务器提示:检索 COM 类工厂中 CLSID 为 {36D27C48-A1E8-11D3-BA55-00C04F72F325} 的组件失败,原因是出现以下错误: ...

  4. 洛谷—— P2504 [HAOI2006]聪明的猴子

    P2504 [HAOI2006]聪明的猴子 题目描述 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着,部分植物的树冠露在水面上. ...

  5. Codeforces Round #391(div 1+2)

    A =w= B QuQ C 题意:有n个体育场,每个体育场有一些小精灵,一共m种小精灵(n<=1e5,m<=1e6),可以将数字全为i的精灵进化成j(可以互相进化也可以选择不进化),问有多 ...

  6. [codevs 1243][网络提速(最短路分层思想)

    题目:http://dev.codevs.cn/problem/1243/ 分析: 先容易想到将一个点拆成m个点,分别对应不同的边连过去,但是想不到控制加速器数量的办法.看了题解才知道,每个点的分层, ...

  7. Eclipse Java Build Path详解

    Eclipse Java Build Path详解 1.设置"source folder"与"output folder". * source folder:存 ...

  8. leetcode 114.Flatten Binary Tree to Linked List (将二叉树转换链表) 解题思路和方法

    Given a binary tree, flatten it to a linked list in-place. For example, Given 1 / \ 2 5 / \ \ 3 4 6 ...

  9. 自由宣言--《I Have a Dream》(马丁.路德.金)

    I Have a Dream by Martin Luther King, Jr. I am happy to join with you today in what will go down in ...

  10. 查看及更改MySQL数据库物理文件存放的位置

    查看命令:   mysql> show global variables like "%datadir%"; 表格第二行即为文件的位置.另外,可以在该文件夹的配置文件my.i ...