首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【C语言入门】分支循环结构

【C语言入门】分支循环结构

作者头像
良木生香
发布2026-01-09 14:18:22
发布2026-01-09 14:18:22
1280
举报

    在此之前学习了许多C语言的基本知识了,那么今天我们来学习C语言中不可或缺的部分——分支与循环结构语句。

    在C语言中,我们经常用到顺序语句,循环语句还有分支语句,其中,我们可以用if,switch为首的分支语句,即判断语句,还可以使用以for,while,do...while为主的循环语句。接下来让我们一一看看这都是怎么个事儿。

一、if语句

1.if

if语句的语法如下:

代码语言:javascript
复制
if(表达式)
{
    语句
}

当括号中的表达式成立(为真或1)时,进入大括号里分支语句,反之,如果为不成立(即为假或0)时,不会进入大括号里的分支语句。

我们可以用if语句来判断一个数是否为奇数

代码语言:javascript
复制
#include<stdio.h>
int main()
{
    int num = 0;
    scanf("%d",&num);
    if(num%2 == 0)      //如果这个数可以整除二,那就不是奇数
        printf("这个数不是奇数\n");
    return 0;
}

但是这个程序只能输出一条信息,它只能告诉我这个数不是奇数而已,那如果我想要让它告诉我这个数是奇数呢,该咋办?

2.else

这时候就用到if...else...语句了,说白了,这俩玩意一般情况下都是成双成对出现的,我们可以对上面的代码进行如下修改:

代码语言:javascript
复制
#include<stdio.h>
int main()
{
    int num = 0;
    scanf("%d",&num);
    if(num%2 == 0)      //如果这个数可以整除二,那就不是奇数
        printf("这个数不是奇数\n");
    else
        printf("这个数是奇\n");
    return 0;
}

这样就会让我们的程序更加完善了。

对于 if 来说,它一次只能控制一条语句,如果像想要让if在表达式为真的情况下输出多条语句或者是进行多条指令,那就要加上大括号将这些指令括起来,例如:

代码语言:javascript
复制
#include<stdio.h>
int main()
{
    int num = 0;
    scanf("%d",&num);
    if(num%2 == 0)      //如果这个数可以整除二,那就不是奇数
    { 
        printf("这个数不是奇数\n");
        printf("你继续输入吧~\n";
    }
    return 0;
}

这样一来,只有在输入的数为偶数的时候才会统一输出这两条语句。

那这时候就有同学要问了,如果想要实现更加复杂的功能怎么办?单单if和else能实现的功能也太少了吧......这时候我们就要用到if语句的嵌套了,看看下面的代码:

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
	{
		printf("恭喜你,你已经成年了!\n");
		printf("你爸妈同意你谈恋爱吗?1.同意  0.不同意");
		int choose = 0;
		scanf("请输入你爸妈的选择:%d", &choose);
		if (choose == 1)
		{
			printf("那你可以谈恋爱了!\n");
		}
		else
		{
			printf("你还是老老实实的单身吧~\n");
		}
	}
	else
	{
		printf("你还没成年,不能谈恋爱哟~~\n");
	}
	return 0;
}

当你输入的年龄为19时,运行结果会是这样的:

假设这时候又输入了 1 ,那结果会出现:

可以看到,程序在执行了该条件下的语句,如果将1改成0,那结果又会是:

但如果我们在输入年龄的时候就输入了一个小于18的数字呢,结果又会怎么样?

结果就会直接输出else里面的与语句。

这时候就引出了一个新的问题,同样是else,为什么不会输出括号里面的else呢?而是输出括号外面的else?这就涉及到了if与else的匹配问题。

在if...else...语句中,else总是与理它最近的if进行匹配,也就是说,哪个if与它对齐,它就与哪个if进行匹配

在这张图中,红色的if...else是一对,蓝色的if...else是一对。

那有同学这时候又说了,谁规定18岁以下就不能谈恋爱的?我就要谈!额,那也行,我们可以修改一下这个程序,帮助这个同学实现18岁以下也能谈恋爱的梦想:

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
	{
		printf("恭喜你,你已经成年了!\n");
		printf("你爸妈同意你谈恋爱吗?1.同意  0.不同意");
		int choose = 0;
		scanf("请输入你爸妈的选择:%d", &choose);
		if (choose == 1)
		{
			printf("那你可以谈恋爱了!\n");
		}
		else
		{
			printf("你还是老老实实的单身吧~\n");
		}
	}

    else if(age<18&&age>=15)
        printf("你现在是早恋哦~小心被家长发现哦~~~\n");

	else
	{
		printf("你还没成年,不能谈恋爱哟~~\n");
	}
	return 0;
}

这时候我们输入一个16看看怎么个事儿~:

可以看到,程序直接输出了这句话,由此可见,当出现了多种判断条件时,就可以使用if...else if...else...这样的结构。

ok,既然if...else...语句讲完了,那我们先在来讲一讲分支语句中的第二种语句:switch语句

