C语言——分支与循环

C语言——分支与循环

1.if语句

2.关系操作符

3.条件操作符

4.逻辑操作符

5.switch语句

6.for循环

7.while循环

8.do-while循环

9.breakcontinue语句

10.循环的嵌套

11.goto语句

在本章中,我将为大家详细的介绍分支与循环,方便初学者理解

在C语言的学习中,我们可以用if语句和switch语句实现分支结构,用for语句、while语句和do-while语句实现循环语句

首先介绍的是分支结构

1. if语句

1.1 if的三种语法形式

if的语法形式有三种,具体如下:

1. if(表达式)
      语句;
2. if(表达式)
      语句;
   else
      语句;
3. if(表达式)
      语句;
   else if(表达式)
      语句;
     .  .
     .  .
   else
      语句;

如果括号内的表达式成立(为真),则语句执行,反之,表达式不成立(为假),语句不执行。

在C语言中,0为假,非0为真

举例:判断一个数是奇数还是偶数

#include<stdio.h>

int main()
{
	int i = 0;
	scanf("%d", &i);
	if (i % 2 == 0)
		printf("是偶数");
	else
		printf("是奇数");
		return 0;
}

输出结果
在这里插入图片描述
通过画图,我们可以知道if的执行流程
在这里插入图片描述### 1.2 分支中包含多个语句

我们默认if和else都只控制一条语句,如果想让其控制两条及以上,则需要有{},如果没有{},则无论表达式为真还是假,语句2不受任何影响,仍然执行

 if()
 { 
   语句1;
   语句2}

举例:输入一个值,看是否成年

#include<stdio.h>

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
	{
		printf("成年了\n");
		printf("可以自己做主了");
	}
	return 0;
}

在这里插入图片描述如果没有加上{},则结果
在这里插入图片描述### 1.2 if的嵌套使用

在if else语句中,else可以与另一个if语句嵌套,构成多层判断

举例:判断一个数是奇数还是偶数

#include<stdio.h>

int main()
{
	int i = 0;
	scanf("%d", &i);
	if (i > 0)
	{
		if (i % 2 == 0)
			printf("偶数");
		else
			printf("奇数");
	}
	else
	{
		printf("不是正数");
	}
	return 0;
}

在这里插入图片描述

1.3 悬空else问题

如果有多个if和else,else都会与离得最近的if匹配

举例:

#include<stdio.h>

int main()
{
	int a = 0;
	int b = 2;
	scanf("%d", &a);
	if (a == 1)
		if (b == 2)
			printf("hehe\n");
	else
			printf("hello\n");
	return 0;
}

在这段代码中,很多人容易被误导,认为第一个if和else位置对应,但实际不是这样,在这段代码中,如果a不等于1时,则什么都不会输出,
在这里插入图片描述
这段代码如果改为以下的,我们将会更好理解

#include<stdio.h>

int main()
{
	int a = 0;
	int b = 2;
	scanf("%d", &a);
	if (a == 1)
	{
		if (b == 2)
			printf("hehe\n");
		else
			printf("hello\n");
	}
	return 0;
}

因此,我们可以知道,如果有多个if和else,else都会与离得最近的上一个if匹配

2. 关系操作符

C语言用于比较的表达式,称为关系表达式,里面的运算符叫关系运算符

以下为6个关系运算符

> 大于运算符
< 小于运算符
<= 小于等于运算符
>= 大于等于运算符
== 相等运算符
!= 不相等运算符

关系表达式通常返回0或1,表示真假

关系表达式常用于if和while结构

注意

  • ==相等运算符和=赋值运算符不同,当我们输错时,程序可能仍会执行,但结果可能不同
  • 不能将多个关系运算符连用,例如(i < j < k),这个就是错误的,如果要改为正确的,则应为(i < j && j < k)

3. 条件操作符

条件操作符也叫三目操作符,需要接受三个操作数,形式如下

exp1 ? exp2 : exp3;

