#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

struct DATA {
	char		name[16];
	double		cm;
	double		kg;
	double		bmi;
	struct DATA*	next;
};

struct DATA* head = NULL;

void add_data(struct DATA data)
{
	struct DATA**	pp;
	struct DATA*	p_new;

	data.bmi = data.kg / (0.0001 * data.cm * data.cm);
	p_new = (struct DATA*)malloc(sizeof data);
	*p_new = data;
	for (pp = &head; *pp; pp = &(*pp)->next) {
		if (p_new->bmi < (*pp)->bmi) {
			break;
		}
	}
	p_new->next = *pp;
	*pp = p_new;
}

void del_data(void)
{
	struct DATA*	p;
	struct DATA*	p_next;

	for (p = head; p; p = p_next) {
		p_next = p->next;
		free(p);
	}
}

int main()
{
	struct DATA	data;
	struct DATA*	p;

	while (1) {
		printf("名前 身長 体重\n");
		scanf("%15s %lf %lf", data.name, &data.cm, &data.kg);
		if (data.name[0] == '0') {
			break;
		}
		add_data(data);
	}
	for (p = head; p; p = p->next) {
		printf("BMI=%.2f 名前=%s 身長=%.1f 体重=%.1f\n",
			p->bmi, p->name, p->cm, p->kg);
	}
	del_data();
        return 0;
}
