我目前正在接受C编程课程的基本介绍,对于我们目前的任务,我要编写一个程序,使用循环将公里数转换为英里 - 没有if-else,switch语句或任何其他构建我们尚未学习但是被允许。所以基本上我们只能使用循环和一些运算符。对于一个数字输入,程序将生成三个相同的表(从1千米到输入值开始),使用第一组计算的while循环,第二组的for循环和第三组的do循环。
我已经编写了整个程序,但是我在使用十进制组件识别输入时遇到了一些问题。
代码读入并转换整数很好,但由于增量仅增加1,因此不会打印带小数分量的数字(例如3.2,22.6等)。
有人能指出我正确的方向吗?我真的很感激任何帮助! :)
答案 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;
}
您已成功打印整数值,但需要在完成后打印最终值。您最后需要做的就是(上面)将值直接从千米转换为英里。