二、switch语句

switch语句与if...else...语句有着异曲同工之妙~

switch语句相当于是把多个else...if..语句整合到一起了,格式如下:

代码语言:javascript
复制
switch(表达式)
{
    case value1:语句1; break;
    case value2:语句2; break;
    case value3:语句3; break;
    ...
    default:语句n; break;
}

要注意的是:1.switch()括号里的表达式必须是整形表达式,                       2.case后面的value值必须是常量表达式

我们可以通过两段代码来对比一下if...else语句和switch语句的差别,就以求除以3之后的余数为例:

这是if...else语句:

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int num = n % 3;
	if (num == 0)
	{
		printf("余数是0\n");
	}
	else if (num == 1)
	{
		printf("余数是1\n");
	}
	else
	{
		printf("余数是2\n");
	}
	return 0;
}

这是switch语句:

代码语言:javascript
复制
#include<stdio.h>
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的功能才这样举例的老铁们!!!

在代码中我们可以看到每个case语句后面都跟有break;语句,这是为什么呢?我们把break语句去掉后看看效果:

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n % 3)
	{
	case 0:printf("余数是0\n"); 
	case 1:printf("余数是1\n"); 
	case 2:printf("余数是2\n");
	}
	return 0;
}

运行结果如下:

可以看到,在去掉break;语句之后,输出的结果就不尽人意了,由此可以看出,break;语句的存在,才能让switch语句起到分支的效果。

在switvh语句里面还有一个特殊的地方,就是default语句,这条语句的作用是在case表达式中都没有符合要求的条件的情况下,才会执行default语句,其作用相当于else。

三、while循环

分支结构讲完了,现在来讲讲循环结构,C语言给我们提供了三种循环语句,我们就从最近简单的while循环开始~

while,顾名思义就是,当...的时候,要怎么怎么样,他的格式是这样子的:

代码语言:javascript
复制
while(表达式)
{
    语句:
}

当表达式的值为真或1时,就会循环地执行大括号里面的语句:

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	int count = 0;
	while (1)
	{
		printf("博主好帅!!!\n");
		count++;
		if (count == 5)
			break;
	}
	return 0;

}

在这段代码中,当循环次数到达五次时候,就会停止输出,结果如下:

至于怎么做到的,本文章后面会讲。

四、for循环

    for循环是三种循环形式中使用最多的,但也是三种循环中最难理解的。其语法形式如下:

代码语言:javascript
复制
for(表达式1;表达式2;表达式3)
{
    语句;
}

  • 表达式1用于初始化循环变量
  • 表达式2是判断循环结束的标志
  • 表达式3是循环变量的调整

我们可以通过下面这代码来了解一下for循环的具体实现:

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	return 0;
}

运行结果如下:

从这段代码中,i=0是变量的初始化,i<10是循环结束的标志,i++是对循环的调整。也就是说,i从0开始打印数字,最多打印到9,每次打印之后都加1。

因为for循环的三个部分是比较集中的,所以在代码量非常大的时候,for循环就更加容易维护一点

五、do...while循环

在学习了前两个循环语句之后,我们现在来看看最后一个循环语句:do...while语句。

它与while循环语句不同的是do...while比while多了一个do,也就意味着,在执行循环之前,do...while会比while多执行一次,它的语法格式如下:

代码语言:javascript
复制
do
{
    语句;
}while(表达式);

如果表达式为真或者1,那么就会执行下一次循环,如果为假或者0,那就会跳出循环结构。

使用do...while循环打印1~10:

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	int i = 1;
	do
	{
		printf("%d ", i);
		i += 1;

	} while (i <= 10);
	return 0;
}

运行结果如下:

六、break语句和continue语句

在执行循环结构时,避免不了的在遇到某些情况时要终止循环,这就要用到break语句和continue语句了。

break和continue其实很好理解,简单来说,break的作用是永久的终止循环,不管你后买你还有多少次的的代码要执行,要循环,全部都给你中止掉,不再运行;而ontinue的作用是条跳过本次循环,也就是本次循环的结果不被记录,然后进行下一论循环

七、goto语句

C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数

内跳转到设置好的标号处。下面用代码来展示一下:

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	printf("这是本来就要打印的\n");
	goto there;
	printf("这是将要被跳过的\n");
there:
	printf("这是跳过了第二句话直接来到这里了\n");
	return 0;
}

运行结果如下:

当你想要使用goto语句的时候,就一定要在你想要跳转的语句之前加上提示词,让goto语句知道你想要跳转到那个位置,这也是跳出循环的一种方法。

文章是自己写的哈,有啥描述不对的、不恰当的地方,恳请大佬指正,看到后会第一时间修改,感谢您的阅读。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、if语句
    • 1.if
    • 2.else
  • 二、switch语句
  • 三、while循环
  • 四、for循环
  • 五、do...while循环
  • 六、break语句和continue语句
  • 七、goto语句
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档