(本文为博闻网版权所有,转载必须注明出处。)

假设您要编写一个能够打印华氏-摄氏温度转换表的程序。可以使用for或者while循环可以轻松实现:

#include

int main()
{
int a;
a=0;
while (a <=100)
{
printf("%4d华氏度=%4d摄氏度
\n",
a,(a -32.0)*5.0/9.0);
a =a+10;
}
return 0;
}

该程序运行后将打印从华氏0度到华氏100度的转换表。输出如下:

0华氏度=-17摄氏度
10华氏度=-12摄氏度
20华氏度=-6摄氏度
30华氏度=-1摄氏度
40华氏度=4摄氏度
50华氏度=10摄氏度
60华氏度=15摄氏度
70华氏度=21摄氏度
80华氏度=26摄氏度
90华氏度=32摄氏度
100华氏度=37摄氏度

上表中温度值以10度为间隔递增。您会发现通过程序改变表中温度的起始值、结束值和递增值都很容易。

如果想让温度值更加精确的话,您可以改用浮点数值

#include

int main()
{
float a;
a = 0;
while (a <= 100)
{
printf("%6.2f 华氏度 = %6.2f 摄氏度
\n",
a, (a - 32.0) * 5.0 / 9.0);
a = a + 10;
}
return 0;
}

如上例所示,a的声明改用float,而且在printf语句中用符号%f代替了符号%d。此外,还在符号%f前规定了一些格式:打印数值时使用6位整数和2位小数。

现在我们要修改程序,使它在适当的位置插入98.6度。即,我们还是每隔10度打印,但是要增加一行98.6华氏度,因为它是人体的正常体温。下面的程序会满足我们的要求:

#include

int main()
{
float a;
a = 0;
while (a <= 100)
{
if (a > 98.6)
{
printf("%6.2f 华氏度 = %6.2f 摄氏度
\n",
98.6, (98.6 - 32.0) * 5.0 / 9.0);
}
printf("%6.2f 华氏度 = %6.2f 摄氏度
\n",
a, (a - 32.0) * 5.0 / 9.0);
a = a + 10;
}
return 0;
}

结束值是100时,上面的程序可以正常工作。但如果将结束值变成200,您就会发现程序的一处错误:打印了太多次98.6度。我们可以用多种方法改正这个错误。下面是其中之一:

#include

int main()
{
float a, b;
a = 0;
b = -1;
while (a <= 100)
{
if ((a > 98.6) && (b < 98.6))
{
printf("%6.2f 华氏度 = %6.2f 摄氏度
\n",
98.6, (98.6 - 32.0) * 5.0 / 9.0);
}
printf("%6.2f 华氏度 = %6.2f 摄氏度
\n",
a, (a - 32.0) * 5.0 / 9.0);
b = a;
a = a + 10;
}
return 0;
}

动手一试
  • 尝试修改华氏-摄氏度转换程序,以使该程序使用scanf接受用户输入,作为结果输出表格的起始、结束和增量值。
  • 为表格制作表头。
  • 试用另一种方法解决上例的程序改正的错误。
  • 制作一个英镑-千克或英里-公里的转换表。

C 常见错误
  • 在if或while语句中错用=代替==。
  • 忘记在while循环中增加计数器的值——这会导致无限循环(永不结束的循环)。
  • 不留神在for循环或if语句末尾加上了分号,使语句起不了作用。例如:
  • for (x=1; x<10; x++);
    printf("%d
    \n",x);

    只打印出一个值,因为for语句循环执行的只是它后面的那个分号。




 打印  电子邮件  反馈  引用
编辑推荐
软件狗是什么?
软件狗(Software Dog)是一种计算机软件的加密方式,是“硬件加密锁”的
间谍软件工作原理
您的计算机是否曾变得非常慢,即使打开Word处理器也会占用很长时间,间谍软件可能
什么是路由算法?
路由器是管理网络流量和发送数据包的,但是它是如何决定数据包发送的呢?通过本文,博
Gnutella文件共...
Napster在巅峰时期或许是有史以来最受欢迎的网站。紧随其后的文件共享体系架构
主页 |  公司信息 |  广告服务 |  招聘信息 |  隐私 |  联系我们 |  帮助 |  条款和条件