C和C++从零开始系列(四)

条件判断过后,我们学习一下循环。输入一个数组,让你对数组中每个元素赋值。读入一个文件,输出文件中的每一行。等等这些都会用到循环。

我们在C和C++中,原生的循环主要有 for 循环和 while 循环。其中while 循环又分为 while() {} 和 do {} while() 这两种(很多教科书上称为当型循环和直到型循环)。

这是我们的三种示例用法。

 1 int main()
 2 {
 3         int a[10] ={0};
 4         for (int x = 0; x < 10; x++)
 5         {
 6                 a[x]=2*x;
 7         }
 8         for (int x = 0; x < 10; x++)
 9         {
10                 printf("The %d element is %d\n", x+1, a[x]);
11         }
12         return 0;
13 }

有的编译器针对扩展名,参数等是有一定要求的,在我使用的 gcc 4.8.5 版本中。

1. 如果文件扩展名为 .c, 当我使用 gcc 编译时,提示我 for 循环只能在 C99 mode 下使用。

2. 同样的代码,使用 g++ 编译时,编译成功

3. 如果扩展名为 .cc, 使用 gcc 和 g++ 编译都成功。

4. VS2015 没有出现这个问题。

5. VC6 会判定第二个 for 循环中的 x 被重复定义。

for 循环中有三个表达式,中间用 ; 分隔开。第一个是循环开始时的初始表达式,第二个是循环结束条件,第三个是每一次循环后执行的语句,用来更新变量,使得循环逐渐逼近结束条件。

所以程序在上边 for 循环例子中执行顺序如下:

1. 定义一个变量x,并为其赋初始值0,

2. 判断x 是否满足第二个表达式 x是否小于10

3. 如果不满足(x<10), 退出循环 

4. 如果满足,执行 for 循环体内的语句

5. 执行 for 循环中第三个表达式 x++

6. 重复 2-5 步骤。

循环体中,可以使用 break 来结束循环。(for 和 while 均是如此)。

所以有的程序会出现第二个表达式为空的情况。以上例子,如果第二个表达式为空,可以这么写

 1 int main()
 2 {
 3         int a[10] ={0};
 4         for (int x = 0; ; x++)
 5         {
 6                 if (x >= 10)
 7                         break;
 8                 a[x]=2*x;
 9         }
10         for (int x = 0; ; x++)
11         {
12                 if (x >= 10)
13                         break;
14                 printf("The %d element is %d\n", x+1, a[x]);
15         }
16         return 0;
17 }

也有的例子会出现第三个表达式也为空,那我们这么写吧

 1 int main()
 2 {
 3         int a[10] ={0};
 4         for (int x = 0; ; )
 5         {
 6                 if (x >= 10)
 7                         break;
 8                 a[x]=2*x;
 9                 x++;
10         }
11         for (int x = 0; ; )
12         {
13                 if (x >= 10)
14                         break;
15                 printf("The %d element is %d\n", x+1, a[x]);
16                 x++;
17         }
18         return 0;
19 }

继续变换 for 循环,因为我们知道在 for 循环中,第一个表达式只需要在进入循环的时候才执行,那我们可以在 for 循环之前执行。在确保没有重复定义变量x 的情况下,我们改变 for 循环为

 1 int main()
 2 {
 3         int a[10] ={0};
 4         int x = 0;
 5         for (; ; )
 6         {
 7                 if (x >= 10)
 8                         break;
 9                 a[x]=2*x;
10                 x++;
11         }
12         x=0;
13         for (; ; )
14         {
15                 if (x >= 10)
16                         break;
17                 printf("The %d element is %d\n", x+1, a[x]);
18                 x++;
19         }
20         return 0;
21 }

这时for循环表达式为空,我们可以很容易的把 for 循环改为 while 循环了。

改为这样:

 1 int main()
 2 {
 3         int a[10] ={0};
 4         int x = 0;
 5         while(1)
 6         {
 7                 if (x >= 10)
 8                         break;
 9                 a[x]=2*x;
10                 x++;
11         }
12         x=0;
13         while (1 )
14         {
15                 if (x >= 10)
16                         break;
17                 printf("The %d element is %d\n", x+1, a[x]);
18                 x++;
19         }
20         return 0;
21 }

这样我们能够将 for 循环改为 while 循环,具体在写代码的时候使用 for 还是 while? 都可以,没有人说哪个比哪个更好。只是 for 循环需要使用C99 mode, 如果需要写的代码要在古老的环境中运行,那么只能使用 while 循环。

while 中,我们使用的while(1), C 中, 0 为 false, 非0 为true。

下一篇我们再说 while 循环。

猜你喜欢

转载自www.cnblogs.com/danielhu/p/12079377.html