CH04_选择结构
本章目标
- 掌握if选择结构的使用
- 掌握switch选择结构的使用
- 掌握go to 语句的使用
if选择结构
基本if
1.单一条件的if语句是最简单的if语句,只有满足 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(表达式) { case 值 1: 语句块 1; break; case 值 2: 语句块 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; } } } }
|
课后作业
1.使用switch结构实现:一三五学习,二四六休息,周日休息 。
2.使用嵌套选择结构实现计算机票价格。4-10月为淡季,其余月份为旺季。旺季中头等舱打9折,经济舱打6折;淡季中头等舱打5折,经济舱打4折。
3.使用go to 实现以下程序:某行注册用户时需要输入、姓名、性别、年龄,如果性别不满足要求或者年龄小于18岁,那么就需要重新输入,否则提示开户成功。