1.5 C语言的控制流之一:if-else、else-if、switch

C语言的控制流

一、语句与程序块

在C语言中,分号是语句结束符。用一对花括号“{}”把一组声明和语句括在一起就构成了一个复合语句(也叫做程序块),复合语句在语法等价于单条语句。

二、if-else语句

if-esle语句用于条件判定,其语法如下:

if(表达式)
	语句1;
else
	语句2;

其中else部分是可选的,该语句执行时,先计算表达式的值,如果其值为真,则执行语句1,如果其值为假,并且该语句包含else部分,则执行语句2。
例:

 1 /* 测试if_esle语句      */
  2 #include<stdio.h>
  3 
  4 int main(int argc, char *argv[])
  5 {
  6         int a;
  7 
  8         scanf("%d", &a);
  9         if (a > 0)                              //当次判定条件1成立时,执行复合语句1
 10         {										//复合语句1
 11                 printf("Hello\n");
 12         }
 13         else                            //当判定条件1不成立时,执行复合语句2
 14         {								//复合语句2
 15                 printf("World\n");
 16         }
 17         
 18         return 0;
 19 }
~/test/c.Language --> :
~/test/c.Language --> :gcc -o if_else1 if_else1.c 
~/test/c.Language --> :./if_else1  
5
Hello
~/test/c.Language --> :./if_else1 
-1
World

当不出现else时

例:

/*测试if语句	*/
#include<stdio.h>

int main(int argc, char *argv[])
{
        int i;
        scanf("%d", &i);

        if(0<=i && 100>=i)	//如果判定条件1成立,则执行复合语句1
        {
                printf("small\n");
        }

        if(101<=i && 200>=i)	//如果判定条件1不成立且判定条件2成立,则执行复合语句2
        {
                printf("middle\n");
        }

        if(201<=i && 300>=i)	//如果判定...且判定条件3成立,则执行复合语句3
        {
                printf("large\n");
        }

        if(0>i || 300<i)	//如果判定...且判定条件4成立,则执行复合语句4
        {
                printf("error\n");
        }

        return 0;
/mnt/hgfs/1.22 Ubuntu-14.4share/C/day02 --> :./if
1
small
/mnt/hgfs/1.22 Ubuntu-14.4share/C/day02 --> :./if
101
middle
/mnt/hgfs/1.22 Ubuntu-14.4share/C/day02 --> :./if
350    
error
/mnt/hgfs/1.22 Ubuntu-14.4share/C/day02 --> :./if
205    
large

【注意】分号的位置是一个值得注意的点

if(判定条件);	//注意此处的分号
   xxxx;   //无论条件真假,都会执行xxxx和yyyy;
   yyyy;

等价于
if(判定条件)
{

}
xxxx;
yyyy;

三、else-if语句

结构:
if (表达式1)
{
	语句1;
}
else if (表达式2)
{
	语句2;
}
else if (表达式3)
{
	语句3;
}
else
{
	语句4;
}

这种if语句序列是编写多路判定最常用的方法。其中各表达式将会被依次求值,一旦某个表达式结果为真,则执行与之相关的语句,并终止整个语句序列的执行。同样,其中各语句既可以是单条语句,也可以是用花括号括住的复合语句。
最后一个else部分用于处理“上述条件均不成立”的情况或默认情况,也就是当上面各条件都不满足时的情形。
例:

/* 测试else_if语句      */
#include<stdio.h>

int main(int argc, char *argv[])
{
        int a;

        while(1)			//表示循环执行花括号里面的语句
        {
                scanf("%d", &a);

                if (a < 10)		//判定条件1
                {
                        printf("low\n");
                }
                else if (a > 10 && a < 100)		//判定条件2
                {	
                        printf("mid\n");
                }
                else	// 当以上判定条件都不成立的时候
                {
                        printf("error\n");
                }
        }

}
~/test/c.Language --> :gcc -o else_if else_if.c 
~/test/c.Language --> :./else_if                
1
low
11
mid
100
error

四、switch语句

switch语句是一种多路判定语句,它测试表达式是否与一些常量整数值中的某一个值匹配,并执行相应的操作。
结构如下:

switch(表达式)
{
	case 常量表达式: 语句序列
	case 常量表达式: 语句序列
	default: 语句序列
}

各分支表达式必须互不相同,如果没有哪一支分支表达式,则执行标记为default的分支。default分支是可选的。如果没有default分支也没有其他的分支与表达式的值匹配,则该switch语句不执行任何动作。各分支及default分支的排列次序是任意的。
例:

/* 测试switch语句       */
#include<stdio.h>

int main(int argc, char *argv[])
{
        int c;

        printf("请输入您想选择的数字:");
        scanf("%d", &c);

        switch (c)
        {
                case 0: printf("H\n");
                case 1: printf("E\n");
                case 2: printf("LL\n");
                case 3: printf("O\n");
                case 4: printf("W\n");
                case 5: printf("O\n");
                case 6: printf("R\n");
                case 7: printf("L\n");
                default: printf("D\n");
        }
        
        return 0;
}
~/test/c.Language --> :gcc -o switch_test1 switch_test1.c
~/test/c.Language --> :./switch_test1                    
请输入您想选择的数字:1
E
LL
O
W
O
R
L
D
~/test/c.Language --> :./switch_test1 
请输入您想选择的数字:8
D
~/test/c.Language --> :./switch_test1 
请输入您想选择的数字:7
L
D

在switch语句中,case的作用只是一个标号,因此,某个分支中的代码执行完成后,程序将会进入下一分支继续执行,除非在程序中显示地跳转。跳出switch语句最常用的方法是使用break语句与return语句,break语句还可强制从while、for与do循环语句中立即退出。下一篇博客再介绍。
【注】:
**作为一种良好的程序设计风格,在switch语句最后一个分支(即default分支)
的后面也加上一个break语句。**这样做在逻辑上没有必要,但当我们需要向该switch语句后添加其他分支时,这种防范措施会降低错误的可能性。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值