标签:结束 lse 初始 写代码 提示 for nbsp 教科书 版本
条件判断过后,我们学习一下循环。输入一个数组,让你对数组中每个元素赋值。读入一个文件,输出文件中的每一行。等等这些都会用到循环。
我们在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 循环。
标签:结束 lse 初始 写代码 提示 for nbsp 教科书 版本
原文地址:https://www.cnblogs.com/danielhu/p/12079377.html