基于for循环的c语言循环控制条件的使用陷阱解密

C语言当中最重要的一个结构,非循环结构莫属,循环能够解决重复性的、人力上较难操作的运算。


while,do while,for都能实现循环,本人较倾向于for结构,因为for把循环的相关信息都集中在一起,便于程序员对整个循环的初始、条件、结束的整个过程的全局把握。


for(初始化;循环条件;更新操作)

{

      语句;

}


而这里有一个核心点就在于循环条件的控制,具体来说,是循环控制变量的输出与否导致了两种不同的类型,如果不弄清楚以下两种类型的差别,很容易出错。


类型1:不输出循环控制变量


程序举例:A、B、C、D、E 5 人在某次考试的成绩排名中分别为2、3、1、4、5,要求按名次的先后顺序打印同学的编号


#include <stdio.h>

int main()

{

   int i;

   for( i=1;i<=5;i++)

   {

      if(i==2) printf("A");

      if(i==3) printf("B");

      if(i==1) printf("C");

      if(i==4) printf("D");

      if(i==5) printf("E");

   } 

   return 0;

}

输出为:CABDE

这里,i表示第几名,当i是第几名,然后就执行语句输出第几名;当i=6时超出范围,就不会产生输出;而这时如果输出i,则i=6。


类型2:输出循环控制变量或与循环变量绑定的变量(最后不满足条件的输出会正常保存下来,而没有被踢出)


程序举例:第一天买1个苹果,以后每天买的苹果是前一天的2倍,总的苹果数量不能超过100个,问买了几天?

#include <stdio.h>

int main()

{

    int day,apple,sum;

    for(day=1,apple=1,sum=1;sum<=100;)

   {

            day++;                             //某天

            apple=apple*2;            //某天的苹果数

            sum += apple;             //某天的苹果总数

   }

   printf("第%d天买了%d个苹果,总共买了%d个苹果\n",day,apple,sum);

   return 0;

}

输出的sum>100;


正确的程序为:

#include <stdio.h>

int main()

{

    int day,apple,sum;

    for(day=1,apple=1,sum=1;sum<=100;)

   {

            day++;

            apple=apple*2;

            sum += apple;

   }

   day--;

   sum=sum-apple;

   apple=apple/2;

   printf("第%d天买了%d个苹果,总共买了%d个苹果\n",day,apple,sum);

   return 0;

}


这里,sum就是循环控制变量,day、apple就是被绑定的变量,最后退出循环时的day、apple、sum值肯定是不满足条件的,而它们的前一个组合才是正确的结果。


总结

          判断输出是否正确的关键方法在于:是否输出了循环控制变量。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值