【c语言】分支结构与循环结构

前言

        为何要有分支与循环?分支与循环是编程语言中非常重要的概念,它们可以使程序员更好的控制程序的逻辑,也使得程序更好的贴合现实生活,更好的服务生活。

分支结构

1.1 if语句

if语句形式如下:

if(表达式)
{
    语句
}

若表达式为真,则语句执行,若表达式为假,则不执行。

注意:在c语言中,0为假,非0为真,即if括号中的表达式可单纯为数字。

例子

#include <stdio.h>

int main()
{
    int a = 0;
    if(a == 0)
    {
        printf("%d\n",a);
    }
    return 0;
}

运行结构如下:

1.2 if-else语句

        光有if语句还不够,在遇到分叉路口的时候,else语句可以使我们更加简洁的进行逻辑处理。

同时,else和if要搭配使用。

        if-else语句形式如下1:

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

例子:判断一个整数是奇数还是偶数。

#include <stdio.h>

int main()
{
	int a;
	scanf("%d", &a);
	if (a % 2 == 0)
	{
		printf("a为偶数\n");
	}
	else
	{
		printf("a为奇数\n");
	}
	return 0;
}

运行结果:

注意:可以看到,上面的程序中只写了判断偶数的表达式,但是依然可以正确判断数字的奇偶性,

这是因为if-else语句的运行逻辑是这样的:

1.3 if-else嵌套

        if-else语句还可以相互嵌套,例如:

#include <stdio.h>


int main()
{
		int num = 0;
		scanf("%d", &num);
		if (num == 0)
			printf("输⼊的数字是0\n");
		else if (num > 0) //这⾥的if 相当于嵌套在els语句中,形成了嵌套结构
			printf("输⼊的数字是正数\n");
		else
			printf("输⼊的数字是负数\n");
	return 0;
}

注意else只和向前最近的if“组队”。

1.4 switch语句

        除了 if 语句外,C语言还提供了 switch 语句来实现分支结构。 switch 语句是⼀种特殊形式的 if-else 结构,用于判断条件有多个结果的情况。它把多重的if-else改成更易用、可读性更好的形式。

        其句式表达如下

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

其运行逻辑为根据expression的值,执行相应的case分支,若找不到,就执行default分支(default并非一定要写在末尾)。

:switch后的expression必须是整型表达式

        case后的值,必须是整形常量表达式

        例子:

#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;
}

其中的break用于跳出switch语句,case只是switch语句执行的入口,举例来说,若无break,从case1开始执行,打印“余数是1”后也会打印“余数是2”。

循环结构

c语言提供了3种循环语句,分别为while,do-while和for语句。

1.1 while语句

        其语法结构为:

while(表达式)
{
    语句
}

若表达式为真,则运行语句,否则结束,其逻辑为:

1.2 do-while语句

        其句式表达为:

       

do
{
    语句
}
while(表达式)

其执行逻辑和while的区别在于,do-while中的语句至少会被执行一次,之后才会对表达式进行判断,之后就和while的运行逻辑一样了。

1.3 for语句

        for循环是三种循环中使用最多的

        其句式表达如下

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

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

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

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

其执行逻辑以实际为例:

#include <stdio.h>

int main()
{
	for (int a = 0; a <= 10; a++)
	{
		printf("%d\n", a);
	}
	return 0;
}

其运行逻辑为先执行int a = 0(表达式1),接着判断a <=10(表达式2),执行printf()(语句),

接着执行a++(表达式3),再执行a <=10(表达式2),再执行printf()(语句),循环往复,直到a<=10为假,不执行语句,循环结束。

注意:顺序为   表达式1->表达式2->语句->表达式3->表达式2->语句->表达式3->表达式2->....(当表达式2为假时结束并且不执行语句)

1.4 break和continue

break和continue可以用来跳出循环和继续循环

举例说明:

int main()
{
	for (int a = 0; a <= 10; a++)
	{
		if (a == 3)
		{
			break;
		}
		printf("%d\n", a);
	}
	return 0;
}

可以看到,该循环并没有将1-10全部打印,而是在a==3为真时执行了break语句使得程序跳出了break循环。

注意:在多层嵌套for循环语句中,break一次只能跳出最里面的循环。

把break替换成continue

#include <stdio.h>

int main()
{
	for (int a = 0; a <= 10; a++)
	{
		if (a == 3)
		{
			continue;
		}
		printf("%d\n", a);
	}
	return 0;
}

可以看到,这次并没有打印3,这是因为,continue的作用是回到循环的开始位置,对于for循环,continue会回到for循环的表达式3,然后继续for循环。

1.5 go to语句

        在多重嵌套的循环结构中,使用break语句跳出循环需要一层一层跳出,但是goto循环可以一次跳出多个循环。

        举例: 

#include <stdio.h>

int main()
{
	printf("1\n");
	goto next;
	printf("2\n");

next:
	printf("3\n");
	return 0;
}

 可以看到2被跳过而没有打印,其实是goto语句是得程序执行到goto next;时直接跳到next:后的程序内容去了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值