介绍一下C语言分支循环语句

前言:文章有错误欢迎各位指正,谢谢。

C语言是结构化的程序设计语言,这里的结构是指顺序结构、选择结构和循环结构。

我们可以使用 if、switch 实现分支结构,使用 for 、 while 、 do while 实现循环结构

一 分支结构

1.if语句

表达形式:

if(表达式)//表达式为真则语句执行,表达式为假则语句不执行
{
    语句
}

举个例子,判断一个数是不是偶数。

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

运行结果:

1.1 if...else语句

如果一个数不是偶数那就是奇数了。这时我们就可以使用if...else语句来实现。

表达式:

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

举个例子,判断一个数是奇数还是偶数。

#include <stdio.h>
int main()
{
    int num = 0;
    scanf("%d", &num);
    if(num % 2 == 0)
        printf("%d 是偶数\n",num);
    else
        printf("%d 是奇数\n",num);
    return 0;
}

运行结果:

1.2 分支中包含多条语句

默认if和else只控制一条语句。

举个例子

int main()
{
	int gra = 0;
	scanf("%d", &gra);
	if (gra >= 60)
		printf("及格了\n");
		printf("不用补考了\n");
	return 0;
}

运行结果:

可以发现不管输入的数是大于60还是小于60,最后都会打印“不用补考了”。这是因为if只能控制一条语句,printf("不用补考了\n");不在if的控制范围内,所以直接打印了。

那我们怎样控制多条语句呢,其实用{}括起来就可以了。

int main()
{
	int gra = 0;
	scanf("%d", &gra);
	if (gra >= 60)
	{
		printf("及格了\n");
		printf("不用补考了\n");
	}
	return 0;
}

运行结果:

通过运行结果可以发现,if控制了两条语句,这便是{}的作用。else同理。

1.3 嵌套if

在if...else语句中else可以与if一块使用来表示多重条件。

if(表达式)
    语句1
else if(表达式)//这里的if相当于嵌套在else语句中了
    语句2
else
    语句3

举个例子,判断一个数是0、正数还是负数。

int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num > 0)
		printf("是正数\n");
	else if (num == 0)
		printf("是0\n");
	else
		printf("是负数\n");
	return 0;
}

运行结果:

1.4 else悬空问题 

举个例子。

int main()
{
	int a = 1;
	int b = 2;
	if (a == 0)
		if (b == 2)
			printf("hello");
		else
			printf("hi");
	return 0;
}

运行结果:

可以发现,什么也没打印,有些新人可能会认为这里会打印hi,但其实这里的else是和第二个if进行匹配的。 后面的if...else语句是嵌套在第一个if语句中的,第一个if的条件没有满足,后面的if和else自然就没有机会执行了,由此可见,else总是和离它最近的if匹配。

2.switch语句

除了if语句,c语言还提供了switch语句,switch用于解决多重情况问题,比else if语句更加易用,可读性更好。

switch(input)
{
    case 1:语句1
    case 2:语句2
    default: 语句3
}

根据表达式input的不同,执行相应的case分支。

举个例子。

int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n)
	{
	case 0:
		printf("hello\n");
		break;
	case 1:
		printf("hi\n");
		break;
	case 2:
		printf("你好\n");
		break;
	}
	return 0;
}

运行结果:

每一个case语句执行完成后要在后面加上break语句,这样才能跳出switch循环。

如果没有break语句运行结果就会如下图一样。

 这是因为switch语句也有分支效果,如果case语句后没有break语句,代码就会继续往下执行,这样可能会执行其他的语句。

default语句很像if...else语句中的else语句,当case语句都不满足条件时,就执行default语句。

3.while循环

C语言提供了3种循环,while是其中之一。

表达式:

while(表达式)
{
    语句
}

举个例子。

int main()
{
	while (1)
		printf("hello");
	return 0;
}

运行结果:

 

可见,只要满足条件,就会一直执行语句。 while可以达到一个循环的效果。

while语句的执行流程为:首先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语 句,语句执行完后再继续判断,是否进行下⼀次判断。

while循环的实践,在屏幕上打印1~10。

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

运行结果:

4.for循环

表达式:

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

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

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

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

for循环的执行流程:首先执行表达式1初始化循环变量,接下来就是执行表达式2的判断部分,表达式2的结果如果 ==0,则循环结束; 表达式2 的结果如果!=0则执行循环语句,循环语句执行完后,再去执行表达式3 ,调整循环变量,然后再去表达式2 的地方执行判断,表达式2 的结果是否为0,决定循环是否继续。整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。

for循环的实践,计算1~100之间3的倍数的数字的和。

int main()
{
	int i = 0;
	int sum = 0;
	for (i = 1; i <= 100; i++)
	{
		if (i % 3 == 0)
			sum += i;
	}
	printf("%d\n", sum);
	return 0;
}

运行结果:

5.do-while循环

表达式:

do
    语句
while(表达式);

while和for这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环;而do while 循环则是先直接进入循环体,执行循环语句,然后再执行 while 后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。

do-while循环的执行流程:在 do while 循环中先执行图上的“语句”,执行完语句,在去执行“判断表达式”,判断表达式的结果是!=0,则继续循环,执行循环语句;判断表达式的结果==0,则循环结束。所以在 do while 语句中循环体是至少执行⼀次的,这是 do while 循环比较特殊的地方。

实践一下,在屏幕上打印1~10。

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

运行结果:

6.break和continue关键字

在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中提供了 break 和 continue 两个关键字,就是应用到循环中的。

break 的作用是用于永久的终止循环,只要 break 被执行,直接就会跳出循环,继续往后执行。

continue 的作用是跳过本次循环中 continue 后边的代码,在 for 循环和 while 循环中有所差异的。

6.1 在while循环中的break和continue。

对于break

int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break;//当i等于5后,就执⾏break,循环就终⽌了 
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

运行结果:

打印了1,2,3,4后,当i等于5的时候,循环在 break 的地方终止,不再打印,不再循环。所以 break 的作用就是永久的终止循环,只要 break 被执行, break外的第⼀层循环就终止了。 那以后我们在循环中,想在某种条件下终止循环,则可以使用break来完成我们想要的效果。

对于continue

 

int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			continue;
		//当i等于5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅ 
		//因为这⾥跳过了i = i+1,所以i⼀直为5,程序陷⼊和死循环 
		printf("%d ", i);
		i++;
	}
	return 0;
}

运行结果:

continue 可以帮助我们跳过某一次循环 continue 后边的代码,直接到循环的判断部分,进行下一次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成死循环。  

7.循环的嵌套

我们在前面学习了while、for、do-while循环,往往将这3个循环嵌套起来能更好的解决问题。

下面我们举一个例子来更好的理解循环嵌套。

找出1~200之间的素数,并打印出来。

int main()
{
	int i = 0;
	int a = 0;
	int flag = 1;
	for (a = 1; a <= 200; a++)//循环产生1~200间的数字
	{
        //判断a是否为素数      
		int flag = 1;//假设a是素数
		for (i = 2; i < a; i++)//循环产生2~a-1之间的数字
		{
			if (a % i == 0)
			{
				flag = 0;
				break;
			}
		}
		if (flag)
			printf("%d ", a);
	}
	return 0;
}

运行结果:

8.goto语句

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

举个例子:

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

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

运行结果: 

goto语句在日常中运用的不多,但是也不是一无是处,在多重循环中可以使用goto语句来跳出。 

到这里,C语言中的分支循环语句应该就讲完了,本人小白,第一次写这种需要专业知识的文章,欢迎各位大佬补充。 

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值