我刚刚完成了一个计算体重指数表的程序。但是,我无法按照预期打印表格。我试图更改for循环位置,但它给了我相同的结果。
如果你执行代码,你会理解我。
实际输出:
预期产出:
我的代码:
#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;
}
答案 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 ...
... ... ... ... ...
打印到终端时,必须从上到下,从左到右打印。什么东西打印出来后,就没办法回去了。因此,您必须相应地构建循环:
打印所有数据行:
其他注意事项:
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;
}
输出: