描述
统计某一班级每位同学的身体指数,并有序输出。 输入自己的体重(单位为千克)和自己的身高(单位为米),按以下公式计算自己的BMI(身体质量指数),它是衡量一个人身材的重要指标。 (BMI是体重除以身高的平方) 每位同学的信息包含姓名、体重、身高,并根据体重和身高计算BMI. 按BMI从小到大输出。用结构体表示学生信息。
输入
第一行输入学生人数(n<100),然后,每行输入一位学生的作息:姓名,体重,身高。
输出
按BMI从小到大输出。每行一位学生,每位学生输出,姓名,体重,身高和BMI。姓名的长度小于10,体重、身高和BMI,每个数据占6位,其中小数位数2位。各列数据要对齐。参考输出样例
样例
输入
复制
3 zhang 56.4 1.75 wang 78.3 1.65 deng 72.3 1.73
输出
复制
zhang 56.40 1.75 18.42 deng 72.30 1.73 24.16 wang 78.30 1.65 28.76
输入
复制
10 zhang 56.4 1.75 wang 78.3 1.65 deng 72.3 1.73 lin 62.5 1.65 zheng 56.2 1.71 wu 55.5 1.65 guo 45.5 1.58 li 68 1.72 chen 78 1.76
输出
复制
guo 45.50 1.58 18.23 zhang 56.40 1.75 18.42 zheng 56.20 1.71 19.22 wu 55.50 1.65 20.39 lin 62.50 1.65 22.96 li 68.00 1.72 22.99 deng 72.30 1.73 24.16 chen 78.00 1.76 25.18 gao 85.00 1.78 26.83 wang 78.30 1.65 28.76
题解
#include <stdio.h>
#include <string.h>
struct student
{
double BMI;
double height;
double weight;
char name[21];
};
int main()
{
int N;
struct student stu[101];
struct student temp;
scanf("%d",&N);
for(int i=0;i<N;i++)
{
scanf("%s%lf%lf",stu[i].name,&stu[i].weight,&stu[i].height);
stu[i].BMI = stu[i].weight/(stu[i].height*stu[i].height);
}
for(int i=1;i<N-1;i++){
for(int j=0;j<N-i;j++){
if(stu[j].BMI>stu[j+1].BMI){
temp = stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
for(int i=0;i<N;i++)
{
printf("%-10s %.2lf %.2lf %.2lf\n",stu[i].name,stu[i].weight,stu[i].height,stu[i].BMI);
}
return 0;
}
要点:冒泡排序
备忘录:
C语言strcmp()函数:比较两个字符串
C语言 strcmp() 函数用于对两个字符串进行比较(区分大小写)。
头文件:string.h
语法/原型:
int strcmp(const char* stri1,const char* str2);
参数 str1 和 str2 是参与比较的两个字符串。
strcmp() 会根据 ASCII 编码依次比较 str1 和 str2 的每一个字符,直到出现不到的字符,或者到达字符串末尾(遇见\0
)。
返回值:
- 如果返回值 < 0,则表示 str1 小于 str2。
- 如果返回值 > 0,则表示 str2 小于 str1。
- 如果返回值 = 0,则表示 str1 等于 str2。