无法按期望

时间:2015-11-14 06:47:37

标签: c for-loop printf

我刚刚完成了一个计算体重指数表的程序。但是,我无法按照预期打印表格。我试图更改for循环位置,但它给了我相同的结果。 如果你执行代码,你会理解我。

实际输出:

the output execute:

预期产出:

the expected output execute


我的代码:

#include <stdio.h>

int main(void){
    float kg;
    float m;
    float col;
    float bmi;
    float cm;

    printf(" BMI");
    for(kg=50; kg <= 105 ;kg=kg+5) {
        printf("  %.0fkg",kg);
    }
    printf("\n");
    for(cm=140; cm <= 220 ;cm=cm+5) {
        printf("%.0fcm\n",cm);
    }
    for(col=1; col <= 12 ;col++) {
        for(m=1.4; m <= 2.2 ;m=m+0.05) {
            for(kg=50 ;kg <= 105 ;kg=kg+5) {
                bmi = kg/(m*m);
                printf(" %.1f",bmi);
            }
            printf("\n");
        }
        break;
    }
    return 0;
}

2 个答案:

答案 0 :(得分:1)

您想要打印BMI表,如下所示:

   BMI          50kg      55kg      60kg      65kg       ...

 140cm         25.51     28.06     30.61     33.16       ...
 145cm         23.78     26.16     28.54     30.92       ...
 150cm         22.22     24.44     26.67     28.89       ...
 155cm         20.81     22.89     24.97     27.06       ...
 160cm         19.53     21.48     23.44     25.39       ...
   ...           ...       ...       ...       ...

打印到终端时,必须从上到下,从左到右打印。什么东西打印出来后,就没办法回去了。因此,您必须相应地构建循环:

  • print&#34; BMI&#34;
  • 打印所有质量标签
  • 打印所有数据行:

    • 打印质量标签
    • 打印所有质量和当前高度的BMI

其他注意事项:

  • 你的col上的外环是没用的,因为你在第一次迭代后就会突破它。
  • 如果您希望在使用固定宽度字体打印时表格整洁,则应指定printf格式的字段宽度。例如%10g将使用右侧的空格填充数字,以便占用10个空格。 (如果数字太大,它会溢出字段宽度。)

将所有这些付诸实践,我们得到:

#include <stdio.h>

int main(void)
{
    int m;                  // mass in kg
    int h;                  // height in cm

    printf("%10s    ", "BMI");
    for (m = 50; m <= 105; m = m + 5) {
        printf("%8dkg", m);
    }
    printf("\n\n");

    for (h = 140; h <= 220; h += 5) {
        printf("%8dcm    ", h);

        for (m = 50; m <= 105; m = m + 5) {
            double bmi = 10000.0 * m / (h * h);

            printf("%10.2f", bmi);
        }
        printf("\n");
    }

    return 0;
}

(我已经使用整数来表示离散质量和高度,因为它们更容易迭代。在计算BMI时,必须将它们转换为浮点数才能得到BMI的小数部分表达式10000.0 * m使分子成为一个浮点数,并确保divison是一个平衡点。你必须将缩放因子作为一个带小数点的浮点字面值。)

答案 1 :(得分:-1)

你必须逐行打印,而不是逐列打印。

打印顶部标题,然后打印每行及其标题

the top header

[BMI][...][...]

然后是行

[xx cm] [....] <--- line data
  ^_________________<line header
#include <stdio.h>

int main(void) {
    float kg;
    float m;
    float col;
    float bmi;
    float cm=140.0;

    printf("BMI    ");
    for(kg=50; kg<=105; kg=kg+5) {
        printf("%.0fkg  ",kg);
    }
    printf("\n");

    //for(col=1; col<=12; col++) {
    for(m=1.4; m<=2.2; m=m+0.05) {
        printf("%.0fcm  ",cm);
        for(kg=50; kg<=105; kg=kg+5) {
                bmi=kg/(m*m);
                printf("%.1f  ",bmi);
            }
            cm+=5;
            printf("\n");
        }
   //     break;
   //}
    return 0;
}

输出:

enter image description here