首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【落羽的落羽 C语言篇】C语言的结构——分支和循环

【落羽的落羽 C语言篇】C语言的结构——分支和循环

作者头像
用户11956881
发布2025-12-18 18:54:55
发布2025-12-18 18:54:55
140
举报

一、概览

C语言是一种结构化的程序设计语言,包括三种结构:顺序结构、分支结构、循环结构。

其中,顺序结构是最简单的一种,即按照代码语句的上下顺序依次执行。今天着重介绍另外两种。

二、分支结构

分支结构,也可以叫做选择结构,分为if语句和switch语句两种

1. if语句

1.1 if

if语句的语法形式为`

代码语言:javascript
复制
if(表达式)
  {
  语句
  语句
  ......
  }
  //tip:如果不加{},只会执行if下的第一条语句。所以有多条语句的话,一定记得加上{}哦。下同

若表达式为真(非0),则执行下列语句 为假(0),则不执行

1.2 else与else if
代码语言:javascript
复制
if(表达式)
  {
  语句
  语句
  ......
  }
else
  {
  语句
  语句
  ......
  }
  //tip:如果有多个if和else,else总是和最近的if匹配

当if后的表达式为假不执行语句时,便跳过if,来到else执行它这里的语句 很好理解吧( •̀ .̫ •́ )✧ 而如果你有更多情况需要分类,就可以加上else if

代码语言:javascript
复制
if(表达式1)
{
语句
......
}
else if(表达式2)
{
语句
......
}
else if(表达式3)
{
语句
......
}
else
{
语句
......
}

运行时,会自上而下依次检测。 表达式1为真,执行其下面的语句。为假,则检测表达式2; 表达式2为真,执行其下面的语句。为假,则检测表达式3; 表达式3为真,执行其下面的语句。为假,则执行else下的语句;

知道为什么叫“选择”结构了吧(乐)

举个栗子

代码语言:javascript
复制
#include<stdio.h>
int main()
{
int a;
printf("中野家的五姐妹你喜欢谁?\n");
scanf("%d",&a);
if(a==1)
   printf("中野一花\n");
else if(a==2)
   printf("中野二乃\n");
else if(a==3)
   printf("中野三玖\n");
else if(a==4)
   printf("中野四叶\n");
else if(a==5)
   printf("中野五月\n");
else  //如果用户输入的不是1-5的情况
   printf("查无此人()\n");

return 0;
}

结果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.3 嵌套if

有了上面的知识,我们还可以进一步尝试嵌套if,构成多重判断

举个栗子:输入一个整数,判断是整数,负数,还是0。再判断是奇数还是偶数

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	int a=0;
again:
    printf("请输入一个整数:");
	scanf("%d", &a);
	
	if (a > 0)                            //判断a是不是正数 
	{
	    if (a % 2 == 0)                   //判断a是不是偶数
			printf("%d是正数而且是偶数\n\n", a);
		else                              //不是偶数那肯定是奇数了
			printf("%d是正数而且是奇数\n\n", a);
	}
	else if (a < 0)
	{
		if (a % 2 == 0)
			printf("%d是负数而且是偶数\n\n", a);
		else
			printf("%d是负数而且是奇数\n\n", a);
	}
	else  //a既不是正数也不是负数,那就是0了
		printf("%d是偶数\n\n", a);
	
goto again;
	
	return 0;
}

这里的goto语句后面会讲到,先不用理解,我只是为了方便将几种情况放到一起展示 结果:

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

灰常简单

不过,如果要嵌套更多的if语句,就需要梳理好逻辑关系,不然就可能会把结果弄错

2. switch语句

switch语句是if…else语句的一种特殊形式,对于有多种判断条件的情况,它可以把else if改成更简洁的形式 执行方式是:根据表达式不同的值,执行相应的case的分支。如果没有相应的case,就执行default分支

代码语言:javascript
复制
switch(表达式)  
{
   case 结果1:
       语句1
       break;
   case 结果2:
       语句2
       break;
   ......
   default:   
       语句3
   //tip:其实case和default没有严格的顺序要求,满足需求即可,不过一般习惯把default放在最后 
}

注意: 1. switch后的表达式必须是整型表达式 2. case后的值,必须是整型常量表达式 3. break的作用是执行完一个case下的语句后可以跳出switch。没有break的话,比如算出结果1,执行完语句1,会继续向下执行语句2,直到语句3结束,这可能就不是我们要的结果了。

再来个栗子: 输入1-7的一个数字,判断对应的星期几是工作日还是休息日

如果你没有加break:

代码语言:javascript
复制
#include <stdio.h>
int main()
{
int day;
scanf("%d",&day);
switch(day)
{
  case 1:
  printf("工作日\n");
  case 2:
  printf("工作日\n");
  case 3:
  printf("工作日\n");
  case 4:
  printf("工作日\n");
  case 5:
  printf("工作日\n");
  case 6:
  printf("休息日\n");
  case 7:
  printf("休息日\n");
  default
  printf("错误\n");
}
return 0;
}

结果就不对

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

所以一定要记得break啊!!

代码语言:javascript
复制
#include <stdio.h>
int main()
{
int day;
scanf("%d",&day);
switch(day)
{
  case 1:
  printf("工作日\n");
  break;
  case 2:
  printf("工作日\n");
  break;
  case 3:
  printf("工作日\n");
  break;
  case 4:
  printf("工作日\n");
  break;
  case 5:
  printf("工作日\n");
  break;
  case 6:
  printf("休息日\n");
  break;
  case 7:
  printf("休息日\n");
  break;
  default
  printf("错误\n");
  break;  //其实这个break加不加无所谓,因为它在最后面
}
return 0;
}

这样结果就没问题了

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

当然,刚才说到,没有break的话它会自上而下运行,所以其实可以把代码简化成这样:

代码语言:javascript
复制
#include <stdio.h>
int main()
{
int day;
scanf("%d",&day);
switch(day)
{
  case 1:
  case 2:
  case 3:
  case 4:
  case 5:
  printf("工作日\n");
  break;
  case 6:
  case 7:
  printf("休息日\n");
  break;
  default
  printf("错误\n");
}
return 0;
}

结果也是没问题的,就不再演示了o( ̄▽ ̄)d

三、循环结构

循环语句有三种:while,for,do while

1. while循环

while的语法形式为:

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

若表达式为真,则执行下列语句,执行完再判断表达式真假,为真再执行…如此循环。 若表达式为假,则结束while语句。

举个栗子:打印1~666的所有整数

代码语言:javascript
复制
#include <stdio.h>
int main()
{
int i=1;

while(i<=666)
{
printf("%d ",i);
i++;
}

return 0;
}
在这里插入图片描述
在这里插入图片描述

很顺利

2. for循环

for循环是用的最多的,语法形式如下:

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

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

流程:首先执行表达式1,初始化变量。接下来判断表达式2的真假,为真则执行下列语句,为假则结束循环。语句执行完后,再执行表达式3,调整变量,再去判断表达式2的真假…如此循环。能看出来,表达式1只被执行了一次,剩下的全是“表达式2——语句——表达式3”的循环。

还是这个栗子:打印1~666的所有整数

代码语言:javascript
复制
#include <stdio.h>
int main()
{
int i=0;

for( i=1 ; i<=666 ; i++ )
{
printf("%d ",i);
}

return 0;
}

来看看结果:

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

下次还填非常简单( ゜▽ ゜)つロ

3. do while循环

do while循环的语法形式:

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

它的运行流程有些不一样: 前面的while和if语句,都是先判断表达式的真假,再执行语句。 而do while循环中,首先执行语句,再去判断表达式的真假,为真则继续执行语句,为假则结束循环。 所以在do while语句中,循环体是至少执行一次的,某些场景下可能会用到这个特性。

再来:打印1~666的所有整数

代码语言:javascript
复制
#include <stdio.h>
int main()
{
int i=1;

do
{
printf("%d ",i);
i++;
}
while(i<=666);

return 0;
}
在这里插入图片描述
在这里插入图片描述

没毛病

四、break,continue和goto语句

1. break语句

在循环执行的过程中,如果遇到某些情况需要终止循环,就可以用到break语句。 只要break被执行,就会直接跳出其所处的循环,继续往后执行。

我们以for循环举例,看懂后另外两种循环就是照猫画虎 在之前的栗子中,我们做一些修改

代码语言:javascript
复制
#include <stdio.h>
int main()
{
int i=0;

for( i=1 ; i<=666 ; i++ )
{
if(i==67)   //新加
break;       //新加
printf("%d ",i);
}

return 0;
}

显然,这样的话结果只会打印到66

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

2. continue语句

continue可以跳过本次循环中它后面的代码,而直接进行下一次循环的判断 但在while语句和for语句中,效果有所不同~ (do while语句和while语句中continue效果类似)

2.1 while循环中的continue

我们还是改一下上面的栗子

代码语言:javascript
复制
#include <stdio.h>
int main()
{
int i=1;

while(i<=666)
{
printf("%d ",i);
continue;
i++;
}

return 0;
}
在这里插入图片描述
在这里插入图片描述

结果是死循环打印1 这是因为每次循环中 i++ 都被跳过了,i 一直是1,i <= 666恒成立,就导致了死循环

2.2 for循环中的continue
代码语言:javascript
复制
#include <stdio.h>
int main()
{
int i=0;

for( i=1 ; i<=666 ; i++ )
{
if(i==10)
continue;
printf("%d ",i);
}

return 0;
}
在这里插入图片描述
在这里插入图片描述

10被跳过了,但后面的数正常打印 这是因为continue跳过了后面的 printf,来到 i++,i 变成了11,不满足 if 的条件,continue不再执行了

ok很好理解ヾ(◍°∇°◍)ノ゙

3. 循环的嵌套

有了上面的知识,我们就可以来试试用嵌套循环语句来实现复杂的要求了

栗子:打印1~200之间所有的素数

解析: 1.找出1~200间所有的数 2.对于每一个数 i ,如果在2~ i-1间存在一个整数 j 能整除 i ,那么 i 就不是素数

展示:

代码语言:javascript
复制
#include <stdio.h>
int main()
{
int i = 0;
for(i=1 ; i<=200; i++)//循环产⽣1~200的数字
{
    int j = 0;
    int flag = 1;//假设i是素数
    for(j=2; j<=i-1 ; j++)//循环产⽣2~i-1之间的数字
    {
        if(i % j == 0)
            {
            flag = 0;//i不是素数
            break;
            }
    }
if(flag == 1)
printf("%d ", i);
}
return 0;
}
在这里插入图片描述
在这里插入图片描述

4. goto语句

最后我们来介绍下之前提过的goto语句 goto语句可以实现在同一个函数内跳转到设置好的标号处,就像山里灵活的狗一样。 再来个栗子:

代码语言:javascript
复制
#include<stdio.h>
int main()
{
落羽:
printf("乐");
goto 落羽;
printf("喜");

return 0;
}
在这里插入图片描述
在这里插入图片描述

这样,每次运行到“goto 落羽”,都会回到最上面“落羽:”,如此死循环打印“乐”,而不会打印“喜”

但如果使用不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程,所以我们的建议是能不用尽量不去使用。 但是 goto 语句也不是一无是处,在多层循环的代码中,写一次break只能跳出一层循环。如果想快速跳出,使用goto就非常的方便了。

代码语言:javascript
复制
for(...)
{
  for(...)
  {
    for(...)
    {
     if(...)
     goto name;
    }
  }
}
name:
//name是可以任起的,只是一个对应关系

本篇完~~谢谢阅读 请大家看可爱流萤

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概览
  • 二、分支结构
    • 1. if语句
      • 1.1 if
      • 1.2 else与else if
      • 1.3 嵌套if
    • 2. switch语句
  • 三、循环结构
    • 1. while循环
    • 2. for循环
    • 3. do while循环
  • 四、break,continue和goto语句
    • 1. break语句
    • 2. continue语句
      • 2.1 while循环中的continue
      • 2.2 for循环中的continue
    • 3. 循环的嵌套
    • 4. goto语句
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档