CH04_选择结构


本章目标

  • 掌握if选择结构的使用
  • 掌握switch选择结构的使用
  • 掌握go to 语句的使用

if选择结构

基本if

1.单一条件的if语句是最简单的if语句,只有满足 if 语句中的条件才能执行相应的语句。

1
2
3
4
if(布尔表达式)
{
语句块;
}

这里语句块是指多条语句。当布尔表达式中的值为 True 时执行语句块中的内容,否则不执行。

2.二选一条件的 if 语句与前面介绍的三元运算符完成的效果是一样的,只是比三元运算符实现的过程灵活一些。

1
2
3
4
5
6
if(布尔表达式)
{
语句块 1;
}else{
语句块 2;
}

上面语句的执行过程是当 if 中的布尔表达式的结果为 True 时执行语句块 1,否则执行语句块 2。

案例1:输入年龄,然后判断是否是成年人。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入年龄:");
int age = int.Parse(Console.ReadLine());

if (age>=18)
{
Console.WriteLine("成年人");
}
else
{
Console.WriteLine("未成年人");
}

Console.ReadLine();
}
}

多重if

从上往下以此判断,只要有一个条件成立就执行其中的代码块,然后结束。

1
2
3
4
5
6
7
8
9
10
if(布尔表达式 1)
{
语句块 1;
}else if(布尔表达式 2){
语句块 2;
}
...
else{
语句块 n;
}

需要注意的是,在上面的语法中最后一个 else{} 语句是可以省略的。如果省略了 else{} 语句,那么多分支的 if 语句中如果没有布尔表达式的值为 True 的语句,则不会执行任何语句块。

案例2:输入分数,判断其等级。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入分数:");
int score = int.Parse(Console.ReadLine());

if (score >= 90)
{
Console.WriteLine("优秀");
}
else if (score>=80)
{
Console.WriteLine("良好");
}
else if (score >= 70)
{
Console.WriteLine("中等");
}
else if (score >= 60)
{
Console.WriteLine("及格");
}
else
{
Console.WriteLine("差");
}

Console.ReadLine();
}
}

嵌套if

在if中再嵌套一个if,外层条件成立,内层才有机会判断。

1
2
3
4
5
6
7
8
9
10
11
if(条件1)
{
if(条件2){
语句块 1;
}else{
语句块 2;
}

}else{
语句块 3;
}

案例3:跳高比赛决赛安排,初赛成绩高于150cm才能参加,然后根据性别分别安排在男子组和女子组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输初赛成绩(CM):");
double height = double.Parse(Console.ReadLine());
Console.WriteLine("请输入性别:");
char sex = char.Parse(Console.ReadLine());

if (height>=150)
{
if (sex=='男')
{
Console.WriteLine("请到男子组参加决赛!");
}
else
{
Console.WriteLine("请到女子组参加决赛!");
}
}
else
{
Console.WriteLine("很抱歉,你成绩不达标!");
}


Console.ReadLine();
}
}

switch选择结构

switch语法

1
2
3
4
5
6
7
8
9
10
11
12
13
switch(表达式)
{
case1:
语句块 1;
break;
case2:
语句块 2;
break;
...
default:
语句块 n;
break;
}

在这里,switch 语句中表达式的结果必须是整型、字符串类型、字符型、布尔型等数据类型。

如果 switch 语句中表达式的值与 case 后面的值相同,则执行相应的 case 后面的语句块。

如果所有的 case 语句与 switch 语句表达式的值都不相同,则执行 default 语句后面的值。

default 语句是可以省略的。需要注意的是,case 语句后面的值是不能重复的。

案例4:东风导弹,使命必达。根据不同数字,发往不同目的地。1:美国,2:日本,3:加拿大,4:澳大利亚。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入目的地编号(1-4):");
int num = int.Parse(Console.ReadLine());


switch (num)
{
case 1:
Console.WriteLine("美国");
break;
case 2:
Console.WriteLine("日本");
break;
case 3:
Console.WriteLine("加拿大");
break;
case 4:
Console.WriteLine("澳大利亚");
break;
default:
Console.WriteLine("无效");
break;
}


Console.ReadLine();
}

go to 语句

C# goto 语句用于直接在一个程序中转到程序中的标签指定的位置,标签实际上由标识符加上冒号构成。

1
2
3
4
goto Labell;
语句块 1;
Labell:
语句块 2;

如果要跳转到某一个标签指定的位置,直接使用 goto 加标签名即可。

在上面的语句中使用了 goto 语句后,语句的执行顺序发生了变化,即先执行语句块 2,再执行语句块 1。

此外,需要注意的是 goto 语句不能跳转到循环语句中,也不能跳出类的范围。

由于 goto 语句不便于程序的理解,因此 goto 语句并不常用。

案例1: 使用 goto 语句判断输入的用户名和密码是否正确,如果错误次数超过3次,则输出“用户名或密码错误次数过多!退出!”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Program
{
static void Main(string[] args)
{
int count = 1;
login:
Console.WriteLine("请输入用户名");
string username = Console.ReadLine();
Console.WriteLine("请输入密码");
string userpwd = Console.ReadLine();
if (username == "aaa" && userpwd == "123")
{
Console.WriteLine("登录成功");
}
else
{
count++;
if (count > 3)
{
Console.WriteLine("用户名或密码错误次数过多!退出!");
}
else
{
Console.WriteLine("用户名或密码错误");
goto login;//返回login标签处重新输入用户名密码
}
}
}
}

课后作业

1.使用switch结构实现:一三五学习,二四六休息,周日休息 。

2.使用嵌套选择结构实现计算机票价格。4-10月为淡季,其余月份为旺季。旺季中头等舱打9折,经济舱打6折;淡季中头等舱打5折,经济舱打4折。

3.使用go to 实现以下程序:某行注册用户时需要输入、姓名、性别、年龄,如果性别不满足要求或者年龄小于18岁,那么就需要重新输入,否则提示开户成功。