用结构体存放n个学生信息 对各元素按照成绩进行排序 采用选择法

选择法 我在其它专栏里有讲了

#include <stdio.h>  
struct  student {
	int num;
	char name[20];
	float score;
}stu[5] = { {10101,"zhang",78},{10103,"wang",98.5},{10106,"li",86}, {10108,"ling",73.5},{10101,"sun",100} };//定义结构体变量并初始化
int main() {
	//struct student stu[5] = { {10101,"zhang",78},{10103,"wang",98.5},{10106,"li",86}, {10108,"ling",73.5},{10101,"sun",100} };//定义结构体变量并初始化
	int i,j,k;
	struct student t;
	const int n = 5;
	float max = stu[0].score;
	for (i = 0; i < n-1; i++) {
		k = i;
		for (j = i + 1; j < n; j++) {
			if (stu[j].score > stu[i].score) {
				k = j;
			}
		}
				t = stu[k];
				stu[k] = stu[i];
				stu[i]=t;

	}
	for (i = 0; i < n; i++) {
		printf("%6d %8s %6.2f\n", stu[i].num, stu[i].name, stu[i].score);
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你可以按照以下步骤动态构造存放学生信息结构体数组,并按分数排序输出: 1. 定义结构体 Student,包含学生的姓名和成绩两个属性。 2. 使用 `malloc` 函数动态分配存放学生信息结构体数组,并根据用户输入初始化数组元素。 3. 使用 C 语言中的 `qsort` 函数对结构体数组进行排序,排序的依据是学生的成绩。 4. 遍历数组将排序后的结果输出。 5. 使用 `free` 函数释放动态分配的内存。 以下是示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> // 定义结构体 struct Student { char name[20]; int score; }; // 比较函数,用于 qsort 排序 int cmp(const void *a, const void *b) { return ((struct Student *)b)->score - ((struct Student *)a)->score; } int main() { int n; printf("请输入学生人数:"); scanf("%d", &n); // 动态分配存放学生信息结构体数组 struct Student *students = (struct Student *)malloc(n * sizeof(struct Student)); if (students == NULL) { printf("内存分配失败!"); return 1; } // 初始化数组元素 for (int i = 0; i < n; i++) { printf("请输入第%d个学生的姓名和成绩(用空格隔开):", i + 1); scanf("%s %d", students[i].name, &students[i].score); } // 排序 qsort(students, n, sizeof(struct Student), cmp); // 输出 printf("按成绩排序后的学生信息如下:\n"); for (int i = 0; i < n; i++) { printf("%s %d\n", students[i].name, students[i].score); } // 释放内存 free(students); return 0; } ``` 在这个示例代码中,我们首先定义了一个结构体 Student,包含学生的姓名和成绩两个属性。然后根据用户输入动态分配存放学生信息结构体数组,并使用循环初始化数组元素。接着使用 qsort 函数对结构体数组进行排序,排序的依据是学生的成绩。最后遍历数组将排序后的结果输出,并使用 free 函数释放动态分配的内存。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值