对10个学生的排序以及信息填写

img

对学生进行信息填入和排序冒泡
排序,用三个函数来表示对10个学生的排序以及信息填写


#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<stdlib.h>

struct Student {
    int id;
    char name[20];
    float score;
};


int sort(struct Student stu[])
{
    int i, j;
    for (i = 0;i < 10-1;i++) {
        for (j = 0;j < 10-i-1;j++)
        {
            if (stu[j].score < stu[j + 1].score)
            {
                struct Student temp = stu[j];
                stu[j] = stu[j + 1];
                stu[j + 1] = temp;
            }
        }
    }
}
void initStudent(struct Student* p)
{
    int i;
    for (i = 0;i < 10;i++)
    {
        printf("输入第%d学生信息:\n", i + 1);
        scanf("%d %s %f", &p->id, p->name, &p->score);
        p++;
    }

}
int main()
{
    //{ {10101,"Zhang",78},{10103,"Wang",98.5},{10106,"Li",86},{10108,"Ling",73.5},{10110,"Fun",100}}; 
    int i;
    struct Student arry[20] = {0};
    
    initStudent(arry);
     sort(arry);
     printf("排序后:\n");
    for (i = 0; i < 10; i++)
    {
        printf("%d %s %.2f\n", arry[i].id, arry[i].name, arry[i].score);
    }
    return 0;
}

解答如下

img

#include<stdio.h>
struct stu
{
    int num;
    char name[10];
    int score;
};
void input(struct stu t[],int n)
{
    int i;
    for(i=0; i<n; i++)
    {
        scanf("%d",&t[i].num);
        getchar();
        scanf("%s",t[i].name);
        scanf("%d",&t[i].score);
    }
}
void sort(struct stu t[],int n)
{
    int i,j;
    for(i=0; i<n-1; i++)
        for(j=0; j<n-1-i; j++)
            if(t[j].score<t[j+1].score)
            {
                struct stu tem=t[j];
                t[j]=t[j+1];
                t[j+1]=tem;
            }
}
void put(struct stu t[],int n)
{
    int i;
    for(i=0; i<n; i++)
    {
        printf("学号:%d    姓名:%s    成绩:%d\n",t[i].num,t[i].name,t[i].score);
    }
}
int main()
{
    struct stu t[10];
    input(t,10);
    sort(t,10);
    put(t,10);
    return 0;
}

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 2
struct STU {
    int id;
    char name[20];
    char sex;
    int score;
};
void show_stu(struct STU *s, int n)
{
    int i; 
    for (i = 0; i < n; i++)
        printf("%d\t%s\t%c\t%d\n", s[i].id, s[i].name, s[i].sex, s[i].score);
}
 
void write_stu(struct STU *s, int n, FILE *fp)
{
    //fwrite
    int i;
    for (i = 0; i < n; i++) 
        fwrite(&s[i], sizeof(*s), 1, fp);
}
 
struct STU *read_stu(FILE *fp, int *n)
{
    int i, res, m = 10;
    struct STU *s = (struct STU *)malloc(sizeof(struct STU) * m);
    for (i = 0; ; i++) {
        if (i == m) {
            m *= 2;
            s = realloc(s, sizeof(struct STU) * m);
        }
        if (!fread(&s[i], sizeof(struct STU), 1, fp))
            break;
    }
    *n = i;
    return s;
}
 
void sort_stu(struct STU *s, int n)
{
    int i, j;
    struct STU tmp;
 
    for (i = 0; i < n-1; i++)
        for (j = 1; j < n-i; j++) 
            if (s[j-1].score < s[j].score) {
                tmp = s[j-1];
                s[j-1] = s[j];
                s[j] = tmp;
            }
}
int main(void)
{
    struct STU *student;
    FILE *fp, *fp_sort;
    int n = 0;
 
    fp = fopen("stu.txt", "r");
    if (!fp) {
        printf("fopen stu.txt err\n");
        return 1;
    }
    
    fp_sort = fopen("stu_sort.txt", "w");
    if (!fp_sort) {
        printf("fopen stu_sort.txt err\n");
        return 1;
    }
    student = read_stu(fp, &n);
    //show_stu(student, n);
    sort_stu(student, n);
    //printf("******\n");
    show_stu(student, n);
    write_stu(student ,n, fp_sort);
 
    free(student);
    fclose(fp);
    fclose(fp_sort);
    return 0;
}