switch
开发中:检测一个变量是不是符合某个条件,不符合用另一个值来检测。
eg:给某个同学的成绩打评语。

switch多分支语句:进行多种情况判断。
基本语法:switch关键字后跟表达式 case关键字 每个switch语句有多个case标签 每个case标签对应的值不一样,会根据值匹配执行相应的语句,每一个case标签后有一个break来退出当前switch语句。 表达式的类型只能是这四种类型 每个case后有:和break
识记红色三个关键地方

执行流程:有一个判断参数,根据判断参数去执行用哪个语句,如果符合某一个执行相应语句然后退出相应语句。
switch语句应用

使用switch时每个case标签都可以进行多条件判断。
cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace @switch
{
internal class Program
{
static void Main(string[] args)
{
//使用switch实现:根据银行的简称输出银行中文全称。
Console.WriteLine("请输入银行的简称:"); //输入提示
string str = Console.ReadLine();//使用字符串变量记录输入
switch (str) //switch语句进行判断 要判断的参数值
{
case "ICBC": //每个case标签下进行判断 执行相应语句
case "icbc"://注意:每一个case标签可以进行多个判断,如果输入是小写也会和大写一样匹配执行这条语句
//多条件是或的关系,或者匹配大写,或者匹配小写。也可以是多个。
Console.WriteLine("中国工商银行"); //执行相应语句 不管输入匹配是大写还是小写,都会匹配执行这条相应语句。
break; //每个case都要有braek用于退出当前语句
case "CBC": //每个case标签下进行判断 执行相应语句
Console.WriteLine("中国建设银行");
break; //每个都要有用于退出当前语句
case "ABC": //每个case标签下进行判断 执行相应语句
Console.WriteLine("中国农业银行");
break; //每个都要有用于退出当前语句
default: //以上标签都不满足用default标签编写 default标签不是必须的,switch里面可以省略default default:在不满足其它case标签情况下执行default标签里的语句
Console.WriteLine("输出银行简称错误"); //都不满足在default标签执行相应语句
break; //default标签也要有brrak退出
}
Console.ReadLine();
}
}
}
只要三个case标签满足其中一个就会执行下面的语句。 --哪个季节在哪个月
使用switch时每一个case标签都会进行多个条件的判断。
switch应用场合
选择各种角色; --遇到多条件选择用switch语句实现
switch使用需要注意的问题


1.使用switch语句时,常量表达式的值绝不可以是浮点类型! 枚举是自定义的类型

2.C#里面case或default标签中的break不可以省略。
C语言:想要执行case标签后再执行接下来的标签是可以把break省略。
switch与if...else if...else的区别
1.操作对象不同:if...else if...else主要是对关系表达式,逻辑表达式和布尔值进行判断。
switch主要是对常量值进行判断,常量值的类型可以是这几种中的一种。
遇到多分支选择情况,判断不是关系表达式或逻辑表达式就可以使用switch代替if...else if...else语句。 执行效率会更高。
练一练:模拟高考录取分数线查询
cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace @switch
{
internal class Program
{
static void Main(string[] args)
{
//用switch语句如何实现两种语句实现同一种功能:
//模拟高考录取分数线查询
Console.WriteLine("请输入要查询的录取分数线(比如民办类本科、艺术类本科、体育类本科、二本、一本)");
string str=Console.ReadLine(); //记录用户输入
switch(str)//switch判断变量的值
{
case "民办类本科":
Console.WriteLine("民办类本科的录取分数线是350");
break;
case "艺术类本科":
Console.WriteLine("艺术类本科的录取分数线是290");
break;
case "体育类本科":
Console.WriteLine("体育类本科的录取分数线是280");
break;
case "二本":
Console.WriteLine("二本的录取分数线是445");
break;
case "一本":
Console.WriteLine("一本的录取分数线是555");
break;
}
Console.ReadLine();
}
}
}
cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace @switch
{
internal class Program
{
static void Main(string[] args)
{
//用if...else if...else
Console.WriteLine("请输入要查询的录取分数线(比如民办类本科、艺术类本科、体育类本科、二本、一本)");
string str=Console.ReadLine(); //记录用户输入
if (str == "民办本科")
{
Console.WriteLine("民办类本科的录取分数线是350");
}
else if (str == "艺术类本科") //判断是不是其它的本科
{
Console.WriteLine("艺术类本科的录取分数线是290");
}
else if (str == "体育类本科") //判断是不是其它的本科
{
Console.WriteLine("体育类本科的录取分数线是280");
}
else if (str == "二本") //判断是不是其它的本科
{
Console.WriteLine("二本的录取分数线是445");
}
else if (str == "一本") //判断是不是其它的本科
{
Console.WriteLine("一本的录取分数线是555");
}
Console.ReadLine() ;
}
}
}
两个语句都能实现同样的功能,但用switch的时候是判断常量值,case后跟常量值。
if...else if...else 表达式里面需要一个关系表达式或逻辑表达式,判断值是不是与字符串相等,相等才执行下一个语句。
while循环语句
主要用来实现单行的循环结构。当满足某种条件情况下执行相应循环结构。
while循环简单执行流程:
语法格式:
while(表达式) //返回值是true/false值
{
语句
}
执行while循环的时候在表达式满足情况下会一直执行大括号中的语句。
执行流程:执行下来之后会首先判断表达式的真假值,真的话执行循环语句再返回去重新判断表达式的值(每执行一次循环都会判断一次表达式的值),如果为假直接执行循环外面的语句。
while循环应用

cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace while循环应用
{
internal class Program
{
static void Main(string[] args)
{
//使用while循环实现1到100的累加和。 有明显重复性和规律性 循环语句实现 需要有1个循环条件和两个变量 sum记录和初始值是0 i初始值是1(从1进行相加)
//进行第一次循环时会判断循环条件在1-100之间 1真执行sum+1操作 sum变1,i的值递增一个变2 2在1-100之间满足循环条件 1的值加2,i变3 都会执行sum+i操作,i的值递增1
//计算结果时i的值再递增1变101,101超出1-100范围循环条件变假不再执行循环操作
int i = 1;//定义两个初始条件从1开始计算和
int sum = 0;//定义一个sum初始值是0记录1-100累加和
while (i <= 100) //while循环中写判断条件 i小于等于10才会执行循环体中语句
{
sum=sum+i;//或写成sum+=i; //循环体中语句对sum执行加i操作
i++; //对i执行递增操作
}
Console.WriteLine("1到100的累加和:" + sum); //输出1-100累加和
Console.ReadLine();//定位控制台窗体
}
}
}
使用while循环需要注意的问题
1.while后的{}使用问题。
while循环体正常执行放到一对大括号内,如把1-100累加和修改成这样(把大括号去掉循环体语句还在编写)--无任何输出
大括号去掉后默认只执行while后的第一条语句,条件满足只执行第一条语句,第二条语句变成循环之外语句。
iNum放到循环体之外,默认是她的初始值,永远满足这个条件。形成死循环。
会把第一条语句作为循环体语句,会出现问题。 --不加{}
do...while和for循环一样 循环体如果是多条语句,需要用大括号括起来,如果不用大括号,则循环体只包含while语句后的第一条语句。
2.while死循环的问题
定义变量判断i<=2情况下一直输出这个值
没有对i进行循环体操作i的值一直保持不变,条件永远满足。执行中不会有任何输出结果,造成死循环。
修改:对i进行递增操作就行 i++ 用递增操作会出现F,执行完循环后执行后面语句。
通常:在循环体中对循环变量进行递增或递减操作。
这里i叫循环变量,while表达式里通过判断i的值进行循环操作这里对此进行递增操作。

特别说明:C#中的while与C++中的while区别

C#中while值只能是布尔值
do...while语句
注册新账号:防止手误都会提示输入新密码,如果两次密码不一致提示用户输入的密码有误请重新输入,用户重新输入密码让用户重新输入,实现功能让用户输入再执行判断。注册特点以下两点:
while循环循环内外部都要进行判断。重复代码使程序笨重。 do...while循环解决问题。
语法:
do
{
要执行语句 //语句至少执行一次
}
while(表达式); //T或F 分号不能省
首先执行循环语句,再判断表达式真假。
while(表达式); //判断完表达式后再执行循环语句。
while表达式一开始语句不满足一次都不执行。
do...while首先执行这个语句,然后进行表达式判断。
简单执行流程:首先执行循环语句再判断表达式真假,如果是真循环执行这个语句再来判断,如果是假跳出循环执行其它语句。
do...while循环应用
试一试:使用do...while循环实现1到100的累加和。
cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 循环_do__while
{
internal class Program
{
static void Main(string[] args)
{
//使用do...while循环实现1到100的累加和。
int i = 1;
int sum = 0;
do
{
sum += i; //对i进行递增操作
i++;
}
while (i <= 100);
//把条件判断放到循环体后面
Console.WriteLine("1到100的累加和:" + sum);
Console.ReadLine();
}
}
}
注意:不要忘记写;
while和do...while语句的区别

