[C语言学习]----分支语句和循环语句

 这篇将介绍C语言中分支语句和循环语句的所有知识

 

 程序的艺术来源于生活

目录

1.C语言中语句的分类

2.分支语句(选择结构)

2.1 if语句

2.1.1悬空else(else和if的匹配)

2.2 switch语句

2.2.1 switch语句中的break

2.2.2 default子句

3.循环语句

3.1 while循环

3.1.1 while语句中的break和continue

3.2 for循环

3.2.1 for循环语法

3.2.2 break和continue在for循环中

3.2.3 for语句的循环控制变量

3.2.4 一些for循环的特殊情况

3.3 do...while()循环

3.3.1 do...while()语句的语法

3.3.2 do...while()语句的特点

3.3.3 do...while()循环中的break和continue

4.goto语句


1.C语言中语句的分类

C语句可分为以下五类:
1. 表达式语句
2. 函数调用语句
3. 控制语句
4. 复合语句
5. 空语句

C语言是结构化的程序设计语言,C语言其中的分支语句循环语句就是控制语句

控制语句用于控制程序的执行流程,以实现程序的各种结构方式

C语言有九种控制语句,可分成以下三类:

1. 条件判断语句也叫分支语句:if语句、switch语句;
2. 循环执行语句:do while语句、while语句、for语句;
3. 转向语句:break语句、goto语句、continue语句、return 句。
C语言支持三种结构:顺序结构选择结构循环结构
顺序结构就是从上到下代码依次进行,按照前后顺序一一实现,顺序结构很普遍且很简单这里就不细讲,接下来仔细讲解一下选择结构和循环结构

2.分支语句(选择结构)

分支语句就相当于生活中的各种选择
简单理解 流程图:

2.1 if语句

语法结构:
if(表达式)
      语句;

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

// 多分支情况    
if(表达式1)
   语句1;
else if(表达式2)
   语句2;
else
   语句3 ;

 代码演示

#include<stdio.h>
int main()
{
	int score = 0;
	printf("请输入0-100之间的数字:");
	scanf("%d", &score);
	if (score < 60)
		printf("不及格");
	else if (score >= 60 && score < 90)
		printf("良好");
	else
		printf("优秀");
	return 0;
}

注:在if ,else if,else 后面默认控制一条语句,如果想要控制多条语句,需要用{ }控制

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

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

在 if 后面的()中,( )中为假则不执行,( )中为真则执行

2.1.1悬空else(else和if的匹配)

以下代码的输出结果是什么呢?

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

 结果发现程序什么都没有输出,由此得出:else是和它离的最近的if匹配的

2.2 switch语句

switch语句用于多分支的情况

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

2.2.1 switch语句中的break

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

#include<stdio.h>
int main()
{
    int n = 0;
    printf("输入今天是星期几");
    scanf("%d", &n);
    switch (n)
    {
    case 1:
        printf("Monday\n"); 
    case 2:
        printf("Tuesday\n");
    case 3:
        printf("Wednesday\n");
    case 4:
        printf("Thursday\n");
    case 5:
        printf("Friday\n");
    case 6:
        printf("Saturday\n");
    case 7:
        printf("Sunday\n");
    }
    return 0;
}

 

 

我们发现在switch语句中输入4,输出结果却是星期4到星期天,如何改变这种情况呢?

在这里我们需要引用 break,使代码不再往下进行

代码变成:

#include<stdio.h>
int main()
{
    int n = 0;
    printf("输入今天是星期几");
    scanf("%d", &n);
    switch (n)
    {
    case 1:
        printf("Monday\n");
        break;
    case 2:
        printf("Tuesday\n");
        break;
    case 3:
        printf("Wednesday\n");
        break;
    case 4:
        printf("Thursday\n");
        break;
    case 5:
        printf("Friday\n");
        break;
    case 6:
        printf("Saturday\n");
        break;
    case 7:
        printf("Sunday\n");
        break;
    }
    return 0;
}

此时我们再输入4,结果会有不同

 

 

但并不是每个case后面都需要加break,有时候我们需求变成

1.输入1-5,输入为“weekday”

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

我们代码就可以这样实现:

