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

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");elseprintf("回家卖红薯\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");elseprintf("haha\n");return 0;
}

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

int main()
{int a = 0;int b = 2;if(a == 1)if(b == 2)printf("hehe\n");elseprintf("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 
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.如果不懂的也欢迎讨论。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部