0

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

我已经编写了整个程序,但是在让它识别带有小数部分的输入时遇到了一些问题。

代码可以很好地读取并转换整数,但由于增量仅增加 1,它不会打印带有小数部分的数字(例如 3.2、22.6 等)。

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

4

3 回答 3

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(公里)的条目?如果不是,也许更好的解决方案是确定从一条线到下一条线的偏移量,这使您可以在有限的行数上在 1.0 和 km 之间进行迭代。

于 2012-04-15T22:38:28.413 回答
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();
    }
于 2012-04-15T22:44:10.177 回答
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;
}

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

于 2012-04-15T22:46:43.130 回答