輸入多行數據,每行格式:姓名 身高(cm) 體重(kg),以 EOF 結束(Linux/Mac Ctrl+D,Windows Ctrl+Z)。輸出 BMI 最小者的姓名。BMI 公式:體重 / (身高/100)^2(身高轉米)。
#include <stdio.h>
#include <string.h>
int main(void) {
double height, weight;
double min_bmi = 1e9; // 極大值
char name[32];
char min_name[32] = {0};
while (scanf("%31s %lf %lf", name, &height, &weight) == 3) {
double h_m = height / 100.0; // cm 轉 m
double bmi = weight / (h_m * h_m);
if (bmi < min_bmi) {
min_bmi = bmi;
strcpy(min_name, name);
}
}
if (min_name[0] != '\0') {
printf("%s\n", min_name);
}
return 0;
}
scanf("%31s ...:限制姓名長度防止緩衝區溢出。== 3:確保三項全讀取成功,自動處理 EOF/格式錯誤。height / 100.0,避免整數除法。min_bmi 設極大值,確保首次比較必更新。輸入:
taro 183.3 65.5
syo 177.9 63.8
taisuke 173.1 61.1
ryo 175.4 60.0
^D (EOF)
輸出:
taro
驗證:taro BMI ≈ 19.5,ryo BMI ≈ 19.5,taro 輸入在先,符合「最小值優先保留首個」邏輯。