【C#】基础知识—流程控制语句

一、流程控制语句的描述

语句是程序完成一次完整操作的基本单位,默认情况下,程序的语句是顺序执行的。但是,如果一个程序只有顺序执行的语句,那么程序可能什么也做不了。在c#中有很多语句,通过这些语句可以控制程序代码的执行次序,提高程序的灵活性,从而实现比较复杂的程序。

1. 条件选择语句

条件选择语句用于根据某个表达式的值从若干条给定语句中选择一个来执行,包括if语和switch语句两种:

 1> if语句的基本格式如下:

if(布尔表达式)
  语句 1;

执行过程:首先判断条件的结果,如果结果为true,则执行语句;如果条件为false,则跳出语句1. 执行后面的语句

注意:1)if后面括号中的条件,要能计算成一个bool类型的值;

2)默认情况下,if语句只能带1句话。即和if语句有关系的语句只有语句1

案例:

            int a = 3;
            if (a > 1)
                Console.WriteLine("成立");   // if默认只带这一句话
            Console.WriteLine("程序结束");   // 此句话和if语句没有关系
            // 输出成立 程序结束
            Console.WriteLine();
            if (a > 11)
                Console.WriteLine("成立");   // if默认只带这一句话
            Console.WriteLine("程序结束");   // 此句话和if语句没有关系
            // 输出程序结束
            Console.ReadKey();

 2> if.....else语句格式如下

if(条件)
{语句块1;}
else
{语句块2;}
当条件多的时候,有时候不建议使用if......else多层嵌套,使用if并列比较好。

 3> 使用Switch-case语句实现多分支语句

switch(表达式)
{
   case 值1; 语句块1;
   break;

   case 值2; 语句块2;
   break;

   default;
}

执行过程:首先计算表达式,然后根据计算结果与匹配case后面的值,如果有匹配项,则执行匹配项后面的语句,知道break语句跳出switch-case。如果所有的case的值都不匹配,那么有default则执行default后面的语句,知道break结束。如果没有default,则跳出switch-case,什么都不执行。(注意是搜索匹配项,与default的位置没有关系)

案例:

 bool flag = false;
            Console.WriteLine("请输入数字");
            string inputNum = Console.ReadLine();
            int num = Convert.ToInt32(inputNum);
            switch (num)
            {
                case 1:
                    Console.WriteLine("结果是1");
                    break;
                default:
                    Console.WriteLine("结果是无");
                    flag = true;
                    break;
                case 2:
                    Console.WriteLine("结果是2");
                    break;
                case 3:
                    Console.WriteLine("结果是3");
                    break;
                case 4:
                    Console.WriteLine("结果是4");
                    break;

            }
            // 说明1 这个是判断
            if (flag == false)
            {
                Console.WriteLine("永远成立");
            }
            // 说明2 这个是赋值
            if (flag = false)  // 赋值完成后,其实就是flag的值变成了false,永远不成立
            {
                Console.WriteLine("永远不成立");
            }
            Console.ReadKey();

注意:

 1)if与switch的比较(switch:一般只能用于等值比较,  if else ...if :可以处理范围)

结合的案例:

            // 月份的天数
            Console.WriteLine("请输入年份");
            string syear = Console.ReadLine();
            int year = Convert.ToInt32(syear);
            Console.WriteLine("请输入月份");
            string smonth = Console.ReadLine();
            int month = Convert.ToInt32(smonth);
            switch (month)
            {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    Console.WriteLine("31天");
                    break;
                case 2:
                    if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
                    {
                        // 闰年的判断
                        Console.WriteLine("是闰年");
                        Console.WriteLine("29天");
                    }
                    else 
                    {
                        // 是平年
                        Console.WriteLine("是平年");
                        Console.WriteLine("28天");
                    }
                    break;
                default:
                    Console.WriteLine("30天");
                    break;   
            }
            Console.ReadKey();

2. 循环语句的使用 

在c#中,常见的循环语句有while语句、do....while语句、for语句、foreach语句

 1> while循环的语法

 while(【布尔表达式】)  // 循环的条件判断  布尔表达式也就是条件语句
{
   循环体;(要执行程序的N个循环体)
}

注意:在循环体中,一定要有那么一句话,改变循环条件中的某个变量的值,使循环条件终有那么一天喂false;

特点:先判断,在执行

 2> do...while 语法

do
{
    循环体;
}while(条件);  // 注意结尾有一个分好

注意:这个的特点是不管条件成立与否都会执行一次程序。执行顺序:首先是执行循环体,然后判断条件是否成立,要是成立就会继续执行,如果不成立就会跳出。

 3> for循环语法

