在主函数中输入10个学生成绩,编写一个函数实现将按分数从高到低进行排序
时间: 2023-12-03 21:42:00 浏览: 86
以下是一个实现将学生成绩按照从高到低排序的函数的示例代码:
```python
def sort_scores(scores):
sorted_scores = sorted(scores, reverse=True)
return sorted_scores
```
在主函数中,你可以这样输入10个学生的成绩:
```python
scores = []
for i in range(10):
score = int(input("请输入第{}个学生的成绩:".format(i+1)))
scores.append(score)
```
然后你可以调用上述函数将学生成绩按照从高到低进行排序:
```python
sorted_scores = sort_scores(scores)
print("学生成绩从高到低排序为:", sorted_scores)
```
这样就能够得到按照成绩从高到低排列的学生成绩列表。
相关问题
用c语言编写主函数中输入10个学生成绩,编写一个函数实现将按分数从高到低进行排序
以下是一个示例代码,使用冒泡排序实现对学生成绩的排序:
```c
#include <stdio.h>
// 冒泡排序函数
void bubbleSort(float arr[], int n)
{
int i, j;
float temp;
for (i = 0; i < n-1; i++)
{
for (j = 0; j < n-i-1; j++)
{
if (arr[j] < arr[j+1])
{
// 交换两个元素
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
int main()
{
float scores[10];
int i;
// 输入学生成绩
printf("请输入10个学生的成绩:\n");
for (i = 0; i < 10; i++)
{
scanf("%f", &scores[i]);
}
// 对学生成绩进行排序
bubbleSort(scores, 10);
// 输出排序后的成绩
printf("排序后的成绩为:\n");
for (i = 0; i < 10; i++)
{
printf("%.2f ", scores[i]);
}
printf("\n");
return 0;
}
```
其中,`bubbleSort` 函数使用了冒泡排序算法,对传入的数组进行排序。在 `main` 函数中,首先输入学生成绩,然后调用 `bubbleSort` 函数对成绩进行排序,并输出排序后的结果。
n名学生的成绩已在主函数中放入一个带头节点的链接结构中,h指向链表的头节点。请编写函数对成绩进行排序,并求出平均分。同时将结果写入文件
首先,我们需要定义一个结构体来存储学生的成绩信息:
```
typedef struct student {
char name[20]; // 学生姓名
int score; // 学生成绩
struct student *next; // 指向下一个学生的指针
} Student;
```
然后,我们可以编写一个函数来对链表中的成绩进行排序。这里我们选择使用冒泡排序算法:
```
void sort(Student *h) {
int swapped;
Student *ptr1;
Student *lptr = NULL;
/* 如果链表为空,则直接返回 */
if (h == NULL)
return;
do {
swapped = ;
ptr1 = h;
while (ptr1->next != lptr) {
if (ptr1->score < ptr1->next->score) {
/* 交换两个节点的数据 */
char temp_name[20];
int temp_score;
strcpy(temp_name, ptr1->name);
temp_score = ptr1->score;
strcpy(ptr1->name, ptr1->next->name);
ptr1->score = ptr1->next->score;
strcpy(ptr1->next->name, temp_name);
ptr1->next->score = temp_score;
swapped = 1;
}
ptr1 = ptr1->next;
}
lptr = ptr1;
} while (swapped);
}
```
最后,我们可以编写一个函数来计算平均分,并将结果写入文件:
```
void calculate_average(Student *h) {
int sum = ;
int count = ;
Student *ptr = h->next;
FILE *fp = fopen("result.txt", "w");
/* 遍历链表,计算总分数和学生人数 */
while (ptr != NULL) {
sum += ptr->score;
count++;
ptr = ptr->next;
}
/* 计算平均分 */
float average = (float)sum / count;
/* 将结果写入文件 */
fprintf(fp, "平均分:%.2f\n", average);
fprintf(fp, "排名\t姓名\t成绩\n");
ptr = h->next;
int rank = 1;
while (ptr != NULL) {
fprintf(fp, "%d\t%s\t%d\n", rank, ptr->name, ptr->score);
ptr = ptr->next;
rank++;
}
fclose(fp);
}
```
完整代码如下:
```
#include <stdio.h>
#include <string.h>
typedef struct student {
char name[20]; // 学生姓名
int score; // 学生成绩
struct student *next; // 指向下一个学生的指针
} Student;
void sort(Student *h) {
int swapped;
Student *ptr1;
Student *lptr = NULL;
/* 如果链表为空,则直接返回 */
if (h == NULL)
return;
do {
swapped = ;
ptr1 = h;
while (ptr1->next != lptr) {
if (ptr1->score < ptr1->next->score) {
/* 交换两个节点的数据 */
char temp_name[20];
int temp_score;
strcpy(temp_name, ptr1->name);
temp_score = ptr1->score;
strcpy(ptr1->name, ptr1->next->name);
ptr1->score = ptr1->next->score;
strcpy(ptr1->next->name, temp_name);
ptr1->next->score = temp_score;
swapped = 1;
}
ptr1 = ptr1->next;
}
lptr = ptr1;
} while (swapped);
}
void calculate_average(Student *h) {
int sum = ;
int count = ;
Student *ptr = h->next;
FILE *fp = fopen("result.txt", "w");
/* 遍历链表,计算总分数和学生人数 */
while (ptr != NULL) {
sum += ptr->score;
count++;
ptr = ptr->next;
}
/* 计算平均分 */
float average = (float)sum / count;
/* 将结果写入文件 */
fprintf(fp, "平均分:%.2f\n", average);
fprintf(fp, "排名\t姓名\t成绩\n");
ptr = h->next;
int rank = 1;
while (ptr != NULL) {
fprintf(fp, "%d\t%s\t%d\n", rank, ptr->name, ptr->score);
ptr = ptr->next;
rank++;
}
fclose(fp);
}
int main() {
/* 创建链表头节点 */
Student *h = (Student *)malloc(sizeof(Student));
h->next = NULL;
/* 读取学生信息并插入链表 */
int n;
printf("请输入学生人数:");
scanf("%d", &n);
for (int i = ; i < n; i++) {
Student *s = (Student *)malloc(sizeof(Student));
printf("请输入第%d个学生的姓名和成绩:", i + 1);
scanf("%s%d", s->name, &s->score);
s->next = h->next;
h->next = s;
}
/* 对成绩进行排序 */
sort(h);
/* 计算平均分并将结果写入文件 */
calculate_average(h);
/* 释放链表内存 */
Student *ptr = h->next;
while (ptr != NULL) {
Student *temp = ptr;
ptr = ptr->next;
free(temp);
}
free(h);
return ;
}
```