C#中的语句有选择语句、循环语句和跳转语句

一.选择语句

选择语句又分为if else语句和switch case语句

1.if else语句

判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的。

csharp提供了以下类型的判断语句,if语句,if else语句 else if语句

if else 语法:1.执行语句0;2.判断条件:若为true,则执行语句1;若为false,则执行语句2; 3.执行语句3

语句0;
if( bool表达式)  //如果(条件)
{
    语句1;
}
eles         //否则
{
    语句2;
}
语句3;

else if 语句:判断条件1:若为true,则执行语句0;若为false,再判断条件2:若为true,则执行语句1;若为false,则执行语句2;

if (条件1)
{
    语句0;
}
else if (条件2)
{
    语句1;
}
else
{
    语句2;
}

注意事项

  • else可有可无。
  • 每个else总属于前面最近的if语句
  • 单行语句可以不写大括号

2. switch case语句

计算表达式并对照多个常数值分支到不同的代码块

语法:

switch(表达式)
{
    case 常数值1:
    //若干行语句
    break;
    case 常数值2:
    //若干行语句
    break;
    default:
    //若干行语句
    break;
}

注意事项

  • switch()中的变量可以是整形、string、bool、char、枚举或相应可以为null的类型,必须有一个定制。
  • 每个case标签后是常量表达式的值,不必连续也不必按特定顺序排列,但不能相同,否则会出现错误。
  • default标签可选,意思是其余的结果
  • break语句的作用是在case与case之间中断程序。

switch…case与if…else区别:

  • 都可以用来实现多路分支
  • if…else实现两路、三路分支比较方便
  • switch…case实现三路以上分支结构更清晰,代码可读性更强。
  • 因为case语句后边必须是定制,所以switch…case不适合做范围的判断

练习

用户在控制台中录入一个年份和月份,输出该月份的天数

using System;

namespace Practise
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine("请输入一个年份:");
            int year = int.Parse(Console.ReadLine());
            Console.WriteLine("请输入一个月份:");
            int month = int.Parse(Console.ReadLine());

            if (month >= 1 && month <= 12)
            {
                int days;
                switch (month)
                {
                    case 2:
                        //if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
                        //{
                        //    days = 29;
                        //}
                        //else
                        //{
                        //    days = 28;
                        //}
                        //三元表达式
                        days = year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ? 29 : 28;
                        break;
                    case 1:
                    case 3:
                    case 5:
                    case 7:
                    case 8:
                    case 10:
                    case 12:
                        days = 31;
                        break;
                    case 4:
                    case 6:
                    case 9:
                    case 11:
                        days = 30;
                        break;
                    default:
                        days = 0;
                        break;
                }

                Console.WriteLine($"{year}年的{month}有{days}天");
            }
            else
            {
                Console.WriteLine("月份输入错误");
            }
        }
    }

}

3. 代码块和作用域

  • 在程序中可以使用一对大括号框住一部分代码,被框住的代码区域称为代码块
  • 作用域可以理解为起作用的范围
  • 局部变量作用域:从声明开始,到所属}结束。

二.循环语句

1.循环结构

  • 重复执行同一组语句,直到满足指定的条件。

  • 循环的要素

    • 循环体(需要重复执行的语句)
    • 循环条件(重复执行的条件)

2.跳转语句

  • 用于将控制转移给另一端代码
  • 包括continue语句、break语句和return语句。

continue语句

  • 退出本次循环并执行下次循环
  • 常应用于for循环

break语句

  • 退出最近的循环体或switch语句
  • 常应用于while循环

3.for循环

一个for循环时一个允许您编写一个执行特定次数的循环的重复控制结构

语法

for(初始值;循环条件;增减变量)
{
    循环体;
}
  • 初始值会首先被执行,且只会执行一次。也可以不在这里写任何语句,只要一个分号出现即可。
  • 接下来会判断循环条件,如果为真,则执行循环体。如果为假,则不执行循环体,且控制流会跳转到紧接着for循环的吓一跳语句。
  • 执行完for循环体后,控制流会跳回到上面的增减变量。该语句允许更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
  • 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环体,然后增减变量,判断条件)。在条件变为假时,for循环终止。

示例:1到100之间的和

int sum =0;
for(int i=1;i<=100;i++)
{
    sum+=i;
}
Console.WriteLine(sum);

