C#流程控制语句

C#流程控制

流程控制: 不管简单的程序还是复杂的程序,一般包含三种结构:顺序结构,选择结构,循环结构。 顺序结构:默认就是顺序结构,就是说程序自上而下依次按照顺序执行。 选择结构(分支结构):程序有条件(有选择)的去执行某些代码(单分支if 双分支if-else 多分支if-elseif-……-else switch-case) 循环结构:程序有条件的重复执行某些代码(for循环<foreach> while循环<do-while>

选择结构

if

注意语法结构:

  • 单分支 if

  • 双分支 if else

  • 多分支 if else if else if 适合条件为判断同一变量的不同区间

格式: 单分支:if+tab if(条件){成立:执行代码} 双分支:if(条件){成立:执行代码1}else{不成立:执行代码2}

单分支和双分支
/*
 * 1.单分支结构语法格式:
 * if(布尔值或者布尔表达式){
 *    if()里面的布尔值或者布尔表达式的结果为true的时候,执行这里面的代码
 * }
 */
if (123>11)
{
    Console.WriteLine("执行");
}
​
//需求:判断用户是否成年
​
int age = 12;
if (age > 18)
{
    Console.WriteLine("成年");
}
​
/*
 * 2.双分支结构语法格式:
 * if(布尔值或者布尔表达式){
 *    if()里面的布尔值或者布尔表达式的结果为true的时候,执行这里面的代码
 * }else{
 * 
 *    if()里面的布尔值或者布尔表达式的结果为false的时候,执行这里面的代码
 * }
 */
if (age > 18)
{
    Console.WriteLine("成年");
}else {
    Console.WriteLine("未成年");
}
多分支

格式: 多分支:if(条件){成立:执行代码1}elseif(条件){成立:执行代码2}……else{都不成立:执行代码n} 注意:1.判断条件是有递进关系 2.一旦一个分支执行了其他分支都不执行

    /*
     * 3.多分支结构语法格式:
     * if(布尔值或者布尔表达式){
     *    if()里面的布尔值或者布尔表达式的结果为true的时候,执行这里面的代码
     * }else if(布尔值或者布尔表达式){
     *    if()里面的布尔值或者布尔表达式的结果为true的时候,执行这里面的代码
     * }else if(布尔值或者布尔表达式){
     *    if()里面的布尔值或者布尔表达式的结果为true的时候,执行这里面的代码
     *    ....
     * }else{
     *   if()里面的布尔值或者布尔表达式的结果为false的时候,执行这里面的代码
     * }
     */
    //执行该过程:当某个条件语句成立,则执行后面的代码块,都不成立,则执行else后的代码块,
    //注意:当多个条件都成立的时候,执行最上面的代码块,当前面的if()满足条件执行之后,后面的代码块就不再执行了
​
​
    if (age<=12)
    {
        Console.WriteLine("儿童");
    }else if (age<=18)
    {
        Console.WriteLine("青少年");
    }else if (age <= 40)
    {
        Console.WriteLine("青年");
    }
    else if (age <= 50)
    {
        Console.WriteLine("壮年");
    }else 
    {
        Console.WriteLine("老年");
    }
分支嵌套
   //4. 分支嵌套
​
   //if(0>age<123) 错误 比较运算符不能连用的
   if (age>0&&age<134)
   {
       if (age <= 12)
       {
           Console.WriteLine("儿童");
       }
       else if (age <= 18)
       {
           Console.WriteLine("青少年");
       }
       else if (age <= 40)
       {
           Console.WriteLine("青年");
       }
       else if (age <= 50)
       {
           Console.WriteLine("壮年");
       }
       else
       {
           Console.WriteLine("老年");
       }
   }
   else
   {
       Console.WriteLine("输入的年龄不合法");
   }
​
多个if和ifelse的区别?
   int aa = 10;
   //if (aa>5)
   //{
   //    Console.WriteLine("大于5");
   //}
   //else if(aa>6)
   //{
   //    Console.WriteLine("大于6");
​
   //}
​
   if (aa > 5)
   {
       Console.WriteLine("大于5");
   }
   
   if (aa > 6)
   {
       Console.WriteLine("大于6");
​
   }
​
   //多个if和ifelse的区别:
   //多个if是所有的if都判断,条件成立都会执行
   //ifelse 是只要上面的满足条件,就不再对下面的elseif进行判断

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;
            }
