分支和循环——C语言

目录
1、if语句
2、switch语句
3、while循环语句
4、for循环语句
5、do……while语句
6、break和continue语句
7、循环的嵌套
8、goto语句

正文

C语言是一门结构化的语言,这里的结构是指顺序结构、分支结构、循环结构。我们可以通过这三种结构合理的组合去解决大多数的问题,if语句switch语句可以实现我们的分支结构,while语句、for语句以及do……while语句可以实现我们的循环结构。

1、if语句

1.1 if

基本结构为:

if(表达式)

        语句

表达式为真,语句执行,表达式为假,语句不执行(在C语言中0为假,非0为真)。

例如:判断一个数是否是偶数

int main()
{
	int num;
	scanf("%d", &num);
	if (num % 2 == 0)
		printf("%d是一个偶数\n",num);
	return 0;
}

如果num%2余数为0,表达式结果为真,则输出num是一个偶数

如果对于同一个表达式,我们想要让它执行多条语句,则其结构为:

if(表达式)

{

        语句1;

        语句2;

        ……

}

如果表达式结过为真,则执行逻辑块中的语句。否则不执行

1.2 else语句

一个表达式不是真,那就是假,一个数不是奇数,那么就是偶数了

语句基本结构为:

if(表达式)

        语句1;

else        

        语句2;

表达式为真,执行语句1,否则执行语句2

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

if和else语句都默认只控制一条语句,如果需要控制多条语句,则可以使用{}将我们需要控制的语句括起来,形成一个逻辑块。

另外,在if……else语句后可以继续跟if语句连用,构成多重判断。结构为:

if(表达式1)

        语句1;

else if(表达式2)

        语句2;

else

        语句3;

均是根据表达式的真假,来判断其紧跟着的语句是否执行,这里我们需要注意的是,如果没有加{};else总是与它相邻的if匹配

2、switch语句

除了if语句,在C语言中,我们还用switch语句来实现分支结构,switch语句是用来解决判断多个结果的情况,可以看做是多重if……else if……else语句的优化。

例如:判断一个整数除以3之后的余数,并输出它的余数。

int main()
{
	int num;
	scanf("%d", &num);
	switch (num % 3)
	{
	case 0:
		printf("%d除以3的余数是%d\n", num, num % 3);
		break;
	case 1:
		printf("%d除以3的余数是%d\n", num, num % 3);
		break;
	case 2:
		printf("%d除以3的余数是%d\n", num, num % 3);
		break;

	}
	return 0;
}

这样用switch语句写相比与用多重if……else if……if显得更加简练,方便阅读。

switch语句中的break;

可以简单的这样理解,我们想要的情况是一种case的值只跟着一种输出结果,而case的值只是确定我们switch分支语句的入口,如果没有break,则是执行入口即之后所有的case情况,而break的作用则是跳出分支,让我们的一种case情况匹配一种输出结果,达到真正的分支效果。

当然,如果有多种case情况匹配同一种输出结果,我们则可以将多种case情况放到一起,

例如:我们需要输出周一至周五是工作日,周六、周天是休息日,则可以写成:

int main()
{
	int num;
	scanf("%d", &num);
	switch (num)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
	default:
		break;
	}
	return 0;
}

这里的default的作用是当我们所有的case情况都不匹配时,就走default子句;

注:
• switch 后的 expression 必须是整型表达式
• case 后的值,必须是整形常量表达式,且要用空格隔开

3、while循环语句

基本结构:

while(表达式)

        语句;//如果需要执行多条语句可以加{}将需要执行的语句括起来,构成一个逻辑块

既然是循环语句,显而易见,就是当满足某一条件是,循环执行某一动作。而和if语句的区别·就在于if语句是满足条件执行1次就会停止。具体用代码说明吧,

if(1)
    printf("hehe\n");

1表示真,执行语句,屏幕上只会打印一次hehe;

while(1)
    printf("hehe"\n);

