C语言分支结构(详解)

C语言是结构化的程序设计语言,这里指的结构是顺序结构、选择结构、循环结构,C语言是能够实现着三种结构的,本篇文章介绍的是选择结构的实现。

  • 通常选择结构的实现都是用if语句、switch语句

if语句

if

if语句的语法形式如下:

if(表达式)
  语句

  表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏

在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果不是0,则语句执⾏。
  :输入一个整数,判断是否为奇数

#include <stdio.h>
int main()
{
 	int num = 0;
 	scanf("%d", &num);
 	if(num % 2 == 1)
	printf("%d 是奇数\n", num);
 return 0;
}

else

  如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表示呢?
这里需要使用 if…else… 语句,语法形式如下:

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

:输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。

#include <stdio.h>
int main()
{
 	int num = 0;
 	scanf("%d", &num);
 	if(num % 2 == 1)
 		printf("%d 是奇数\n", num);
	else
 		printf("%d 是偶数\n", num);
 return 0;
}

测试结果:
在这里插入图片描述
在这里插入图片描述

分支中包含多条语句

  if和else语句中默认都只控制一条语句,如果if后面控制多条语句就要使用{ }将代码括起来,else后面也可以跟上大括号。

int main()
{
 	int age = 0;
 	scanf("%d", &age);
 	if(age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
 	{
 		printf("成年了\n");
 		printf("可以交⼥朋友了\n");
 	}
 	else //else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
	 {
		 printf("未成年\n");
		 printf("不可以早恋哦\n");
	 }
 return 0;
}

嵌套if

  在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断

:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。

#include <stdio.h>
int main()
{
 	int num = 0;
 	scanf("%d", &num);
 	if(num == 0)
 		printf("输⼊的数字是0\n");
 	else if(num > 0) //这⾥的if 相当于嵌套在els语句中,形成了嵌套结构
	 	printf("输⼊的数字是正数\n");
 	else
 		printf("输⼊的数字是负数\n");
 
 return 0;
}

悬空else问题

  如果有多个 if 和 else ,else 总是!跟最接近的 if 匹配。
在这里插入图片描述

switch语句

  除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。switch 语句是⼀种特殊形式的 if…else 结构,⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易⽤、可读性更好的形式。
  语法形式如下:

switch (表达式) {
  case 值1:
   //代码块1
   break;
  case 值2:
   //代码块2
   break;
  default:
   //默认代码块
}
根据表达式 的值会与各个case后面的值进行比较,如果某个case的值与表达式的值相等则执⾏相应的 case 分⽀。如果找不到对应的值,就执⾏ default 分⽀。如果没有break语句,程序会继续执行下一个case中的代码块

:输⼊任意⼀个整数值,计算除3之后的余数

//if语句
#include <stdio.h>
int main()
{
 	int n = 0;
 	scanf("%d", &n);
 	if(n%3 == 0)
 		printf("整除,余数为0\n");
 	else if(n%3 == 1)
 		printf("余数是1\n");
 	else
 		printf("余数是2\n");
 return 0;
}
//改为switch语句
int main()
{
 	int n = 0;
	scanf("%d", &n);
 	switch(n%3)
 	{
 	case 0:
 		printf("整除,余数为0\n"); 
 		break;
 	case 1:
		 printf("余数是1\n"); 
		 break;
 	case 2:
 		printf("余数是2\n"); 
		break;
 }
 return 0;
}

注:

  • switch 后的 expression 必须是整型表达式
  • case 后的值,必须是整形常量表达式
  • case 和后边的数字之间必须有空格
  • 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句(切记break不能漏写,如果没有break语句,程序会继续执行下一个case中的代码块)
  • 在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要顺序是满⾜实际需求的就可以,不过通常是把 default ⼦句放在最后处理的

switch条件合并的写法

格式:
switch(n)
{
	case1:
	case2:
		printf("语句1");
		break;
	case3:
	case4:
	case5:
		printf("语句2");
		break;
	default:
		printf("语句3");
		break;
}

这里无论表达式的结果是1或2,执行的语句都是一样的,所以将两个条件和并了,输出同一条结果。

:输⼊1-5,输出的是“⼯作⽇”,输⼊6-7,输出“休息⽇。

#include <stdio.h>
int main()
{
 	int day = 0;
 	scanf("%d", &day);
 	switch(day)
 	{
 		case 1case 2:
 		case 3:
 		case 4:
 		case 5:
 			printf("⼯作⽇\n");
 			break;
 		case 6:
 		case 7:
 			printf("休息⽇\n");
 			break;
 	}
 return 0;
}
  • 35
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值