if 语句多分支程序设计
发布时间:2022-09-04编辑:zhushican阅读(307)
1. if 语句多分支格式
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
…
else if(表达式m)
语句m;
else
语句n;
该if语句执行过程为:先判断表达式1的值,若其值为非0,则执行语句序列1;若其值为0,则判断表达式2,若其值为非0,则执行语句序列2;若其值为0,则继续判断后面的表达式,直到最后,若没有表达式的值为非0,则执行最后的语句序列n。最后的else语句可以没有,也即当没有表达式满足条件时将不进行任何操作。其执行过程如图1所示。
图1 if-else-if执行过程
【例3-6】根据键盘输入字符的ASCII码来判别其类型。
#include <stdio.h>
int main()
{
char c;
printf("请输入一个字符:");
c=getchar();
if(c<32)
printf("控制字符\n");
else if(c>='0'&&c<='9')
printf("数字\n");
else if(c>='A'&&c<='Z')
printf("大写字母\n");
else if(c>='a'&&c<='z')
printf("小写字母\n");
else
printf("其他字符\n");
return 0;
}
程序运行结果:
请输入一个字符: p↙
小写字母
在本例中,由ASCII码表可知ASCII值小于32的为控制字符。在“0”和“9”之间的为数字,在“A”和“Z”之间为大写字母,在“a”和“z”之间为小写字母,其余则为其它字符。这是一个多分支选择的问题,用if-else-if语句编程,判断输入字符ASCII码所在的范围,分别给出不同的输出。
说明:
(1) if后的“表达式”一般为关系表达式或逻辑表达式,也可以是任意数值类型,必须用“()”括起来。
(2) else子句是if语句的一部分,必须与if配对使用,不能单独使用。
(3) 当if和else下面的语句不只一条语句时,要用复合语句形式,即将多条语句用{}括起来,否则它将只执行后面的第一条语句。特别注意{}中的每一条语句后都要加“;”但{}后不需要加”;”。
(4) 其中格式一可以看做是格式二不考虑条件不成立时的一种特殊情况。
(5) 格式三中最后的else语句可以没有,即判断各种情况,若没有一种条件成立时,可以不执行任何操作。
(6) 格式三种的各表达式其条件要互不相容。
2 .if 语句的嵌套与嵌套匹配原则
当if语句中的执行语句又是if语句时,则构成了if 语句嵌套的情形。其一般形式可表示如下:
(1)if(表达式1)
if(表达式2)
语句序列1
else
语句序列2
(2)if(表达式1)
if(表达式2)
语句序列1
else
语句序列2
else
语句序列3
(3)if(表达式1)
语句序列1
else
if(表达式2)
语句序列2
else
语句序列3
(4)if(表达式1)
if(表达式2)
语句序列1
else
语句序列2
else
if(表达式3)
语句序列3
else
语句序列4
if语句嵌套时,else子句与if的匹配原则:else子句总是在它上面、距它最近、且尚未匹配的if配对。例如:
if(a==b)
if(b==c)
printf(“a==b==c”);
else
printf(“a!=b”);
因为else子句总是与在它上面距它最近、尚未匹配的if配对,因此,次程序中的else子句会与if(b==c)配对而不是与if(a==b)配对,这样容易发生错误。为了实现正确的配对方法,一般加上{},可作如下修改:
if(a==b)
{
if(b==c)
printf(“a==b==c”);
}
else
printf(“a!=b”);
【例3-7】比较两个数的大小关系。
#include <stdio.h>
int main(){
int a,b;
printf("please input a,b: ");
scanf("%d%d",&a,&b);
if(a!=b)
if(a>b) printf("a>b\n");
else printf("a<b\n");
else printf("a=b\n");
return 0;
}
为了增强程序的可读性,一般情况下较少使用if语句的嵌套结构。
用if-else-if多分支语句改写程序:
#include <iostream.h>
#include <stdio.h>
int main(){
int a,b;
printf("please input a,b: ");
scanf("%d%d",&a,&b);
if(a==b) printf("a=b\n");
else if(a>b) printf("a>b\n");
else printf("a<b\n");
return 0;
}
程序运行结果:
please input a,b:34 67↙
a<b