精品-清华大学C语言课件 第7章01 if语句的基本形式
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【例7.1】 使用if语句模拟信号灯指挥车辆行驶。 在本实例中,为了模拟十字路口上信号灯指挥车辆行驶,要使用if语句进行判断信号灯的状态。如果
信号灯为绿色,说明车辆可以行驶通过,通过输出语句进行信息提示说明车辆的行动状态。
#include<stdio.h> int main() { int iSignal;/*定义变量表示信号灯的状态*/ printf("0代表红灯,1代表绿灯\n");/*输出提示信息*/ scanf("%d",&iSignal);/*输入iSignal变量*/ if(iSignal==1)/*使用if语句进行判断*/ { printf("信号灯是绿灯,车可以行驶\n");/*判断结果为真时输出*/ } return 0; }
在上面的代码中,如果if判断变量value的值为真的话,则执行if后面的语句块进行输出。如果if判 断的结果为假值,则执行else下面的语句块。 注意: 一个else语句必须跟在一个if语句的后面。
【例7.3】 用键盘输入三个数,输出三个数中最小的数 比较三个数值的大小,这三个数值由用户输入。首先比较两个数值的大小,然后将其中相对较小的赋
运行程序,显示效果如图7.3所示。
图7.3 完善if语句的使用 初学编程的人在程序中使用if语句时,常常会将下面的两个判断弄混,例如:
if(value){…}/*判断变量值*/ if(value==0){…}/*判断表达式的值*/
这两行代码的判断中都有value变量,value值虽然相同,但是判断的结果却不同。第一行代码表示判 断的是value的值,第二表示判断value等于0这个表达式是否成立。假定其中value的值为0,那么在第一 个if语句中,value值为0则说明判断的结果为假,所以不会执行if后的语句。但是在第二个if语句中,判 断的是value是否等于0,因为设定value的值为0,所以表达式成立,那么判断的结果就为真,执行if后的 语句。
【例7.2】 完善if语句的使用。 原程序中仅对绿灯情况下做出相应的操作,为进一步完善信号灯为红灯时的操作,在程序中再添加
一次if语句对信号灯为红灯时的判断,并且在条件成立时给出相应的操作。
#include<stdio.h> int main() { int iSignal;/*定义变量表示信号灯的状态*/ printf("0代表红灯,1代表绿灯\n");/*输出提示信息*/ scanf("%d",&iSignal);/*输入iSignal变量*/ if(iSignal==1)/*使用if语句进行判断*/ { printf("信号灯是绿灯,车可以行驶\n");/*判断结果为真时输出*/ } if(iSignal==0)/*使用if语句进行判断*/ { printf("信号灯是红灯,车不可以行驶\n");/*判断结果为真时输出*/ } return 0; }
在if后的括号中还是进行判断表达式的结果,如果判断的结果为真值,则执行紧跟if后的语句块中 的内容;如果判断的为假值,则执行else语句后的语句块内容。也就是说当if语句检验的条件为假时, 就执行相应的else语句后面的语句或者语句块。例如下面的代码:
if(value) { printf("the value is true"); } else { printf("the value is false"); }
else if语句执行流程图7.9如下所示。
图7.9 else if语句执行流程图
根据流程图可以看到首先对if语句中的表达式1进行判断,如果结果为真值,则执行后面接跟着的语 句1,然后跳过else if语句和else语句;如果结果为假,那么进行判断else if中的表达式2。表达式2为 真值的话,那么执行语句2而不会执行后面else if的判断或者else语句。当所有的判断都不成立,也就是 都为假值的时候执行else后的语句块。例如下面代码:
yes否则输出no。
#include<stdio.h> void main() { int x; printf("请输入一个整数:\n"); scanf("%d", &x); /*从键盘中输入一个数*/ if (x % 5 == 0 && x % 7 == 0)/*判断该数是否能同时被5和7整除*/ printf("yes\n");/*如果能,则输出yes*/ else printf("no\n");/*如果不能,则输出no*/ }
给变量imin,再将imin的值与第三个数进行比较,并将其中相对较小的数值输出显示。
#include<stdio.h> int main() { int ia, ib, ic,imin;/*定义四个整型变量*/ printf("请输入三个数;\n");/*提示信息*/ scanf("%d,%d,%d",&ia,&ib,&ic);/*输入三个数值*/ if(ia<ib)/*如果ia小于ib为真*/ { imin=ia;/*将ia的数值赋给imin*/ } else/*如果ia小于ib为假*/ { imin=ib;/*将ib的数值赋给imin*/ } if(ic<imin)/*如果ic的值小于imin的值为真*/ { imin=ic;/*将ic的值赋给imin*/ printf("最小的数是:%d\n",imin);/*输出imin的值*/ } else/*如果ic<imin的值为假值 */ { printf("最小的数是:%d\n",imin);/*输出imin的值*/ } return 0;/*程序结束*/ }
运行程序,显示效果如图7.5所示。
图7.5 使用if…else进行选择判断
if…else语句也可以用来判断表达式,根据表达式的结果从而进行选择不同的操作。 【例7.4】 判断一个数是否既是5又是7的整倍数。 解决本问题的算法思想是对输入的数x用5和7分别整除,看是否能同时被5和7整除,如果能,则输出
if(i==1)
{…}
else if(i==2)
{…}
else if(i==3)
{…}
else
{…}
上面的代码表示的意思是,使用if语句进行判断变量i的值是否为1,如果为1执行后面语句块中的内 容,然后跳过后面的else if判断和else语句的执行;如果i的值不为1,那么else if进行判断i的值是否 为2,如果值为2,则条件为真执行后面紧跟着的语句块,执行完后跳过后面else if和else的操作。如果i 的值也不为2,那么接下来的else if语句判断i是否等于数值3,如果等于执行后面语句块中的内容,否则 执行else的语句块中内容。也就是说当前面所有的判断都不成立、为假值时,执行else语句块中的内容。
运行程序,显示效果如图7.7所示。
图7.7 使用if…els问题的,假如用户输入的数值为1,第一个if判断为真值,则会执行后面 紧跟着的语句块。并且因为第二个if语句判断出iSignal值不等于1,所以为假值,这个时候会执行else后的 语句块。else后的语句执行是我们不希望发生的,如图7.8所示。在下一小节中将会解决这个问题的方法。
{ printf("信号灯是%d:\n",iSignal); printf("车可以行驶"); }
将执行的语句都放在大括号中,这样当if语句判断条件为真时,就可以全部执行。使用这种方式的好 处可以很规范、清楚的看出来if语句所包含语句的范围,所以笔者在这里建议大家使用if语句时都使用大 括号将执行语句包括在内。
if…else语句形式
除了可以指定在条件为真时执行某些语句外,还可以在条件为假时执行另外一段代码。C语言中是利 用else语句来完成的。其一般形式为:
if(表达式) 语句块1; else 语句块2;
其语句执行流程图7.4如下所示。
真值
语句块1
表达式
假值
语句块2
下一条语句
图7.4 if..else语句执行流程
注意: 分号预示着一条语句的结尾,就相当于写作时的句号一样。但是并不是每条C语言的语句都是需要用分号
作为语句结束的标志,if语句后面就是不需要加上分号“;”的。 在这些代码中可以看到if后面的执行部分只是使用调用了一条语句,如果是两条语句的时候怎么办呢?
这个时候可以使用大括号使之成为语句块,例如:
if(iSignal==1)
运行程序,显示效果如图7.2所示。
图7.2 使用if语句模拟信号灯指挥车辆行驶 if语句不是只可以使用一次的,是可以连续使用进行判断的,然后根据不同条件的成立给出相应的操 作。 例如在上面的实例程序中,可以看到虽然使用if语句进行判断信号灯状态iSignal变量,但是只是给 出了判断是绿灯时执行的操作,并没有给出红灯时相应的操作。为了使得在红灯情况下也进行操作,那么 再使用一次if语句进行判断为绿灯时的情况。现在对上面的实例进行完善,实例如下。
【例7.5】 使用if…else语句模拟信号灯 在很多的路口上,信号灯多数还有一个黄灯,作用是用来提示车辆准备行驶或者停车的。上一小节中,
使用if语句进行模拟信号灯,在本实例中是使用if…else语句进一步完善这个程序。使得信号灯具有对黄 灯情况下相应的功能。
#include<stdio.h> int main() { int iSignal;/*定义变量表示信号灯的状态*/ printf("0代表红灯,\n1代表绿灯,\n其他数字代表黄灯\n");/*输出提示信息*/ scanf("%d",&iSignal);/*输入iSignal变量*/ if(iSignal==1)/*当信号灯为绿色时*/ { printf("信号灯为绿灯,车可以行驶\n");/*判断结果为真时输出*/ } if(iSignal==0)/*当信号灯为红灯时*/ { printf("信号灯为红灯,车不可以行驶\n");/*判断结果为真时输出*/ } else/*当信号灯为黄灯时*/ { printf("信号灯为黄色,车等待,准备行驶\n"); } return 0; }
代码中判断变量iNum的值,如果为变量iNum为真值,则执行后面的输入语句;如果变量的值为假,则 不执行。
在if语句的括号中,不仅可以判断一个变量的值是否为真,也可以判断表达式,例如:
if(iSignal==1) printf("信号灯是%d:",iSignal);
这行代码表示的是:判断变量iSignal==1的表达式,如果iSignal==1的条件成立,那么判断的结果是 真值,则执行后面的输出语句;如果条件不成立,那么结果为假值,则不执行后面的输出语句。
if语句的基本形式
本讲大纲
1.if语句形式 2. if…else语句形式 3. else if语句形式 实例1 判断偶数 实例2 判断字母是否大写
if语句形式
if语句形式就通过对表达式进行判断,然后根据判断的结果选择是否进行相应的操作。if语句的一般形 式为:
if(表达式) 语句; 其语句执行流程图7.1如下。
运行程序,显示效果如图7.6所示。
图7.6 使用if…else语句判断5和7的整倍数 在程序中,首先判断一下表达式x % 5 == 0 && x % 7 == 0的值是真是假,通过图7.6可知,输入的 数据是70,70和5取余等于0,70和7取余也等于0,表达式的值为真,故执行if后的语句,输出“yes”。
图7.8 使用if…else语句模拟信号灯时可能出现的错误
else if语句形式
利用if和else关键字的组合可以实现else if语句,这是对一系列互斥的条件进行检验。其一般形式如下:
if(表达式1) 语句1 else if(表达式2) 语句2 else if(表达式3) 语句3 … else if(表达式m) 语句m else 语句n
表达式
真 值 ( 非 0)
语句块
假 值 ( 0)
下一条语句
图7.1 if语句执行流程图 if后面括号中的表达式,就是要进行判断的条件,而后面语句部分是为对应的操作。如果if判断括 号中的表达式为真,那么就执行后面语句的操作;如果为假值,那么不会执行后面语句部分。例如下面 的代码:
if(iNum) printf("The ture value");