(7)C#流程控制

一、判断语句

if

if可以单独使用,else不能单独使用

int a=5;
if(a>5)
{
Console.WriteLine("aaa);
}
Console.WriteLine("xxx");//只执行这一句

if...else

//括号里判断真或假,如果为真则执行if里的语句然后跳过else,再执行...
if(a==b)
{ }
//如果if括号为假,那么跳过if{},执行else{},再往下执行 else { } .........

if 括号里一般是“==”判断左右是否相等,或者只有一个变量。

当{}中只有一句代码时,可以省略{}

if(a==b)
      ;
else      ;
........

if..else嵌套

当不是只单纯的判断从二选一的问题时,可能有多种答案就要用到嵌套或switch等语句,反正单个if else是解决不了了,比如判断星期,或根据学生成绩判断优良中差等。

举个例子:

学生考试的成绩按照分数来划分等级

0-59不及格,60-69 差,70-79 中,80-89 良,90-100 优

经常看到有三种嵌套法

1、从if(){}里面嵌套 if....else

首先a是一个0-100区间的整数,在这种情况下

if(a>=60)
{

  if(a>=70)
     {
 
        if(a>=80&)
        {
                ........里面就不写了
        }
        else//a>=70且a<80
        Console.WriteLine("");
  }
    else//a>=60 且a<70
    Console.WriteLine("");
}

else//a<60

Console.WriteLine("不及格");            

这方式写代码写着费劲,看代码的人看的蒙圈

在else里嵌套if  else

if(a>90&&a<=100)
     Console.WriteLine("");
else 
{ 
        if(a<80) 
        {
            if(a<70)
               {
                        ..........
               }  

            else
                Console.WriteLine("良");   
        } 
        else
            Console.WriteLine("");   
}        

1和2一个特点就是代码看着很乱

3、

if()

else if() 

else if()     的方式

 

if(a>=90)
    Console.WriteLine("");  
   else if(a>=80)   //a>=80&&a<90
      Console.WriteLine("");  
     else if(a>=70)
          Console.WriteLine("");  
            else if(a>=60)
             Console.WriteLine(""); 
             else if(a<60)
                Console.WriteLine("不合格"); 

这样的写法要比上面两种方法清晰多了

假设 

  把 a>=90看做A, a>=80看做B, a>=70看做C,

  则D肯定是在 (!A && !B && !C 的)交集里。

switch

根据swtich传进来的数值,找到到对应的case,比如传进来一个变量 r ,系统会从switch{}里找有没有一个case r:找到后就依次往下执行后面的所有语句,包括最后的default.如果语句遇到break,则跳出本层。

还是以学生成绩举例子

int A=int  (score/10);

String B;

switch(A)

{
    case 10:case 9:
        B=“您的成绩为优秀”;
    case 8:
        B=“您的成绩为良”;
        break;
           .....
    default
        B=“您的成绩不合格”;
}

 如果你的成绩是80,也是就找到case 8: ,它会执行B=“您的成绩为良”;这一句,在执行break;跳出switch。

注意:

1、switch 变量的数据类型只能用 bool,byte,short,int,long,char,String这几个。

2、case 标签必须是唯一的。不然两个case 9: 系统无法判断从哪个case 9开始执行。

3、case 标签必须是一个常量表达式

 什么是常量表达式?

常量表达式里面只有常量的式子,比如2+2是常量表达式,如果定义常量a,那么a+2也是常量表达式。

但是如果a是变量,就不是常量表达式了。

4、同时满足几种情况时执行同一段代码 例如上面的case 9和case 10。

 二、循环语句

while

while(布尔表达式)
{

}

当while()的表达式为true时,执行{}里的的句子,为false时,不执行{}里的语句直接跳出。

想要让while循环起来的话通常在{}里有一个变量通过自加自减等方式影响着布尔表达式,到达一定条件后使得布尔表示的值为false,从而跳出循环

int i=0;
while(i!=10)
{
    i++;
}

 

do...while

do..while循环{}会的特点是先执行一次

int i=0
do
{
i++;
}
while(i!=10)

 

 for语句

for(初始化控制变量;布尔表达式;更新控制变量)
{
语句
}
for(int i=0;i<10;i++)
{
 Console.WriteLine(i);
}

首先i进行初始化,然后判断i<0是否成立,如果成立则去执行括号的内容,执行一次{}后执行对变量进行更新执行i++,然后再判断i<0的真假,如果为真继续循环,如果为假结束语句。

注意:

1、初始化只会发生一次。

2、语句要执行一次后,才会执行更新控制变量。

3、更新控制变量后,会重新判断布尔表达式。

 

for语句的三个部分都可以省略,但是;必须要有,无论怎么省略for循环里的两个;永远都要有

for(int i=0; ;i++)//如果省略布尔表达式,则它默认为true
{

}

 多个初始化变量

for中可以提供做个初始化变量

for(int i=0,j=0;i<5;i++,j++)
            {
            Console.WriteLine(i);
            Console.WriteLine(j);
            }

 

for语句的作用域问题

1、如果i是在for()里初始化控制变量这个位置被初始化,则i的作用范围只能在for里  

for(i=0;1<10;i++) //只能作用在这一个for里
{
Console.WriteLine("i");
}

2、如果有连个for,里面设i,这两个i完全没有联系。

for(i=0;1<10;i++) 
{
Console.WriteLine("i");
}
for(i=0;1<20;i+=2) //和1里的i没有任何关系,各自在自己的for里起作用
{
Console.WriteLine("i");
}

3、如果要在for外进行输出化,在初始化控制变量的位置进行赋值,则这个变量在for里面外面都有效。

int i ;
for( i=3;i<10;i++)
{
     Console.WriteLine(i);               
}
Console.WriteLine(i+2);//最后i=12    

 

 三、跳转语句

break和continue的区别

break的作用是跳出这一层。如果break语句包含在嵌套循环里,它只跳出最里面的循环。

continue的作用是跳出本次循环,进入到下一次循环。

int i=0;
while(true)
{
    i++;
    if(i<10)
        continue;//直到i=10时才执行else
        Console.WriteLine("我想看看世界");//受continue的影响这句话永远执行不到。
    else
        break;//跳出离它最近的循环,虽然他有层if但if不是循环,所以他会往外找。
}

 

return退出当前方法,如果方法有返回类型,return必须有返回值。如果方法为void,方法中不能出现return语句

goto 可以直接跳转到程序中用标签指定的另一行

            bool b = true;
            if (b)
            {
                goto lable1;
            }
            Console.WriteLine("aaa");
            lable1:
            Console.WriteLine("bbb");
            Console.ReadKey();

goto语句有两个限制,不能跳转到想for循环这样的代码块,也不能跳出类,不能退出try catch后面的finally块。

goto不是面向对象的好方式。

 

   

posted @ 2016-06-21 15:57  富坚老贼  阅读(416)  评论(0编辑  收藏  举报