以个人理解为主体的C语言学习理解梳理记录,注重于更好的理解一些概念,肯定有说的不太对的地方,还望在包涵的时候帮我指出一下错误之处!感激不尽!
目录
循环语句,C语言中非常实用的一种方法,不仅可以在每次循环之中打印出变量的变化,也可以借由循环来实现一些其它功能,比如猜数游戏。
不过在编写猜数游戏之前,巧妇难为无米之炊,肯定要先理解循环语句的类型与使用方法。
While语句功能概述
while(值满足测试条件)
{
处理该值
获取下一个值
}
while,它的运行流程非常简单,如果了解过西西弗斯的故事这并不会很难。
西西弗斯被惩罚每天推动一块巨石上山,当石头到达山顶的时候,他的惩罚就结束了,可是他被下了诅咒,每当巨石快要到达山顶的时候,他的巨石无论如何都会直接再次滚下山脚,如此重复。
while语句就像是这个故事,while()中括号内容语句为真的时候继续执行,为假的时候跳出循环。C通过求值来处理测试条件,结果为0则为假,非0表示真。
对于西西弗斯而言,他悲惨的命运可以用while语句去这样描绘。
while(巨石没有被推上山顶)
{
继续推动巨石;
}
惩罚结束;
当while语句括号内为假的时候,也就是“巨石被推上了山顶”的时候,while循环结束,跳出,得到惩罚结束。
但是可怜的西西弗斯在他的循环命运中完全没有任何机会改变判断条件的真假!这回使得他的命运和下面的while语句一样进入死循环。
int main()
{
int a = 2;
while (a < 10)
{
printf("推动巨石\n");
}
return 0;
}
所以,每个循环语句若是不想让它陷入死循环,就一定要给出能满足判断表达式的方法或者条件,我们可以利用循环的特点,让变量a逐渐靠近能跳出循环的条件从而跳出循环。
那很简单!我们利用循环的性质,每一次循环的时候a自增1
int main()
{
int a = 2;
while (a < 10)
{
printf("推动巨石\n");
a++;
}
return 0;
}
当然,while语句会在它的作用域范围内检测运行的代码是否满足判断表达式,但有个小问题,假如while遇到了会使得判断条件变为假的时候,它会不会马上跳出循环?剩下的语句还会被执行吗?
请观察如下代码。
int main()
{
int a = 2;
while (a == 2)
{
printf("a的值现在是%d\n", a);
a = 1;
printf("a的值现在是%d", a);
}
}
我们在中途修改了a的值,使得判断条件为假,运行结果如下
可以看到,while的条件判断是在每一次循环结束后才进行判断真假。
do while语句功能概述
如果你在头疼“为什么一定要满足while的判断表达式才能进入循环?!”这种问题的话,找do while 就行了。
do while 语句,do 语句下的代码会先执行一次,然后才进行while的判断。总而言之,do while保证了循环语句里的内容至少能执行一次,而不是满足while才执行。
do
{
需要执行的循环语句;
}
while(判断表达式)
(DO IT!!!)
for语句概述与功能
for语句可以说是非常实用的循环语句了,相较于while语句,for则实现了循环的可控性。
for(获得初值;值满足测试条件;获得下一个值)
{
处理该值
}
看上去有些难懂,来点直观的
int main()
{
int n = 5;
for (n = 1; n <= 10; n++)
{
printf("这是第%d次打印\n", n);
}
return 0;
}
总结以上for的表现,可以更好的提炼以下for的功能for(初始化;测试;更新)
其中的表达式也可以是比较复杂的内容,取决于需要应用的场景,我们可能会在使用for语句或者while语句上有些难以抉择,不过通常来讲,主要取决于需要解决的问题,如果需要初始化数值的时候使用for语句会更加直观。
综上概述,循环是一个非常强大的编程工具,但是要想驾驭这个工具最为重要的原则是:不要死循环!
总结一下
1.注意循环的测试条件要能使得循环结束(不然会重演西西弗斯的故事)
2.确保循环测试的值在首次使用之前已经初始化(如果把初始化语句放在循环语句内,那么每次循环的时候变量都会被重新初始化)
3.确保每次循环都能更新测试的值(有变化才能终止循环)
goto语句(传送门)
前排提醒,由于goto语句容易打乱正常的循环逻辑产生错误,能避免使用则为最佳。
goto非常直爽简单,“去那里就行!”
用法如下
用goto 后面拟定名称,像传送枪一样标记出口一样,把这个名称放在程序的一个位置
跳转到名称的部分,也就是mark的后面要加上冒号:
mark//标记出口
执行程序
goto mark//标记入口
这个程序是一个像传送门一样的无尽循环。
程序执行之后,一旦遇到goto,goto后面的程序都会被忽略,所以这是它容易打乱逻辑的原因,goto更加常用的方法则是跳出嵌套过深的循环。(不做叙述)