C语言中的分支结构(一)

在现实世界中,每件事情都是可以由顺序结构、分支结构和循环结构解决的,真的很佩服设计这些结构的人,总结出世界的规律,浓缩其精华,本章将介绍C语言中的分支语句。

一、分支结构

在c语言中我们用if语句和switch语句实现分支结构。

1.1 if语句

if语句的语法:

if(表达式)

        语句

表达式为真,语句执行;表达式为假,语句不执行。C语言中,0表示假,非0表示真。

举个例子:输入一个整数,判断是否为奇数

#include<stdio.h>
int main()
{
	int num = 0;
	printf("请输入一个整数:\n");
	scanf("%d", &num);
	if (num % 2 != 0)
		printf("%d是奇数\n", num);
	return 0;
}

因为奇数%2不等于0,所以if后面的表达式为该条件,该条件为真就输出,该条件为假就不输出。

该代码运行结果即,输入奇数即输出,输入偶数不输出。

1.2 else

if....else...语法

if(表达式)

        语句1

else

        语句2

仅仅使用if不能实现选择分支,所以C语言引入了else与if搭配使用,实现二分支。

举个例子:输入一个整数,判断其是奇数还是偶数。

#include<stdio.h>
int main()
{
	int num = 0;
	printf("请输入一个整数:\n");
	scanf("%d", &num);
	if (num % 2 != 0)
		printf("%d是奇数\n", num);
	else
		printf("%d是偶数\n", num);
	return 0;
}

在else后面不需要再指明num%2 == 0,因为num%2只有0和非0的结果,所以如果if后面的表达式判断为假,则num会到else里来输出偶数。

1.2.1 分支语句中包含多条语句的情况

在上面的例子中,只演示了if和else下面只有一条语句的情况,但现实生活中往往不仅限于一条语句,在某个条件下需要执行的不止一条语句,那我们怎么办?

答案很简单,只要在if和else下面加上花括号{},使之成为代码块,让编译器知道如果为真,则执行{}里所有的语句。

举个例子:

#include<stdio.h>
int main()
{
	int age = 0;
	printf("请输入一个年龄:\n");
	scanf("%d",&age);
	if (age > 18)
	{
		printf("年龄为:%d\n",age);
		printf("可以带手机去大学了\n");
	}
	else
	{
		printf("年龄为:%d\n", age);
		printf("不能谈恋爱\n");
	}
	return 0;
}

代码结果为:

因为if只能控制一条语句,如果不在if下面加花括号{},则只打印年龄为25,所以当if和else下面有多条语句时,需要用花括号{}括起来,将其封装为一个整体。

1.3 嵌套if

if...else...中,else可以嵌套另一个if

举个例子:输入一个整数,判断其是0,是负数还是正数

#include<stdio.h>
int main()
{
	int num = 0;
	printf("请输入一个整数:\n");
	scanf("%d", &num);
	if (num == 0)
		printf("输入的数字是%d\n", num);
	else
		if (num > 0)
			printf("%d是正数\n", num);
		else
			printf("%d是负数\n", num);
	return 0;
}

结果为:

其实在else里嵌套的if可以提上来,组成else if,效果可以参考下面。

int main()
{
	int num = 0;
	printf("请输入一个整数:\n");
	scanf("%d", &num);
	if (num == 0)
		printf("输入的数字是%d\n", num);
	else if (num > 0)
			printf("%d是正数\n", num);
	else
			printf("%d是负数\n", num);
	return 0;

运行结果不会出错,也不会变,这样看起来更简洁,更具备可读性,在C语言中也是经常这么写,在这里就是为了说明else if实质上是在else里又嵌套了一个if语句。

1.4 悬空else问题

看这个例子:

运行结果:

为什么运行结果什么也没有呢?看这段代码小伙伴们是不是认为应该输出haha,这么想就错了哦。大家记住一个重要原则,else总是与距离最近的if匹配。

也就是说2和3应该是匹配的,可只看这个代码的话,让人以为认为1和3是匹配的,如果要让1和3匹配输出haha,需要在if上面加花括号{},再将else与1对齐即可。

1.4表明了我们在写代码的时候,要注重代码的可读性,该缩进缩进,该加括号加括号,注意代码的格式。

二、switch语句

除if语句外,C语言还提供了switch语句实现分支结构,它主要用于分支过多,使用if语句繁琐的时候,switch语句更加简洁。

switch语句的语法为:

switch(expression)

        case value1:statement

        case value2:statement

        default: statement

其中,expression必须是整形表达式,value必须是整形常量表达式,case和后面的数字之间必须有空格。

字符是以ASCII码值的形式进行存储的,ASCII码是整数,字符属于整形家族,如果找不到对应的值,就执行default分支。

举例子:用switch语句,输⼊任意⼀个整数值,计算除3之后的余数。

#include <stdio.h>
int main()
{
	int num = 0;
	printf("请输入一个整数:\n");
	scanf("%d", &num);
	switch (num % 3)
	{
	case 0:
		printf("余数为0\n");
		break;
	case 1:
		printf("余数为1\n");
		break;
	case 2:
		printf("余数为2\n");
		break;
	default:
		printf("输入错误!\n");
		return 0;
	}

	return 0;
}

2.1 switch语句里的break语句

break语句用于当符合某一个case条件后,执行该case语句,并跳出,不执行该case语句下面其他的case语句。

如果不加break语句,上面代码会是怎样的呢?

#include <stdio.h>
int main()
{
	int num = 0;
	printf("请输入一个整数:\n");
	scanf("%d", &num);
	switch (num % 3)
	{
	case 0:
		printf("余数为0\n");
	case 1:
		printf("余数为1\n");
	case 2:
		printf("余数为2\n");
	default:
		printf("输入错误!\n");
		return 0;
	}

	return 0;
}

可以看到,25%3等于1,但是结果却把下面的case2和default语句也输出了。就是因为缺失了break语句,输出符合条件的case语句后没有跳出来,导致下面的case语句也都一并输出。

先说这些,咱下期再聊一下循环结构。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值