C# 流程控制语句

本文介绍了C#中的goto语句、switch语句、for循环、while循环、do-while循环及其区别,以及continue、break和return关键字的用法。通过实例演示了如何使用这些结构解决实际问题,包括控制台打印、条件判断和循环遍历等。
摘要由CSDN通过智能技术生成

goto

注:上期练习题在文章最后

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

namespace _02_goto
{
    internal class Program
    {
        static void Main(string[] args)
        {

            //goto 可以控制代码的执行顺序
            //1.给代码合适的位置,打一个标记,标记的名字是自定义的,一般标记的位置比代码少一个缩进
          inputSex:
            Console.WriteLine("请输入性别");
            string sex =Console.ReadLine();
            if (sex=="男")
            {
                Console.WriteLine("爷们");

            }else if (sex == "女")
            {
                Console.WriteLine("不是爷们");
            }
            else
            {
                Console.WriteLine("输入错误,请重新输入");
                //2.使用goto 标记的名字,可以让代码重新回到标记的位置进行执行
                goto inputSex;
            }

            //一般使用goto进行内容的校验,并让用户重新输入,但是goto会造成代码的可读性变差
            //,所以尽量少用
        }
    }
}

switch

快捷键:switch + tab
switch 中文意思 开关

**用处:**适用于多个值进行判断,或者等值条件的判断

**执行过程:**根据switch括号里面的变量值,选择与之对应的case语句,如果没有case语句,则执行default后面的语句

格式:

  • switch (变量):变量,只要变量存在,即可进入条件语句
  • {}:代码块,与case的实例匹配的部分才能输入
  • case:值 实例,后面的值是和switch()里面的变量进行匹配
  • default:默认 和else相似,当case的实例 都不满足条件,会执行default

注意:

  1. break(中断,打断) 不能省略
  2. case后面的值可以无序,但不能重复
  3. 多个case可以共用一段代码
  4. default可要可不要(都匹配不上,就执行default里面的代码)
  5. case后面跟的具体的数据,要和switch()内的变量的值的类型完全一致

if和switch的异同点:

  • 相同点: 都可以用于分支判断
  • 不同点: if结构适用于某个变量处于某个连续区间的情况,switch结构只用于处理等值条件的判断
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _03_switch
{
    internal class Program
    {
        static void Main(string[] args)
        {

            //需求: 用户输入1  打印星期一  输入2 打印星期二  3 打印星期三..........

            int day = int.Parse(Console.ReadLine());

			//用if实现
            if (day==1)
            {
                Console.WriteLine("星期一");
            }else if (day==2)
            {
                Console.WriteLine("星期二");
            }else if (day==3)
            {
                Console.WriteLine("星期三");
            }....



			//用switch实现
            switch (day)
            {
                case 1:
                    Console.WriteLine("星期一");
                    break;
                case 2:
                    Console.WriteLine("星期二");
                    break;
                case 3:
                    Console.WriteLine("星期三");
                    break;
                case 4:
                    Console.WriteLine("星期四");
                    break;
                case 9:
                    Console.WriteLine("星期五");
                    break;
                case 6:
                    Console.WriteLine("星期六");
                    break;
                case 0:
                    Console.WriteLine("星期日");
                    break;
                default:
                    Console.WriteLine("输入有误");
                    break;

            }

            // 用户输入月份 打印季节
            // 气象划分法。在气象部门,通常以阳历3~5月为春季,6~8月为夏季,9~11月为秋季
            //12月~来年2月为冬季,并且常常把1、4、7、10月作为冬、春、夏、秋季的代表月份
            
            
            //这样写会导致语法臃肿
            int mouth = int.Parse(Console.ReadLine());
            switch (mouth)
            {
                case 3:
                    Console.WriteLine("春季");
                    break;
                case 4:
                    Console.WriteLine("春季");
                    break;
                case 5:
                    Console.WriteLine("春季");
                    break;
                case 6:
                    Console.WriteLine("夏季");
                    break;
                case 7:
                    Console.WriteLine("夏季");
                    break;
                case 8:
                    Console.WriteLine("夏季");
                    break;
            }



			//多个case可以共用一段代码
            int mouth = int.Parse(Console.ReadLine());
            switch (mouth)
            {
                case 3:
                case 4:
                case 5:
                    Console.WriteLine("春季");
                    break;
                case 6:
                case 7:
                case 8:
                    Console.WriteLine("夏季");
                    break;
                case 9:
                case 10:
                case 11:
                    Console.WriteLine("秋季");
                    break;

            }

        }
    }
}

