网站备案能查到什么东西,wordpress编辑器自定义按钮,礼品网站实例,办公管理软件定制第6章 选择结构程序设计
顺序结构程序设计最简单#xff0c;但通常无法解决生活中的选择性问题。选择结构程序设计需要用到一些条件判断语句#xff0c;可实现的程序功能更加复杂#xff0c;程序的逻辑性与灵活性也更加强大。 本章致力于使读者掌握使用if语句进行条件判断的…第6章 选择结构程序设计
顺序结构程序设计最简单但通常无法解决生活中的选择性问题。选择结构程序设计需要用到一些条件判断语句可实现的程序功能更加复杂程序的逻辑性与灵活性也更加强大。 本章致力于使读者掌握使用if语句进行条件判断的方法并掌握switch语句的使用方式。 本章的知识架构及重难点如下
6.1 if语句
日常生活中为了使交通畅通有序一般会在路口设立交通信号灯。信号灯为绿色时车辆可以行驶通过信号灯为红色时车辆就要停止行驶。可见信号灯给出了信号人们通过不同的信号进行判断然后根据判断的结果进行相应的操作。 在C语言程序中要想完成这样的判断操作利用的就是if语句。if语句的功能就像路口的信号灯一样通过判断不同的条件决定是否进行操作。 程序开发中会遇到许多类似于红绿灯这样的“决策”可将其简化成对某个“条件”的检验进而转换为判断某个表达式的值是真还是假最后根据真假情况选择性地执行后续的操作。除了没有在何返回值的函数和返回无法判断真假的结构函数几乎所有表达式的返回值都可以判断真假。
6.2 if语句的基本形式
if语句中首先判断表达式的值然后根据该值的真假情况决定后续程序流程。表达式的值不等于0就表示为真否则就是假值。if语句有if、if…else和else if 3种形式下面介绍每种形式的具体使用方式。
6.2.1 if语句形式
if语句的一般形式如下
if(表达式语句其中括号中的表达式就是要进行判断的条件语句则是要执行的对应操作。如果if判断括号中的表达式为真非0就执行后面的语句如果为假0则不执行后面的语句。例如下面的代码
if(iNum)printf(The truevalue);上述代码中如果变量iNum的值为真则执行后面的printf输入语句如果变量iNum的值为假则不执行后面的printf语句。 用if语句解决红绿灯问题时可以约定信号灯为1表示绿灯则判断代码为
if(iSignal1) printf(the Signal Light is %d:,iSignal);上述代码中首先判断表达式”iSignal1是否成立如果条件成立那么判断结果是真值执行后面的输出语句如果条件不成立那么判断结果为假值不执行后面的输出语句。 前面两处示例代码中if后的执行部分都只有一条语句。如果有两条语句又该怎么办呢这时可以使用大括号使之成为语句块。例如
ifCiSignal1)
{printf(the Signal Light is %d:\n,iSignal);printf(Cars can run);
}将执行的语句都放在大括号中这样当if语句判断条件为真时语句块内的内容将会全部被执行。使用这种方式的好处是可以规范、清晰地表达出if语句所包含的范围。建议大家在使用if语句时都使用大括号将执行语句包括在内。
误区警示
if语句的括号后一定不要加英文分号否则将编译报错。例如
if(i100);
{sumi5000;printf(%d\n,sum);}如果已经报错可根据错误提示找到差错并修改代码。选择结构处理问题一定要把条件描述清楚例如下面的语句是错误的。if(i/60){...}if语句的执行流程图如图6.1所示。 【例6.1】使用if语句模拟打卡签到 模拟此场景一位职工早上上班打卡她的工位号是13密码是111,输入正确门禁卡会出现“谢谢已签到”的字样。 在本实例中为了模拟打卡签到要使用if语句判断工位号和密码。如果工位号是13同时密码是111则通过printf函数提示“谢谢已签到”。 1为了模拟打卡签到要根据工位号和密码情况进行判断这样就需要两个变量分别表示工位号和密码。在程序代码中定义变量loc表示工位号ser表示密码。 2输出提示信息提醒用户输入loc、ser变量的值。此时用键盘输入“13111”表示工位号是13密码是111。 3使用if语句判断如果为真则表示签到成功如果为假则表示签到不成功。因为输入的变量loc的值为13ser的值是111表达式loc13ser111的条件成立因此判断的结果为真值从而执行if语句后面大括号中的语句。 运行程序显示效果如上图所示。 if语句可以多次使用使得程序能根据不同的分支条件给出相应的操作。例如在例6.1中虽然使用if语句对输入的loc、ser变量进行了判断但是只给出了判断正确也就是loc等于13、ser等于111时执行的操作并没有给出判断错误时对应的操作。为了保证在用户输入错误的工位号、密码时程序也能做出反应需要再使用一次if语句。现在对例6.1进行完善。 【例6.2】完善模拟打卡签到 例6.1仅对打卡成功情况做出了相应操作为进一步完善打卡签到失败时的操作在程序中再添加一次if语句对打卡签到失败的情况进行判断并且在条件成立时给出相应操作。 1在例6.1的基础上进行修改完善程序的功能。在代码中添加一个if判断语句用来表示当loc!13ser!111时要进行的相应操作。 2从程序的开始处来分析整个程序的运行过程。使用scanf函数输入数据这次用户输入的是“12、123”,表示工位号是12密码是123。 3程序继续执行第一个if语句判断loc13ser111是否为真如果判断的结果为真则说明签到成功。因为loc的值是 12ser的值是123所以判断的结果为假不会执行第一个printf语句中的内容。 4接下来是新添加的if语句在其中判断loc!13ser!111是否为真如果判断成立为真则表示签到不成功。因为输入的值为12、123所以loc!13ser!111条件成立,执行第二个printf语句内容。 运行程序显示效果如上图所示。
警示刚开始编程在程序中使用if语句时常常会将下面的两个判断弄混
if(value){...} /*判断变量值是否为真*/
if(value0){...} /*判断表达式的值是否为真*/这两行代码中都有value变量value值虽然相同但是判断的结果却不同。第1行代码判断的是value的值是否为真第2行代码判断的是value0这个表达式是否成立。假定其中value的值为0那么在第一个if语句中value值为0即说明判断的结果为假所以不会执行if后的语句。在第二个if语句中判断的是value是否等于0,因为设定value的值为0所以表达式成立那么判断的结果就为真执行if后的语句。
6.2.2 if…else语句形式
if语句只给出了条件为真时要执行某个操作并未给出条件为假时具体要干什么。如果想在条件为假时执行另外一段代码需要利用if…else语句来完成其一般形式如下
if(表达式
{ 语句块1;
{
else
{语句块2;
}if…else语句的执行流程图如图6.4所示。 在if后的括号中判断表达式的结果如果判断的结果为真值则执行if后的语句块内容如果判断的结果为假值则执行else后的语句块内容。也就是说当if语句检验的条件为假时就执行else后面的语句或者语句块。例如
if(value)
{printf(the value is true);
}
else
{printf(the value is false);
}注意
else语句必须跟在一个if语句的后面不能独立使用。【例6.3】条件判断真真假假 在本实例中使用if…else语句判断用户输入的数值。输入的数字为0表示条件为假;输入的数字为非0表示条件为真。 1程序中定义变量iNumber用来保存用户输入的数据然后通过if…else语句判断变量的值。 2)用户输入数据的值为0if语句判断iNumber变量此时也就是判断输入的数值。因为0表示的是假所以不会执行if后面紧跟着的语句块而会执行else后面语句块中的操作显示一条信息并将数值进行输出。 3从程序的运行结果也可以看出当if语句检验的条件为假时就执行else后面的语句或者语句块。 运行程序显示效果如上图所示。 if…else语句也可以用来判断表达式根据表达式的结果选择不同的操作。 【例6.4】计算员工工资 某公司的薪酬设计如下工龄在5年以上工资基本工资全勤奖2倍的全勤奖否则工资基本工资全勤奖。本实例利用if…else语句判断并计算工资具体代码如下 1在程序运行过程中利用printf函数先显示一条信息提示用户输入一个数据例如输入3。这个数据的数值由变量year保存。 2if语句判断表达式year5的真假。如果判断的结果为真说明工龄大于5则执行if后的语句输出“基本工资全勤奖2倍的全勤奖”的值如果判断的结果为假说明工龄小于等于5则执行else后的语句输出“基本工资全勤奖”的值。因为year的值为3所以year5的关系表达式结果为假这样执行的就是else后的语句输出“基本工资全勤奖”的值。 运行程序显示效果如上图所示。
误区警示
在使用if语句比较浮点数时不要使用浮点值这样就会导致实际结果的偏差因为浮点值属于近似值。【例6.5】根据时间输出问候语 输入一个时间当时间小于12时输出“Good day当时间等于12时输出”Good noon;否则输出Good evening。本实例使用if…else语句实现具体代码如下 1程序运行时先输出信息提示用户输入一个时间。 2输入数字14将其保存到变量time中。接下来使用if语句进行判断。 3第一个if语句判断time是否小于12很明显判断结果为假因此不会执行第一个if后语句块中的内容。 4第二个if语句判断time是否小于12结果为假因此不会执行第二个if后语句块中的内容。 5因为第二个if语句为假值不执行第二个if语句的话就会执行else后的语句块输出信息Good evening。 运行程序显示效果如上图所示。
注意
上面这个程序实际上是存在一些问题的假如用户输入的数值为5第一个if语句判断为真值则会执行后面紧跟着的语句块。紧接着第二个if语句判断出time值不等于12为假值所以会执行else后的语句块如图6.8所示。注意else后的语句执行是我们不希望发生的6.2.3节中会介绍解决这个问题的方法。
 6.2.3 else if 语句形式
利用if和else关键字的组合可以实现else if语句。该语句可对一系列互斥的条件进行检验从而解决较复杂的判断和决策问题。else if语句的一般形式如下
if(表达式1
{语句块1
}
else if(表达式2
{语句块2
}
else if(表达式3
{语句块3
}
...
else if(表达式 m)
{语句块 m
}
else
{语句块n
}else if语句的执行流程图如图6.9所示。首先对if语句中的表达式1进行判断如果结果为真值则执行后面跟着的语句块1然后跳过else if语句和else语句如果结果为假那么判断else if语句中的表达式2如果表达式2为真值那么执行语句块2而不会执行后面else if的判断或者else语句。当所有的判断都不成立也就是都为假时执行else后的语句块n。
误区警示使用多个else if语句时要格外注意下方的复合语句即语句块部分大括号一定要保证成对匹配。【例6.6】计算分段函数的值 利用选择结构设计一个程序使其能计算如下分段函数