这里由于1为真,将执行语句屏幕输出hehe;由于这里的表达式为1,一直为真,因此会陷入死循环,屏幕上将一直打印hehe;因此我们在使用循环结构时,需要注意限制条件,否则将会陷入死循环。

将上述while循环进行限制;

int i = 0;
while(i<5)
{
    printf("hehe\n")
    i++;
}

由于我们这里加了一个限制条件i<5;因此当循环进行5次之后i变成了6, 6<5为假,跳出循环,因此屏幕上只会打印5次hehe。

4、for循环语句

基本结构:

for(循环变量初始化;循环结束的条件;循环变量的调整)

        语句;//对于需要执行多条语句的,可以使用{},将需要执行的语句括起来,构成一个逻辑块
 

 执行流程和while循环基本一样,区别在于,for循环首先执行循环变量初始化(这一步在整个循环过程中只执行一次),再进行循环结束条件的判断,如果判断结果为0,则停止循环,否则执行循环体语句部分,最后执行循环变量的调整。

例如:循环打印1-10

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

首先将i初始化为1;随后进行判断,1<=10,表达式结果为真;执行打印语句;随后i++;直到i=11时,11<=10,表达式结果为假跳出循环。

5、do……while循环语句

基本结构:

do

{

        语句;

}while(表达式);
 

这个循环语句与上述两种循环语句略微有所不同,它循环体的语句至少会进行一次,随后在进行表达式的判断,更具表达式的结果是否为0;来决定是否继续进行循环。

例如:循环打印1-10

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

首先,先打印i的值,随后i自增,再进行i<=10的判断,判断结果为真,则继续循环打印i的值,否则跳出循环。

6、break和continue语句

6.1 break;

简单理解一下吧,break的作用就是当满足某一条件时打破循环,

例如:我原本想要在屏幕上输出1-10;现在我只想让它输出1-7,

int i=1;
while(i<=10)
{
    printf("%d ",i);
    if(i==7)
        break;
    i++;
}

这里原本是打印1-10的值,但是由于我们加了限制条件i如果等于7;执行break,跳出循环,因此,在屏幕上将会输出1-7,

break在三种循环语句中的作用基本相同,都是跳出当前循环体,如果我们在写代码时,需要在某种限制条件下,不让这一逻辑块继续执行下去,就可以使用break跳出当前逻辑块。

6.2 continue

对于continue的使用,需要注意的是在for循环语句和while中的区别,同样以打印1-10为例;

int i = 1;
while(i<=10)
{
    printf("%d ",i);
    if(i == 4)
    continue;
    i++;
}

这里屏幕上将会输出123444444……;打印123之后,将会循环打印4;这是因为当i自增到4时,i==4,表达式结果为真,执行continue语句,而continue的作用即是跳出当前循环(即不再执行continue之后的语句),直接进入下一次的循环判断,因此当i=4之后,由于不会执行i++;直接进入判断,因此i值一直为4,所以陷入死循环打印4。

而在for循环中:

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

上述代码输出结果为1235678910;这是因为当i=4时;表达式结果为真,执行continue;跳出此次循环,continue之后的语句将不再执行,因此不会打印4,但是它依旧会执行for结构中的循环变量调整部分,因此不会陷入死循环。

do……while循环中continue的效果与while循环效果基本相同,因此就不过多赘述了

7、循环嵌套

循环语句是可以进行嵌套使用的,往往在解决实际问题时,需要循环嵌套,才能更好的解决问题,但是循环嵌套不易过多,否则不便于理解,并且时间复杂度过大。

8、goto语句

简单理解就是去到……,给定一个标识符,直接跳到标识符的地方。代码举例把


 printf("hehe\n");
 goto next:
 printf("haha\n");
 
next:
 printf("跳过了haha的打印\n"); 
 

这里的next就是标识符,goto next即是跳到标识符next的地方,执行next之后的代码,这段代码的haha将不会被输出在屏幕上。

写在结尾:

更多的细节和注意点需要在不断的练习敲代码中才会了解到,所以一点要多去敲,才会更好的发现问题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想吐泡泡啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值