C语言中的分支与循环语句

目录

前言

一、选择结构(分支语句)

1、if语句

1.1、if

1.2、if - else

1.3、嵌套if

1.3.1、将一段if else分支语句代码嵌套在前一个else语句中。

1.3.2、将一段if else分支语句代码嵌套在前一个if语句中

1.4、悬空else

1.5、分支中包含多条语句(使用大括号{ }括起来)

2、switch语句

2.1、switch基本语法形式

2.2、switch语句中的break

2.3、switch语句中的default

二、循环结构

1、while循环

2、for循环

2.1、for循环基本语法形式

2.2、while循环和for循环的对比

3、do while循环

三、循环结构中的break和continue

1、while循环中的continue

2、for循环中的continue

3、do while中的continue


前言

众所周知C语言是一门结构化的程序设计语言,所谓的结构便分为顺序结构选择结构循环结构。由ifswitch引导的分支语句构成选择结构,而循环结构则是使用forwhiledo while语句来实现。

一、选择结构(分支语句)

1、if语句

1.1、if

if语句的基本语法形式如下:

if (表达式)
    语句

若表达式成立,即为时,语句执行

若表达式不成立,即为时,语句不执行

注意!:在C语言中,0为假,非0为真。

1.2、if - else

if else 语句语法形式如下:

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

若表达式成立,则执行语句1;若表达式不成立,则执行语句2

1.3、嵌套if

1.3.1、将一段if else分支语句代码嵌套在前一个else语句中。

例:【在if - else语句中,可以将else和另一个if语句连用(else if)实现嵌套,这样便可构成多重判断

#include<stdio.h>
int main()
{
    int score = 0;
    scanf("%d", &score);
    if (score < 60)
        printf("没及格\n");
    else if (score >= 60 && score < 80)
        printf("良好\n");
    else
        printf("优秀\n");
    return 0;
}
1.3.2、将一段if else分支语句代码嵌套在前一个if语句中

例:

#include<stdio.h>
int main()
{
    int score = 0;
    scanf("%d", &score);
    if (score >= 60)
    {
        if (score < 80)
            printf("良好\n");
        else
            printf("优秀\n");
    }
    else
        printf("没及格\n");
    return 0;
}

1.4、悬空else

当我们遇到含有多个if和else的代码的情况下,阅读时代码的排版经常会带来一些误导性

例:

#include<stdio.h>
int main()
{
    int i = 0;
    int j = 2;
    if (i == 1)
        if (j == 2)
            printf("hello\n");
    else
        printf("byebye\n");
    return 0;
}

上述代码很多人第一眼可能会马上给出打印"byebye"的答案,但真实答案是什么都没有打印出来,那是因为else其实是和第二格if匹配,而不是和第一个if匹配,大家千万不要被代码的排版所欺骗了。如果同样的代码放在python中,那么就会打印"byebye",那是因为python通过对齐来匹配。

而在C语言中则记住:else总是和最接近的上一个if匹配。

而为了避免这样的问题发生,我们在编写含有多个if和case语句的代码时可以通过适当使用大括号{ },来提高代码的可读性。

1.5、分支中包含多条语句(使用大括号{ }括起来)

例:

#include<stdio.h>
int main()
{
    int score = 0;
    scanf("%d", &score);
    if (score < 60)
        printf("没及格\n");
        printf("需要补考\n");
    return 0;
}

根据上述代码运行结果可知:无论表达式是否为真,"需要补考"都会打印在屏幕上。

这是因为if语句只控制其下第一条语句的执行,而第二条不受它控制。

若想同时控制多条语句,则代码如下:

#include<stdio.h>
int main()
{
    int score = 0;
    scanf("%d", &score);
    if (score < 60)
    {
        printf("没及格\n");
        printf("需要补考\n");
    }
    return 0;
}

加上大括号之后便可发现当表达式为假时什么都没有打印,即第二条语句跟随if语句控制了,同理else想控制多条语句时,也需使用大括号{ }将其下多条代码括起来。

2、switch语句

2.1、switch基本语法形式

switch (整型表达式)
{
    case 整型常量1:
        语句1;
    case 整型常量2:
        语句2;
}

(此处只写2个case不代表只能写两个,一个switch语句可以含有多个case)

注意!:case与整型常量之间必须含有一个空格

2.2、switch语句中的break

作用:用来结束整个switch语句

例:

#include<stdio.h>
int main()
{
    int day = 0;
    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;
    }
    return 0;
}

输入1时,打印“星期一”便执行break即刻跳出switch语句,分别输入2、3、4、5、6、7也是同样的道理。若去掉case语句中的break,会发生什么呢?