循环结构

循环四要素:初始条件 判断条件 循环语句 迭代变量

for循环

语法:

   for循环语法格式:
         for(声明一个循环控制变量;循环执行的条件;循环控制变量修改){
             循环体(需要重复执行的代码块)
       }

执行顺序:
①先执行初始条件 int i = 0;(初始条件只执行一次)
②再执行判断条件 i < 5; 成立:执行③ 不成立:⑤
③执行{循环语句}
④执行迭代变量 i++,然后执行②
⑤退出for循环

注意点:
①初始条件可以写到for上边,但是第一个 ; 不能省略
②迭代变量可以写到循环语句的后面,但第二个 ; 不能省略
③for执行完,变量 i 的值为判断条件的值

注意死循环

一定要保证循环有终止条件(没有终止条件的循环,称之为死循环)

  • for(int i=0;i<5;i–){} 迭代变量使用不当造成死循环
  • for(int i=0;i<5;){} 没有迭代变量造成死循环
  • for(int i=0;i==i;i++){} 判断条件使用不当,造成死循环

单层for循环

     //循环结构:重复执行某段代码若干次
     //需求:在控制台打印5次"吴亦凡"
     Console.WriteLine("吴亦凡");
     Console.WriteLine("吴亦凡");
     Console.WriteLine("吴亦凡");
     Console.WriteLine("吴亦凡");
     Console.WriteLine("吴亦凡");


     //如上需求: 我们就可以使用for循环

     //for循环语法格式:
     //    for (声明一个循环控制变量; 循环执行的条件; 循环控制变量修改)
     //    {
     //        循环体(需要重复执行的代码块)
     //  }
     //循环四元素:初始条件 判断条件 循环语句 迭代变量

     //int i = 0; 初始条件,声明一个i,用于记录循环执行的次数(只有第一次循环的时候执行)
     //i < 5; 判断条件(循环继续执行的条件) 条件成立,则继续执行{}里面的代码块,条件不成立,就终止执行
     //{}循环语句:(循环体,需要重复执行的代码块)
     //i++ 迭代变量(累加语句)执行一次循环体,就会修改一次  i++  ====> i=i+1;


     for (int i = 0; i < 5; i++)
     {
         Console.WriteLine("搬砖");
     }



     int i = 0;
     for (; i < 3;)
     {
         Console.WriteLine(i);
         i++;
     }


for循环练习

  1. 控制台打印1-100之间的整数
  2. 打印10-1
  3. 打印1-100之间的偶数
  4. 求1 - 100所有数字的和
  5. 让用户输入一个100以内的数 打印1 - 100之间所有的数,用户输入的数除外
  6. 循环输入某同学结业考试的5门课成绩,并计算平均分

    //1.控制台打印1 - 100之间的整数

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

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

    //2.打印10 - 1

    for (int i = 10; i > 0; i--)
    {
        Console.WriteLine(i);
    }


    //3.打印1 - 100之间的偶数

    for (int i = 1; i < 101; i++)
    {
        if (i % 2 == 0)
        {
            Console.WriteLine(i);
        }

    }

    //打印1 - 100之间的奇数


    for (int i = 1; i < 101; i++)
    {
        if (i % 2 != 0)
        {
            Console.WriteLine(i);
        }

    }

    //4.求1 - 100所有数字的和;

    int sum = 0;
    for (int i = 1; i < 101; i++)
    {
        //sum = sum + i;
        sum += i;

    }
    Console.WriteLine(sum);


    //求1 - 100之间所有的偶数的和

    int sum = 0;
    for (int i = 1; i < 101; i++)
    {
        if (i % 2 == 0)
        {
            //sum = sum + i;
            sum += i;
        }

    }
    Console.WriteLine(sum);



    //5.让用户输入一个100以内的数 打印1 - 100之间所有的数,用户输入的数除外
    Console.WriteLine("请输入1-100之间的整数");
    int x = int.Parse(Console.ReadLine());

    for (int i = 1; i < 101; i++)
    {

        if (i != x)
        {
            Console.WriteLine(i);
        }

    }


    //6.循环输入某同学结业考试的5门课成绩,并计算平均分
    Console.WriteLine("请输入五次成绩");
    int sum = 0;
    for (int i = 1; i < 6; i++)
    {
        Console.WriteLine($"请输入第{i}次成绩");
        int num = int.Parse(Console.ReadLine());
        sum += num;
    }

    Console.WriteLine(sum / 5);


