分支与循环超详解(C语言)

  • Post author:
  • Post category:其他


在这里插入图片描述

(贴上薇妹的绝美侧颜,冲!)

😇 😇

各位小伙伴们,从今天开始我们就要谈谈C语言了。今天的主要内容是分支与循环:



语句


在C语言中,语句可分为以下五类




🍒 1. 表达式语句

🍒 2. 函数调用语句

🍒 3. 控制语句

🍒 4. 复合语句

🍒 5. 空语句

而今天我们要探讨的就是控制语句里面的

分支



循环




控制语句

:控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由

特定的语句定义符

组成,C语言有九种控制语句。可分成以下三类:

🍎

条件判断语句

也叫

分支语句



if语句、switch语句



🍎

循环执行语句



do while语句、while语句、for语句



🍎

转向语句



break语句、goto语句、continue语句、return语句



一、分支语句

✒️ ✒️

流程图



在这里插入图片描述



🌱 (1)if

🌵 🌵 1、

概念



if语句:指编程语言中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。

🌵 🌵 2、

if的使用方法

🍉

if(表达式)

语句1

🍉

if(表达式)

语句1

else

语句2

🍉

if(表达式)

语句1

else if(表达式)

语句2

else

语句3

(else if的数量无限制)

🌈 🌈 代码⬇️ ⬇️ :

#include<stdio.h>
int main() 
{
	int a = 0;
	
	if (a==0)//表达式
	{
		printf("hehe\n");//语句1
	}
	else if(a>0)//表达式
	{
		printf("haha\n");//语句2
	}
	else
	{
		printf("GG\n");//语句3
	}
	
	return 0;
}



注意


❗️ ❗️

🍔

(1)

悬空else

⬇️ ⬇️ :

//如下程序的结果是什么?
#include<stdio.h>
int main() 
{
	int a = 1;
	int b = 3;
	
	if (a == 0)
		if (b == 3)
			printf("hehe\n");
	else
		printf("haha\n");
	return 0;
}

输出结果为haha,这里要注意else的

就近原则



即else会和最近的if进行匹配



不良的代码风格会造成

悬空else


,使得程序的


可读性


下降,甚至造成误会。

🌈 🌈 修改后(代码⬇️ ⬇️ ):

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

🍔

(2)

关于判断条件

⬇️ ⬇️ :

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



注意

❗️ ❗️


一般我们将

常量写在等式的左边

,当我们因为疏漏把”==“写成了”=“时,程序会报错(

因为变量不能进行赋值

)。但是当我们将常量写在等式的右端时,程序不一定会报错,将常量赋值给变量在计算机看来是没有问题的。




🌱 (2)switch

🌵 🌵 1、

概念(+关键字)



switch是一种分支语句,常用于多分支的情况。

关键字:

case、break、default、switch

🌵 🌵 2、

用法

🍉 (1)

switch



switch(整形表达式)

{


语句项;

}

🍉 (2)

case



语句项的内容:

case 整形常量表达式:

语句:

🍉 (3)

break



switch中的break,能帮助我们实现真正的分支。switch语句执行时会从上到下根据括号中表达式的值作比较,当某个case语句中的表达式与此值相同时,就执行这个case语句或语句序列,直到遇到break为止。

break语句是必须有的,它用来结束switch语句的执行。

🍉 (4)

default



当所有case语句后面的表达式都不等于switch语句项中case后面整型常量表达式的值,就执行default后面的默认语句序列。不过,default部分是可选的。如果没有这一部分,并遇到所有case语句都不匹配,那么,就不作任何处理而进入后续程序段的执行。

🌈 🌈 例如判断星期几,代码⬇️ ⬇️ :

#include<stdio.h>
int main() 
{
	int day = 1;
	
	switch (day)
	{
	case 1:
		printf("Monday\n");
		break;
	case 2:
		printf("Tuesday\n");
		break;
	case 3:
		printf("Wednesday\n");
		break;
	case 4:
		printf("Thursday\n");
		break;
	case 5:
		printf("Friday\n");
		break;
	case 6:
		printf("Saturday\n");
		break;
	case 7:
		printf("Sunday\n");
		break;
	default:
		break;
	}
	
	return 0;
}



注意

❗️ ❗️ (default)


✏️ 写在任何一个 case 标签可以出现的位置。

✏️ 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。

✏️ 所以,每个switch语句中只能出现一条default子句。

✏️ 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。


在这里插入图片描述




二、循环语句

✒️ ✒️

流程图



在这里插入图片描述



🌱 (1)while

🌵 🌵

概念



while是计算机的一种基本循环模式。当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环。while语句的一般表达式为:****

while(表达式){循环体}


🌈 🌈 代码⬇️ ⬇️ :

#include<stdio.h>
int main()
{
	int a = 0;
	
	while (a < 10)
	{
		//语句内容
		a++;
		printf("%d\t", a);
	}
	
	return 0;
}



🌱 (2)for

🌵 🌵 1、

概念



for循环:编程语言中一种循环语句,而循环语句由循环体及循环的判定条件两部分组成。

🌵 🌵 2、

用法

🍉

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

循环语句;

表达式1:

表达式1为初始化部分,用于初始化循环变量的。

表达式2:

表达式2为条件判断部分,用于判断循环时候终止。

表达式3:

表达式3为调整部分,用于循环条件的调整。

🌈 🌈 代码⬇️ ⬇️ :

#include<stdio.h>
int main() 
{
	//i可以定义在外面
	for (int i = 0; i < 10; i++)
	{
		printf("%d\t", i);
	}
	
	return 0;
}

