循环语句之for循环

目录

一:语法形式

二:执行流程

三: for循环的实践

四:for循环和while循环的对比

五:练习

练习一

练习二

六:对于书写格式的建议


一:语法形式

for 循环是三种循环中使用最多的, for 循环的语法形式如下:

1 for(表达式1; 表达式2; 表达式3)

2 语句;//如果循环体想包含更多的语句,可以加上⼤括号 
表达式1 ⽤于循环变量的初始化
表达式2 ⽤于循环结束条件的判断
表达式3 ⽤于循环变量的调整

二:执行流程

   首先执行表达式 1 初始化循环变量,接下来就是执行表达式 2 的判断部分,表达式 2 的结果如果
==0,则循环结束; 表达式 2 的结果如果!=0则执行循环语句,循环语句执行完后,再去执行表达式 3 ,调整循环变量,然后再去 表达式 2 的地方执行判断,表达式 2 的结果是否为0,决定循环是否继 续。
   整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环。

三: for循环的实践

  练习:在屏幕上打印1~10的值

  参考代码:

#include <stdio.h>

 int main()
 {
     int i = 0;
     for(i=1; i<=10; i++)
     {
         printf("%d ", i);
     }
 
         return 0;
}

在此,提一个小小的建议,在描述for循环中变量的取值时,最好为前闭后开。

例如;

for(i = 0; i < 10; i++)

 但是,绝不是说不可以用前后均闭的形式,只是在绝多数情况下,那种表示形式逻辑更清晰,更易于理解。

  上面练习的代码,就可以说是一个反例,输出一到十的数字,写上面取值的形式,就比前闭后开更容易理解。


四:for循环和while循环的对比

  在上一篇文章中,我们讲解了while循环的用法,那这两种循环有什么区别呢?同样是循环,为什么for循环使用更多呢?带着这两个疑问,请看以下代码:

#include <stdio.h>
//for循环打印一到十
int main()
{
    int i = 0;
    for (i = 1; i <= 10; i++)//打印,判断,调整
    {
        printf("%d ", i);
    }

    return 0;
}
//while循环打印一到十
    int i = 1;//初始化
    
    while (i <= 10)//判断
    {
        printf("%d",i)
        i++;//调整
    }
   for while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部
分非常集中,便于代码的维护,而如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形式上 for 循环要更优⼀些。
  对于比较长的代码,如果这三个部分相距太远,存在出现bug的风险,用for循环,这种风险大大减少。

五:练习

练习一

计算1~100之间3的倍数的数字之和
#include <stdio.h>
int main()
{
 int i = 0;
 int sum = 0;
 for(i=1; i<=100; i++)
 {
 if(i % 3 == 0)
 sum += i;//如果是3的倍数,就可以整除3,就如if控住的语句,sum加上这个i
 }
 printf("%d\n", sum);
 return 0;
}

当然,还可以小小的优化一下,比如,我们先找到最小的三的倍数,即3,在这之上,只要每次加三,就可以保证之后所有的数都是三的倍数。

#include <stdio.h>
int main()
{
 int i = 0;
 int sum = 0;
 for(i=3; i<=100; i+=3)
 {
 sum += i;
 }
 printf("%d\n", sum);
 return 0;
}

练习二

大家看到下面代码,可以不要继续向下翻,自己想一下结果:

下面代码循环几次?

#include <stdio.h>
int main()
{
    int i = 0;
    int k = 0;
    for(i = 0, k = 0;k = 0;i++,k++)
    {
        k++;
    }
    return 0;
}

答案是一次?无数次?还是什么呢?

下面揭晓答案:

正确答案是零次,什么都没有。这是为什么呢?

请注意,在判断部分,k与0之间是赋值操作符=,而不是判断操作符==,所以k=0,表示把k的值赋成0,在C语言中,零表示假,所以判断部分为假,不进入循环,结果为零。


六:对于书写格式的建议

第一种:

for(int i = 0;i <= 10; i++)

i这个变量在for的括号里之间定义,这种写法是C99中加进去的新语法,很多编译器并不能使用

C99的语法,这也是C++的语法。

第二种;

int i = 0;
for(;i < =10; i++)

甚至说,是这样的

for(;;;)

  这种写法,在语法上是允许的,for循环的三部分,可以什么都不写,但在逻辑上是不行的,尤其是第二个代码,什么都没有,在没有判断部分的情况下,表示条件恒成立。这两种写法的结果都可能导致我们所写的代码与实际想得到的结果有一定的出入。

比如:

int main()
{
	int i = 0, j = 0;
	for (i = 0; i <= 5; i++)
	{
		for (j = 0; j <= 5; j++)
		{
			printf("hehe\n");
		}
	}
	return 0;
}

这个代码的运行是,i==0时,内循环循环5次,外循环共循环5次,外循环每循环一次,内循环就循环5次,所以结果是25个hehe

当我们把i的初始部分省略的时候,结果还是正确的,那把j的初始部分也省略呢?

结果就打印了五次hehe,这是为什么呢?

在i==0第一次外循环,结束的时候,j是等于5,不满足j<=5,这个条件跳出内循环的,当i==1,外循环在此循环时,j想进入内循环,可是j的初始化被省略,j的值此时是5,不满足进入循环的条件,所以这个循环共进行5次。

由此可以看出,for循环的三个部分尽可能不要省略,不然谁都不知道在哪个地方会有bug,让结果与自己所想的有误差。


好啦!对应for循环的介绍就到这里了。老规矩哦!下一篇我们讲解下两个循环语句do while循环和goto循环。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玖剹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值