【C语言】分支与循环

一.条件判断语句(分支语句)

1.if语句

1.1 if

if语句的语法如下:

if(表达式)
   语句

表达式为真则语句执行,表达式为假则语句不执行(C语言中0为假,非0为真),也就是表达式结果为0语句才执行。

例子:输入一个整数,判断是否是正数

#include<stdio.h>
int main()
{
	int num = 0;
	scanf("%d",&num);
	if (num > 0)
		printf("是正数");
	return 0;
}
非0
为0
语句
语句
结束
num>0
num<=0
num>0
打印
结束

1.2 if…else

如果一个数不是正数就是非正数了,那如何判断一个数是正数还是非正数呢?这时候就得借助if…else了。
if…else的语法如下:

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

例子:输入一个整数判断其是正数还是非正数

#include<stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num > 0)
		printf("该整数为正数");
	else
		printf("该整数为非正数");
	return 0;
}

1.3 分支中包含多条语句

在if和else语句中都默认只能控制一条语句
例如:

#include<stdio.h>
int main()
{
	int num = 0;
	printf("请输入你的年龄\n");
	scanf("%d", &num);
	if (num < 16)
		printf("未满16周岁\n");
		printf("法律不允许打工,算童工");
		return 0;
}

执行上面的代码,你会发现不管你输入的值是否小于16,“法律不允许打工,算童工”这行字都会被打印出来。

在这里插入图片描述
在这里插入图片描述

这是因为if语句只能控制一条语句,就是printf(“未满16周岁\n”)。if语句为真,则打印未满16周岁,if语句为假则不打印。而*printf(“法律不允许打工,算童工”)*这一语句是独立存在的,无论if语句的表达式是否为真都对打印。
那如何if语句控制多条语句呢?那就得用花括号{ }括起来,else同理。
例如:

#include<stdio.h>
int main()
{
	int num = 0;
	printf("请输入你的年龄\n");
	scanf("%d", &num);
	if (num < 16)
	{
		printf("未满16周岁\n");
		printf("法律不允许打工,算童工");
	}
	else
	{
		printf("已满16周岁\n");
		printf("法律允许正常打工了");
	}
		return 0;
}

1.4 if 的嵌套

在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断
比如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。

#include<stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num > 0)
		printf("正数");
	else if (num < 0)
		printf("负数");
	else
		printf("0");
	return 0;
}

从第一个else后面到return前的部分就是嵌套在前⾯的 else ⼦句中的,构成了嵌套的if语句。
带上大括号更容易看明白。

#include<stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num > 0)
		printf("正数");
	else
	{ 
		if (num < 0)
			printf("负数");
		else
			printf("0");
	}
	return 0;
}

1.5 else的悬空问题

如果有多个if和else,不知道哪个else和哪个if匹配?可以记住一个规则,else总是和最近的if匹配
请看如下代码

#include<stdio.h>
int main()
{
	int a = 2;
	int b = 3;
	if (a == 1)
		if (b == 3)
			printf("hehe");
	else
			printf("haha");
	return 0;
}

运行的结果是什么呢?很多人看else与第一个if对齐,判断else匹配的是第一个if打印的结果是haha,但你去运行代码却发现,什么都不打印。
在这里插入图片描述

这是为什么呢?这是因为else总是与其最接近的if相匹配。上⾯的代码排版,让 else 和第⼀个 if 语句对⻬,这是不规范的代码风格导致的,让我们以为 else 是和第⼀个if匹配的,当 if语句不成⽴的时候,⾃然想到的就是执⾏ else ⼦句,打印 haha ,但实际上 else 是和第⼆个 if进⾏匹配的,这样后边的 if…else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不成⽴,嵌套 if 和 else 就没机会执⾏了,最终啥都不打印。

加大括号改成下面这样更方便理解:


#include<stdio.h>
int main()
{
	int a = 2;
	int b = 3;
	if (a == 1)
	{
		if (b == 3)
			printf("hehe");
		else
			printf("haha");
	}
	return 0;
}
a=1
b=3
b!=3
a!=1
判断a==1
判断b==3
打印hehe
打印haha
结束

2. switch语句

除if语句外,还可以通过switch语句实现分支结构,用于判断有多种结果的情况,比if语句更易用更具可读性
switch的语法如下:

switch (expression)
{
  case value1: statement
  case value2: statement
  default: statement
}

