C语言----结构体数组成员互换典例

编写一个C语言程序,该程序需实现以下功能:

1.定义一个结构体Person,包含姓名(char数组)、年龄(int)和性别(char)三个成员。

2.定义一个函数void sortPersonsByAge(struct Person※ persons, int num),该函数接收一个Person类型的指针数组和数组的长度,按照年龄对数组中的Person进行升序排序。排序算法需使用归并排序(Merge Sort)。

3.在主函数中,创建一个包含至少10个Person的数组,并初始化这些Person的姓名、年龄和性别。

4.调用sortPersonsByAge函数对数组进行排序。

5.打印排序后的数组。

程序:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
struct Person
{
	char name[20];
	int age;
	char sex;
};
void sortPersonsByAge(struct Person* persons, int num);

int main()
{
	struct Person persons[10];
	int i;
	for (i = 0; i < 10; i++)
	{
		printf("请输入第%d个人的信息\n", i + 1);
		scanf("%s %d %c", &persons[i].name,&persons[i].age, &persons[i].sex);
	}
	sortPersonsByAge(persons, 10);
	printf("name\tage\tsex\n");
	for (i = 0; i < 10; i++)
	{
		printf("%s\t%d\t%c\n", persons[i].name, persons[i].age, persons[i].sex);
	}
}
void sortPersonsByAge(struct Person* persons, int num)
{
	int i,j, min;
	struct Person temp1;
	for (i = 0; i < num - 1; i++)
	{
		min = i;
		for (j = i+1; j < num; j++)
		{
			if (persons[min].age > persons[j].age)min = j;
		}
		if (min != i)
		{
			temp1 = *(persons + min);
			*(persons + min) = *(persons + i);
			*(persons + i) = temp1;
		}
	}
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C语言中,可以通过结构体数组循环右移来实现将结果保存到新的结构体数组,同时保持原来的结构体数组不变。下面是一个示例代码: ```c #include <stdio.h> #define SIZE 5 // 定义结构体 typedef struct { int id; char name[20]; } Student; // 结构体数组循环右移函数 void rotateRight(Student* src, Student* dest, int size, int shift) { for (int i = 0; i < size; i++) { int newIndex = (i + shift) % size; dest[newIndex] = src[i]; } } int main() { // 原始结构体数组 Student students[SIZE] = { {1, "Alice"}, {2, "Bob"}, {3, "Charlie"}, {4, "David"}, {5, "Eve"} }; // 新的结构体数组 Student rotatedStudents[SIZE]; // 循环右移并保存结果到新的结构体数组 rotateRight(students, rotatedStudents, SIZE, 2); // 打印原始结构体数组 printf("原始结构体数组:\n"); for (int i = 0; i < SIZE; i++) { printf("id: %d, name: %s\n", students[i].id, students[i].name); } // 打印循环右移后的新结构体数组 printf("循环右移后的新结构体数组:\n"); for (int i = 0; i < SIZE; i++) { printf("id: %d, name: %s\n", rotatedStudents[i].id, rotatedStudents[i].name); } return 0; } ``` 运行以上代码,将会得到以下输出: ``` 原始结构体数组: id: 1, name: Alice id: 2, name: Bob id: 3, name: Charlie id: 4, name: David id: 5, name: Eve 循环右移后的新结构体数组: id: 4, name: David id: 5, name: Eve id: 1, name: Alice id: 2, name: Bob id: 3, name: Charlie ``` 以上代码中,`rotateRight`函数实现了结构体数组的循环右移操作,将结果保存到新的结构体数组`dest`中。在`main`函数中,我们定义了一个原始的结构体数组`students`,并调用`rotateRight`函数将结果保存到新的结构体数组`rotatedStudents`中。最后,我们分别打印了原始结构体数组和循环右移后的新结构体数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹蓝锐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值