#include<stdio.h>
int main()
{
    int n = 0;
    printf("输入今天是星期几");
    scanf("%d", &n);
    switch (n)
    {
    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.2 default子句

如果输入的值都不与case标签的值相匹配,此时结构所有语句跳过,但是不想忽略所有不匹配的标签的表达式的值时该怎么办呢? 此时,你可以在语句列表中增加一条default子句

default子句可以写在switch语句中的任意一个case标签可以出现的位置

所以,每个switch语句中只能出现一条default子句。

但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。

#include<stdio.h>
int main()
{
    int n = 0;
    printf("输入今天是星期几");
    scanf("%d", &n);
    switch (n)
    {
    default:
    printf("输入错误");
    break;
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("Weekday\n");
        break;
    case 6:
    case 7:
        printf("Weekend\n");
        break;
    }
    return 0;
}

 

 

3.循环语句

循环语句就相当于生活中每天重复做的事情

简单理解流程图:

3.1 while循环

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

while语句执行的流程:

 

利用while循环打印1-10之间的数字:

#include<stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)  //打印1-10之间的数字
	{
		printf("%d ", i);
		i++;//i++表示每循环一次i增加1
	}
	return 0;
}

 

 

 

3.1.1 while语句中的break和continue

break介绍

break是结束整个的循环,直接跳过整个循环语句

例如:

#include<stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break;//当i等于5时,循环终止,跳出循环
		printf("%d ", i);
		i++;
	}
	return 0;
}

 

 

 

break在while循环中的作用:

在循环中只要遇到break,就停止后面所有的循环,直接终止循环
break后直接终止整个循环

 

continue介绍

continue是结束本次循环,跳到下次循环入口

例如:

#include<stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
		{
			i++;//防止i等于5死循环
			continue;//当i等于5时,结束本次循环,跳到下次循环
		}
		printf("%d ", i);
		i++;
	}
	return 0;
}

 

 

continue在while循环中的作用:

continue是用于终止本次循环的,也就是本次循环中continue后面的代码不会再执行

continue后直接跳转到while语句的判断部分,进行下一次循环入口判断

3.2 for循环

执行流程图:

 

 

 

3.2.1 for循环语法

for(表达式1; 表达式2; 表达式3)
循环语句;
表达式 1:
表达式 1 初始化部分 ,用于初始化循环变量的。
表达式 2:
表达式 2 条件判断部分 ,用于判断循环时候终止。
表达式 3:
表达式 3 调整部分 ,用于循环条件的调整。

3.2.2 break和continue在for循环中

在for循环中也能使用break和continue,他们的使用意义和在while循环中使用是一样的

但是在某些地方是有些区别的

同样是打印1-10之间的数字,当i等于5时continue,但是两种循环方式产生的结果不同

while:

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

此时由于在while中控制i变化的语句在continue后面,所以导致continue后i++不能被执行

所以i一直是5,此时就会陷入死循环

for:

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

}

在for循环中由于控制变量变化的语句放在了开头,所以i++不受continue的限制

此时就能打印出1-10的数字

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

3.2.3 for语句的循环控制变量

建议:

1.不能在for循环体内修改循环变量,防止for循环失去控制
2.建议for语句的循环控制变量的取值采用“前闭 后开区间”的写法

前闭后开区间的写法:

//前闭后开的写法
for(i=0; i<10; i++)
{

}

3.2.4 一些for循环的特殊情况

1 for循环中的初始化部分,判断部分,调整部分是可以省略的

#include<stdio.h>
int main()
{
	for (; ;)
	{
		printf("Hello world\n");
	}
	return 0;
}

 

此时将会循环打印“Hello world”

 

2.for循环的嵌套使用

        

#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	int count = 1;
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			printf("%d : Hello world\n",count);
			count++;//每打印一次Hello world count就+1,计数作用
		}
	}
	return 0;
}

 

此时将会打印100次“Hello world”

 

 3.使用多余一个变量控制循环

#include<stdio.h>
int main()
{
	int x = 0;
	int y = 0;
	for (x = 0, y = 0; x < 2 && y < 5; x++, y++)//用x 和 y 同时制约
	{
		printf("hehe\n");
	}
	return 0;
}

此时只打印两次

 

3.3 do...while()循环

do...while()循环跟 while循环很相似,不同的是do...while循环是先执行一次循环体内的语句再进行循环判断,do...while()循环最少执行一次

流程图:

 

 

3.3.1 do...while()语句的语法

 

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

3.3.2 do...while()语句的特点

循环至少执行一次,使用的场景有限,不是经常使用。

打印1-10之间的数字:

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

 3.3.3 do...while()循环中的break和continue

do while 循环中的 break continue跟while中的一样,有一定缺陷性

4.goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
注:不要随意滥用goto语句,滥用goto语句很容易导致逻辑混乱,导致系统崩溃
  但是某些场合下goto语句还是用得着的  
最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。
  例如:一次跳出两层或多层循环。
多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环  
goto语言真正适合的场景如下:

for(...)
    for(...)
   {
        for(...)
       {
            if(disaster)
                goto error; //直接跳转到error
       }
   }
    ...   
error:
    if((disaster)
        //处理错误情况

总结:本章介绍了分支语句和循环语句,后面会介绍到这两种语句的灵活运用

感谢你的观看,我们下期再见

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值