双层for循环

             //把内层循环看做是外层循环的循环体
            //外层循环执行一次,内层循环就执行全部


            for (int i = 0; i < 3; i++) {
                Console.WriteLine("内层循环开始");
                for (int j = 0; j < 3; j++)
                {
                    Console.WriteLine($"i=={i}-------j=={j}");
                }
                Console.WriteLine("内层循环结束");
            }


            /*
             * 总结:
             * 注意:多层循环的变量名不能重复,内层循环可以使用外层循环的变量
             * 但是外层循环不能使用内层循环的变量
             * 执行过程:外层循环执行一次,内层循环执行全部
             */

while循环

语法:

    while循环格式:
              while (布尔值或者布尔表达式)
               {
                   布尔值或者布尔表达式成立时执行的代码块(循环体)
               }
   //while循环初始化语句在while外面
            int j = 0;
            while (j<3) //j<3 判断语句 也就是while循环执行的条件,条件不满足则停止循环
            {
                //{} 除了迭代变量 之外都是循环体
                Console.WriteLine(j);
                j++;//迭代变量
            }

do-while


            int j = 10;
            while (j<10)
            {
               Console.WriteLine(j);
                j++;
            }        //因为j=10<10,所以while不会执行


            do
            {
             Console.WriteLine(j);
               j++;
            } while (j<10);//而do whlie则会执行一次

while和的区别

  • while执行流程:
    1. 判断循环执行的条件,若值为true,则执行循环体,改变初始变量(迭代变量)
    2. 重复执行第一步,直到循环条件的值为false,停止循环
  • do-while执行流程:
    1. 首先执行循环体,改变迭代变量
    2. 判断循环条件,若值为true,则执行循环体,改变初始变量(迭代变量),
    3. 依次重复,直到循环条件为fasle,停止循环

do-while 最少执行一次,while条件不成立的话,一次都不会执行

使用场景:

三个循环的使用场景:

  •        for      最常用的循环,用于循环的次数明确且固定
    
  •        while    循环的次数不固定,但是有明确的目标
    
  •        dowhile  和while相似,至少执行一次
    

while 循环练习

  1. 搬砖30次,每次搬砖2个,一共搬砖多少个
  2. 目标是搬砖500个,第一次搬砖1个,后面因为更加熟练,每次递增一倍,1、2、4、8、16…,搬砖500个需要多少次

//while循环版本

 //记录现在一共搬了多少个
 int sum = 0;
 //记录搬了多少次
 int count = 0;
 //记录当前一次能搬几个
 int number = 1;

 while (sum < 500)//条件为:小于500
 {
     //开始搬砖(总个数加上当前搬得个数)
     sum += number;
     //熟练度增加,每次递增一倍
      number = number * 2;
     number *= 2;
     count++;
 }

 Console.WriteLine(count);


//for循环版本
 int count = 0;
 int numer = 1;
 for (int sum = 0; sum < 500;)
 {
     count++;
     sum += numer;
     numer *= 2;
 }

 Console.WriteLine(count);


//for循环变形
 int sum = 0;
 for (int count = 0; count < 30; count++)
 {
     sum += 2;
 }
 Console.WriteLine(sum););

continue,break,return

continue:跳过本次循环,继续下次循环(作用:终止本次循环)

  for (int i = 0; i < 10; i++)
  {
      for (int j = 0; j < 10; j++)
      {
          if (j == 2 || j == 4)
          {
              continue;//跳出本次循环,继续下一次循环(作用:终止本次循环)
          }
          Console.WriteLine(j);
      }
  }     

break:终止当前循环(作用:跳出循环(一层))

 

return:跳出整个方法

  for (int i = 0; i < 10; i++)
  {
      for (int j = 0; j < 10; j++)
      {
          if (j == 2)
          {
              break;//终止当前循环(作用:跳出当前这一层循环)
          }
          Console.WriteLine(j);
      }
  }

总结

  //总结:   为什么要使用终止循环的关键字?
            //是为了达到性能优化的目的

            //比如:我们要找到某些数字中第一个满足条件的值,就可以在找到第一个的时候结束循环

            //找到925-1226中第一个能被3和5整数的值

            for (int i = 925; i <=1226; i++)
            {
                if (i % 3 == 0 && i % 5 == 0)
                {
                    Console.WriteLine(i);
                    break;
                }

            }

本期练习题

  1. int a = 3; int b = 5;实现交换a和b的值,如果不使用中间变量又该如何实现?
  2. 请键入一个年份 year 和月份 month ,请算出这个月有多少天?
    ps:闰月:非整百年能被4整除,整百年能被400整除。否则是平年(闰年2月29天 平年2月28天)
  3. 输出 1-100 中能被 3 整除的数
  4. 水仙花数(一个三位数,其各位数字立方和等于该数本身,如:153)
  5. 打印99乘法表