for(表达式1; 表达式2;表达式3)
{
   循环体;
}
注意:一般情况下

 1)表达式1:用于定义循环变量和对循环变量赋初值;

 2)表达式2:循环条件

 3)表达式3:用于改变循环变量的值

执行过程:

 1)计算表达式1,转向第二步; 2)计算表达式2(循环条件),如果表达式2的值为true转向第三步; 3)执行循环体,转向第四步;  4)执行表达式3,转向第二步

循环语句例子1:

     int age = 0;
            int sum = 0;

            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("请输入第{0}个人的年龄?", i + 1);
                try 
                {
                    age = Convert.ToInt32(Console.ReadLine());
                    if (age < 0 || age > 100)
                    {
                        Console.WriteLine("年龄不合法");
                        break;
                    }
                    sum = sum + age;
                }
                catch
                {
                    Console.WriteLine("你输入的年龄不是数字,错误!程序终止");
                    break;
                }
            }
            Console.WriteLine("你输入的五个人的年龄平均值是: {0}", sum / 5);
            Console.ReadKey();

 4>foreach语句

foreach语句用于枚举一个集合的元素,并对该集合中的每个元素执行一次嵌入语句,但foreach语句用于更改集合内容,一避免产生不可预知的错误。

格式:

foreach(【类型】 【迭代变量名】in 【集合类型表达式】)
{
    【语句块】;
}
其中【类型】和【迭代变量名】用于声明迭代变量,迭代变量相当于一个范围覆盖整个语句块的局部变量,在foreach语句执行期间,迭代变量表示当前正在为其执行迭代的集合元素;【集合类型表达式】必须有一个从改集合元素类型到迭代变量的类型的显示转换,如果【集合类型表达式】的值为null,则会出现异常。

案例:http://blog.csdn.net/haojie2014/article/details/45439249(java中的foreach语句)

public static void test6()
{
    int [] arr = {7, 10, 1};

    foreach (int x in arr)
    {
        // foreach 语句,int x是引用的变量,arr指定要循环遍历数组,最后将x输出
        // 意思就是将arr中的每一个元素赋值给变量x
        // 类似于c#中的foreach(数据类型  迭代变量名  in  集合类型表达式)
        // 类似于OC中的for(数据类型 变量名 in 集合类型表达式)
        Console.WriteLine(x);
    }
}

延伸:var

var是3.5新出的一个定义变量的类型(称为推断类型),其实也就是弱化类型 的定义,var可代替任何类型;编译器会根据上下文来判断你到底是想用什么类型的

至于什么情况下用到var:当自己不能确定自己将用什么类型的时候就这样做(类似object,不过效率会高点)

使用var定义变量的时候会有以下的特点:

 1)必须在定义的时候初始化。也就是必须是var s = "abcd"形式,而不能是var s; s = "abcd";

 2)一旦初始化完成,就不能再给变量赋与初始化值类型不同的值了;

 3)var要求是局部变量;

 4)使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样;

案例:

3. 跳转语句

 1> break语句

break语句只能运用在switch、while、do.....while、for或foreach语句中,break包含在这几中语句中,否则会出现编译错误。当多条switch、while、do.....while、for或foreach语句互相嵌套时,break语句只能运用在最里层的语句。如果要穿越多个嵌套层,则必须使用goto语句。(goto用于跳出深层嵌套)

案例:

public static void test7()
{
    for (int i = 0; i < 4; i++)
    {
        Console.WriteLine("\n第{0}次循环: ", i);
        for (int j = 0; j <= 10; j++)
        {
            if (j == 2)
                break;  // break只是跳出了内层循环,不过程序还是会执行4次
            Console.WriteLine(j + " ");
        }
    }
    Console.WriteLine();
}

 2> continue语句

continue语句只能运用在while、do.....while、for或foreach语句中,用来忽略循环语句块内位于它后面的代码而直接开始下一次新的循环。当多个while、do.....while、for或foreachbreak语句互相嵌套时,continue语句只能使直接包含它的循环语句开始一次新的循环。

案例:

public static void test7()
{
    for (int i = 0; i < 4; i++)
    {
        Console.WriteLine("\n第{0}次循环: ", i);
        for (int j = 0; j <= 10; j++)
        {
            if (j%2 == 0)
                continue;
            Console.WriteLine(j + " ");  // 1 3 5 7 9 输出四次
        }
    }
    Console.WriteLine();
}

 3> goto语句

goto语句用于将控制转移由标签标记的语句。goto语句可以被应用在switch语句中的case标签和default标签,以及标记语句所声明的标签。goto语句的形式:

goto 【标签】
goto case 【参数表达式】
goto default

goto 【标签】的目标是具有给定标签的标记语句;

goto case的目标是它所在的switch语句中的某个语句列表,次列表包含一个具有给定常数值的case标签;

