怎么用C写两个人的身高排序啊 还有得输出名字 C语言六个人身高排序里边同时还得输出那个人相应的名字
定义结构存储每个人的信息,然后初始化赋值结构数组,或从输入获取数据存入结构数组, 排序后输出最高身高的姓名。
代码如下:
参考链接:
#include <stdio.h>
struct person{ // 存储每个人信息的结构
char name[20]; // 姓名
int height; // 身高
};
int main(void){
// https://blog.csdn.net/maxle/article/details/121304027
// 声明结构数组的同时,进行赋值
struct person ps[6]={
"张三", 170 ,
"李四", 172 ,
"王五", 171 ,
"赵六", 168 ,
"丁七", 167 ,
"胡八", 170
};
printf("排序后为:\n");
int i=-1;
for( i=0;i<6;i++){
for(int j=i+1;j<6;j++){
if(ps[i].height>ps[j].height){
struct person temp=ps[i];
ps[i]=ps[j];
ps[j]=temp;
}
}
printf("姓名:%s, 身高:%d\n",ps[i].name,ps[i].height);
}
// 考虑有身高相同的情况,输出最高身高的人的姓名
if(i!=-1){
int maxHeight=ps[i-1].height; // 存储最高身高的变量
printf("\n身高最高的为:\n");
while(i>0&&ps[i-1].height==maxHeight){
printf("%s\n",ps[i-1].name);
i--;
}
}
// int maxHeight=0; // 存储最高身高的变量
// int maxIndex=-1; // 最高身高的下标
//
// // 遍历结构数组,寻找最高身高及其下标
// for(int i=0;i<6;i++){
//
// if(maxHeight<ps[i].height){
// maxHeight=ps[i].height;
// maxIndex=i;
// }
//
// }
//
//// printf("maxIndex=%d\n",maxIndex);
// // 打印结果
// if(maxIndex!=-1){
// printf("身高最高的是:%s,他的身高是:%d厘米。\n",ps[maxIndex].name,ps[maxIndex].height);
//
// }
return 0;
}
用map映射 输出
不知道你这个问题是否已经解决, 如果还没有解决的话:我们知道,即使使用long long int,也只能勉强表示19位。但是使用C语言真的没有办法实现自定义的高位数计算了吗?
可以这样去想,我们直接计算1234567*3,很难一下子得到答案,但是如果让我们列竖式,那么问题就转化成了7*3=21,6*3=18,8+3=11……诸如此类。对于计算机是不是也可以做这样的竖式计算呢?理论上没问题——只要我们把竖式用代码表示出来。
怎么表示呢?我们知道一串连续的数字很像数组这个数据结构。所以,思路就是,用数组中的每一位代表竖式中的每一位。
虽然很难看(汗颜),但是就是这样去做的。
为了实现这样的东西,我们要做两件事:一是求出来每一个的阶乘的结果,二是将这些结果相加。
可以使用以下的C语言代码实现六个人身高排序并输出对应的名字:
#include <stdio.h>
#include <string.h>
#define NUM 6
int main() {
int height[NUM] = {180, 168, 165, 175, 172, 178}; // 六个人的身高
char name[NUM][10] = {"A", "B", "C", "D", "E", "F"}; // 六个人的名字
int i, j, temp_height;
char temp_name[10];
// 选择排序算法进行排序
for (i = 0; i < NUM - 1; i++) {
for (j = i + 1; j < NUM; j++) {
if (height[i] > height[j]) {
// 交换两个人的身高和名字
temp_height = height[i];
strcpy(temp_name, name[i]);
height[i] = height[j];
strcpy(name[i], name[j]);
height[j] = temp_height;
strcpy(name[j], temp_name);
}
}
}
// 输出排序后的结果
printf("排序结果:\n");
for (i = 0; i < NUM; i++) {
printf("%s:%d\n", name[i], height[i]);
}
return 0;
}
其中,height
数组存储了六个人的身高,name
数组存储了六个人的名字,变量 temp_height
和 temp_name
用于进行交换操作。使用选择排序算法将身高数组按升序排序,同时交换对应的名字。最后输出排序之后的结果。