【C#学习笔记】【5】找出0-100以内的所有的能被3整除或者被5整除余2的数(一)(流程控制)

我们思考一下怎么写这个程序。流程如下:

Sample Flowchart Template (1)

解释一下上面的流程图。

首先声明变量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;
}

今天的写法更清晰明了吧。但是三元运算符更简洁。至于选哪种,你自己决定吧。

本节的内容不多,但是难度大。主要是对程序运行过程的理解,和语法的记忆。循环下节中介绍。

总结:

  1. 判断选择的两种写法(if…else…)
  2. 定值判断(switch…case…)
  3. 三元运算符和if的相互转化

练习:

  1. a=5,b=4,c=7,用程序判断这三边是否可以组成三角形,如果可以则输出能组成三角形,如果不能,则输出不能组成三角形。(两边之和大于第三边,两边之差小于第三边)
  2. 已知点(3,-5),用程序判断其在直角坐标系的第几象限,并输出结果。
  3. a=5,b=4,c=7,找出最大值输出。
  4. 已知一元二次方程的系数为A=10,B=-3,C=4,如果方程有实数根,则求出结果,如果没有则输出无实数根。
posted @ 2015-07-17 15:56  鹏哥,一个业余爱好者  阅读(4671)  评论(0编辑  收藏  举报