while循环执行几遍: iNum初始值是1, iNum小于1情况下才会执行循环体的语句,左边循环体语句一次都不会被执行。iNum初始值是1,1<1不满足执行0遍
右边: iNum初始值是1,初始完 iNum后会首先输出 iNum的值,然后再对 iNum执行++操作,最少执行一遍。执行完++操作后 iNum变成2,2小于1条件不满足,再过来不执行这个循环,do...while循环至少执行1遍
区别:while把判断条件放循环体前面,有可能一次都不执行循环体;do...while判断条件放到循环体后面,至少会执行一次循环体语句。
for循环
C#中非常常用的一种循环语句,非常灵活,可控性强,重点掌握。
语法格式:
for (表达式1; 表达式2; 表达式3) //三个表达式
{
语句
}
说明:
(1)表达式1通常用来初始化循环变量
(2)表达式2是一个关系表达式或逻辑表达式,用来作为判断条件
(3)表达式3通常用来对循环变量进行递增或递减操作,以便存在能够使循环结束的条件
(4)使用时表达式之间用分号连接,分号一定不能省略
基本执行流程:
表达式1用来初始化循环变量判断表达式2的真假,如果是真执行循环体中语句,再执行表达式3,表达式3对循环变量进行递增递减操作,执行完表达式3后再来判断表达式2的真假再循环执行,如果表达式2为假直接跳出for循环执行后面的语句。
for循环应用
使用for循环实现1到100的累加和。
cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace for循环应用
{
internal class Program
{
static void Main(string[] args)
{
//使用for循环实现1到100的累加和。
int i; //i的赋值操作给去掉在for循环第一个表达式里写
int sum = 0;
for(i=1;i<=100;i++)
{
sum+=i;
}
Console.WriteLine("1到100的累加和:" + sum);
Console.ReadLine();
}
}
}
使用for循环可能出现的一些问题
1.for循环后多加分号的错误。 多加;相当于for循环执行了100次空语句,sum+=i属于for循环体之外的语句,sum值等于现在i的值,输出101 分号相当于空语句,加分号变成一个空语句,在循环体之外语句。 
2.for循环变体--表达式可以省略。省略"表达式1"需要在for循环前面为循环变量赋初始值。表达式1后面的分号不能省略。


cs
using System.Threading.Tasks;
namespace for循环应用
{
internal class Program
{
static void Main(string[] args)
{
//使用for循环实现1到100的累加和。
int i=1;
int sum = 0;
for(; i<=100;i++)
{
sum+=i;
}
Console.WriteLine("1到100的累加和:" + sum);
Console.ReadLine();
//使用for循环省略"表达式1"的形式实现1到100的累加和。
}
}
}
for循环变体--表达式可以省略。省略"表达式2"
for(表达式1;; 表达式3)
{
语句
}
省略表达式2有可能造成死循环。

省略表达式3:表达式2后面;不能去掉。
用来对循环变量进行操作,以便能跳过跳出循环的条件。 没有循环变量递增操作,也有可能造成死循环。
一旦造成死循环就需要再循环体内有条件进行判断,从而跳出循环。
注:省略表达式2或省略表达式3都有可能造成死循环情况。
三个表达式都省略:相当于永远为真。
两个分号不能少,初始条件、条件判断和条件递增都没有了,会执行死循环。
巧用"死循环":在控制台窗体中循环输入数据时,可以使用"死循环"!
开发人员主动设置的死循环,为了能够输入数据。
cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace for循环应用
{
internal class Program
{
static void Main(string[] args)
{
//死循环演示:用for省略表达式情况
Console.WriteLine("请输入用户名:");
Console.ReadLine();
}
}
}
}
cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace for循环应用
{
internal class Program
{
static void Main(string[] args)
{
//死循环演示:用for省略表达式情况
//Console.WriteLine("请输入用户名:");
for (; ; )
{
Console.WriteLine("请输入用户名:");
Console.ReadLine();
}
}
}
}
有可能是逻辑错误造成的死循环,也有可能是程序设计者专门设置的死循环。
程序开发中尽量避免死循环产生。
for循环变体说明
无论使用for循环的哪种变体形式,for关键字后面的()中都必须保证有两个分号。
表达式1和表达式2后面的分号不能省略。
for循环中逗号的应用
表达式1和表达式3都可以使用,连接

