#C语言的底层逻辑剖析(分支与循环1)

本文深入剖析了C语言中的控制语句,包括分支(if, switch)和循环(while, for)结构。通过实例演示如何用if语句实现选择结构,并揭示了悬空else问题。同时介绍了switch语句的使用及其嵌套,以提高代码效率。
摘要由CSDN通过智能技术生成

C语言的底层逻辑剖析(分支与循环1)

导入

关于C语言的底层逻辑剖析,此系列我们就要正式进入C语言的深入学习,关于学编程这件事呢,其实还是那句话,学习编程这件事是极其枯燥也是非常困难的,但是要相信坚持一定会有收获,共勉。

语句

什么是语句?
在C语言中大致有以下几种语句

1.表达式语句;
2.函数调用语句;
3.控制语句;
4.复合语句;
5.空语句;

这5种语句中最为重要的当属第三种控制语句,控制语句是用来控制程序的流程而使用的,进而决定程序的结构方式(C语言中有三种结构方式,顺序结构,选择结构,循环结构),所以说控制语句也是C语言语句中的精髓所在,而控制语句又可以细分为以下多种,
1. 条件判断语句也叫分支语句:if语句、switch语句;
2. 循环执行语句:do while语句、while语句、for语句;
3. 转向语句:break语句、goto语句、continue语句、return语句。

分支语句(选择结构)

假设你上大学有两种选择,一好好学习精通一门技术拿到好offer,二整日玩游戏娱乐,毕业回家卖红薯。那么我们如何在C语言中实现这个程序呢?
参考代码
i

nt main()
{
	int i = 0;
	printf("你要好好学习吗?\n(1/0)");
	scanf("%d",&i);
	if (i == 1)
		printf("拿到好offer\n");
	else
		printf("回家卖红薯\n");
	return 0;
}

结合我们在新手上路C语言初识C语言系列对C语言各种内容有一个大致了解,我们很容易能理解这段代码,这就是一个最基本的选择结构的示例,同时这也是分支语句的基本结构。

if语句

关于if语句我们最好直接来看示例来帮助大家理解,

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 < 70)
		printf("老年\n");
	else if (age >= 70 && age < 100)
		printf("老寿星\n");
	return 0;
}

我们仔细分析这段代码就是一个很简单的分支语句的例子,这里要解释一下在判断中的**&&意思是并且**,千万不要写成a>b>c的形式。另外在判断时表达式如果是真才会执行语句,表达式如果是假,则不会执行在C语言中0表示假,非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;
}

当你将代码写成这样,那么请问这个else和谁匹配,程序输出的结果是什么,请思考,我相信大部分人可能会回答打印hehe,那么就要恭喜你错了,正确的答案是什么都不会输出,为什么呢?我们再来看

int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
   		else
        printf("haha\n");
    return 0;
}

当你把代码写成这个样子,可能你就理解为什么是什么都不输出,这里在a==1判断时为假,那么程序根本就不会再往下走,也就什么都不会输出。这就是这道题的正解,那么讲这道题的目的是什么呢,其实就是想告诉大家好的代码风格是有多么重要。再强调一次,代码风格很重要!代码风格很重要!代码风格很重要!

switch语句

当你要实现多种情况时,用if语句去写你会发现实在是有点麻烦,那么我们再去学习一种语句叫做switch语句,这是专门用来解决多种情况的一个语句,

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

如此代码所示当我们每输入值的时候会给出对应的日期,而在此其中break需要重点解释一下,break的作用就是让程序跳出代码块,这样才能保证结果的正确性,另外还有一种可能如果用户输入了一个非法的值怎么办,这时候就有了default子句,专门用来处理非法的情况。如下:

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

在这里插入图片描述
可见,当我输入8这一不存在的情况时候,给出的结果是输入错误,一般我们用此来处理一些非法的情况。另外,对于switch语句其实是允许嵌套使用的,

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

大家可以自行来计算一下这个程序的结果哦,当你能理解这个结果的时候也就彻底明白了switch语句的执行逻辑,我来告诉大家结果m=5,n=3.如果不懂的也欢迎讨论。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迟钝南瓜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值