C#入门经典 Chapter4 流程控制
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 流程控制的更多相关文章
- JAVA入门基础及流程控制
JAVA入门基础及流程控制 数据类型 位 存储单位 eg:0001 0011 八位 字节 byte 处理数据单位 一字节等于八位 eg:1b=0011 0001 类变量: static int num ...
- Shell入门教程:流程控制(1)命令的结束状态
在Bash Shell中,流程控制命令有2大类:“条件”.“循环”.属于“条件”的有:if.case:属于“循环”的有:for.while.until:命令 select 既属于“条件”,也属于“循环 ...
- Python 入门基础3 --流程控制
今日目录: 一.流程控制 1. if 2. while 3. for 4. 后期补充内容 一.流程控制--if 1.if判断: # if判断 age = 21 weight = 50 if age & ...
- 【重点】Shell入门教程:流程控制(3)条件判断式的真假值
之前曾提到,在Bash中什么是真什么是假,是以命令的结束状态是否为0来做判断.传回0,即为真:传回非0,即为假. 在Bash中,这种可以影响程序流程的式子,称为条件判断式.判断式的操作数分成“单元”及 ...
- Shell入门教程:流程控制(5)for 循环
for循环的运作方式,是将 串行 的元素的元素一一取出,依序放入制定的变量中,然后重复执行含括的命令区域(在 do 与 done 之间),直到所有元素取尽为止. 其中,串行是一些字符串的组合,彼此用 ...
- Shell入门教程:流程控制(6)while 循环
while循环的语法: while 条件测试 do 命令区域 done 举例: #!/bin/bash declare -i i=1 declare -i sum=0 while ((i< ...
- Java入门教程三(流程控制)
概述 程序有 3 种结构:顺序结构.选择结构和循环结构.分别为:if elseswitch case,while与do while,for, foreach,return,break ,continu ...
- 【重点】Shell入门教程:流程控制(2)条件判断的写法
第三节:条件判断的写法 if条件判断中,if的语法结构中的“条件判断”可以有多种形式.测试结果是真是假,就看其传回的值是否为0. 条件测试的写法,有以下10种: 1.执行某个命令的结果 这里的命令,可 ...
- Shell入门教程:流程控制(4)case 条件判断
case的语法结构: case 待测项 in 样式串1] 命令区域1 ;; (样式串2) 命令区域2 ;; 样式串3) 命令区域3 ;; *) 命令区域 ;; esac 命令区域,可以是单一指令或多行 ...
随机推荐
- 九度oj 题目1046:求最大值
题目1046:求最大值 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:11782 解决:4789 题目描述: 输入10个数,要求输出其中的最大值. 输入: 测试数据有多组,每组10个数. ...
- Display PowerPoint slide show within a VB form or control window
The example below shows how to use VB form/control as a container application to display a PowerPoin ...
- fetch api & response header
how to get fetch response header in js https://stackoverflow.com/questions/43344819/reading-response ...
- hdu 2647拓扑排序 容器
#include<stdio.h> #include<queue> #include<vector> #include<iostream> using ...
- Prime Land(poj 1365)
题意:这题题意难懂,看了题解才知道的.比如第二组sample,就是5^1*2^1=10, 求10-1即9的质因数分解,从大到小输出,即3^2.本来很简单的嘿,直接最快速幂+暴力最裸的就行了. #inc ...
- codevs4419 FFF 团卧底的菊花
题目描述 Description FFF 团卧底在这次出题后就知道他的菊花可能有巨大的危险,于是他提前摆布好了菊花阵,现在菊花阵里有若干朵菊花,出现次数最多的那一朵就是出题人的,你的任务是需要找出出题 ...
- Linux 安装 RabbitMQ
转载文章,地址:https://www.cnblogs.com/uptothesky/p/6094357.html 侵删!
- Ubuntu18.04卸载lnmp
1.卸载 apache2 sudo apt-get --purge remove apache2* sudo apt-get autoremove apache2 (--purge 是完全删除并且不保 ...
- Install nginx-clojure on CentOS 7
Install nginx-clojure on CentOS 7 1. install open-jdk-7 sudo yum install java-1.7.0-openjdk-devel 2. ...
- 1. 数组之差TapeEquilibrium Minimize the value |(A[0] + ... + A[P-1]) - (A[P] + ... + A[N-1])|.
数组之差 package com.code; public class Test03_3 { public static int solution(int[] A) { int size = A.le ...