🌵 🌵 3、

for循环变种

🌳

(1)三个表达式都可以省略(初学时不建议省略)⬇️ ⬇️

#include<stdio.h>
int main()
{
	int i = 0;
	
	for (;;)
	{
		//死循环
		printf("hehe\t");
	}
	
	return 0;
}

🌳

(2)双重循环(用while也可以实现)⬇️ ⬇️

#include<stdio.h>
int main()
{
	for (int i = 0; i < 10; i++)
	{
	
		for (int j = 0; j < 10; j++)
		{
			printf("hehe\t");
		}
		
		printf("\n");
		
	}
	return 0;
}

🌳

(3)表达式里面的内容可以不止一条⬇️ ⬇️

#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	
	for (i = 0, j = 0; i < 10 && j < 10; i++, j++)
	{
		printf("hehe\t");
	}
	
	return 0;
}



建议




🌻 1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。

🌻 2. 建议for语句的循环控制变量的取值采用“

前闭后开区间

”写法。

⬇️ ⬇️ :

	for (int i = 0; i < 10; i++)
	{}
	
	for (int i = 0; i <= 9; i++)
	{}



🌱 (3)do while

🌵 🌵

概念



do…while 循环: while 循环的变体。在检查while()条件是否为真之前,该循环首先会执行一次do{}之内的语句,然后在while()内检查条件是否为真,如果条件为真的话,就会重复do…while这个循环,直至while()为假。

🌈 🌈 代码⬇️ ⬇️ :

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



总结



🍋 1、

区别while和for


🌈 🌈代码⬇️ ⬇️ :

#include<stdio.h>
int main()
{
	int i = 0;
	
	while (i++ < 10)
	{
		printf("hehe\t");
	}
	printf("\n");
	
	for (int j = 0; j < 10; j++)
	{
		printf("hehe\t");
	}
	printf("\n");
	
	return 0;
}


可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,

for循环的风格更胜一筹



for循环使用的频率也最高


🌈 🌈 代码⬇️ ⬇️ :

#include<stdio.h>
int main()
{
	int i = 0;

	while (i++ < 10)
	{
		printf("%d\t",i);
	}
	printf("\n");
	//输出结果1、2、3、4、5、6、7、8、9、10
	for (int j = 0; j < 10; j++)
	{
		printf("%d\t", j);
	}
	printf("\n");
	//输出结果0、1、2、3、4、5、6、7、8、9
	return 0;
}



注意

❗️ ❗️


while和for里面的

自增(自减)不同

,while里面的自增(自减)会在

判断过后就进行

,而for里面的会在

本次循环结束后再进行

。(曾跌进这个坑里)⬇️ ⬇️

在这里插入图片描述


🍋 2、

区别continue、break、return



continue结束的是本次循环,break结束的是本层循环,而return可以跳出所有循环。

🌈 🌈 代码⬇️ ⬇️:

//下面程序的运行结果是什么?
#include<stdio.h>
int main()
{
	int i = 0;

	while (i<10)
	{
		if (5 == i)
		{
			continue;
		}
		printf("%d\t", i);
		i++;
	}
	//结果为0、1、2、3、4后面死循环
	return 0;
}


结果为1、2、3、4后面死循环,因为i==5时会进入判断语句,continue跳出,下面的打印和自增都不会进行,所以i等于5后一直死循环。

🌈 🌈 代码⬇️ ⬇️ :

//下面程序的运行结果是什么?
#include<stdio.h>
int main()
{
	int i = 0;

	while (i<10)
	{
		if (5 == i)
		{
			break;
		}
		printf("%d\t", i);
		i++;
	}
	//结果为0、1、2、3、4
	return 0;
}


结果为0、1、2、3、4,当i==5时进入判断,break直接跳出这个循环。当在双层循环的内层循环里面使用break时,会跳出里面那层循环。



注意

❗️ ❗️


break、continue用于循环语句,但break还可以用于分支语句的switch。




三、goto语句

🌵 🌵

概念



goto语句:也可以称为无条件转移语句,其一般格式如:goto 语句标号; 其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,

标号后加半角冒号“:”。语句标号起标识语句的作用,与 goto 语句配合使用。

🌈 🌈 ⬇️ ⬇️ :

for(...)
    for(...)
   {
        for(...)
       {
            if(disaster)
                goto error;
       }
   }
    …
error:
 if(disaster)
         // 处理错误情况


✏️ C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。

✏️ 从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。

✏️ 但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。 例如:一次跳出两层或多层循环。

✏️ 多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

🌈 🌈 代码(关机程序)⬇️ ⬇️ :

#include <stdio.h>
int main()
{
    char input[10] = {0};
    system("shutdown -s -t 60");
again:
    printf("电脑将在1分钟内关机,如果输入:
    我是猪,就取消关机!\n请输入:>");
    scanf("%s", input);
 if(0 == strcmp(input, "我是猪"))
   {
        system("shutdown -a");
   }
    else
   {
        goto again;
   }
    return 0; }

🌈 🌈 不使用goto,使用循环⬇️ ⬇️ :

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char input[10] = {0};
    system("shutdown -s -t 60");
    while(1)
   {
        printf("电脑将在1分钟内关机,如果输入:
        我是猪,就取消关机!\n请输入:>");
        scanf("%s", input);
        if(0 == strcmp(input, "我是猪"))
       {
            system("shutdown -a");
            break;
       }
   }
    return 0; }

😎😎今天的内容到这里就结束了,如果各位小伙伴们有所收获的话,不妨点个赞收藏一波。

在这里插入图片描述



版权声明:本文为m0_67430750原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。