C编程 - 如何仅使用循环打印带小数部分的数字?

时间:2012-04-15 22:28:51

标签: c loops

我目前正在接受C编程课程的基本介绍,对于我们目前的任务,我要编写一个程序,使用循环将公里数转换为英里 - 没有if-else,switch语句或任何其他构建我们尚未学习但是被允许。所以基本上我们只能使用循环和一些运算符。对于一个数字输入,程序将生成三个相同的表(从1千米到输入值开始),使用第一组计算的while循环,第二组的for循环和第三组的do循环。

我已经编写了整个程序,但是我在使用十进制组件识别输入时遇到了一些问题。

代码读入并转换整数很好,但由于增量仅增加1,因此不会打印带小数分量的数字(例如3.2,22.6等)。

有人能指出我正确的方向吗?我真的很感激任何帮助! :)

3 个答案:

答案 0 :(得分:0)

目前还不清楚你想要输出什么。您使用从3.2开始的示例,因此根据您的当前程序,您的输出是:

 KILOMETERS       MILES    (while loop)
 ==========       =====
   1.000          0.620
   2.000          1.240
   3.000          1.860

问题是你的桌子结束而没有输出3.2的值吗?解决这个问题的一种简单方法(根据您的要求仅使用循环语句)将添加以下代码:

while (count < km)
{
    printf ("%8.3lf %14.3lf\n", km, KM_TO_MILE * km);
    count = km;
}

这实际上是伪装的if陈述,我不知道你的教授是否接受它,但它确实提供了最后一行输出。

您是否需要为每条线输出增加1.0(km)的条目?如果没有,也许更好的解决方案是确定从一行到下一行的偏移量,这使得您可以在有限数量的行上在1.0和km之间进行迭代。

答案 1 :(得分:0)

一个简单的解决方案是将输入(km)乘以10,100或1000.然后将结果(mi)除以相同的常量。但是避免在循环中打印结果,将其从那里取出。 但是你可能会失去精确度(这是你的下一个练习:)

#include <stdio.h>
#define KM_TO_MILE .62 

#define NAMEITHOWYOULIKE 100.0

main (void)
{
  double km, mi, count;                                                          

  printf ("This program converts kilometers to miles.\n");

    do                                                                      
    {
           printf ("\nEnter a positive non-zero number");                   
           printf (" of kilometers of the race:  ");
           scanf  ("%lf", &km);                                             
           getchar();                                                      
    }while (km <= 1);                                                       

    km = km * NAMEITHOWYOULIKE;

    printf ("\n KILOMETERS       MILES    (while loop)\n");                      
    printf (" ==========       =====\n");

    count = 1;                                                              
    while (count <= km)                                                     
    {                                                                       
          mi = KM_TO_MILE * count;
     ++count;                                                                           
    }
    printf ("%8.3lf %14.3lf\n", count/NAMEITHOWYOULIKE, mi/NAMEITHOWYOULIKE);                  
    getchar();
    }

答案 2 :(得分:0)

如果您想要输出:

 KILOMETERS       MILES    (while loop)
 ==========       =====
   1.000          0.620
   2.000          1.240
   3.000          1.860
   3.200          1.984

只需在while循环后添加以下内容(对于独占“最终结果”):

mi = KM_TO_MILE * km;
printf("%8.3lf %14.3lf\n", km, mi);

或包含“最终结果”,以防止在使用整数时最后两个结果相同:

while (km > count)
{
    mi = KM_TO_MILE * km;
    printf("%8.3lf %14.3lf\n", km, mi);
    break;
}

您已成功打印整数值,但需要在完成后打印最终值。您最后需要做的就是(上面)将值直接从千米转换为英里。