转换表从英尺到英寸到厘米

时间:2016-12-06 16:57:53

标签: c loops

我需要编写一个程序,用于打印从英尺到英寸到厘米的转换表。从表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

我做错了什么?

3 个答案:

答案 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)

OP需要放置&#34;英寸&#34;循环在&#34;脚&#34;循环以及其他人的回答。 @Toby Speight @VHS

代码可以做到&#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;
}