continue:跳出本次循环,继续下次循环

static void Main()
{
    int sum = 0;
    for (int i = 1; i <= 100; i++)
    {
        if (i % 3 != 0)
        {
            continue; //跳出本次循环,继续下次循环
        }
        sum += i;
    }
    Console.WriteLine(sum);
}

4.foreach循环

csharp也支持foreach循环,使用foreach循环可以迭代数组或者一个集合对象

以下实例有三个部分

  • 通过foreach循环输出整形数组中的元素
  • 通过for循环输出整形数组中的元素。
  • foreach循环设置数组元素的计算器。
class ForEachTest
{
    static void Main(string[] args)
    {
        int[] fibarray = new int[] { 0, 1, 1, 2, 3, 5, 8, 13 };
        foreach (int element in fibarray)
        {
            System.Console.WriteLine(element);
        }
        System.Console.WriteLine();


        // 类似 foreach 循环
        for (int i = 0; i < fibarray.Length; i++)
        {
            System.Console.WriteLine(fibarray[i]);
        }
        System.Console.WriteLine();


        // 设置集合中元素的计算器
        int count = 0;
        foreach (int element in fibarray)
        {
            count += 1;
            System.Console.WriteLine("Element #{0}: {1}", count, element);
        }
        System.Console.WriteLine("Number of elements in the array: {0}", count);
    }
}

5.while循环

先判断条件,只要给定的条件为真,csharp中的while循环语句会重复执行一个目标语句。

语法

while(条件)
{
    满足条件执行循环体;
}

练习

猜数字游戏,程序产生1-100间的随机整数,在控制台中,让用户重复猜测

