C语言,根据身高排人名

这个代码怎样才能让输入的每个数字与人名联系起来啊(问题:根据宿舍6个人的身高大小排
人名)

#include<stdio.h>
int main()
{void sort(int array[],int n);
int a[6],i;
printf("enter array:\n");
for(i=0;i<6;i++)
    scanf("%d",&a[i]);
sort(a,6);
printf("The sorted array:\n");
for(i=0;i<6;i++)
    printf("%d",a[i]);
printf("\n");
return 0;}
void sort(int array[],int n)
{int i,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
    if(array[j]<array[k])
        k=j;
t=array[k];array[k]=array[i];array[i]=t;}
}

代码中没有体现人名,需求是什么。
运行下面代码看看是否满足你的需求

#include <stdio.h>
#include <string.h>

#define MAX_NAME_LEN 20
#define MAX_NUM 6

void sort(int height[], char name[][MAX_NAME_LEN], int n);

int main() {
    int height[MAX_NUM];
    char name[MAX_NUM][MAX_NAME_LEN];

    // 输入身高和姓名
    for (int i = 0; i < MAX_NUM; i++) {
        printf("请输入第%d个人的身高和姓名:", i + 1);
        scanf("%d %s", &height[i], name[i]);
    }

    // 按身高排序
    sort(height, name, MAX_NUM);

    // 输出排序结果
    printf("按身高排序后的结果为:\n");
    for (int i = 0; i < MAX_NUM; i++) {
        printf("%s %d\n", name[i], height[i]);
    }
    return 0;
}

void sort(int height[], char name[][MAX_NAME_LEN], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (height[j] > height[j + 1]) {
                // 交换身高
                int temp = height[j];
                height[j] = height[j + 1];
                height[j + 1] = temp;

                // 交换姓名
                char temp_name[MAX_NAME_LEN];
                strcpy(temp_name, name[j]);
                strcpy(name[j], name[j + 1]);
                strcpy(name[j + 1], temp_name);
            }
        }
    }
}

方法比较简单,就是定义一个和身高数组一样大小的名字数组,在排序函数中,同步调整两个数组中对应值的位置就可以了

#include<stdio.h>
#include <stdlib.h>
#include<string.h> //需要使用字符串处理函数
int main()
{void sort(int array[],char name[][20],int n); //排序函数增加姓名数组
int a[6],i;
char name[6][20]; //增加姓名数组
printf("enter array:\n");
for(i=0;i<6;i++)
{
    printf("请输入第%d人的姓名和身高:",i+1);
    scanf("%s %d",name[i],&a[i]);
}
sort(a,name,6);
printf("The sorted array:\n");
for(i=0;i<6;i++)
    printf("%s %d\n",name[i],a[i]);

system("pause");
return 0;}
void sort(int array[],char name[][20] ,int n)
{
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-i-1;j++)
        {
            if(array[j] < array[j+1])
            {
                  int t = array[j];
                  array[j] = array[j+1];
                  array[j+1] = t;
                  //同时对姓名排序
                  char n[20];
                  strcpy(n,name[j]);
                  strcpy(name[j],name[j+1]);
                  strcpy(name[j+1],n);
            }
        }
    }
}

img