表达式2使用逗号连接符表示不正确
表达式2判断两个条件是否同时满足使用逻辑运算符,表达式2不能用,连接。
foreach语句
使用foreach语句遍历数组
语法:
foreach(【数据类型】 【迭代变量名】 in 【集合表达式】) //数组就是一种集合表达式
{
语句
}
//定义字符串数组,想要遍历字符串数组输出它其中的元素就直接使用foreach语句
//在数组里面
//CWL 输出变量名
遍历数组操作:循环和foreach
跳转语句
转移语句又叫跳转语句。 如果遇到死循环使用转移语句跳出死循环。
C#中转移语句:break语句;continue语句;goto语句
转移语句主要用来提前结束循环
break

使用for循环变体时省略表达式2的变体形式,造成死循环。
break用于循环中主要是跳出循环使用,跟switch一个道理,break用于switch里面是跳出switch多分支语句,用于循环里面是跳出循环。
continue的使用
计算1-100以内的偶数和?
continue作用:忽略循环语句内忽略continue的代码继续下一次操作
cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security;
using System.Text;
using System.Threading.Tasks;
namespace continue的使用
{
internal class Program
{
static void Main(string[] args)
{
//2+4+6+8+......+100=?
int i; //定义int变量i
int sum = 0; //定义int变量sum记录初始值是0
for (i = 1; i <= 100; i++)//for循环变量中记录初始化操作记录i
{
if (i % 2 == 1)//计算100以内偶数和 遇到奇数跳过 遇到奇数用continue执行下一次循环
{
continue;//继续执行下一次循环 是继续下一次循环,不时执行相加操作
}
sum += i;//计算100以内的和
}
Console.WriteLine(sum);//直接输出sum值
Console.ReadLine();
}
}
}
continue说明识记
break和continue的区别

区别:break如果是假直接执行while后面的语句,不进入循环体。如果是真不进入while循环中语句判断表达式2的值,表达式2的值如果是假会继续执行下一次循环,如果是真用break直接跳出循环执行while循环后的语句。
对表达式1进行判断,如果是假执行while后循环语句;如果是真执行while后循环体然后判断表达式2的值,表达式2值是假执行循环体再回头判断,表达式2是真勇continue会直接开始下一次循环,不执行后面循环体语句。
最大区别:break跳出循环,continue直接开始新的循环。
break和continue可以直接用在if语句中吗? --不能会报错
break和continue用在循环中搭配if语句使用

goto语句的使用
goto语句是一种无条件跳转语句。
使用这种语句可以无条件使程序跳转到代码的任何一条语句。
常用语法: goto标签;
定义标签基本形式:标签名+冒号 Lable:
使用goto语句可以改变代码的顺序。
//使用goto语句实现1到100的累加。
cs
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Threading.Tasks;
namespace goto语句
{
internal class Program
{
static void Main(string[] args)
{
//使用goto语句实现1到100的累加。
int i = 0;
int sum = 0; //定义两个变量初始化是0
label:
i++; //i++操作i的值变1
sum += i;//执行相加操作 sum也变成1
if (i < 100) //中间进行内部循环,i小于100不成立时不进入goto语句
{
goto label; //i<100执行goto语句,goto语句跳转到label标签重复执行i++ sum+=i操作 再进行条件判断
}
Console.WriteLine(sum);//直接输出最后运算结果
Console.ReadLine();
}
}
}
goto使用说明:goto语句可以忽略当前程序的逻辑,直接使程序跳转到某一语句执行,有时非常方便,但是也正是由于goto语句的这种特性,在程序开发中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。 这里了解
return语句

循环嵌套使用

使用循环嵌套打印九九乘法表;;。
cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 循环嵌套
{
internal class Program
{
static void Main(string[] args)
{
//使用循环嵌套打印九九乘法表。
int iRow, iColumn; //定义行和列
for(iRow=1; iRow<10;iRow++) //初始化行
{
for(iColumn=1; iColumn <= iRow; iColumn++) //初始化1 列数小于等于行数
{
Console.Write("{0}*{1}={2} ",iColumn,iRow,iRow*iColumn);//输出每一行数据 占位符输出 0 1 2分别对应后面的行列 有对应参数
}
Console.WriteLine();//输出下一行会换行输出
}
Console.ReadLine();
}
}
}