goto  default语句的目标是它所在的那个switch语句中的default标签。

案例:

public static void test8()
{
    string input = Console.ReadLine();
    string[] mystr = new string[3];
    mystr[0] = "一表人才";
    mystr[1] = "两全其美";
    mystr[2] = "三心二意";
    for (int i = 0; i < mystr.Length; i++)
    {
        if (mystr[i].Equals(input))
        {
            goto Found;
        }
    }
    Console.WriteLine("你查找的语句{0}不存在 ", input);
    goto Finish;
Found:
    Console.WriteLine("你查找的语句{0}存在 ", input);
Finish:
    Console.WriteLine("查找完毕");

    Console.WriteLine();
}

 4> return语句

return用于退出类的方法,是控制返回方法的调用者,如果方法有返回类型,return语句必须返回这个类型的值;如果方法没有返回类型,应使用没有表达式的return语句。

案例:

public static string ReadAnswer()
{
    string result = "";
    do
    {
        result = Console.ReadLine();
        if (result != "y" && result != "n")
        {
            Console.WriteLine("输入有误,请重新输入");
        }
    } while (result != "y" && result != "n");

    return result;
}

4. 综合应用


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一章 MICROSOFT.NET 概述 1 1.1 MICROSOFT.NET平台 1 1.2 .NET框架 2 1.2.1公共语言运行环境 2 1.2.2 .NET框架类库 3 1.3 Microsoft中间语言和JITters 5 1.4 编写第一个C#应用程序 6 1.5 本章小结 8 1.6 实战演练 8 第二章 C#基本语法 9 2.1 类型系统 9 2.1.1 数值类型 9 2.1.2 引用类型 9 2.2 装箱与开箱 10 2.3类型转换 11 2.4 表达式和操作符 11 2.4.1初级表达式操作符 11 2.4.2 关系操作符 12 2.4.3 简单赋值操作符 13 2.5 程序流程控制语句 14 2.5.1 选择语句 14 2.5.2 迭代语句 16 2.5.3 跳转语句 18 2.5 本章小结 20 2.5 实战演练 20 第三章 面向对象编程的基础知识 21 3.1一切都是“对象” 22 3.1.1 对象和类 24 3.1.2 实例化 25 3.2 面向对象编程语言的三大原则 26 3.2.1 封装 26 3.2.2 继承 28 3.2.3 多态性 30 3.4 本章小结 33 3.5 实战演练 33 第四章 类 34 4.1 定义类 34 4.2 类的成员 34 4.3 访问限定符 35 4.4 构造函数 35 4.4.1 静态成员和实例成员 37 4.4.2构造函数的初始化函数 38 4.5 常量和只读字段 41 4.5.1 常量 41 4.5.2 只读字段 42 4.6 对象的清除和资源管理 43 4.7 继承 43 4.7.1 多接口 45 4.7.2 封装类 45 4.8 本章小结 46 4.9 实战演练 47 第五章 方法 48 5.1方法参数“REF”和“OUT” 48 5.2 方法重载 51 5.3虚拟方法 53 5.3.1方法覆盖 53 5.3.2多态性 54 5.4 静态方法 58 5.5 本章小结 59 5.6 实战演练 59 第六章 属性、数组和索引器 60 6.1 属性——智能字段 60 6.1.1定义和使用属性 61 6.1.2编译器的工作原理 62 6.1.3 只读属性 63 6.1.4继承属性 63 6.1.5 属性的高级使用 63 6.2 数组 64 6.2.1 声明数组 65 6.2.2 一维数组 65 6.2.3 多维数组 66 6.2.4 查询秩 68 6.2.5 锯齿状数组 68 6.3 使用索引器将对象当作数组对待 70 6.3.1 定义索引器 71 6.3.2 索引器示例程序 71 6.2.3 设计规则 73 6.4 本章小结 73 6.5 实战演练 73 第七章 接口与抽象 74 7.1 接口的应用 74 7.2 声明接口 75 7.3 实现接口 76 7.3.1 使用is来查询实现 78 7.3.2 使用as来查询实现 80 7.4 显示的接口成员名字限定 81 7.4.1 接口的名字隐藏 81 7.4.2 避免名字模糊性 83 7.5 接口和继承 86 7.6 合并接口 89 7.7 抽象的定义及使用 90 7.8 接口与抽象类的比较 91 7.9 本章小结 91 7.1实战演练 92 第八章 代表和事件处理器 93 8.1 将代表用作回调方法 93 8.2 把代表定义为静态成员 96 8.3 仅在需要时创建代表 97 8.4 代表构成 99 8.5 定义具有代表的事件 103 8.6 本章小结 106 8.7 实战演练 106

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值