此条件操作符的计算逻辑是:如果 exp1 为真,则exp2计算;如果exp1为假,则exp3计算
在这里插入图片描述
在此代码中,我们可以看到(2>8)这个表达式不成立,则输出的为后一个,否则输出的为前一个

4. 逻辑操作符:&&,||,!

逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有三个运算符

!:逻辑取反运算符(改变单个表达式的真假)
&&:逻辑与运算符,就是并且的意思(两侧的表达式为真时,才为真,否则为假)
||:逻辑或运算符,就是或者的意思(两侧至少有一个表达式为真时,才为真,否则为假)

4.1 逻辑取反运算符

#include<stdio.h>

int main()
{
    int flag = 0;
    if(!flag)
    {
        printf("do someing");
    }
    return 0;
}

如果flag为真,则!flag为假,语句不执行;如果flag为假,则!flag为真,执行语句

在上面的代码中,我们可以看到flag等于0,则!flag为真,y7uju

4.2 逻辑与运算符

在逻辑与运算符中,&&是并且的意思,&&是双目运算符,使用方式为a&&b,如果两边表达式为真,整个表达式为真,有一个为假,则都为假

举例:3—5月是春天,用代码表示如下
在这里插入图片描述

4.3 逻辑或运算符

||是一个双目运算符,使用方式为a||b,两边的表达式至少有一个是真的,则整个表达式才是真的,如果两边都为假时,表达式是假的

举例:一年中的12、1、2月为冬季,我们如何表示
在这里插入图片描述

4.4 短路

C语言逻辑运算符有一个特点,它总是先对左侧的表达式求值,再对右边的表达式求值

如果左边的表达式符合逻辑运算符的条件,就不再对右边的表达式求值,这个叫短路

5. switch语句

switch是一种特殊形式的if…else结构,用于判断条件有多个结果的情况

以下为Switch的形式

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

在上面的代码中,我们根据expression不同的值,执行相应的case分支,如果我们没有在case中找到对应的值,则执行default

注意:

  • switch后的expression必须是整型表达式
  • case后的值,必须是整型常量表达式

5.1 if和switch语句的对比

举例:输入一个整数,计算除以3后的余数

if语句表示

#include<stdio.h>

int main()
{
	int i = 0;
	scanf("%d", &i);
	if (i % 3 == 0)
	{
		printf("余数为0\n");
	}
	else if (i % 3 == 1)
	{
		printf("余数为1\n");
	}
	else
	{
		printf("余数为2\n");
	}
	return 0;
}

用switch表示

#include<stdio.h>

int main()
{
	int i = 0;
	scanf("%d", &i);
	switch (i % 3)
	{
	case 0:
		printf("余数为0\n");
		break;
	case 1:
		printf("余数为1\n");
		break;
	case 2:
		printf("余数为2\n");
		break;
	}
	return 0;
}

在上面的代码中,我们需要注意:

case和后面的数字之间需要有空格

每个case语句执行完成后,需要加上break

5.2 switch中的break

接下来,我们去掉break,会发现什么
在这里插入图片描述

在上图中,我们可以看见,当我们输入3时,结果为0,按理来说,应该执行语句1,但由于没有break,语句会继续执行,因此语句2也执行,而语句2后有break,语句结束,语句3不执行。

所以,我们可以知道,在Switch语句中,break是十分重要的

5.3 switch语句中的default

在使用switch时,我们可能会遇到表达式的值与代码中的case无法匹配的情况,这种情况下,我们可以不做处理,也可以加上default

举例:
在这里插入图片描述

5.4 case和default的顺序问题

对于switch语句,case和default的顺序没有要求,我们为了美观,通常把default放在最后

接下来,我将介绍三种循环

6. for循环

6.1 语法形式

for循环的语法形式如下

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

表达式1 用于循环变量的初始化

表达式2 用于循环结束条件的判断

表达式3 用于循环变量的调整

举例:打印1到10

#include<stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		printf("%d", i);
	}
	return 0;
}

输出结果
在这里插入图片描述

6.2 for循环的执行流程

接下来,我们通过图来看for循环的执行流程
在这里插入图片描述

