分支 if、switch、break、continue 的用法

分支结构

分类:

if语句

1、if最简单的用法

格式:
       if (表达式)
            语句
功能:
      如果表达式为真,语句执行
      如果表达式为假,语句不执行

2、if的范围问题

(1)if (表达式)
      语句A;
      语句B;
解释:if默认只能控制语句A的执行或不执行,if无法控制语句B的执行或不执行,或者讲,语句B一定会执行
(2)if (表达式)
    {
      语句A;
      语句B;
    }
  此时if可执行语句A和语句B 

由此可见:if 默认只能控制一个语句的执行或不执行,如果想控制多个语句的执行或不执行,就必须把这些语句用{}括起来

3、if…else…的用法

……           //其他语句
if(表达式)
{
……           //逻辑值为真所执行的语句、程序块
}
else
{
……          //逻辑值为假所执行的语句、程序块
}
……           //其他语句

4、if…else… if…else…的用法

   格式:
         if (1)
              A;
         else if(2)
              B;
         else if (3)
              C;
          else
               D;

5、C语言对真假的处理

非零是真
零就是假
真用1表示
假用0表示

6、if 的常见问题解析

1、空语句的问题

   if ( 3 > 2);
等价于
   if ( 3 > 2)
          ;       //这是一个空语句

2、

if(表达式1) 
     A;
else
     B;
是正确的

if(表达式1)  ;    //后面如果加分号,则默认if 后面是一个空语句
     A;
else
     B;
 是错误的

3、

   if (表达式1)
	    A;
	else if (表达式2)
	    B;
	else if (表达式3)
	    C;
	else
	    D;
即使表达式1和2都成立,也只会执行A语句

4、

if (表达式1)
	      A;
else if (表达式2)
	      B;
else if (表达式3)
	      C;
 语法上没有错误,但是逻辑上有漏洞

5、

if (表达式1)
      A;
else if (表达式2)
      B;
else if (表达式3)
      C;
else (表达式4)  // 7行
      D;
 语法上有错误,正确的写法是:
                         要么去掉7行的(表达式4)
                         要么在else 后面加 if

6、

if (表达式1)
      A;
else if (表达式2)
      B;
else if (表达式3)
      C;
else (表达式4);   
      D;
  语法上无错误,但逻辑上是错误的
等价于
else
   (表达式4);
      D;

switch语句

if是条件判断,switch是判断选择

格式:

……//语句
switch(表达式)
{
    case 常量表达式1: 
    语句或程序块1
        break;
    case 常量表达式2:
    语句或程序块2
        break;
         ……
    case 常量表达式n:
     语句或程序块n
        break;                       //终止switch
      default:                     //这是默认的    
    语句或程序块n+1
}
……//其他语句

注意:

(一)所有case后面的常量表达式为便于描述我们姑且称之为标签,这些标签都只能是:
(1)枚举常量(枚举元素)
(2)数值常量
(3)字符常量
(4)常变量
(5)宏名中的一种,注意普通变量,枚举变量是不能作为标签使用的。

(二)switch后面括号里的表达式允许是任何类型
     但是VC++中只允许为int或者char类型

(三)执行完一个case语句后,流程控制就转移到下一个case子句继续执行。
      “case”常量表达式只是起语句标号的作用,并不是在该处进行条件判断。
      在执行switch语句时,根据switch( )中表达式的值找到与之匹配的case子句,就从此case子句开始执行下去,不再进行判断。
      case之间与default没有顺序,先判断所有的case,没有匹配的case执行default。

(四)switch是选择不是循环,在switch语句中出现break语句,功能只是退出switch语句转去执行下一条语句;
switch中不能出现continue,除非switch本身就属于for或while循环的一部分。

break和continue

break

break如果用于循环是终止循环
break用于switch,则使用了终止switch
break不能直接用于if,除非if属于循环内部的一个子句

例子:

break 虽然是 if 内部语句,但是是用来终止外部 for 循环的

 for (i=0; i<3; ++i)
	{
		if (3>1)
		    break;  
		printf("222!\n");      //永远不会输出
	 }

在多层循环中,break 只能终止距离它最近的循环

for (i=0; i<4; ++i)
	{
		for (j=1; j<4; ++j)
		    break;     
		printf("您很厉害!\n");
	}
	
在DEVC++中输出的结果是
----------------------	
您很厉害!
您很厉害!
您很厉害!
您很厉害!
---------------------- 

多层switch嵌套中,break 只能终止距离它最近的一个switch

{
	int x=1,y=0,a=0,b=0;
	switch (x)         //第一个 switch 
	{
		case 1:
			switch (y)   //第二个switch 
			{
				case 0:
			        a++;
		    	    break;   //终止的是第二个switch 
		        case 1:
		        	b++;
		        	break;
			}
            	b = 100;
            	break;
        case 2:
        	a++;
        	b++;
        	break;
	}
	printf("%d %d",a,b);
在DEVC++中输出的结果是
--------------------
1 100
--------------------

continue

用于跳过本次循环余下的语句
转去判断是否需要执行下次循环

例子:

1

for (1;2;3)
{
    A;
    B;
continue;   //如果执行该语句,则执行完该语句后,会执行语句3,C和 D都不会执行
    C;
    D;
}

2、

while (1;2;3)
{
    A;
    B;
continue;   //如果执行该语句,则执行完该语句后,会执行表达式,C和 D都不会执行
    C;
    D;
}

3、scanf对用户非法输入的处理 (详见代码)

# include <stdio.h>

int main (void)
{
	int i;
	char ch;
	
	scanf("%d",&i);
	printf("i = %d\n",i);
	
	while ( (ch=getchar()) != '\n')
	    continue;             //过滤不合法数据 
	int j;
	scanf("%d",&j);
	printf("j = %d\n",j);
	
	return 0;
 } 

在DEVC++中输出的结果是
----------------------
2ddesj
i = 2
3degb
j = 3
--------------------------------
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柯糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值