之前一节介绍了C语言中的三大结构,这一节我们就介绍其中的选择结构。
语句形式
基本形式
if语句形式是通过对表达式进行判断,然后根据判断的结果选择是否进行相应的操作,if表达式一般形式:
if(表达式){语句};
示例:
int main()
{
int a;
scanf_s("%d",&s);
if(a>0)
{
printf("yse");
}
if(a<=0)
{
printf("no");
}
return 0;
}
注if语句中括号中的表达式,就是要进行判断的条件,而后面语句部分对应的操作,如果括号中的表达式为真值,那么就执行后面语句的操作。
if-else语句
处理可以指定在条件为真时执行某些语句外,还可以在条件为假时执行另外一段代码,C语言中是利用else语句来完成的。
一般形式:if(表达式){语句块1}
else{语句块2}
#include <stdio.h>
int main()
{
int a;
scanf_s("%d",&a);
if(a>0)
{
printf("yes");
}
else {
printf("no");
}
return 0;
}
那么以上连个例子都解决了同一问题,那么他们之间有什么区别?我们来走一遍流程就可以知道,两个if判断了两次,if-else只判断了一次。
if-else-if语句形式
利用if和else关键字的组合可以实现if else if语句,这是对一系列互斥的条件进行检验。
一般形式为:
if(表达式1)
{
语句1;
}else if(表达式2)
{
语句2;
}else if(表达式3)
{
语句3;
}
...
else if(表达式n)
{
语句n;
}
else
{
语句n+1;
}
示例:
int main()
{
int nNum = 0;
scanf_s("%d",&nNum);
if(nNum == 1)
{
printf("星期一");
}
else if(nNum == 2)
{
printf("星期二");
}
else if(nNum == 3)
{
printf("星期三");
}
else if(nNum == 4)
{
printf("星期四");
}
else if(nNum == 5)
{
printf("星期五");
}
else if(nNum == 6)
{
printf("星期六");
}
else if(nNum == 7)
{
printf("星期日");
}
else
{
printf("你输入数字有误!");
}
return 0;
}
switch-case语句
switch-case语句
1.if语句可以处理分支选择语句,但是如果需要处理的问题比较多,或者分支比较多的时候,用if语句的嵌套苏虽然可以处理,但会使用程序过于频繁,可读性差。这时我们就可以使用另外一种能够处理多路分支问题的选择语句:switch-case语句。
switch-case一般形式:
switch(表达式)
{
case 常量1:
语句序列;
break;
case 常量2:
语句序列;
break;
...
default:
语句序列;
break;
}
switch(表达式)
{
case 常量1:
case 常量2:
语句序列;
break;
default:
语句序列;
break;
}
使用switch说明
- switch 后面括号的表达式。
- 当表达式的值于某一个case后面的常量表达式相等的时候,就执行此case后面的语句,若所有的case中的常量表达式的值都没有于表达式的值匹配,就执行default后面的语句。
- 每一个case的常量表达式的之必需互不相同;否则就会出现相互矛盾的现象。
- 各个case和default的出现次序不影响执行结果。
- 执行完一个case后面的语句后,流程控制转移到下一个case继续执行。
- break语句是的执行完case语句后跳出switch语句。如果没有break语句,程序将于下一个case语句匹配,直到遇到break为止。
- 多个case可以共用一组执行语句。
- 在使用case语句时,不要忘记case的条件只能是常量或者是常量表达式。
\\使用switch-case语句示例
#include <stdio.h>
main()
{
int nWeek = 0;
printf("请输入一个0~7的数字:n");
scanf_s("%d",&nWeek);
switch(nWeek)
{case 1:printf("星期一");break; case 2:printf("星期二");break; case 3:printf("星期三");break; case 4:printf("星期四");break; case 5:printf("星期五");break; case 6:printf("星期六");break; case 7:printf("星期日");break; default: //以上条件都不满足的时候 printf("不是1~7的数"); break;
}
return 0;
}
两种选择结构
if···else语句的优点
- 使用if结构可以实现比较复杂的逻辑判断
- 用switch结构能够实现的结构,使用if结构都可以实现
- 分枝较少的情况下使用if更为简单
- 分枝较多的情况下使用if结构会使程序结构变得复杂
- 如果if嵌套层次过深,也容易使程序结构变得复杂
switch语句的优缺点
- 没有复杂的逻辑判断,程序结构简单
- 对于分支很多的情况,特别适合使用switch结构。
- switch结构只能基于一个正数值进行分支选择。
- switch只能判断是否相等,不能判断某一区间的值。
- 虽然使用swtich语句编写的程序有规律,可读性强,但是由于switch语句不能根据表达式的取值范围做出选择,所以使用的时候也有很大的局限性。