循环:一个真实示例
假设您想创建一个程序,打印一个华氏-摄氏度转换表。这可以通过 for 循环或 while 循环轻松实现
#include <stdio.h> int main() { int a; a = 0; while (a <= 100) { printf("%4d degrees F = %4d degrees C\n", a, (a - 32) * 5 / 9); a = a + 10; } return 0; }
如果您运行此程序,它将生成一个从0华氏度开始到100华氏度结束的数值表。输出将如下所示
广告
0 degrees F = -17 degrees C 10 degrees F = -12 degrees C 20 degrees F = -6 degrees C 30 degrees F = -1 degrees C 40 degrees F = 4 degrees C 50 degrees F = 10 degrees C 60 degrees F = 15 degrees C 70 degrees F = 21 degrees C 80 degrees F = 26 degrees C 90 degrees F = 32 degrees C 100 degrees F = 37 degrees C
表格中的值以10度为增量。您可以看到,您可以轻松更改程序生成的表的起始、结束或增量值。
如果您希望您的值更精确,可以改用**浮点**值
#include <stdio.h> int main() { float a; a = 0; while (a <= 100) { printf("%6.2f degrees F = %6.2f degrees C\n", a, (a - 32.0) * 5.0 / 9.0); a = a + 10; } return 0; }
您可以看到,**a** 的声明已更改为浮点型,并且 **%f** 符号替换了 printf 语句中的 **%d** 符号。此外,%f 符号还应用了一些格式:该值将以小数点前六位和小数点后两位进行打印。
现在,假设我们想修改程序,以便将温度 98.6 插入到表格的适当位置。也就是说,我们希望表格每隔 10 度递增,但我们也希望表格包含一行额外的 98.6 华氏度,因为这是人类的正常体温。以下程序可以实现此目标
#include <stdio.h> int main() { float a; a = 0; while (a <= 100) { if (a > 98.6) { printf("%6.2f degrees F = %6.2f degrees C\n", 98.6, (98.6 - 32.0) * 5.0 / 9.0); } printf("%6.2f degrees F = %6.2f degrees C\n", a, (a - 32.0) * 5.0 / 9.0); a = a + 10; } return 0; }
如果结束值为 100,则此程序可以正常工作,但如果您将结束值更改为 200,您会发现该程序有一个**错误**。它打印 98.6 度的行次过多。我们可以通过几种不同的方式来解决这个问题。这里提供一种方法
#include <stdio.h> int main() { float a, b; a = 0; b = -1; while (a <= 100) { if ((a > 98.6) && (b < 98.6)) { printf("%6.2f degrees F = %6.2f degrees C\n", 98.6, (98.6 - 32.0) * 5.0 / 9.0); } printf("%6.2f degrees F = %6.2f degrees C\n", a, (a - 32.0) * 5.0 / 9.0); b = a; a = a + 10; } return 0; }
C 语言要避免的错误
- 在 if 或 while 语句中,将 `=` 写成 `==`
- 忘记在 while 循环中增加计数器 - 如果忘记增加计数器,将导致无限循环(循环永不结束)。
- 不小心在 for 循环或 if 语句末尾加上分号 `;` 导致语句不起作用 - 例如:for (x=1; x<10; x++); printf("%d\n",x); 只会打印一个值,因为 for 语句后的分号充当了 for 循环执行的一行。