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

来源:互联网 发布:php银联支付流程 编辑:程序博客网 时间:2024/05/19 18:45

    一、选择语句(根据某个条件是否为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();        }

    运行结果:

    注:当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();        }

    运行结果:


    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码,        }

    运行结果:

     

     

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

    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();        }

    运行结果:


    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();        }

    运行结果:


    注: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, Exceptioninner):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派生的用户定义的应用程序异常。
原创粉丝点击