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值肯定是不满足条件的,而它们的前一个组合才是正确的结果。
总结:
判断输出是否正确的关键方法在于:是否输出了循环控制变量。