上期练习题答案

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

namespace _01_昨天作业
{
    internal class Program
    {
        static void Main(string[] args)
        {
            


            //1.从控制台输入一个数字,判断这个数字是否值奇数(单数); 偶数(双数)
            int x = int.Parse(Console.ReadLine());
            if (x % 2 == 0)
            {
                Console.WriteLine("偶数");
            }
            else
            {
                Console.WriteLine("奇数");
            }


            //2.输入24小时制的时间 0 - 24 如果超出“时间输入有误”
            //11 - “上午11点”   14 - “下午2点” 6点前是“凌晨”  晚上10点后是“深夜
            Console.WriteLine("请输入一个时间");
            int time = int.Parse(Console.ReadLine());
            if (time > 0 && time <= 24)
            {
                if (time > 0 && time <= 6)
                {
                    Console.WriteLine($"现在的时间是凌晨{time}点");
                }
                else if (time > 6 && time < 12)
                {
                    Console.WriteLine($"现在的时间是上午{time}点");
                }
                else if (time > 12 && time < 22)
                {
                    Console.WriteLine($"现在的时间是下午{time - 12}点");
                }
                else if (time > 22 && time < 24)
                {
                    Console.WriteLine($"现在的时间是深夜{time - 12}点");
                }
            }
            else
            {
                Console.WriteLine("时间输入有误");
            }


            //3 无答案,本题主要考察运算符和()优先级



            //4 输入一个圆的半径,求圆的面积(保留两位小数) 提示(Math.PI)
            string r = Console.ReadLine(); // 注意:控制台接收的数据都是string类型  10==>"10"
            double rd = double.Parse(r);
            double s = Math.PI * rd * rd;
            Console.WriteLine(s.ToString("F2"));
            // 表示四舍五入保留几位小数
            Console.WriteLine(Math.Round(s, 2));


            //5.模拟超市商品打折-if 条件判断语句
            //当商品满100元,则打9.5折,否则 按原价付款,最后输出商品应付金额
            Console.WriteLine("请输入商品价格");
            decimal price = decimal.Parse(Console.ReadLine());
            if (price >= 100)
            {
                //m/M表示这个数值是decimal类型的数值
                price *= 0.95m;
            }
            Console.WriteLine(price);


            //6. 输入一个四位数,求千位、百位、十位、个位数分别为?
            string numStr = Console.ReadLine(); //1234
            int num = int.Parse(numStr);

            //千位
            Console.WriteLine(num % 10000 / 1000);//1
            //百位
            Console.WriteLine(num % 1000 / 100);//2
            //十位
            Console.WriteLine(num % 100 / 10);//3
            //个位
            Console.WriteLine(num % 10 / 1);//4


            //7.随意发挥,太简单了,无答案


            //8.输入三个数,求最大数,最小数,中间数(必须使用三目运算符)
            int xx = int.Parse("10");
            int yy = int.Parse("5");
            int zz = int.Parse("15");
            int t;

            if (xx > yy)
            {
                t = xx; //t=10
                xx = yy; //x =5
                yy = t;// y = 10
            }

            if (xx > zz)
            {
                t = xx;
                xx = zz;
                zz = t;
            }

            if (yy > zz)
            {
                t = yy;
                yy = zz;
                zz = t;
            }

            //将排好的数据写入控制台
            Console.WriteLine("排好的数为:xx=" + xx + " yy=" + yy + " zz=" + zz + "");



            //9.昨天博客有




            //10.输入一个年份判断是否是闰年
            Console.WriteLine("请输入一个年份:");
            int year = int.Parse(Console.ReadLine());
            if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
            {
                Console.WriteLine("{0}是闰年。", year);
            }
            else
            {
                Console.WriteLine("{0}不是闰年。", year);
            }




          
            // 11. int a = 2, b = 3;
            //  int c = (a++) * (--b);
            //  求: a b c
            int a1 = 2, b1 = 3;

            int c = a1++;
            int d = --b1;
            Console.WriteLine(a1);
            Console.WriteLine(b1);
            //这题主要理解++ --放变量前后的运算顺序,
            //如b=a++;a先执行赋值给b,然后再自增1
            //而b=--a;则是先a自减1,然后再赋值给b
            Console.WriteLine(c * d);


            int cc = (a1++) * (--b1);

            Console.WriteLine(cc);



           
        }
    }
}

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值