加结构体 或者 map

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7522046
  • 你也可以参考下这篇文章:【C语言】指针补充(高级命名,函数指针,回调函数,转移表)
  • 除此之外, 这篇博客: C语言小项目 -- 通讯录(静态版+动态版+文件版)中的 8、排序联系人(按姓名) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 我们可以通过调用qsort函数,然后给定排序规则来实现对联系人信息的排序,这里我实现的是按姓名排序,大家通过可以修改排序方法来实现按年龄等其他规则的排序,甚至可以实现出所有排序方法的函数,然后将其放入函数指针数组中,最后通过回调函数的方式实现任意方式的排序。

    int cmp_name(const void* e1, const void* e2)  //qsort函数的排序函数
    {
    	assert(e1 && e2);
    	return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name);
    }
    
    void SortContact(Contact* pc)            //对通讯录进行排序(按姓名)
    {
    	assert(pc);
    	//qsort的使用:pc->date表示要排序数据的地址,pc->count表示待排序的元素个数,sizeof(PeoInfo)表示一个元素的大小,cmp_name表示排序的方法
    	qsort(pc->date, pc->count, sizeof(PeoInfo), cmp_name);
    }
    
  • 您还可以看一下 易文星老师的手把手教你实现人脸识别支付系统课程中的 高效的图像检索:引入随机性小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    根据身高排列人名的C语言代码:

    题目要求根据6个人的身高大小对人名进行排序,因此可以定义两个数组,一个储存6个人名,一个储存6个人的身高,对身高进行从小到大排序,然后按照排序后的身高,再对人名进行相应的排序。

    具体的解决方案如下:

    1.定义两个数组,分别为char类型的names和int类型的heights,作为人名和身高的储存容器。

    char names[6][20];
    int heights[6];
    

    2.使用循环输入6个人的名字和身高,使用scanf函数输入。

    for (int i = 0; i < 6; i++) {
        printf("请输入第%d个人的名字和身高(格式为:名字 身高):\n", i+1);
        scanf("%s %d", names[i], &heights[i]);
    }
    

    3.使用冒泡排序或选择排序等算法,对身高进行排序。这里以冒泡排序为例。

    for (int i = 0; i < 5; i++) {
        for (int j = i+1; j < 6; j++) {
            if (heights[i] > heights[j]) {
                int temp = heights[i];
                heights[i] = heights[j];
                heights[j] = temp;
            }
        }
    }
    

    4.根据排序后的身高,对人名进行排序。这里使用了另外一个二维字符数组sorted_names进行排序后人名的储存。

    char sorted_names[6][20];
    for (int i = 0; i < 6; i++) {
        for (int j = 0; j < 6; j++) {
            if (heights[i] == heights[j]) {
                continue;
            }
            else if (heights[i] == heights[j+1]) {
                char temp[20];
                strcpy(temp, names[i]);
                strcpy(names[i], names[j+1]);
                strcpy(names[j+1], temp);
            }
        }
    }
    for (int i = 0; i < 6; i ++) {
        strcpy(sorted_names[i], names[i]);
    }
    

    5.输出排序后的人名即可。

    printf("按照身高从低到高的顺序排列的人名为:\n");
    for (int i = 0; i < 6; i++) {
        printf("%s\n", sorted_names[i]);
    }
    

    完整代码:

    include

    include

    int main() { // 定义两个数组,分别为名字和身高 char names[6][20]; int heights[6]; // 输入6个人的信息 for (int i = 0; i < 6; i++) { printf("请输入第%d个人的名字和身高(格式为:名字 身高):\n", i+1); scanf("%s %d", names[i], &heights[i]); } // 对身高进行排序 for (int i = 0; i < 5; i++) { for (int j = i+1; j < 6; j++) { if (heights[i] > heights[j]) { int temp = heights[i]; heights[i] = heights[j]; heights[j] = temp; } } } // 对人名进行排序 char sorted_names[6][20]; for (int i = 0; i < 6; i++) { for (int j = 0; j < 6; j++) { if (heights[i] == heights[j]) { continue; } else if (heights[i] == heights[j+1]) { char temp[20]; strcpy(temp, names[i]); strcpy(names[i], names[j+1]); strcpy(names[j+1], temp); } } } for (int i = 0; i < 6; i ++) { strcpy(sorted_names[i], names[i]); } // 输出排序后的人名 printf("按照身高从低到高的顺序排列的人名为:\n"); for (int i = 0; i < 6; i++) { printf("%s\n", sorted_names[i]); } return 0; }

由于需要根据身高排名姓名,直接用数组也能实现,但会比较复杂。
根据你的需求,使用结构体实现,程序是实测通过的,姓名根据身高的从低到搞排序,具体代码如下所示:

#include <stdio.h>
#include <string.h>

typedef struct 
{
    int score;//成绩
    char name[10];//姓名
}student_Struct;

void sort(student_Struct *student,int n);  
int main()
{
     
    student_Struct student[6];
    int i;
    //printf("enter array:\n");
    for(i=0;i<6;i++)
    {
        printf("请输入第%d个同学的姓名:\n",i+1);
        scanf("%s",student[i].name);
        printf("请输入第%d个同学的身高:\n",i+1);
        scanf("%d",&student[i].score);
    }
    sort(student,6);
    printf("The sorted array:\n");
    for(i=0;i<6;i++)
    {
        printf("%s\n",student[i].name);
    }
    printf("\n");
    return 0;
}
void sort(student_Struct *student,int n)
{
    int i,j,k,t;
    char name[10];
    for(i=0;i<n-1;i++)
    {
        //k=i;
        for(j=i+1;j<n;j++)
        {
            if(student[j].score<student[i].score)
            {
                t=student[j].score;
                student[j].score=student[i].score;
                student[i].score=t;

                strcpy(name,student[j].name);
                strcpy(student[j].name,student[i].name);
                strcpy(student[i].name,name);
            }
        }
    }
}