在前面的文章中我们不难看出来,我们程序的执行顺序是从上到下顺序执行的,那么有时候我们需要程序在某个条件成立时,执行指定的代码片段,那么怎么样来控制这样流程呢?这个就是我们今天这篇文章所需要讨论的。那么开始吧!
一、if esle 语句
1.关系型运算符
说到分支语句必定会牵扯到条件,例如当满足一个条件的时候去执行指定的代码段,那么如何构建条件?这个时候我们就需要先了解一下运算符中的《关系型运算符》!请看下表:
看完表格后我们来介绍下什么是关系型运算符,关系型运算符就是对我们程序中的数据进行比较,当满足条件就返回一个为真的bool类型变量。注意:c#中的关系运算符只能返回true与false。
那么我们在来看看关系运算符之间的优先级,假如我们将关系运算符分为两个级别的优先级为:一级(高优先级)二级(低优先级)
那么一级的有: < , > , <= , >=
二级的有: == , !=
由此看来当多个关系运算符出现在表达式中时,程序会根据优先级级别来确定先比较哪一部分!
请看如下程序:
1
2
3
4
|
if (10 > 5 == 10 < 5) { }
//程序判断步骤: 因为运算符 > , < 的优先级高于 ==
//那么程序解析如下 if([10大于5返回true]->true == [10不小于5返回false]->false)
//那么下一步解析如下 if(true == false) [因为true 不等于false ]所以最终表达式返回false条件不成立
|
2.if、else
了解完关系运算符后我们来看看c#控制程序流程的语句if、else,if、else的意思就是如果、那么。从字面意思我们可以看出来这组语句可以用来帮助我们判断程序中的逻辑。例如 如果 a > b 的话,在屏幕打印a+ b的和,那么(那么的意思就是a > b不成立的时候)。我们还是来看个例子吧!
假如:需要设计一个程序来让用户输入两个数字平且计算两个数字的和,当和大于10的时候在屏幕中打印“a + b的和大于10” 否则我们打印 “a + b 的和小于10”!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
console.write( "请输入a的值:" );
int a = convert.toint32(console.readline());
console.write( "请输入b的值:" );
int b = convert.toint32(console.readline());
//判断a + b 的和是否大于10
if (a + b > 10) //注意算数运算符的优先级高于关系运算符所以表达式先计算a+b 后判断是否大于10
{
//如果大于10执行这里
console.writeline( "a + b 的和大于10" );
}
else
{
//否则执行这里
console.writeline( "a + b 的和小于10" );
}
|
好的!那么我们来分析一下,前面的代码就不说了相信大家都可以看懂,我们就从第7行开始看,这时假设用户已经数据了数据a为6 、b为5!
第7行if语句的表达式中根据运算符优先级先计算a + b的和为11.
紧接着判断11是否大于10 (11 > 10),11明显大于10 所以表示返回true当表达式返回true就执行if下面{}中的代码段, 所以程序会输出 “a + b 的和大于10”
如果用户数输入a = 5 、b=3 那么和不大于10 程序自然而然也就输出“a + b 的和小于10”
以下是两种情况的输出结果:
3.条件运算符
看完了c#基本的分支语句之后我们可能会想到,当我一次判断中出现多个条件时应该如何处理?例如条件为:当姓名为王波洋并且年龄为24时,这种条件我们应该如何表示?这时条件运算符又闪亮登场啦。当有了条件运算符时构建这种多条件的表达式就轻松了许多,那么我们来看看c#都有哪些条件运算符:
还是用一个例子带过,需求如下:用户输入年龄,当年龄在20 30中间显示“你很年轻”, 否则就显示 “你的年龄不满足我的要求”,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
console.write( "请输入您的年龄:" );
int age = convert.toint32(console.readline());
//判断年龄是否大于20 在判断年龄是否小于30
//随后在进行逻辑运算
if (age > 20 && age < 30) //注意关系运算符的优先级高于逻辑运算符所以表达式先判断age >20 与 age < 30 后进行逻辑与
{
//如果年龄大于20小于30执行这里
console.writeline( "你很年轻" );
}
else
{
//否则执行这里
console.writeline( "你的年龄不满足我的要求" );
}
|
继续分析:从第6行开始看:
1. 关系运算符优先级高于逻辑运算符。那么先判断 age 是否大于 20 和 age 是否小于 30,假设此时age = 25,那么(age > 20) == true 、(age < 30) == true
2.此时表示为if(true && true),根据上面表格我们可以知道,逻辑与在两边都为true时返回true所以表达式成立
3.输出结果 "你很年轻" 当age = 35时输出结果是"你的年龄不满足我的要求"
二、switch case语句
了解万if、esle后我们来看c#提供的另一种分支语句switch、case,它是一种将条件表达式预定义好的一种分支结构。例如设计一个点餐程序,我们的菜单有 1.汉堡 2.牛排 3.披萨 ,我们需要当用户输入三个食品的序号来为可以提供食物。那么使用switch、case分支语句的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
console.writeline("/**********************************/");
console.writeline("本店提供:1.汉堡 2.牛排 3.披萨");
console.write("选择需要的食物:");
string num = console.readline();
//判断num
switch (num)
{
case "1"://当输入的为1时执行这里case与下面最近的break之间的代码
console.writeline("您点的汉堡请慢用");
break;
case "2"://当输入的为2时执行这里case与下面最近的break之间的代码
console.writeline("您点的牛排请慢用");
break;
case "3"://当输入的为3时执行这里case与下面最近的break之间的代码
console.writeline("您点的披萨请慢用");
break;
default: //当输入的值case中未声明时执行这里default与下面最近的break之间的代码
console.writeline("本店无您所需的食品");
break;
}
|
那么我们继续来分析一下,搜先来看switch 与 case的语法,当switch后面括号中的值与case中定义的值一致时执行对应case中的代码到碰见break为止。default的意思是当switch后面括号中的值未能与case中的值匹配上时,执行default中的代码到碰见break为止。那么由此分析得出:
1.当用户输入1时代表选择的汉堡,switch(1)
2.在case中寻找是否有1,寻找到case "1" 执行case "1"中的代码到碰见break为止
3.打印"您点的汉堡请慢用" 当用户输入的值在case中为定义时例如5,那么程序必然输出"本店无您所需食品"。
运行结果如下:
本章介绍了c#的流程控制语句,学习重点在对条件判断语句、循环语句、循环控制语句的理解和掌握,并熟悉使用对象控制语句。本章的难点在于对这些流程控制语句的灵活应用和某些流程控制语句间区别的理解。