在C语言学习的过程中,或者说在编程路上不可避免的一道障碍(真的是障碍么?我反到觉得他们是和我们密不可分的伙伴,也是一件很趁手的工具)——分支和循环。
一、分支
分支,听名字就很好理解:分了很多支。
是的,就是这么直白。
举个例子,一个十字路口,你的面前会有三条路线可以选择,为什么说是选择?不要想着可以同时走三条路,鱼和熊掌不可兼得,你只能走其中的一条.这时候就需要抉择了,根据你此时的需求和目的,选择要走的那条路.
C语言中,这种如果...否则...的问题就叫分支.他的作用就是在你需要对信息进行过滤,筛选或者分组的时候,帮助你达成你想要达成的目的!语法也很简单,if else:
if(判断条件) {statement...} else {statement...}
如果满足判断条件,便执行相关的操作;否则,执行其他的操作.例如:
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
printf("是闰年");
}else{
printf("不是闰年");
}
这就是个简单的闰年判断, 可以看到他的格式就是如此: 是就是,不是就不是.
还有一点: else的数量不是固定的,具体问题具体分析,例如十字路口,是不是就需要if else else呢?按照成绩给学生评等级(A,B,C,D,E),又该怎么写分支语句呢,试一下.
注意:else 不能单独出现,必须和if成对出现;而且else遵循就近原则,与最近的并且还未配对的if相匹配!
switch语句就留给下一篇文章!
二、循环
轻松加愉快的了解了分支后,再来认识一下循环吧,相信我,你能很轻松的掌握它!
循环循环,顾名思义,重复的做一件事情.好了,你已经知道在C语言中循环的作用了.
在C语言中,为了应对不同应用场景,以及从效率和代码编写难易程度等方面,一共有三种可以实现循环功能的语句: for循环,while循环和do while循环.
for (表达式1 ; 表达式2 ; 表达式3) { statements... }
其中,表达式1用于初始化变量,他表示一个变量的初始值,然后从这个值开始循环;表达式2是一个条件判断表达式,他用于表示该循环的终点,也就是循环何时停止;而表达式3则用作对该变量进行操作.这就是for循环,简单吧.
while(表达式){ statements... }
while循环看起来就更简单了,只给它一个条件判断表达式,而该表达式的结果不是true就是false,所以,while循环就是条件为true就循环,条件为false就结束循环. 那while(1)是什么效果呢?
do{ statements... }while(表达式);
可以看到该语句先执行do后面{}中的内容,然后再进行表达式的判断,这么说你看出来它和while的区别了么?
对于do while循环来讲,他和for循环和while循环的最大区别,也可以说是唯一区别在于: do while循环二话不说,先执行代码块的内容,然后进行判断是否继续循环.而for循环和while循环则是先进行判断,再决定要不要执行代码块中的内容,一旦发现判断条件为false(甚至刚开始就是false),马上结束循环.
那for循环和while循环有没有区别呢?我认为是有的,还是很大的区别.我个人的理解是:for循环适合用于固定范围,固定步长的循环,相对来讲没那么灵活和自由,比较模板化;而while循环就相对灵活一些了,他可以进行一些比较个性化的操作,而且对于并不规律变化的事件来讲,那就非while莫属了.
这里还是拿闰年判断举例: 在分支中,我们可以很好的对一个year进行判断,那如果给你10个year,100个,甚至1000个,你要分别写出对应数量的if else语句么?
这时候我们可以看到,主要的问题就在于,year有很多可能的值,那我们如何控制这些可能得值呢?没错,就是用循环来解决.
问题来了: 求一下1000年~2000年中,哪些年份是闰年,并把他们打印出来?
看到这个问题,你就要考虑一下要使用哪个循环语句了,for循环可以么?太可以了,while呢?好像也可以,和for相比呢?不清楚,写写看吧.do while...算了吧!
for(int year=1000; year<=2000; year++){
if(year % 4 == 0 && year % 100 != 100 || year % 400 == 0){
printf("%d ",year);
}
}
这不就是在单独判断一个year是否为闰年的代码套了个外壳,而这个外壳规定了year的范围,而该范围根据用户自定义或者实际需求来定的.再看看while:
int year = 1000;
while(year<=2000){
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
printf("%d ",year);
year++;
}
好像没什么区别,但又有点区别,给我的感觉是:将for循环的三部分拆开,放在了while循环的三个部分:循环外,循环内和条件判断.
好像看起来都可以,是不是因为问题太简单看不出来区别?我觉得是的,问题又来了: 打印一个99乘法表,既然for循环和while循环有异曲同工之妙,是不是两者都可以像判断闰年一样,都可以轻松的完成任务呢?
欲知后事如何,且听下回分解吧!
(本文只是简单的介绍了一下概念,且本文内容都是本人的个人见解,如有错误或者逻辑不通的地方,还请指针,相互学习!)