​
​
​
​
​
​
        }
    }
}
​

switch

快捷键:switch + tab

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

执行过程:根据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 (day==1)
            //{
            //    Console.WriteLine("星期一");
            //}else if (day==2)
            //{
            //    Console.WriteLine("星期二");
            //}else if(day==3)
            //{
            //    Console.WriteLine("星期三");
            //}....
​
​
            switch (day) { 
                case 1:
                    Console.WriteLine("星期一");
                    break;
                case 2:
                    Console.WriteLine("星期二");
                    break;
                case 4:
                    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;
            //}
            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;
                    default:
                    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循环

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
​
namespace _04_循环结构
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 循环结构:重复执行某段代码若干次
​
            //需求:在控制台打印5次"吴亦凡"
​
            //Console.WriteLine("吴亦凡");
            //Console.WriteLine("吴亦凡");
            //Console.WriteLine("吴亦凡");
            //Console.WriteLine("吴亦凡");
            //Console.WriteLine("吴亦凡");
​
            //以上需求:我们可以就可以使用for循环
​
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("吴亦凡");
            }
​
​
            int j = 0;
            for (;j < 5; )
            {
                Console.WriteLine("罗志祥");
                j++;
            }
​
        }
    }
}
​

双层for循环

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
​
namespace _05_双层for循环
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //把内层循环看做是外层循环的循环体(需要重复执行的代码)
            //外层循环执行一次,内层循环就执行全部
            //外层循环带着内层循环跑
            for (int i = 0; i < 3; i++) {
               
                Console.WriteLine("内层循环开始");
                // Console.WriteLine("需要重复执行的代码");
                for (int j = 0; j < 3; j++)
                {
                    Console.WriteLine($"i=={i}------j=={j}");
                }
                Console.WriteLine("内存循环结束");
               
            }
​
​
            //Console.WriteLine("需要重复执行的代码");
            //Console.WriteLine("需要重复执行的代码");
            //Console.WriteLine("需要重复执行的代码");
            //for (int j = 0; j < 3; j++)
            //{
            //    Console.WriteLine("内层循环");
            //}
            //for (int j = 0; j < 3; j++)
            //{
            //    Console.WriteLine("内层循环");
            //}
            //for (int j = 0; j < 3; j++)
            //{
            //    Console.WriteLine("内层循环");
            //}
            //总结:
            //注意:多层循环的变量名不能重复,内层循环可以使用外层循环的变量,但是外层循环不能使用内存循环的变量
            //执行过程:外层循环执行一次,内层循环就执行全部
        }
    }
}
​

while循环

语法:

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

do-while

  int i= 10;
  //while (i<10)
  //{
  //    Console.WriteLine(i);
  //    i++;
  //}
​
  do
  {
      Console.WriteLine(i);
      i++;
  } while (i < 10);

while和的区别

  • while执行流程:

    1. 判断循环执行的条件,若值为true,则执行循环体,改变初始变量(迭代变量)

    2. 重复执行第一步,直到循环条件的值为false,停止循环

  • do-while执行流程:

    1. 首先执行循环体,改变迭代变量

    2. 判断循环条件,若值为true,则执行循环体,改变初始变量(迭代变量),

    3. 依次重复,直到循环条件为fasle,停止循环

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

使用场景:

三个循环的使用场景:

  • for:最常用的循环,用于循环的次数明确且固定

  • while:循环的次数不固定,但是有明确的目标

  • dowhile循环:和while相似,至少执行一次

循环控制: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:终止当前循环(作用:跳出循环(一层))

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

return:跳出整个方法

       for (int i = 0; i < 10; i++)
            {
                for (int j = 0; j < 10; j++)
                {
                    if (j == 2)
                    {
                        return;//跳出整个方法
                    }
                    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;
                }
​
            }
​

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值