C#系列五《程序的分支》
从前面的文章中我们不难看出来,我们程序的执行顺序是从上到下顺序执行的,那么有时候我们需要程序在某个条件成立时,执行指定的代码片段,那么怎么样来控制这样流程呢?这个就是我们今天这篇文章所需要讨论的。那么开始吧!
一 if、esle 语句
1.关系型运算符
说到分支语句必定会牵扯到条件,例如当满足一个条件的时候去执行指定的代码段,那么如何构建条件?这个时候我们就需要先了解一下运算符中的《关系型运算符》!请看下表:
运算符名称 |
C#运算符号 |
示例 |
描述 |
相等运算符 |
== |
if(10 == 10) |
判断10是否等于10 条件成立返回true(真) |
不等运算符 |
!= |
if(10!=10) |
判断10是否不等于10 条件不成立返回false(假) |
小于运算符 |
< |
if(5<20) |
判断5是否小于20条件成立 返回true |
大于运算符 |
> |
if(10>5) |
判断10是否大于5 条件成立返回true |
小于等于运算符 |
<= |
if(5>=5) |
判断5是否大于等于5 条件成立返回true |
大于等于运算符 |
>= |
if(5<=5) |
判断10是否小于等于5 条件成立返回true |
看完表格后我们来介绍下什么是关系型运算符,关系型运算符就是对我们程序中的数据进行比较,当满足条件就返回一个为真的Bool类型变量。注意:C#中的关系运算符只能返回true与false。
那么我们在来看看关系运算符之间的优先级,假如我们将关系运算符分为两个级别的优先级为:一级(高优先级)二级(低优先级)
那么一级的有: < , > , <= , >=
二级的有: == , !=
由此看来当多个关系运算符出现在表达式中时,程序会根据优先级级别来确定先比较哪一部分!
请看如下程序:
2 //程序判断步骤: 因为运算符 > , < 的优先级高于 ==
3 //那么程序解析如下 if([10大于5返回true]->true == [10不小于5返回false]->false)
4 //那么下一步解析如下 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”!
2 int a = Convert.ToInt32(Console.ReadLine());
3 Console.Write("请输入b的值:");
4 int b = Convert.ToInt32(Console.ReadLine());
5
6 //判断a + b 的和是否大于10
7 if (a + b > 10) //注意算数运算符的优先级高于关系运算符所以表达式先计算a+b 后判断是否大于10
8 {
9 //如果大于10执行这里
10 Console.WriteLine("a + b 的和大于10");
11 }
12 else
13 {
14 //否则执行这里
15 Console.WriteLine("a + b 的和小于10");
16 }
好的那么我们来分析一下,前面的代码就不说了相信大家都可以看懂,我们就从第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#都有哪些条件运算符:
运算符名称 |
C#运算符号 |
示例 |
描述 |
条件与运算符 |
&& |
true && true |
左边与右边表达式都为true时返回true |
条件或运算符 |
|| |
true || false |
左边与右边表达式有一个为true时返回true |
条件非运算符 |
! |
!false |
去反 表达式为true时返回false 表达式为false时返回true |
还是用一个例子带过,需求如下:用户输入年龄,当年龄在20 30中间显示“你很年轻”, 否则就显示 “你的年龄不满足我的要求”,代码如下:
2 int age = Convert.ToInt32(Console.ReadLine());
3
4 //判断年龄是否大于20 在判断年龄是否小于30
5 //随后在进行逻辑运算
6 if (age > 20 && age < 30) //注意关系运算符的优先级高于逻辑运算符所以表达式先判断age >20 与 age < 30 后进行逻辑与
7 {
8 //如果年龄大于20小于30执行这里
9 Console.WriteLine("你很年轻");
10 }
11 else
12 {
13 //否则执行这里
14 Console.WriteLine("你的年龄不满足我的要求");
15 }
继续分析:从第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分支语句的代码如下:
2 Console.WriteLine("本店提供:1.汉堡 2.牛排 3.披萨");
3 Console.Write("选择需要的食物:");
4 string num = Console.ReadLine();
5
6 //判断num
7 switch (num)
8 {
9 case "1"://当输入的为1时执行这里case与下面最近的break之间的代码
10 Console.WriteLine("您点的汉堡请慢用");
11 break;
12 case "2"://当输入的为2时执行这里case与下面最近的break之间的代码
13 Console.WriteLine("您点的牛排请慢用");
14 break;
15 case "3"://当输入的为3时执行这里case与下面最近的break之间的代码
16 Console.WriteLine("您点的披萨请慢用");
17 break;
18 default: //当输入的值case中未声明时执行这里default与下面最近的break之间的代码
19 Console.WriteLine("本店无您所需的食品");
20 break;
21 }
那么我们继续来分析一下,搜先来看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#系列五《多样化的程序分支》
转载于:https://www.cnblogs.com/doubleliang/archive/2011/06/18/2084030.html
C#系列五《程序的分支》相关推荐
- Linux学习系列五:Shell命令脚本的基本语法
这个系列的Linux教程主要参考刘遄老师的<Linux就该这么学>.用的系统是RHEL8,如果遇见一些命令出现问题,请首先检查自己的系统是否一致,如果不一致,可网上查一下系统间某些命令之间 ...
- Silverlight Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)
原文:Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations) 正如你所看到的,Blend是一个非常强大的节约时间的设计工具,在Bl ...
- IOS开发系列--IOS程序开发概览
IOS开发系列--IOS程序开发概览 2014-08-04 19:42 by KenshinCui, 9983 阅读, 51 评论, 收藏, 编辑 概览 终于到了真正接触IOS应用程序的时刻了,之前我 ...
- 智能路由器-OpenWRT 系列五 (NAS-SMB家庭共享)
NAS是我觉得家里必不可少的一台设备,NAS 全称 Network Attached Storage,即网络附加存储服务器,它通过自身的操作系统和 SMB/NFS/CIFS/FTP 等多种通信协议来给 ...
- 数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案...
为什么80%的码农都做不了架构师?>>> 版权声明:本文由本人撰写并发表于2012年9月份的<程序员>杂志,原文题目<一种支持自由规划的Sharding扩容方 ...
- JAVA面试常考系列五
转载自 JAVA面试常考系列五 题目一 串行(serial)收集器和吞吐量(throughput)收集器的区别是什么? 吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等规模和大规模数据的应用程序 ...
- Docker系列五~docker安装php-fpm
Docker系列五 docker安装php-fpm 访问PHP镜像库地址: https://hub.docker.com/_/php?tab=tags 选择合适的版本 php-fpm镜像主要是提供ph ...
- WCF编程系列(五)元数据
WCF编程系列(五)元数据 示例一中我们使用了scvutil命令自动生成了服务的客户端代理类: svcutil http://localhost:8000/?wsdl /o:FirstServiceC ...
- ONNX系列五 --- 在C#中使用可移植的ONNX AI模型
目录 安装和导入ONNX运行时 载入ONNX模型 使用ONNX运行时进行预测 摘要和后续步骤 参考文献 下载源547.1 KB 系列文章列表如下: ONNX系列一 --- 带有ONNX的便携式神经网络 ...
最新文章
- 利用人类神经网络进行蛋白质设计
- Applese 走方格
- memset()、memcpy()、memcmp()的使用方法
- 【快速入眠】高效睡眠 - 把失眠踩在脚下
- 《Approximation Capabilities of Multilayer Feedforward Networks》的学习笔记
- 专门针对苹果 M1 芯片的首款恶意软件已现身
- Windows系统中搭建Python编译环境
- Mac升级macOS Big Sur之前如何优化并增加内存空间?
- 【编程题目】对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一...
- ColorBlinder(我是色盲)
- python压缩视频_如何压缩视频大小?
- springboot+基于JavaWEB学生课程考试系统 毕业设计-附源码171548
- 浏览器兼容性问题和解决方案
- 什么叫单模光纤_单模光纤是什么?单模光纤有哪些分类?
- list筛选数据 python_「每日一练」巧用python对列表进行筛选
- 1380Problem C:zyf的A+B问题
- Python爬虫之二手房
- android toast 自定义view,分享Android中Toast的自定义使用
- 不知道怎么开发VR游戏?Unity5.3官方VR教程重磅登场-系列3 VR中的交互方式
- 小米8 twrp recovery_小米max3一键刷入TWRP recovery 刷机教程
热门文章
- hashicorp/consul
- 2014年06月30日
- tcp 服务端如何判断客户端断开连接
- 我的世界服务器无限装备指令2020,我的世界区域保护指令_我的世界区域保护指令除了自己手机版刷屏2020_攻略...
- oracle客户端安装后,oracle客户端安装
- android 输入模糊匹配_Android 模糊搜索rawquery bind or column index out of range:
- webug3.0下载环境搭建使用
- java filereader blob_如何从javascript发送音频blob到java spring服务...
- java MySQL mq_蚂蚁社招Java岗面试分享(MySQL+RabbitMQ+Spring Boot)
- python性能分析工具模块_python——关于Python Profilers性能分析器