0
点赞
收藏
分享

微信扫一扫

灭霸打了一个响指,我就学会了C语言的「分支与循环语句」

🌟 前言

大家好,我是Edison😎

上一篇文章说到要把C语言整个系列做个整理;

于是乎,我元旦三天也没闲着,这不,今天开始我们的第二篇 「分支语句和循环语句」

Let’s get it!


在这里插入图片描述


文章目录


本章目标

1、什么是语句?

本文后面介绍的是控制语句。

控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成;

C语言有九种控制语句

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

🍑2.1 if语句

if 语句的语法结构是怎么样的呢?

语法结构👇

//单分支
if(表达式)
    语句;
    
//if和else   
if(表达式)
    语句1;
else
    语句2;

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

我们来看看 单分支 的情况

代码示例📝

#include <stdio.h>

int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age < 18)
    {
        printf("未成年\n");
    }
}

运行结果👇

那如果用 if 和 else 呢?

#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;
}

🍎 悬空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;
}

那这段代码如何修改呢?

很简单,只需要加上 {} 就好可以了

#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;
}

运行结果👇

🍎 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.2 switch语句

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

比如:

那我如果写成 if...else if ...else if 的形式,会不会太复杂了?

所以就得有不一样的语法形式,这就是switch语句。

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

而语句项是什么呢?是一些case语句

case 整形常量表达式:
    语句;

🍎 在switch语句中的break

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

比如:

#include <stdio.h>

int main()
{
    int day = 5;
    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;
}

执行结果👇

但是有时候我们的需求变了:

所以我们的代码就应该这样实现了:

#include <stdio.h>

int main()
{
    int day = 6;
    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;
}

执行结果👇

🎃编程好习惯

🍎 default子句

那么此时结构是什么意思呢?

代码示例📝

#include <stdio.h>

int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("weekday\n");
        break;
    case 6:
    case 7:
        printf("weekend\n");
        break;
    default:
        printf("输入错误,请重新输入\n");
    }
    return 0;
}

执行结果👇

🎃编程好习惯

🍎 练习

思考一下🤔,看看下面这段代码的执行结果是多少?

#include <stdio.h>

int main()
{
    int n = 1;
    int m = 2;
    switch (n)
   {
    case 1:
            m++;
    case 2:
            n++;
    case 3:
             switch (n)
           {//switch允许嵌套使用
             case 1:
                    n++;
             case 2:
                    m++;
                    n++;
                    break;
           }
    case 4:
            m++;
             break;
    default:
             break;
   }
    printf("m = %d, n = %d\n", m, n);
    return 0;
}

3、循环语句

🍑3.1 while循环

C语言中给我们引入了:while语句,可以实现循环。

//while 语法结构

while(表达式)
 	循环语句;

比如我们实现:

代码示例📝

#include <stdio.h>

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

执行结果👇

🍎 while语句中的break和continue

🍅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循环中的作用

🍅continue介绍

#include <stdio.h>

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

执行结果👇

continue使用不当可能会造成死循环 👇

#include <stdio.h>

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

执行结果👇

总结:continue在while循环中的作用

🍎 getchar和putchar

我们接下来看一段代码示例📝

#include <stdio.h>

int main()
{
 int ch = 0;
 while ((ch = getchar()) != EOF)
       putchar(ch);
    return 0;
}

执行结果👇

那么这段代码到底是什么意思呢?为什么Ctrl+z就可以停止输入呢?

这时候,你可能会有疑问,不是读取字符吗?为什么输入123这种整型变量也可以呢?

假设,写一个程序,实现用户的登录场景

#include <stdio.h>

int main()
{
	int ch = 0;
	char password[20] = { 0 };
	printf("请输入密码>:");
	
	scanf("%s", password);
	
	printf("请确认密码>:\n");
	
	ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("确认失败\n");
	}

	return 0;
}

运行结果👇

为什么会这样呢?

那代码如何修改呢?

代码示例📝

#include <stdio.h>

int main()
{
	int ch = 0;
	char password[20] = { 0 };
	printf("请输入密码>:");
	scanf("%s", password);
	
	while ((ch = getchar()) != '\n')
	{
		;
	}

	printf("请确认密码(Y/N)>:");
	ch = getchar();

	if (ch == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("确认失败\n");
	}

	return 0;
}

总结:

李姐了吗😏

🍎 练习

思考一下🤔,看看下面这段代码的执行结果是多少?

#include <stdio.h>

int main()
{
    char ch = '\0';
    while ((ch = getchar()) != EOF)
    {
        if (ch <0|| ch >9)
            continue;
        putchar(ch);
    }
    return 0;
}

🍑3.2 for循环

我们已经知道了while循环,但是我们为什么还要一个for循环呢?

首先来看看for循环的语法

🍎 语法

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

🍎 流程图

在这里插入图片描述
看一道实际的问题

#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循环while循环

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");
}

🍎 break和continue在for循环中

代码一📝

#include <stdio.h>

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

执行结果👇

代码二📝

#include <stdio.h>

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

执行结果👇

🍎 for语句的循环控制变量

建议🤔

什么叫前闭后开区间呢?

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

//两边都是闭区间
for(i=0; i<=9; i++)
{}

🍎 一些for循环的变种

📝代码一

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

执行结果👇

📝代码二

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

执行结果👇

🍑3.3 do…while()循环

🍎 do语句的语法

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

🍎 执行流程

在这里插入图片描述

🍎 do语句的特点

📝代码示例

#include <stdio.h>

int main()
{
    int i = 10;
    do
    {
        printf("%d\n", i);
    } while (i < 10);
    
    return 0;
}

执行结果👇

🍎 do…while循环中的break和continue

代码一📝

#include <stdio.h>

int main()
{
    int i = 10;
    do
    {
        if (5 == i)
            break;
        printf("%d\n", i);
    } while (i < 10);
    return 0;
}

执行结果👇

代码二📝

#include <stdio.h>

int main()
{
    int i = 10;
    do
    {
        if (5 == i)
            continue;
        printf("%d\n", i);
    } while (i < 10);
    
    return 0;
}

执行结果👇

🍑3.4 练习题

4、goto语句

goto语言真正适合的场景如下:

for(...)
    for(...)
   {
        for(...)
       {
            if(disaster)
                goto error;
       }
   }
    …
error:
 if(disaster)
         // 处理错误情况

下面是使用goto语句的一个例子,然后使用循环的实现方式替换goto语句

🍑4.1 一个关机程序

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    char input[10] = {0};
    system("shutdown -s -t 60");
    
again:
    printf("电脑将在1分钟内关机,如果输入:不关机,就取消关机!\n请输入:>");
    scanf("%s", input);
    if(0 == strcmp(input, "不关机"))
   	{
        system("shutdown -a");
   	}
    else
   	{
        goto again;
   	}
    return 0;
}

执行结果👇

而如果不用goto语句,则可以使用循环:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char input[10] = {0};
    system("shutdown -s -t 60");
    while(1)
   {
        printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
        scanf("%s", input);
        if(0 == strcmp(input, "我是猪"))
       {
            system("shutdown -a");
            break;
       }
   }
    return 0;
}

🌟总结

举报

相关推荐

0 条评论