C#学习(三)—语句控制

    一、选择语句(根据某个条件是否为True来将程序控制权移交给特定的流程)

    1、if语句

            此语句主要用来做选择,可与else结合使用。

       (1)其声明语言如下:

        if(conditions)                             //conditions为布尔表达式
    
                      statement(s)                      //符合布尔表达式执行的代码
    
              else
    
                      statement(s)                   //不符合布尔表达式执行的代码

        (2)示例1:if…else

     static void Main(string[] args)
    
            {
    
     
    
                bool flag = true;
    
                if (flag = true)
    
                {
    
                    Console.WriteLine("the flag is true.");
    
                }
    
                else
    
                {
    
                    Console.WriteLine("the flag is false.");
    
                }

            示例2:else if

         static void Main(string[] args)
    
            {
    
                string grade;
    
                int score;
    
                Console.WriteLine("Input your score:");
    
                score = Convert.ToInt32(Console.ReadLine());
    
                if (score > 100 || score < 0)
    
                {
    
                    Console.WriteLine("false score range!");
    
                    return;
    
                }
    
                if (score > 90)
    
                    grade = "A";
    
                else if(score>80)
    
                    grade="B";
    
                else if(score>70)
    
                    grade="C";
    
                else if(score>60)
    
                    grade="D";
    
                else
    
                    grade="E";
    
                Console.WriteLine("your grade is {0}", grade);

    2、switch语句

            switch语句是一个控制语句,它通过控制传递给其体内的一个case语句来处理多个选择和枚举。switch语句中有很多case区段,每个擦色标记后可以指定一个常数作为标准,不能将一组常数放在一个case标记之后。

    (1)其声明语言如下:

      switch(判断条件)
    
        {
    
         case1 判断式;
    
                 //区段,符合条件执行的代码
    
         break
    
        
    
         case2 判断式;
    
                 //区段,符合条件执行的代码
    
         break
    
         case 3判断式;
    
                 //区段,符合条件执行的代码
    
         break
    
        …
    
        default:
    
              //最后排除的代码输出
    
         break
    
         }

    (2)示例

       static void Main(string[] args)
    
           
    
     
    
    {
    
     
    
        string mycountry = "中国";
    
     
    
        switch (mycountry)
    
     
    
        {  
    
     
    
            //如果mycountry为“中国”,就执行分支1
    
     
    
            case "中国":
    
                Console.WriteLine("中国");
    
                 break;
    
     
    
            //如果mycountry为“美国”,就执行分支1
    
     
    
            case "美国":
    
                Console.WriteLine("美国");
    
                break;
    
     
    
            //如果mycountry值是“值都不符合以上分支内容,则执行default语句
    
     
    
            default :
    
                Console.WriteLine("无");
    
                break;
    
     
    
         }
    
     
    
         Console.ReadLine();
    
     
    
         }   

    运行结果:中国

    注:if语句与switch语句的区别

    If语句通过范围来判断

    switch语句通过具体判断(a=5时)

    二、迭代语句(是可重复执行多次某区段的程序代码)

    1、while语句

            用于执行重复程序代码的语句,在循环次数不固定时相当有效。

    (1)其声明语言如下:

      while(布尔表达式)
    
    {
    
       循环体
    
    }

    (2)示例

     static void Main()
    
            {
    
                Console.WriteLine("输出的结果为:");
    
                int n=1;
    
                while (n<6)
    
                {
    
                    Console.WriteLine("循环第{0}次",n);
    
                    n++;
    
                }
    
                Console.Read();
    
            }

    运行结果:C#学习(三)—语句控制_第1张图片

    注:当break、goto、return或throw语句将控制权转移到while循环之外时,可以终止该循环。若要将控制权传递给下一次迭代但不退出循环,请使用continue语句。

    2、do-while语句

    (1)其声明语言如下:

    do
    
    {
    
       循环体
    
    }
    
    while(布尔表达式)

    (2)示例

     static void Main()
    
            {
    
                Console.WriteLine("输出的结果为:");
    
                int n=1;
    
                do
    
                {
    
                    Console.WriteLine("循环第{0}次",n);
    
                    n++;
    
                }
    
                while (n<0);
    
                Console.Read();
    
            }

    注:

    第一:当n<0或1、2时,循环一次;n<3时,循环2次;随数字的增大,循环次数增多。

    第二:选择whie循环还是do-while循环取决于所解决的计算机问题,但大部分情况下选择while循环。

    3、for语句

             for语句循环重复执行一个语句或语句块,直到指定的表达式计算为False值。for循环对于迭代数组和顺序处理非常方便。for语句将初始值、布尔判断和更新值都编写在同一行程序中。

    (1)其声明语言如下:

      for(初始值;布尔表达式;更新值)
    
          {
    
              程序代码块
    
          }

    (2)示例

    static void Main()
    
            {
    
                Console.WriteLine("输出的结果为:");
    
                for (int i = 0, j = 10; i <= j; i++, j--)
    
                {
    
                    Console.WriteLine("{0},{1}", i, j);
    
     
    
                }
    
                    Console.Read();
    
            }

    运行结果:

    C#学习(三)—语句控制_第2张图片

    4、foreach语句

           foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组。foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。foreach语句能够对实现Ienumerable接口的容器进行遍历,并提供一个枚举来实现Ienumerable接口(是公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。)。

    (1)其声明语言如下

    foreach (类型名  变量名  in  集合对象)
    
    {
    
       statement
    
    }

     其中:

    类型:identifier 的类型。

    变量名(identifier):表示集合元素的迭代变量。如果迭代变量为值类型,则无法修改的只读变量也是有效的。

    集合对象(expression):对象集合或数组表达式。集合元素的类型必须可以转换为 identifier 类型。请不要使用计算为 null 的表达式。

    而应计算为实现 IEnumerable 的类型或声明 GetEnumerator 方法的类型。在后一种情况中,GetEnumerator 应该要么返回实现 IEnumerator 的类型,要么声明 IEnumerator 中定义的所有方法。

    statement:要执行的嵌入语句。

    (2)示例

    static void Main(string[] args)                                          //程序入口
    
            {
    
                Console.WriteLine("请输出结果:");                   //程序输出时需要
    
                int[] fibarray=new int[]{0,1,2,3,5};                //数组
    
                foreach(int i in fibarray)                          //foreach语句遍历数组
    
                {
    
                    System.Console.WriteLine(i);                    //控制台输出
    
                }
    
                Console.Read();                                     //读取一个字符,返回该字符的ascII码,
    
            }

    运行结果:

     C#学习(三)—语句控制_第3张图片

     

    三、跳转语句(转换程序的执行权)

    1、break语句

             break语句可以用来终止一条迭代语句,是控制流程跳转到迭代语句的下一条语句。break语句可以放在循环体的任意位置来实现这一目的,若要中止整个嵌套循环,可以使用return语句。

    (1)其声明语言如下:break(和其它语句一起用)

    (2)示例

    static void Main()                                                      //程序入口
    
            {
    
                Console.WriteLine("输出结果为:");
    
                for (int i = 1; i <= 10; i++)                        //for循环
    
                {
    
                    if(i>4)                                          //i>4时
    
                    {
    
                        break;                                       //中断
    
                    }
    
                    Console.WriteLine(i);                            //输出结果
    
                }
    
                Console.Read();
    
            }

    运行结果:

    C#学习(三)—语句控制_第4张图片

    2、continue语句

           使执行流程跳过循环体的剩余部分而继续执行下一个循环。

    (1)其声明语言如下:continue(与其他语句一起使用)

    (2)示例

     static void Main()                                                    //程序入口
    
            {
    
                Console.WriteLine("输出结果为:");
    
                for (int i = 1; i <= 5; i++)                            //for循环
    
                {
    
                    if(i<3)                                             //i<3时
    
                    {
    
                        continue;                                       //继续,排除小于3的部分
    
                    }
    
                    Console.WriteLine(i);                               //输出结果
    
                }
    
                Console.Read();
    
            }

    运行结果:

    C#学习(三)—语句控制_第5张图片

    注:continue语句不会像break语句一样干涉驯化体重复的次数,它只是影响某特定重复中的流程控制。

    3、goto语句

             goto语句属于无条件跳转语句,因为C#允许在代码行加标签,这样就可以用goto语句直接跳转到这些代码行上。优点:可以方便地控制何时去执行指定代码;缺点:过多地使用这个语句将很难读懂代码段。(标签是一个标识符,后跟一个冒号)

    (1)示例

    Goto label1:
    
            Console.WriteLine("this won't be executed");
    
    Label1:
    
            Console.WriteLine("from here");

     4、return语句

           return语句终止它所在的方法的执行,并将控制权返回给调用方法,另外,它可以返回一个可选值。如果方法为void类型,则可以省略return语句。

    (1)其声明语言如下:与其他语句一起使用

    (2)示例

    static string MyStr(string str)      //创建一个string类型方法
    
     
    
         {
    
     
    
                string OutStr;                   //声明一个字符串变量
    
     
    
                OutStr = "您输入的数据是:" + str;     //为字符串变量赋值
    
     
    
                return OutStr;              //使用return语句返回字符串变量
    
     
    
         }
    
     
    
     
    
     
    
        staticvoid Main(string[] args)
    
     
    
        {
    
     
    
           Console.WriteLine("请您输入内容:");    //输出提示信息
    
     
    
           string inputstr =Console.ReadLine();   //获取输入的数据
    
     
    
           Console.WriteLine(MyStr (inputstr ));  //调用MyStr方法并显示结果
    
     
    
           Console.ReadLine();
    
     
    
        }

    运行结果:


    5、using语句

            此语句可以确保在使用完资源密集型的对象后,就处理它们,其语法如下:

    (1)其声明语言如下:

              using(object)
               {
                    //code using object
                 }
    

四、异常处理语句(用来捕获和处理异常)

    一个try块可以有如下情况:

    1. 有一个finally块,无catch块。
    2. 有一个或多个相关的catch块,无finally块。
    3. 包含一个或多个catch块,同时有一个finally块。

    1、throw语句

             throw语句用于发出在程序执行期间出现反常情况(异常)的信号。throw语句通常与try-catch或try-finally语句一起使用。可以使用throw语句显式引发异常(这里引发自定义异常)。创建用户自定义异常,好的编码方法是以“Exception”作为用户自定义异常类名的结尾。

    (1)示例(现在还不理解,以后补充解释)

             本示例通过Exception派生了一个新异常类UserEmployeeException,该类中定义了3个构造函数,每个构造函数使用不同的参数,然后再抛出自定义异常。程序代码如下。

    using System;
    
    using System.Collections.Generic;
    
    using System.Text;
    
    using System.IO;
    
    namespace ClsUserExecption
    
    {
    
       class Program
    
        {
    
            public class UserEmployeeException: Exception
    
            {
    
                private string errorinfo=string.Empty;
    
                public UserEmployeeException()
    
                  {
    
                  }
    
                public UserEmployeeException (string message) : base(message)
    
                  {
    
                      errorinfo = message;
    
                  }
    
     
    
               public UserEmployeeException (string message, Exception
    
    inner):base(message,inner)
    
                  {
    
                      errorinfo = message;
    
                      inner = null;
    
                  }
    
            }
    
            public static void Main()
    
            {
    
                try
    
                {
    
                    throw new UserEmployeeException("error Info of use ");
    
                }
    
                catch (UserEmployeeException ey)
    
                {
    
                    Console.WriteLine("输出结果为:");
    
                    Console.WriteLine(ey.Message,ey.InnerException);
    
                    Console.Read();
    
                }
    
            }
    
        }
    
    }

             

    2、try-catch语句

           try-catch错误处理表达式允许将任何可能发生异常情形的程序代码放置在try{}程序代码块进行监控,真正处理错误异常的程序代码则被放置在catch{}块里面,一个try{}块可对应多个catch{}块。

    (1)示例(现在还不理解,以后补充解释)

    usingSystem;
    
    classMainClass
    
    {
    
      staticvoidProcessString(stringstr)
    
      {
    
        if(str==null)
    
        {
    
          thrownewArgumentNullException();
    
        }
    
      }
    
      staticvoidMain()
    
      { 
    
        Console.WriteLine("输出结果为:");
    
        try
    
        {
    
          stringstr=null;
    
          ProcessString(str);
    
        }
    
        catch(ArgumentNullExceptione)
    
        {
    
          Console.WriteLine("{0}Firstexception.",e.Message);
    
        }
    
        catch(Exceptione)
    
        {
    
          Console.WriteLine("{0}Secondexception.",e.Message);
    
        }
    
      }
    
    }

    3、try-catch-finally语句

           异常发生时,执行将终止,同时将控制权交给最近的异常处理语句,这就意味着不能按正常的设计思想执行。而有些资源清理(如关闭文件)必须总是执行,即使有异常发生,为了实现该功能,可以使用finally块。finally块用于清除try块中分配的任何资源,以及运行必须执行的代码,即使在发生异常的情况下。控制将总是传递给finally块,与try块的退出方式无关。

    (1)示例(现在还不理解,以后补充解释)

    using System;
    
    public class MainClass
    
    {
    
    static void Main()
    
    {
    
    int i = 123;
    
    string s = "Some string";
    
    object o = s;
    
    try
    
    {
    
    i = (int)o;
    
    }
    
    catch {  }
    
    finally
    
    {
    
    Console.Write("i = {0}", i);
    
    }
    
    Console.Read();
    
    }
    
    } 

     注意事项:

    异常继承层次结构(从左到右):

    System.Object—System.Exception—System.SystemException—派生类

    基类Exception存在以下两类异常。

    1. 从System.Exception派生的预定义公共语言运行库异常。
    2. 从ApplicationException派生的用户定义的应用程序异常。

你可能感兴趣的:(C#学习(三)—语句控制)