分支和循环语句

目录

Ⅰ 前言

Ⅱ 分支语句(选择结构)

1.if语句

1.1 悬空else

 1.2 if书写形式的对比

2.switch语句

 2.1 在switch语句中的break

 2.2 default子句

Ⅲ 循环语句

1.while循环

 1.1 while语句中的break

1.2 while语句中的continue

2.for循环

2.1 语法

 2.2 break和continue在for循环中

 2.3 for语句的循环控制变量

3.do while循环

 3.1 do while循环中的break和continue


Ⅰ 前言

控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。

可分成以下三类:

  1. 条件判断语句也叫分支语句:if语句、switch语句;
  2.  循环执行语句:do while语句、while语句、for语句;
  3. 转向语句:break语句、goto语句、continue语句、return语句。

Ⅱ 分支语句(选择结构)

1.if语句

if语句是选择结构,如果表达式的结果为真,则语句执行;

在C语言中0表示假,非0表示真。

if语句的结构:

语法结构:
//单分支:如果表达式为真,则执行语句;为假则不执行
if (表达式)
    语句;

//双分支:表示式为真,则执行语句1;表达式为假,则执行语句2。
if(表达式)
    语句1;
else
    语句2;

//多分支:表达式1为真,执行语句1;表达式2为真,执行语句2;否则执行表达式3。
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;

 if语句相关代码演示如下:

//单分支
#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age < 18)
    {
        printf("未成年\n");
    }
}

//双分支
#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age < 18)
    {
        printf("未成年\n");
    }
    else
    {
        printf("成年\n");
    }
}

//多分支
#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age < 18)
    {
        printf("少年\n");
    }
    else if (age >= 18 && age < 30)
    {
        printf("青年\n");
    }
    else if (age >= 30 && age < 50)
    {
        printf("中年\n");
    }
    else if (age >= 50 && age < 80)
    {
        printf("老年\n");
    }
    else
    {
        printf("老寿星\n");
    }

}

 如果条件成立,要执行多条语句,应该使用代码块。

#include <stdio.h>
int main()
{
    if(表达式)
   {
        语句列表1;
   }
    else
   {
        语句列表2;
   }
    return 0;
}

 一对 { } 就是一个代码块

1.1 悬空else

当你写了这个代码:

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

 大家可能下意识的将else与第一个if相匹配,其实它是与第二个if相匹配的。

修正后:

//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
   {
        if(b == 2)
       {
            printf("hehe\n");
       }
   }
    else
   {
         printf("haha\n");
   }       
    return 0;

使用{} 后else才与第一个if相匹配。

else的匹配:else是和它离的最近的if匹配的。

 1.2 if书写形式的对比
//代码1
if (condition) {
    return x;
}
return y;

//代码2
if(condition)
{
    return x;
}
else
{
    return y;
}

//代码3
int num = 1;
if(num == 5)
{
    printf("hehe\n");
}

//代码4
int num = 1;
if(5 == num)
{
    printf("hehe\n");
}

 上述四组代码中:

  • 代码2相对代码1更好,代码2逻辑更加清晰。
  • 代码4相对代码3更好,我们写==时经常会写成=,在代码3中是会运行的,而在代码4中会报错,代码4不容易出错。

2.switch语句

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

比如:

输入1,输出星期一

输入2,输出星期二

输入3,输出星期三

输入4,输出星期四

输入5,输出星期五

输入6,输出星期六

输入7,输出星期日

 写成 if...else if ...else if 的形式太复杂了,这个时候我们可以用switch语句

switch(整型表达式)
{
    语句项;
}

 语句项是什么:

//是一些case语句:
//如下:
case 整形常量表达式:
    语句;
 2.1 在switch语句中的break

在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。

例:

#include <stdio.h>
int main()
{
    int day = 0;
    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. 输入1-5,输出的是“weekday”;

 2. 输入6-7,输出“weekend”

 代码实现就变成这样:

#include <stdio.h>
//switch代码演示
int main()
{
    int day = 0;
    switch(day)
   {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday\n");
            break;
        case 6:
        case 7:
            printf("weekend\n");
            break;
   }
    return 0;
}

 break语句 的实际效果是把语句列表划分为不同的分支部分。 

 2.2 default子句

当 switch 表达式的值并不匹配所有 case 标签的值时, default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。

但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行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循环

if语句的条件满足时,后面的语句只会执行一次,当同一件事情我们需要完成很多次时,就可以用到while语句,实现循环。

//while 语法结构
while(表达式)
 循环语句;

 while语句执行的流程:

 比如我们实现:

在屏幕上打印1-10的数字。

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}
 1.1 while语句中的break

break的介绍:

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

这里的输出结果是: 

 

 break在while循环中的作用:

          其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。

          所以:while中的break是用于永久终止循环的。

1.2 while语句中的continue

continue的介绍:

实例1:

//continue 代码实例1
#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

代码输出结果为:


 

 可以看到代码输出4后就在无限循环。

实例2:

//continue 代码实例2
#include <stdio.h>
int main()
{
    int i = 1;
    while (i <= 10)
    {
        i = i + 1;
        if (i == 5)
            continue;
        printf("%d ", i);
    }
    return 0;
}

 输出结果为:

此时输出结果里面少了5。 

 所以continue在while循环中的作用就是:

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行, 而是直接跳转到while语句的判断部分。进行下一次循环的入口判断

2.for循环

2.1 语法
for(表达式1; 表达式2; 表达式3)
 循环语句;

表达式1

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

表达式2

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

表达式3

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

例:使用for循环 在屏幕上打印1-10的数字

#include <stdio.h>
int main()
{
	int i = 0;
	//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}
	return 0;
}

 for循环的执行流程图:

 现在我们对比一下for循环和while循环:

int main()
{
	int i = 0;
	//实现相同的功能,使用while
	i = 1;//初始化部分
	while (i <= 10)//判断部分
	{
		printf("hehe\n");
		i = i + 1;//调整部分
	}
	//实现相同的功能,使用for
	for (i = 1; i <= 10; i++)
	{
		printf("hehe\n");
	}
	return 0;
}
	

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

 2.2 break和continue在for循环中

我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。 但是还是有些差异:

//代码1
#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			break;
		printf("%d ", i);
	}
	return 0;
}
//代码2
#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}
 2.3 for语句的循环控制变量

建议:

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

2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}
//两边都是闭区间
for(i=0; i<=9; i++)
{}

3.do while循环

 do语句的语法:

do
 循环语句;
while(表达式);

 流程图:

 do语句的特点:循环至少执行一次,使用的场景有限,所以不是经常使用。

#include <stdio.h>
int main()
{
    int i = 1;
    do
    {
        printf("%d ", i);
        i = i + 1;
    } while (i <= 10);
    return 0;
}
 3.1 do while循环中的break和continue

和for,while作用基本一样:

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

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

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

    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值