C语言六个人身高排序里边同时还得输出那个人相应的名字

怎么用C写两个人的身高排序啊 还有得输出名字 C语言六个人身高排序里边同时还得输出那个人相应的名字

定义结构存储每个人的信息,然后初始化赋值结构数组,或从输入获取数据存入结构数组, 排序后输出最高身高的姓名。

代码如下:

参考链接:

结构体数组的赋值方法(常用的三种,包含字符串)_结构体数组赋值_编程图一乐的博客-CSDN博客 目录一、按照成员变量进行赋值(麻烦,好理解,字符串赋值需要strcpy)二、对数组整体进行赋值。(一次性需要把所有的都添加进去,不需要strcpy) (1) 在声明数组的时候,进行赋值 (2)对有规律的数据赋值,比如学生结构体的学号是有规律的。三、使用输入进行赋值(1)直接使用for,配合动态分配内存,这里按照数据库的数据类型,我将学号定义为char型,实际上定义为int 即可。(2)调用函数赋值,我们知道,结构体数组中,数组有多个元素,每个数组元素... https://blog.csdn.net/maxle/article/details/121304027


#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;
    
    
}

img

用map映射 输出

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7539389
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:✨三万字制作,关于C语言,你必须知道的这些知识点(高阶篇)✨
  • 除此之外, 这篇博客: 【咸鱼入门】终于到了C语言考试复习时间了……中的 拓展:程序的优化——高位数计算 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    我们知道,即使使用long long int,也只能勉强表示19位。但是使用C语言真的没有办法实现自定义的高位数计算了吗?
    可以这样去想,我们直接计算1234567*3,很难一下子得到答案,但是如果让我们列竖式,那么问题就转化成了7*3=21,6*3=18,8+3=11……诸如此类。对于计算机是不是也可以做这样的竖式计算呢?理论上没问题——只要我们把竖式用代码表示出来。
    怎么表示呢?我们知道一串连续的数字很像数组这个数据结构。所以,思路就是,用数组中的每一位代表竖式中的每一位。
    在这里插入图片描述
    虽然很难看(汗颜),但是就是这样去做的。
    为了实现这样的东西,我们要做两件事:一是求出来每一个的阶乘的结果,二是将这些结果相加。

  • 您还可以看一下 贺利坚老师的C语言及程序设计提高视频精讲课程中的 使用指针操作二维数组小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

可以使用以下的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_heighttemp_name 用于进行交换操作。使用选择排序算法将身高数组按升序排序,同时交换对应的名字。最后输出排序之后的结果。