分支语句if switch

分支语句if switch,第1张

在C语言中有很多 *** 作符,我们也经常使用,但是否会有些细节了解不到位呢?

一 . if 和 else 1.1 if else语句

if 是C语言中的条件语句,但它的逻辑是如何进行的呢?

    int main()
{
	int a = 1;
	if (a)
	{
		printf("胡杨\n");
	}
	else
	{
	    printf("树下\n");
	}
	return 0;
}

这里是先判断a 是否为真才进行下一步 *** 作的。


那么就引出几个问题。


1.什么是真?

真,是逻辑上表述。


1是真,但真不仅仅是1,而是非0。


那么很明显,
假就是0。


2 .怎么表示真?

一般用布尔型常量的值表示真或假。


3.C语言中有没有真正的布尔型常量呢?

在C语言上在C99才引入布尔型变量这一说法,之前都是在C++中有布尔行变量。


而在C99中引入布尔常量,引用头文件,有_Bool型变量赋值为FALSE 或 TRUE,表示 0 或 1。


所以说在C99之后才有布尔型常量,在之前是没有的。


#define bool	_Bool//库里面定义
#define false	0
#define true	1

int main()
{
	_Bool a = true;
	_Bool b = false;
	if (b)
	{
		printf("hello world\n");
	}
}
1.2 if else实现分支循环

刚才已经说过了if,下面是跟if经常一起使用的else,重点说一下if else实现
单分支循环和多分支循环,下面是实现单分支

int main()
{
	int a = 1;
	if (a == 1)
	{
		printf("嗨,帅哥\n");
	}
	else
	{
		printf("你好,美女\n");
	}
	return 0;
}

上面说过了,if是先判定在进行 *** 作,单独的if是没有分支功能的,需要else匹配使用才有分支功能。


这是单分支,那么多分支呢?那么就需要另一个东西了,叫else if(条件),实现多分支。


    int day = 7;
	if (day >= 1 && day <= 5)
	{
		printf("星期一\n");
	}
	else if (6 == day)
	{
		printf("星期六\n");
	}
	else if (7 == day)
	{
		printf("星期日\n");
	}
	else
	{
		printf("输入错误");
	}

需要注意的是else if后要加条件,else是不加条件的。



tip 1:
else if (day == 7),不推荐这样写,如果少写一个=就会变成赋值,
推荐写成else if(7 == day)如果写错,编译器就会报错,(非常友好)*

1.3 关于悬空else问题

先看一个代码猜猜看

    int a = 10;
	int b = 1;
	if (10 == a)
		if (11 == b)
			printf("hello\n");
	else
	   printf("world\n");

相信你一定有答案了,没错,就是输出world,虽然else是和第一个f(10 == a)对齐,但是else会与最近的if匹配在一起,所以修改代码格式后变为了下面的样子。


    int a = 10;
	int b = 1;
	if (10 == a)
	{
		if (11 == b)
		{
			printf("hello\n");
		}
		else
		{
			printf("world\n");
		}
	}
 tip 2: 好的代码风格会是阅读者省心省力,也不会导致自己看的时候迷茫。


二 .switch case break default 2.1 .switch

switch语句常常用来判断多分支情况,但是switch是没有能力进行分支的,这就需要另一个关键词 case 来进行分支,请看下面代码。


    int day = 7;
    switch(day)
   {
        case 1printf("星期一\n");
        case 2:
            printf("星期二\n");
        case 3:
            printf("星期三\n");   
        case 4:
            printf("星期四\n");   
        case 5:
            printf("星期五\n");
        case 6:
            printf("星期六\n");
        case 7:
            printf("星期天\n");    
   }

这个代码能输出你想要的结果吗?,结果是不能,它会输出从星期一到星期日。


而不会,分情况输出,为什么呢?这就要说下break关键词了。


2.2.switch和case,break联合使用实现多分支

switch是对条件的判断,来决定去哪个case进去,而case只是一个入口,没办法决定出口,那就需要break来让数据“请”出去了。


    int day = 7;
    switch(day)
   {
        case 1printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;    
        case 4:
            printf("星期四\n");
            break;    
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期天\n");    
            break;
   }

这样才是你想要的样子,但是如果day是8呢?会走哪个case口呢?答案是会直接跳出程序,什么也不打印。


2.3 default作用

default在switch…case句块中的意思是缺省情况,它表示在没有参数被
提供的时候,执行defalut块中的语句,如果不写也是会跳出的。


但是建议写上是自己有个良好的代码风格。


另外不要再default中加入其他的功能。



例如

    int day = 8;
	switch (day)
	{
	    case 1:
			printf("星期一\n");
			break;
		case 2:
			printf("星期二\n");
			break;
		case 3:
			printf("星期三\n");
			break;
		case 4:
			printf("星期四\n");
			break;
		case 5:
			printf("星期五\n");
			break;
		case 6:
			printf("星期六\n");
			break;
		default:
			printf("星期日\n");
			break;
	}

这里default中打印了星期日,功能也能实现,但是不推荐这样写,default表示默认选项,而星期日不是默认选项。


另外,default字句可以再任何地方。


2.4 多个case匹配问题

一个case必须要break吗?不是这样的,可以有多个case匹配一个的场景。



例如

    int day = 5;
	switch (day)
	{
	    case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			printf("工作日\n");
		case 6:
		case 7:
			pruintf("休息日\n");
			break;
		default:
			printf("数字无效\n");
			break;
	}
2.5 switch 和if对比

说完switch和if后对比一下,switch和if都先进行判断,都没有分支过功能其中if要和else if一起才有分支功能,而switch则是通过case进行分支功能。


这还是很相似的。


至于用谁好点呢?看分支情况了,另外case后的小数字,可以
用enum枚举常量代替,提高代码可读性哦。


后续

明天会更新const, static的内容(未完待续。







这是第一篇博客,有不好的地方,希望大佬多多指教,互关哦。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/562598.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存