【C语言进阶剖析】6、分支语句

1、if 语句分析

  • if 语句根据条件选择执行语句
  • else 语句不能独立存在且总是与它最近的 if 相匹配(else 前面最近的 if)
  • else 语句后面可以连接其他 if 语句

在这里插入图片描述

if 语句中零值比较的注意点

  1. bool 型变量应该直接出现在条件中,不要进行比较
  2. 变量和 0 值比较时,0 值应该出现在比较符号左边
  3. float 型变量不能直接进行 0 值比较,需要定义精度
    在这里插入图片描述

说明:

  1. bool 变量的零值比较也可以写成 0 == b,这样增加了步骤
  2. 为什么变量和 0 值比较,0 应该写在左边,因为写 0 == i 时,两个等于号可能忘记一个,写成 0 = i,这样编译器就会报错,如果 0 写在右边,编译器不会报错,这样的 bug 很难调试
  3. 由于 float 类型是不精确的类型,如果直接让 f == 0,该条件可能永远为 false

2、switch 语句分析

  • switch 语句对应单个条件多个分值的情况
  • case 语句分支必须要有 break,否则会导致分支重叠
  • default 语句有必要加上,以处理特殊情况
    在这里插入图片描述

说明:可以预测到的情况都应该写在 case 中,default 用于处理不可预料的情况。default 必须要加,因为在实际使用场景中的有些情况是模拟不出来,根本无法预测到的,为了避免这种错误,加上 default 语句。

  • case 语句中的值只能是整形或字符型(写 case : 1.1 是不合法的)
  • case 语句中的排列顺序:(1)按照字母或者数字的顺序排列,(2)正常情况放在前面,异常放在后面,(3)dafault 只用来处理默认情况

3、实验

1、if 和 switch 使用示例

//6-1.c
#include<stdio.h>
void f1(int i){
	if (i < 6){
		printf("failed!\n");
	}
	else if (i >= 6 && i <= 8){
		printf("good!\n");
	}
	else{
		printf("perfect!\n");
	}
}

void f2(char c){
	switch(c){
		case 'c':
			printf("COmpile\n");
			break;
		case 'd':
			printf("Debug\n");
			break;
		case '0':
		      printf("Object\n");
		      break;
		case 'r':
			printf("Run\n");
			break;
		default:
			printf("Unknown\n");
			break;
	}
}
int main(){
	f1(5);
	f1(9);
	f1(7);
	f2('0');
	f2('d');
	f2('e');
	return 0;
}

在这里插入图片描述
2、if 和 switch 互换使用

//6-1.c
#include<stdio.h>
void f1(int i){
	switch(i < 6){
		case 1:
			printf("failed!\n");
			break;
		default:{
			switch(i >= 6 && i <= 8){
				case 1:
					printf("good!\n");
					break;
				default:
					printf("perfect!\n");
					break;
			}
		break;
		}
	}
}
void f2(char c){
	if ('c' == c){
		printf("COmpile\n");
	}
	else if ('d' == c){
		printf("Debug\n");
	}
	else if ('0' == c){
	      printf("Object\n");
	}
	else if ('r' == c){
		printf("Run\n");
	}
	else {
		printf("Unknown\n");
	}
}
int main(){
	f1(5);
	f1(9);
	f1(7);
	f2('0');
	f2('d');
	f2('e');
	return 0;
}

运行结果和上面的一样。

4、小结

1、if 语句适用于复杂的逻辑判断
2、switch 适用于对离散值进行判断的情况
3、if 语句和 switch 语句在功能上可以相互替换
4、if 语句对于“按片”分支判断的情况更加简洁
5、switch 语句对于多分支判断的情况更加简洁

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值