#include<stdio.h>
int main()
{
    int day = 0;
    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");
    }
    return 0;
}

 由上面运行结果不难看出当我们输入1时,打印完“星期一”之后代码并没有停止执行,而是继续执行下面的case语句,因此无法实现分支效果。

所以break在switch语句中是非常重要的存在,不过不是每一个case语句末尾都需要break,可以根据实际情况来适当添加

2.3、switch语句中的default

在前面我们所介绍的代码中虽然没有default语句也能正常运行代码,但是添加default语句可以完善我们的代码功能,提高严谨度和完整性。

例如前面打印星期几的代码,如果输入的数字不是1~7,那么什么也不会输出。而往往在现实中我们需要给出一个“提示”,那么便需要用到default语句来实现。

#include<stdio.h>
int main()
{
    int day = 0;
    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;
    }
    return 0;
}

二、循环结构

1、while循环

while语句的基本语法形式如下:

while (表达式)
    语句;

一眼看去是否有点熟悉的感觉?没错,if语句的语法形式和它非常相似。不过!if语句只执行一次,而while语句则是若表达式为0,循环结束;若表达式为非0继续执行循环语句。

2、for循环

2.1、for循环基本语法形式

for循环可以说是三种循环中最常用的,也是相对比较重要的,因此我们要熟练掌握。

for(循环变量的初始化:循环是否结束的判断条件:循环变量的调整)
    语句;

例如:在屏幕上打印1~5的值

#include<stdio.h>
int main()
{
    int i = 0;
    for (i = 1; i <= 5; i++)
    {
        printf("%d ", i);
    }
    return 0;
}

结合示例我们可以看到,第一次首先执行for循环的初始化循环变量,再进行判断,若第二个表达式判断为假(0)退出循环,若判断为真(非0)则开始往下执行循环语句,第一次打印1执行完,便再去执行第三个表达式变量的调整(这里变为2),接着再去执行第二个表达式进行判断,以此类推进行循环。要特别注意此过程:变量初始化部分只被执行了一次

2.2、while循环和for循环的对比

for循环和while循环都有“循环变量初始化”,“条件判断表达式”,“循环变量的调整”,只不过for循环将这三个表达式都集中在了一起,这样就不需要像while循环一样到处找,若出现bug可以及时找到问题并修复,同时提高了代码的可读性。

3、do while循环

do while循环的基本语法形式:

书写do while循环的时候我们要特别注意此处的“while(表达式)”后面是有分号“;”的,和while循环不同。

do
    语句;
while(表达式);

前面while和for两种循环都是先判断,若条件满足则进入循环;不满足则跳出循环。而do while循环则是第一次先直接进入循环,执行完一次之后再进行判断,若条件满足则再次进入循环;不满足则跳出循环。因此,do while循环语句不管怎样至少会被执行一次

例如:

#include<stdio.h>
int main()
{
    int i = 1;
    do
        printf("%d ", i);
    while (i > 5);
    return 0;
}

三、循环结构中的break和continue

break:用于永久终止循环,只要break被执行,则直接立刻跳出此循环,继续往后执行代码。break在三种循环中作用大致一样。

continue:不会直接跳出循环,而是只跳过本次循环中continue后面的代码。在for循环和while循环中的作用过程有所差异。

1、while循环中的continue

#include<stdio.h>
int main()
{
	int i = 0;
	while (i <= 5)
	{
		if (i == 4)
			continue;
		printf("%d ", i);
		i++;
	}
	return 0;
}

分析这一段代码:当 i 循环调整到等于4时,便会执行continue,continue帮助我们跳过后面的两行代码直接回到判断部分,进行下一次循环的判断,此时判断为真,继续执行if语句的判断,i 依旧为4,继续执行continue,代码进入死循环。造成死循环的原因循环变量的调整部分放在了continue后面。因此在while循环中使用continue需多加注意

2、for循环中的continue

#include<stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 5; i++)
	{
		if (i == 4)
			continue;
		printf("%d ", i);
	}
	return 0;
}

分析上述代码:当循环变量 i 调整到等于4时,便会执行continue,continue同样帮助我们跳过后面的代码,与while循环不一样的是:这里执行完continue是跳到了第三个表达式循环变量调整部分,而不是和while循环一样直接跳到下一次循环的判断部分,这样便避免了死循环的情况。

因此,我们在使用continue时要特别注意循环体内continue后面的内容,因为往往问题会出现在这里。

3、do while中的continue

do while循环中的continue和while循环中的作用几乎一模一样,因为循环变量调整部分的放置位置,结果只会打印出1,2,3,到4便会出现死循环。

#include<stdio.h>
int main()
{
	int i = 1;
	do
	{
		if (i == 4)
			continue;
		printf("%d ", i);
		i++;
	} while (i <= 5);
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值