【C#学习笔记】【5】找出0-100以内的所有的能被3整除或者被5整除余2的数(一)(流程控制)
我们思考一下怎么写这个程序。流程如下:
解释一下上面的流程图。
首先声明变量a=0;
判断一下a是否在0到100;
如果不在,则结束,如果在的话,我们再判断一下a是否能被3整除或者被5整除余2;
如果上一步真,则输出a,并且执行i++,然后循环至第二步,如果上一步为假,那么直接执行i++;
直至程序结束。
以上的过程不是很难理解,多看几次就明白了。问题在于我们之前学的知识无法解决这里的判断或者循环问题。今天我们就来学流程控制。
判断或者选择(if esle)
先来介绍其语法格式,常见的有两种:
第一种:
if (这里写逻辑表达式) { 当上面逻辑表达式结果为真的时候,执行这里的代码 } else { 当上面逻辑表达式结果为假的时候,执行这里的代码 }
第二种:
if (这里写逻辑表达式1) { 当上面逻辑表达式1结果为真的时候,执行这里的代码 } if (这里写逻辑表达式2) { 当上面逻辑表达式2结果为真的时候,执行这里的代码 } ...... else { 当上面逻辑表达式结果全部为假的时候,执行这里的代码 }
当然,还有其他的变种,也就是灵活运用的结果。例如第一种的嵌套,还有就是只有if语句,省略了else语句。
下面我们写几个例子:
例1 给定一个数,判断是否是偶数还是奇数,并输出结果
这里我们先不通过键盘输入数,先写死到程序里,例如下面的程序:
int a = 7; if (a % 2 == 0) { Console.WriteLine("这个数是偶数"); } else { Console.WriteLine("这个数是奇数"); }
分析:给定这个数后,我们要先判断是不是偶数。(怎么判断呢,当然是除2取余数啦)我们把条件判断写在if后面的圆括号里面。如果是真的,那就执行if下面的花括号内的内容,也就是输出这个数是偶数,否则执行else部分,输出这个数是奇数(除了奇数不就是偶数么,莫非你还想说有小数?)
例2 给定一个数,判断能否被3整除,如果能,则输出可以被3整除,如果能被5整除,再输出可以被5整除,否则输出此数既不是3的倍数,也不是5的倍数
先来分析一下,这个题需要判断两次,第一次是3的倍数,第二次是5的倍数,很显然,需要if的第二种格式。代码如下:
int a = 7; if (a % 3 == 0) { Console.WriteLine("这个数是3的倍数"); } if (a % 5 == 0) { Console.WriteLine("这个数是5的倍数"); } else { Console.WriteLine("这个数是既不是3的倍数也不是5的倍数"); }
我想你写的和我的是一样的。
从上面两个例子看出来,选择或者判断流程不是很难,只要给定判断条件,就可以进行判断了。
思考下面的一个问题,学校里在进行成绩分级时通常这么做,如果你是优,则代表你是90-100的分数段,如果是良,则80-89,中70-79,及格60-69,不及格60一下,那么我们怎么用程序表达呢?
你是否想用第二种形式的呢?但是我觉得还是太麻烦,得写5个if,是否有简单的写法呢?先看我给出的程序:
string score = "中"; switch (score) { case "优": Console.WriteLine("你的成绩在90-100"); break; case "良": Console.WriteLine("你的成绩在80-89"); break; case "中": Console.WriteLine("你的成绩在70-79"); break; case "及格": Console.WriteLine("你的成绩在60-69"); break; case "不及格": Console.WriteLine("你的成绩在0-59"); break; default: Console.WriteLine("你给的等级不存在!"); break; }
哈哈,貌似也不简单。来吧,分析一下这个语法结构。(由于等级无法用整数变量表示,所以我用的字符串类型,string,string赋值时需要双引号,你还记得这点么?)
首先是witch关键字,后面有个括号,这个括号里不能放if里的那种条件表达式,这里只能是一个变量,而后面的花括号里,才要进行判断。
花括号里优三个关键字,case,break和default。case后面跟的是一个值,也就是上面变量的值,如果那个值等于这个,则执行后面的语句,然后紧跟break,跳出判断。
最后的default是在前面的值都无法匹配时执行的。当然,你可以省略此句。
所以switch的判断适合这种定值匹配的,也就是说变量的值是固定个数的,这就是和if的区别。
if和?:运算符的区别
还记得上节中的三元运算符找最大值得例子么,我们可以用if改写。这里有个结论,所有的三元运算符都可以用if改写,反之不成立。改写的代码如下:
int a = 2; int b = 3; int max; //max = a > b ? a : b;这是我们上节中的写法 if (a > b) { max = a; } else { max = b; }
今天的写法更清晰明了吧。但是三元运算符更简洁。至于选哪种,你自己决定吧。
本节的内容不多,但是难度大。主要是对程序运行过程的理解,和语法的记忆。循环下节中介绍。
总结:
- 判断选择的两种写法(if…else…)
- 定值判断(switch…case…)
- 三元运算符和if的相互转化
练习:
- a=5,b=4,c=7,用程序判断这三边是否可以组成三角形,如果可以则输出能组成三角形,如果不能,则输出不能组成三角形。(两边之和大于第三边,两边之差小于第三边)
- 已知点(3,-5),用程序判断其在直角坐标系的第几象限,并输出结果。
- a=5,b=4,c=7,找出最大值输出。
- 已知一元二次方程的系数为A=10,B=-3,C=4,如果方程有实数根,则求出结果,如果没有则输出无实数根。