上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值,
就执⾏ default 分⽀。
注:1.switch后的expression必须是整型表达式。
2.case后的value必须是整型常量表达式。
3.case后与value间要用一个空格隔开。
4.每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。
例如:输入1~7内数字,打印出对应星期几。

#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	switch (a)
	{
	case 1:
		printf("星期一");
		break;
	case 2:
		printf("星期二");
		break;
	case 3:
		printf("星期三");
		break;
	case 4:
		printf("星期四");
		break;
	case 5:
		printf("星期五");
		break;
	case 6:
		printf("星期六");
		break;
	case 7:
		printf("星期天");
		break;
	}
	return 0;
}

那如果不使用break会发生什么呢?

#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	switch (a)
	{
	case 1:
		printf("星期一");
	case 2:
		printf("星期二");
	case 3:
		printf("星期三");
	case 4:
		printf("星期四");
	case 5:
		printf("星期五");
	case 6:
		printf("星期六");
	case 7:
		printf("星期天");
	}
	return 0;
}

在这里插入图片描述

运行代码后发现,所有结果都被打印出来了,这是为什么呢?原因是switch也是具有分支效果的,没有break结束代码,代码就会继续一行一行的运行下去,直到遇到break或者switch语句结束。 所以合理运用break结束代码是非常重要的。当然,并非所有case都必须得有break结束。
例如:输入1~7内数字,判断对应星期几是工作日还是非工作日(默认星期一到星期五为工作日,星期六和星期天为非工作日)。

#include<stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	switch (num)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日");
		break;
	case 6:
	case 7:
		printf("非工作日");
		break;
	}
	return 0;
}

如果输入的不是所以case的数字,这时候就得借助default来提醒“输入错误,请输入1~7内的数字”

#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	switch (a)
	{
	case 1:
		printf("星期一");
	case 2:
		printf("星期二");
	case 3:
		printf("星期三");
	case 4:
		printf("星期四");
	case 5:
		printf("星期五");
	case 6:
		printf("星期六");
	case 7:
		printf("星期天");
	default:
		printf("输入错误,请输入1~7内的数字");
	}
	return 0;
}

在这里插入图片描述

二.循环语句

C语言中共有三种循环语句,分别是for语句,while语句,do while语句。合理地这些语句能帮助我们处理一些重复的事情,能够简化代码,减少不必要的工作。

1.for语句

for语句的语法形式如下:

for(表达式1;表达式2;表达式3)
    语句

表达式1用于循环变量的初始化
表达式2用于循环结束条件的判断
表达式3用于循环变量的调整

比如:打印0~10的数字

#include<stdio.h>
int main()
{
	for (int a = 0; a <= 10; a++)
	{
		printf("%d ", a);
	}
	return 0;
}

在这里插入图片描述

for语句的嵌套

for语句能和while语句,do while语句,if语句等语句嵌套使用

#include<stdio.h>
int main()
{
	for (int a = 0; a <= 10; a++)
	{
		if (a != 5)
			printf("%d ", a);
	}
		return 0;
}

在这里插入图片描述

2.while语句

while语句的语法形式与if语句很像

while(表达式)
      语句;

表达式为真则进行循环,语句为假则不进入循环

#include<stdio.h>
int main()
{
	while (1)//语句一直为真,死循环打印haha
		printf("haha");
	return 0;
}

在这里插入图片描述

3.do while 语句

do while 的语法形式如下;

do
    语句;
while(表达式)

while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳
出循环;
⽽ do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表
达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。
在这里插入图片描述

break和continue的使用

break

break 的作⽤是永久的终⽌循环,我们在某个条件发⽣的时候,不想再继续循环的时候,就可以
使⽤ break 来完成。
例如:

#include<stdio.h>
int main()
{
	for (int a = 0; a <= 10; a++)
	{
		printf("%d ", a);
		if (a == 5)
			break;
	}
		return 0;
}

在这里插入图片描述

continue

在 for 循环中continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调
整部分
。当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤
continue 来实现。
比如:

#include<stdio.h>
int main()
{
	for (int a = 0; a <= 10; a++)
	{
		if (a == 5)
		{
			continue;
		}
		printf("%d ", a);
	}
		return 0;
}

在这里插入图片描述

结尾

以上就是C语言中分支与循环的内容,合理的运用分支与循环语句能让我们事半功倍,一起加油叭!

  • 35
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值