
循环
首先了解,循环。人类发明计算机,其实很大的一个作用就是,计算机可以无休止不会累的重复做一件事,递增的将事做好。这就是计算机的初衷。
而在C语言里,很多语句和表达式,都经过循环的作用过程,达到更好的结果。这次,我们就聊聊循环。
C语言里循环有很多种,规范的循环和不规范的循环。
比如
while(1)
{
printf( "你好,福川");
}
这是规范的循环
int main()
{
printf("你好,福川");
return main();
}
这是不规范的循环。
第一种,这种类型属于正规上的循环,有个入口,也有终结点。而第二个虽说也可以做到循环,但在做其它事情是,它的循环会将主函数作用域内的所有东西都循环,本来有的东西就循环一次出结果就可以,但你在返回点上又进入了主函数入口,导致很多语句都跟着做不必要的循环,危险很大。
所以我们不规范的循环稍微了解下就好,我们重点说说规范的循环。
C语言有几种循环,分别:
while(条件表达式)
{
需要循环的语句;
}
for(初始化;条件表达式;条件表达式)
{
需要循环的语句;
}
do
{
需要循环的语句;
}while(条件表达式);
这三种循环,都是C语言代码运作起来的重要推手,很多重要代码运行,都需要循环来运算和运作。很多人在用循环写一个模块时,经常写着写着发现到最后运行不了或是运行错误,这里有个方法可以用以前大佬的经验告诉你下。做循环块时,我们可以先用简单的文字提示,再去增加需要的条件表达式,用文字提示。这样可以更清楚理清运作的逻辑和思路,这就是前人留下来的一个方法,叫做伪代码。比如
创建一个变量名,变量名赋值0
创建一个循环,循环的判断为变量名小于10。
循环10次,每循环一次,自增一次。
这里我们先从
while循环体
while(条件表达式)
{
需要循环的语句;
}
这个循环说起,while循环,有一个循环入口,他的循环入口是先表达清楚为何循环,什么时候循环,需要循环到什么程度,都由括号里的来表示,比如 int i=0; while(i<10) .这一段,就很清楚的告诉这个循环体,我初始是0 ,我要循环10次。从0开始 到 9 总共十次,但有一点你也要告诉while循环,我是怎么计数的?
我们前面说过自增,我们就用后自增方式告诉while你没运行一次以后,我增加次数1.,while循环就变成
int i=0;
while(i<10)
{
printf("你好,福川");
i++; //注意这段,若是没有这段,你这个 i 就一直是0 永远是0<10 会一直循环,便成死循环。
}
所以,我们必须让括号里的表达式里的值必须有变化,如果没有变化,要么这段代码块无法运行,要么变成死循环。正确的表达式,才是让一个代码块得到最好的运行。
其次,while循环的括号里不能做赋值,比如while(i=10),这样的话,while不知道你像表达什么,我们刚才说了,要让循环体很清楚的直到 为何循环,什么时候循环,需要循环到什么程度。
下面有个例子
int i=0;
while(i<10)
i++;
printf("第%d次你好,福川\n",i);
这一段能循环吗?能,但是printf函数里的数字为什么是10次循环? 而printf函数没有跟着连续显示?
那是因为作用域
花括号是作用域,它能告诉编译器,这是一整段代码,他们是一个整体。如果while没有这个花括号,那他只循环i++;下一句printf函数没有循环到。直到 i 的判断停止,循环就结束。最后在向下运行到printf函数,只输出了一次。所以我们应该
int i=0;
while(i<10)
{
i++;
printf("第%d次你好,福川\n",i);
}
这样才能算是一个组合的整体。
下面在说说 for循环
for循环体
for(初始化;条件表达式;条件表达式)
{
需要循环的语句;
}
for循环和while循环差不多,只不过它把while分开的表达式,集合在一起。比如
int i=0; //初始化表达式 第1个
while(i<10) //判断表达式 第2个
{
i++; //条件表达式 第3个
printf("第%d次你好,福川\n",i);
}
从这一段可以看出什么了把?我们看看for
for(int i=0;i<10;i++) //第1个 ;第2个;第3个
{
printf("第%d次你好,福川\n",i);
}
这下子很清楚了吧?for在循环体很经常用,它也属于入口式循环体,主要是他能减少代码的多余,让代码看起来跟少,让程序的运行速度会更快。如果在复杂的循环代码块里,一般都用for ,而简单的循环代码块则用while。
另一个则是
do while循环体
do
{
需要循环的语句;
}while(条件表达式);
这个很多人会问,既然前面两个循环就很好用,为何还要这个?那我先提前给你一个小提示,它是出口表达式。
前面几个循环,他们都是要先为何循环,什么时候循环,需要循环到什么程度,而后面这个do while循环,则是,我先做一步,错了,再继续。对了,就停止比如,一个站好要登陆:
do
{
scanf("%d",&i);
}while(i!=123456); //注意,结尾有个 ; 结束语句。
这一段,就是提示你输入密码,如果密码不是123456,他就一直循环,直到你输入123456正确了之后,它在结束循环。这就是出口式循环。就是在出口位置判断,而while和for都是先判断在循环。
循环,还可以嵌套。比如。
for(i=0;i<10;i++)
for(j=0;j<10;j++)
{
printf("你好,福川");
}
这里两个for,第一个循环为行循环,代表几行,第二个循环为列循环,代表几列。
他们的循环次序是第一个for循环一次,第二个for循环10次之后,在跳到第一个for循环,第一个for循环在循环一次,第二个for循环在循环10次,以此类推,直至第一个for循环判断结束为止。
这你们可以自己试一下,也可以继续多嵌套几个for进去,嵌套多了,你也就理解了,什么是多维,哈哈,扯远了,我们循环也就说到这,如果有问题或不懂,欢迎留言。
出个小题
- 使用for循环,打一个99乘法表,小提示 ,循环的嵌套规则,了解行和列的规则
- 使用while循环打一个99乘法表,小提示,嵌套的循环初始化,也要在嵌套内。