这个代码怎样才能让输入的每个数字与人名联系起来啊(问题:根据宿舍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);
}
}
}
}
加结构体 或者 map
我们可以通过调用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);
}
根据身高排列人名的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]);
}
完整代码:
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);
}
}
}
}