我需要编写一个程序,用于打印从英尺到英寸到厘米的转换表。从表i
(从零开始计数),列j
(从零开始计数)打印的数字应该是等于i
英尺和j
英寸的cm。 i
应该从0到7,j
从0到11.每列应该是五个字符宽,cm数字应该四舍五入到最接近的整数。
下面给出了所需输出的例子:
0 3 5 8 10 13
30 33 36 38 41
61 64 66 69 71
91 94 97 99 102
我打印的代码只有一行英寸和一列英尺,但我不知道如何制作成表而不产生大量不相关的重复。
代码是:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int i,j;
int cm,p;
for (i=0; i<= 11; i++) {
cm =round(i * 2.54);
printf ("%5d",cm);
}
for (j=0; j<=7; j++) {
p =round(j* 12.0 * 2.54);
printf ("%5d\n",p);
}
return 0;
}
这会产生:
0 3 5 8 10 13 15 18 20 23 25 28 0
30
61
91
122
152
183
213
我做错了什么?
答案 0 :(得分:2)
你有一个循环接一个。您需要做的是在脚循环的每次迭代中运行英寸循环 。你得到的是嵌套循环:
<class name="test..*.testcase01" />
我在我的版本中做了一些其他更改;我们鼓励你研究它并理解它为什么会这样做(例如,阅读#include <stdio.h>
int main()
{
for (int feet = 0; feet <= 7; ++feet) {
for (int inches = 0; inches < 12; ++inches) {
int microns = (feet * 12 + inches) * 25400;
int rounded_cm = (microns + 5000) / 10000;
printf("%5d", rounded_cm);
}
puts("");
}
}
的手册页)。不要复制它并将其交付 - 很明显它不是你的代码。
另一种方法是使用单个循环(以英寸为单位),并在每英尺达到11英寸时插入换行符:
puts()
(你想给你的常数提供有意义的名字;上面是用&#34; code-golf&#34;风格)。
无论你做什么,都不要试图避免乘以而是在循环中反复添加2.54。浮点数不准确,加法会累积误差。
答案 1 :(得分:2)
代码可以做到&#34;舍入到最近的&#34;通过printf()
语句,使用"%5.0f"
来控制输出宽度和舍入。
为清晰起见,请让代码使用foot/inch
代替i/j
@KevinDTimm。
#include <stdio.h>
#define INCH_PER_FOOT 12
#define CM_PER_INCH 2.54
int main(void) {
// go from 0 to 7, and ...
for (int foot = 0; foot <= 7; foot++) {
// from 0 to 11
// for (int inch = 0; inch < INCH_PER_FOOT; inch++) { is more idiomatic
for (int inch = 0; inch <= 11; inch++) {
printf("%5.0f", (foot * INCH_PER_FOOT + inch) * CM_PER_INCH);
}
puts("");
}
}
输出
0 3 5 8 10 13 15 18 20 23 25 28
...
213 216 218 221 224 226 229 231 234 236 239 241
答案 2 :(得分:1)
你正在向后运行你的循环。首先,你需要穿过脚然后穿过英寸。但是你反过来了。检查以下剪辑并将其与您的代码进行比较,并尝试了解错误。
#include <stdio.h>
#include <stdlib.h>
#include <math.h> // for rounding of a number
int main()
{
int i,j;
int cm,p;
for(i=0; i<=7;i++) {
for(j=0;j<=11;j++) {
cm = round(i*30.48 + j*2.54);
printf ("%5d",cm);
}
printf("\n");
}
return 0;
}