首先执行表达式1初始化循环变量,接下来执行表达式2的判断部分,表达式2的结果如果==0,则循环结束;表达式2的结果如果!=0,则执行循环语句,循环语句执行完后,再去执行表达式3,调整循环变量,然后再去表达式2的地方执行判断,表达是2的结果是否为2,决定循环是否继续

整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环

7. while循环

语法形式

#include<stdio.h>

int main()
{
	初始化;
	while(判断)
	{
		语句;
		调整;
	}
	return 0;
}

for和while在实现循环的过程中都有初始化、判断、调整,但for循环的三个部分非常集中,便于代码的维护,而while循环的部分较为松散,所以for循环要更优一点

举例:我们依旧打印1到10

#include<stdio.h>

int main()
{
	int i = 1;
	while(i <= 10)
	{
		printf("%d ", i);
		i++;
	}
	return 0;
}

输出结果
在这里插入图片描述

8. do-while循环

8.1 语法形式

do
  语句;
while(表达式)

for和while循环都是先判断,条件满足就进入循环,就执行循环语句,如果不满足,就跳出循环

而do-while循环式则先直接进入循环体,然后再判断,表达式为真,则继续进行下一步,表达式为假,则跳出循环

举例:打印1到10

#include<stdio.h>

int main()
{
	int i = 1;
	do
	{
		printf("%d ", i);
		i++;
	} while (i <= 10);
	return 0;
}

8.2 do-while循环的执行流程

我们依旧画图来展示
在这里插入图片描述

在do-while循环中,先执行语句,然后,判断表达式,表达式为真,则继续循环,表达式为假,则终止循环

do-while语句的循环体至少循环一次

9. break和continue语句

在执行循环的过程中,有时需要提前终止循环,因此我们有时需要break和continue

break的作用是终止所有循环,只要break语句被执行,直接跳出循环,即循环结束

continue的作用是跳过本次循环,但仍会继续下一次循环

通过举例来观察break和continue的区别
在这里插入图片描述

将break换成continue,我们再来观察一下
在这里插入图片描述

在上面两个代码中,我们可以明确看到break和continue的区别,

10. 循环的嵌套

有时我们将我们所学的循环结合在一起能更好的解决问题,这个叫嵌套循环

通过举例,我们来看一下什么是嵌套循环

举例:找出100到200的素数(只能被1和它本身整除)

1.我们先用循环解决100到200的数

2.我们用100到200的数分别除以2到这个数少1的数,判断100到200是不是素数

3.输出结果
在这里插入图片描述

11. goto语句

C语言提供了一种非常特别的语法,就是goto语句与跳转符号,goto语句可以实现在同一个函数内跳转到设置好的标号处

例如

#include<stdio.h>

int main()
{
	printf("hehe\n");
	goto next;
	printf("haha\n");

next:
	printf("跳过了haha的打印\n");
	return 0;
}

goto如果使用不当,会导致在函数内部随意乱跳转,打乱程序的执行流程,

所以我们尽量不去使用goto,但goto语句有一个好处,就是在多层循环代码中,方便于我们快速跳出

continue的区别,

10. 循环的嵌套

有时我们将我们所学的循环结合在一起能更好的解决问题,这个叫嵌套循环

通过举例,我们来看一下什么是嵌套循环

举例:找出100到200的素数(只能被1和它本身整除)

1.我们先用循环解决100到200的数

2.我们用100到200的数分别除以2到这个数少1的数,判断100到200是不是素数

3.输出结果

在这里插入图片描述

11. goto语句

C语言提供了一种非常特别的语法,就是goto语句与跳转符号,goto语句可以实现在同一个函数内跳转到设置好的标号处

例如

#include<stdio.h>

int main()
{
	printf("hehe\n");
	goto next;
	printf("haha\n");

next:
	printf("跳过了haha的打印\n");
	return 0;
}

goto如果使用不当,会导致在函数内部随意乱跳转,打乱程序的执行流程,

所以我们尽量不去使用goto,但goto语句有一个好处,就是在多层循环代码中,方便于我们快速跳出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值