static void Main()
{
    Random random = new Random();
    int number = random.Next(1, 101);
    int input = 0;
    int count = 0;
    while(true)
    {
        count++;
        Console.WriteLine("请输入:");
        input = int.Parse(Console.ReadLine());

        if (input > number)
            Console.WriteLine("大了");

        else if (input < number)
            Console.WriteLine("小了");
        else
        {
           Console.WriteLine($"终于猜对了,一共猜了{count}次"); 
           break;//退出循环体
        }


}

6.do…while循环

先做再判断条件。do…while循环实在循环的尾部检查它的条件。

do…while循环于while循环类似,但是do…while循环会确保至少执行一次循环。

语法:

do
{

}while(条件)

练习

猜数字游戏,程序产生1-100间的随机整数,在控制台中,让用户重复猜测

static void Main()
{
    Random random = new Random();
    int number = random.Next(1, 101);
    int input = 0;
    int count = 0;
    do
    {
        count++;
        Console.WriteLine("请输入:");
        input = int.Parse(Console.ReadLine());

        if (input > number)
            Console.WriteLine("大了");

        else if (input < number)
            Console.WriteLine("小了");
        else
            Console.WriteLine($"终于猜对了,一共猜了{count}次");


    }
    while (input != number);//输入错误

}

相关代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Day3
{
    class Program
    {
        //语句 :选择语句 循环语句 跳转语句
        static void Main1(string[] args)
        {
            // if else
            //备注:if可以单独存在,else不能单独存在,else永远是上面那个if的
            Console.WriteLine("请输入性别:");
            string sex = Console.ReadLine();
            //如果是男
            if (sex == "男")
            {
                Console.WriteLine("你好,先生!");
            }
            else if(sex=="女")//否则如果
            {
                Console.WriteLine("你好,女士!");
            }
            else
            {
                Console.WriteLine("性别未知");
            }

        }
        //练习1:让用户在控制台中录入一个成绩
        //根据成绩判断等级 优秀 良好 及格 不及格 成绩(0-100)
        static void Main2()
        {
            //1.获取数据
            Console.WriteLine("请输入成绩:");
            int score = int.Parse(Console.ReadLine());
            //2.逻辑处理
            string message;
            if (score >= 0 && score <= 100)
            {
                if (score >= 90)
                    message = "优秀";
                else if (score >= 80)
                    message = "良好";
                else if (score >= 60)
                    message = "及格";
                else
                    message = "不及格";
            }
            else
                message = "成绩输入有误";
            //3.显示结果
            Console.WriteLine(message);
        }
        //练习2:让用户在控制台中录入2个数字和1个运算符
        //根据运算符计算两个数字
        //结果为:xxxx 运算符输入有误
        static void Main3()
        {
            //1.获取数据
            Console.WriteLine("请输入第一数字");
            float num1 = float.Parse(Console.ReadLine());
            Console.WriteLine("请输入第二个数字");
            float num2 = float.Parse(Console.ReadLine());
            Console.WriteLine("请输入运算符");
            string ope = Console.ReadLine();

            //2.处理逻辑
            string message;
            if (ope == "+")
                message = string.Format("{0}+{1}的结果为{2}", num1, num2, num1 + num2);
            else if (ope == "-")
                message = string.Format("{0}-{1}的结果为{2}", num1, num2, num1 - num2);
            else if (ope == "*")
                message = string.Format("{0}*{1}的结果为{2}", num1, num2, num1 * num2);
            else if (ope == "/")
                message = string.Format("{0}/{1}的结果为{2}", num1, num2, num1 / num2);
            else
                message = "运算符输入有误!";

            //显示结果
            Console.WriteLine(message);


        }
        // switch case
        //备注:多路分支时思想简单,思路清晰
        static void Main4()
        {
            //1.获取数据
            Console.WriteLine("请输入第一数字");
            float num1 = float.Parse(Console.ReadLine());
            Console.WriteLine("请输入第二个数字");
            float num2 = float.Parse(Console.ReadLine());
            Console.WriteLine("请输入运算符");
            string ope = Console.ReadLine();

            //2.处理逻辑
            string message;
            switch (ope)
            {
                case "+":
                    message = string.Format("{0}+{1}的结果为{2}", num1, num2, num1 + num2);
                    break;
                case "-":
                    message = string.Format("{0}-{1}的结果为{2}", num1, num2, num1 - num2);
                    break;
                case "*":
                    message = string.Format("{0}*{1}的结果为{2}", num1, num2, num1 * num2);
                    break;
                case "/":
                    message = string.Format("{0}/{1}的结果为{2}", num1, num2, num1 / num2);
                    break;
                default:
                    message = "运算符输入有误!";
                    break;
            }

            //显示结果
            Console.WriteLine(message);


        }
        //练习:
        //用户在控制台中录入一个月份、年份
        //判断天数
        // 1 3 5 7 8 10 12 --> 31天
        // 4 6 9 11 -->30天
        // 2 --> 28(平年)  29(闰年)
        //闰年判断条件
        //年份能被4整除 但是不能被100整除
        // 能被400整除

        static void Main5()
        {
            //1.获取数据
            Console.WriteLine("请输入年份:");
            int year = int.Parse(Console.ReadLine());
            Console.WriteLine("请输入月份:");
            int month = int.Parse(Console.ReadLine());
            int day=0;
            //2.逻辑处理
            if(month>=1 && month <= 12)
            {
                switch (month)
                {
                    case 2:
                        day = year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ? 29 : 28;
                        break;
                    case 4:
                    case 6:
                    case 9:
                    case 11:
                        day = 30;
                        break;
                    default:
                        day = 31;
                        break;
                }
            }

            //3.显示结果
            Console.WriteLine("{0}年{1}月有{2}天",year,month,day);



        }
        //练习 计算个人所得税
        /*
         * 应缴所得税额 = 税前薪资总额-社会保险和住房公积金的个人缴纳部分(500) - 费用扣除标准(3500元)
         * 根据应纳税所得额对应以下税率及速算扣除数
         * 应缴纳所得额           税率(%)   速算扣除数(元)
         * 不超过1500元的            3       0
         * 1500-4500                 10      105
         * 4500-9000                20        555
         * 9000-35000               25        1005
         * 35000-55000              30        2755
         * 55000-80000              35        5505
         * 超过80000                45        13505
         * 
         * 个人所得税应缴纳税额 = 应缴纳所得税额*税率-速算扣除数
         * 如税前工资总额10000,应缴纳所得税额 = 10000-500 -3500 = 6000
         * 纳税额 = 6000*0.2-555=645

        */

        static void Main6()
        {
            //1.获取数据
            Console.WriteLine("请输入税前工资:");
            float salary = float.Parse(Console.ReadLine());

            //2.逻辑处理
            //获取应缴所得税额
            float taxPayable = salary - 500 - 3500;
            float tax;
            //获取纳税额
            if (taxPayable > 80000)
                tax = taxPayable * 0.45f - 13505f;
            else if (taxPayable > 55000)
                tax = taxPayable * 0.35f - 5505f;
            else if (taxPayable > 35000)
                tax = taxPayable * 0.3f - 2755;
            else if (taxPayable > 9000)
                tax = taxPayable * 0.25f - 1055f;
            else if (taxPayable > 4500)
                tax = taxPayable * 0.2f - 555;
            else if (taxPayable > 1500)
                tax = taxPayable * 0.1f - 105;
            else if (taxPayable > 0)
                tax = taxPayable * 0.03f;
            else
                tax = 0;

            //3.获取结果
            Console.WriteLine("纳税额为{0:c}", tax);
        }

        //循环语句
        //for 循环
        static void Main7()
        {
            /*     1        2->5      4->7
            for (初始值; 循环条件; 增减变量)
            {    3->6
                循环体
            }
            一句/段话,需要重复执行
            从?开始 到?结束 增减变量
            */
            //循环计数器
            //for (int i = 0; i < 4; i++)
            //{
            //    Console.WriteLine(i);
            //}

            //练习:一张纸0.01毫米
            //请计算:对折30次以后,厚度为?米

            float thickness = 0.01f;

            for (int i = 0; i < 30; i++)
            {
                thickness *= 2;
            }

            Console.WriteLine("一张纸对折30次以后的厚度为{0}米", thickness * 0.001);

            //1-100内的数字累加
            //1+2+3+4+....
            int sum = 0;
            for (int i = 1; i <= 100; i++) //执行100次
            {
                //if (i % 3 == 0)
                //{ 如果能被3整除 则累加
                //    sum += i;
                //}
                //if (i % 3 != 0)
                //{如果不能被3整除 则跳过本次循环 继续下次循环
                //    continue; 

                //}
                sum += i;

        }
            Console.WriteLine(sum);
        }

        //while循环
        static void Main8()
        {
            /*
            while (条件)
            {
                满足条件执行循环体
            }
            */

            int i = 0;
            while (i<5)
            {
                Console.WriteLine("老王");
                i++;

            }


            //练习:一个球从100米高度落下
            //每次弹回原高度的一半
            //计算:谈起落下次数(谈起的最小高度为0.01米)
            //      计算经过距离

            float height = 100;
            int count=0;
            float distance = height;
            //下次弹起高度大于最小弹起高度
            while (height/2>=0.01)
            {
                height /= 2;
                count++;
                distance += height * 2;

            }

            Console.WriteLine("总共弹起{0}次。",count);
            Console.WriteLine("总共经过距离为{0:f1}米",distance);
        }

        //do while
        static void Main9()
        {
            /*
            do
            {   
                循环体
            } while (条件);

            while循环 --> 先判断条件
            do while循环 --> 先做再判断
            */

            //猜数字
            //程序产生1--100之间的随机整数
            //在控制台中,让用户重复猜测
            // 大了  小了 总共猜了?次

            Random random = new Random();
            int number = random.Next(1, 101);
            int input ;
            int count = 0;

            Console.WriteLine("猜猜数字是几?");

            do
            {
                count++;
                input = int.Parse(Console.ReadLine());
                if (input > number)
                {
                    Console.WriteLine("大了");
                }
                else if (input < number)
                {
                    Console.WriteLine("小了");
                }
                else
                {
                    Console.WriteLine("哈哈,终于猜对了,一共猜了{0}次", count);
                }

            } while (input!=number);



        }

        //Break语句
        static void Main()
        {


            Random random = new Random();
            int number = random.Next(1, 101);
            int input;
            int count = 0;

            Console.WriteLine("猜猜数字是几?");

            while(true)
            {
                count++;
                input = int.Parse(Console.ReadLine());
                if (input > number)
                {
                    Console.WriteLine("大了");
                }
                else if (input < number)
                {
                    Console.WriteLine("小了");
                }
                else
                {
                    Console.WriteLine("哈哈,终于猜对了,一共猜了{0}次", count);
                    break;//跳出程序
                }

            } 

        }
    }
}

发表评论

邮箱地址不会被公开。 必填项已用*标注