这是我对近期循环结构学习的整理,菜鸟的见解,还请大佬多多指教。
在我看来,循环结构是C语言中占比重较大的一部分,很多问题的解决都离不开它,小到排序,大到游戏,都离不开它!
●结构化程序设计的三种基本结构:
顺序结构
选择结构
循环结构
●循环结构的分类
1、按重复次数
计数控制的循环:重复处理的次数已 知
条件控制的循环:重复处理的次数 未。知,由给定条件控制
2、按类型
当型循环结构:当条件P成立(为真)时,反复执行A操作,直到条
件P不成立(为假)时结束循环。
直到型循环结构:先执行A操作,再判断条件P是否成立(为真),若条件P成立(为真),则反复执行A操作,直到条件P不成立(为假)时结束循环。
●循环语句:
1、while语句(当型循环)
while(循环控制表达式)
{
语句序列
}
适合于循环次数未知、条件控制的循环。
2、do-while语句(直到型循环)
do
{
语句序列
}while(循环控制表达式);
在循环底部进行循环条件测试,循环至少执行一次。适用于循环次数未知、条件控制的循环。
3、for语句(当型循环)
for(初始化表达式;循环结构表达式;增值表达式)
{
语句序列
}
注:初始化表达式的作用是赋初值,如何对循环变量进行增值决定了循环的执行次数。
在循环顶部进行循环条件测试,如果循环条件第一次测试就为假,则循环体一次也不执行。适合于循环次数已知、计数控制的循环。
就我个人而言,相较于费时费力的do-while循环结构和复杂的while循环结构,我个人更习惯用for循环结构,而且一般情况下while语句可用for语句等价实现。但也仅是我个人观点。
●for语句注意事项:
1、for语句可用while语句等价实现:
初始化表达式;
while(循环控制表达式)
{
语句序列
增值表达式;
}
2、for语句中三个表达式之间的分隔符是分号,有且仅有两个分号,既不能多也不能少。一般情况下,循环控制表达式很少省略,若省略,则表示循环条件永真。当已在for语句前面为循环控制变量赋初值时,初始化表达式可以省略;当已在循环体中改变了循环控制变量时,增值表达式可以省略。
3、在for语句中,各个表达式中可通过逗号运算符把多个表达式连接在一起,构成逗号表达式,主要用在同时为多个变量赋初值的时候,这样可大量减少循环次数。
如for(i=1,j=n;i<=j;i++,j--)
4、当for语句中的循环体是空语句(仅由一个分号构成的语句)时,表示在循环体中什么也不做,可使程序延时。有三种写法:
①for(i=1;i<500000;i++)
{
;
}
②for(i=1;i<500000;i++)
{
}
③for(i=1;i<500000;i++);
注:除非特殊需要,一般不在for语句后加分号。
而且,若while语句后面被意外的加上分号,可能会产生死循环。
●计数控制的循环
循环次数事先已知的循环,且习惯上用for语句编写计数控制的循环更为方便。
●嵌套循环
将一个循环语句放在另一个循环语句的循环语句的循环体中构成的循环。
while循环,for循环,do-while循环都可以使用。
●条件控制的循环
循环次数事先未知的循环通常是由一个条件控制的,此时用while语句和dowhile语句编程更方便。
对我来说,for循环的使用次数远远大于while循环和do—while循环,当然,一部分原因可能是个人习惯,但for循环使用起来的确比while循环以及do—while循环方便很多,它更符合我们日常思维,逻辑思路。就我所知,我周围学习C语言的人大部分都习惯于使用for循环。当然,for循环也有它的弊端,如若要进行多组输入,那么这时只能用while循环解决。可以说是各有利弊吧,但相较来说for循环使用更普遍(只是我个人看法,我周围人大部分都习惯于for循环)。
最近写openjudge的时候也遇到了一些困难,也是和for循环有关,一个小游戏——石头剪刀布,足足困扰了我一个星期。一开始采用switch结构,然后又采用if条件控制语句,后来又尝试while循环,都WA。最后还是for循环AC的,真的是要崩溃了。当然,不排除存在思路错误。目前作为一个菜鸟,还在不断提高自己的能力,也在不停的练习,尝试新的思路,方法。一题多解,尽量把每种想法都实现,把每个方法都试遍。从菜鸟到大牛,差的不只是一点点,还需要更努力才行!