我目前正在学习 C 编程课的基本入门,对于我们目前的任务,我将编写一个程序,使用循环将公里数转换为英里数 - 不允许使用 if-else、switch 语句或任何其他我们尚未学习的结构。所以基本上我们只能使用循环和一些运算符。该程序将为一个数字输入生成三个相同的表(从输入值的 1 公里开始),使用 while 循环进行第一
组计算,使用 for 循环进行第二组计算,使用 do 循环进行第三组计算。我已经编写了整个程序,但是在让它识别带有十进制部分的输入时遇到了一些问题。
代码可以很好地读取和转换整数,但由于增量仅增加 1,因此它不会打印带有小数部分的数字(例如 3.2、22.6 等)。
有人可以指出我正确的方向吗?我真的很感激任何帮助!:)
目前尚不清楚您要获取什么作为输出。您使用从 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.3lfn", km, KM_TO_MILE * km);
count = km;
}
这真的是一个变相的if
陈述,我不知道你的教授是否会接受它,但它确实提供了最后一行输出。
您是否需要为每行输入增加 1.0 (km) 的条目?如果没有,也许更好的解决方案是确定从一行到下一行的偏移量,这样您就可以在有限数量的行上在 1.0 和 km 之间迭代。
解决方案是将输入(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.3lfn", count/NAMEITHOWYOULIKE, mi/NAMEITHOWYOULIKE);
getchar();
}
如果你想输出这个:
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.3lfn", km, mi);
或包含"最终结果",以防止在使用整数时最后两个结果相同:
while (km > count)
{
mi = KM_TO_MILE * km;
printf("%8.3lf %14.3lfn", km, mi);
break;
}
您已成功打印整数值,但完成后需要打印最终值。最后(上图)您需要做的就是将值直接从公里转换为英里。
输出图像
#include<stdio.h>
int main() {
double kilo, miles, i;
printf("enter the kilometer to be converted :");
scanf("%lf",&kilo);
printf("kilost milesn");
printf("-----------------------------------------------------n");
i=1;
while(i<=kilo){
miles=i/1.609;
printf("%lft %lfn",i,miles);
i++;
}
}