C的历程------分支语句和循环语句(上)


前言

在C语言中语句可以分为一下五类:

  1. 表达式语句
  2. 函数调用语句
  3. 控制语句 (控制语句可用于控制程序的执行流程,实现程序的各种结构方式,并且分成了分支,循环,转向三大类)
  4. 复合语句
  5. 空语句

提示:本篇文章主要介绍控制语句

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


1.if语句

if语句的语法结构:

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


//当要使用多分支的情况下
if (表达式1):
	语句1;
else if (表达式2):
	语句2;
else
	语句3;

示例代码

#include <stdio.h>
int main()
{
    int age = 0;
    scanf_s("%d", &age);
    if (age < 18)
    {
        printf("少年\n");
    }
    else if (age >= 18 && age < 30)
    {
        printf("青年\n");
    }
    else if (age >= 30 && age < 50)
    {
        printf("中年");
    }
    else
    {
        printf("老年");
    }
    return 0;
}

注意一种情况: 悬空else

//如下程序的结果是什么?
#include<stdio.h>
int main() 
{
	int a = 1;
	int b = 3;
	
	if (a == 0)
		if (b == 3)
			printf("hehe\n");
	else
		printf("haha\n");
	return 0;
}

这段代码运行后将不会有任何报错,也不会有任何结果.我们要知道else要和距离最近的if组成搭配,所以我们写代码要形成规范,代码风格很重要会增加代码的可读性。

改进后的代码

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

2.switch语句

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

比如:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五

switch的语句

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

并且在switch语句中我们没办法实现分支,需要搭配break才能实现真正的分支.
比如:

#include"stdio.h"
int main()
{
    int day = 0;
    switch(day)
    {
        case 1printf("星期一\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;
}

有时候我们的需求改变了,想要周一到周五是weekday,周六周日是weekend,我们的代码就可以这样改

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

哈哈 虽然看着有点怪,但却是可以实现我们的目的

default子语句

倘若表达的值与所有的case标签的值都不匹配怎么办?其实也没什么,结构就是所有的语句都被跳过而已,程序不会终止也不会报错,但是如果你不想忽略不匹配所有标签的表达式的值是该怎么办呢,你可以在语句列表中增加一条default语句.
这里说一个编程好习惯
尽量在每一个switch语句中方一个default哦,甚至还可以再加一个break
比如这样

#include"stdio.h"
int main()
{
    int day = 0;
    switch(day)
    {
        case 1printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;   
        case 4:
            printf("星期四\n");
            break;   
        case 5:
            printf("星期五\n");
            break;
        default:
        	break;
    }
    return 0;
}

二、循环语句

循环语句具体可以分为三类
1.while循环
2.for循环
3.do while循环


1.while循环

//while的语法结构


while(表达式):
	循环语句

比如我们可以写一个循环打印1-10的代码

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

while语句中的break和continue


break的作用

在循环中直接遇到break,那么那么就直接停止后期的所有循环,直接终止循环.所以while中的break是用于永久终止循环的

例如我们在上面的代码中添加break为例

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

尝试思考下这个代码的结果是什么呢?

好啦,答案揭晓,最终的输出结果是1,2,3,4,5,可以看见当循环碰到break的时候会直接跳出整个循环,这就是break的作用


continue的作用

我们来看下面的代码

#include"stdio.h"
int main()
{
	int i = 0;
	while (i <= 10) 
	{
		i = i+1;
		
		if (i == 5)
		{
			continue;
		}
		
		printf("%d \n", i);
		
	}
	return 0;
}
1
2
3
4
6
7
8
9
10
11

以上是程序输出的效果,可见continue的作用是终止本次循环,也就是本次循环中continue后面的代码不会运行,而是直接调到while语句的判断部分,进行下一次循环的入口判断.

2.for循环

//for循环的语法结构


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

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

表达式2
表达式2为判断部分,用于判断循环什么时候终止

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


一个关于for循环的例子

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

1-10的循环打印


对比下for循环和while循环

int i=1;//初始化
while (i <= 10)//判断部分
{
	printf("%d ", i);
	i++;//调整部分
}


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


可以发现在while循环中依然存在循环的三个必要条件,但三个部分偏离的比较远,所以在查找和修改的时候就不够集中和方便,所以,for的循环风格就更胜一筹,for循环的使用频率也最高


break和continue在for循环中的运用

二者的意义在while中是一样的
如下


//break  直接跳过剩下的循环
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
break;
printf("%d ",i);
}


//continue 跳过本次循环进行下一次循环
int i = 0;
for (i = 1; i <= 10; i++)
{
	if (i == 5)
		continue;
	printf("%d ", i);
}
return 0;

3.do…while()循环

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

do语句循环至少会执行一次,使用的场景有限,不会经常使用,一下是do语句的使用示例

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

do…while()中的break和continue

与本文两个循环的break和continue是同样的用发,就不再过多赘述了

//break 
#include <stdio.h>
int main()
{
	int i = 1;

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

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


今天的内容就到这里啦,感觉有用的小伙伴可以点赞收藏哦,下一篇将会有相关知识点的练习哦

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值