大一的c语言,要用结构体的

c语言,要运用结构体,其他要求看图,其他觉得有问题的可以找我

img

ChatGPT尝试为您解答,仅供参考

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

#define NUM_STUDENTS 30

// 定义结构体表示学生信息
struct student
{
    int id;
    char name[32];
    int scores[6];
    float avg;
};

// 生成随机成绩函数
void generate_scores(struct student *s)
{
    for (int i = 0; i < 6; i++)
    {
        s->scores[i] = rand() % 100;
    }
}

// 计算平均分函数
void calculate_avg(struct student *s)
{
    float sum = 0;
    for (int i = 0; i < 6; i++)
    {
        sum += s->scores[i];
    }
    s->avg = sum / 6;
}

// 按平均分排序函数
void sort_by_avg(struct student *students)
{
    // 冒泡排序
    for (int i = 0; i < NUM_STUDENTS - 1; i++)
    {
        for (int j = 0; j < NUM_STUDENTS - i - 1; j++)
        {
            if (students[j].avg < students[j + 1].avg)
            {
                struct student temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }
}

// 输出学生信息函数
void print_students(struct student *students)
{
    for (int i = 0; i < NUM_STUDENTS; i++)
    {
        printf("学号:%d 姓名:%s 平均分:%.2f\n", students[i].id, students[i].name, students[i].avg);
    }
}

int main()
{
    // 初始化随机数种子
    srand(time(0));

    // 创建学生数组
    struct student students[NUM_STUDENTS];

    // 初始化学生信息
    for (int i = 0; i < NUM_STUDENTS; i++)
    {
        // 初始化学号和姓名
        students[i].id = i + 1;
        sprintf(students[i].name, "学生%d", i + 1);

        // 随机生成成绩
        generate_scores(&students[i]);

        // 计算平均分
        calculate_avg(&students[i]);
    }

    // 输出初始学生信息
    printf("初始学生信息:\n");
    print_students(students);

    // 按平均分排序
    sort_by_avg(students);

    // 输出排序后的学生信息
    printf("排序后的学生信息:\n");
    print_students(students);

    return 0;
}

可以实现用户自定义输入学号和姓名


#include <stdio.h>
#include <stdlib.h>//随机生成成绩所需要的头文件
#include <time.h> 
#define Max 30
// 定义结构体表示学生信息
typedef struct student
{
    int id;
    char name[32];
    int scores[6];
    float avg;
}student;
// 生成随机成绩函数
void get_scores(student *s)
{
    // 初始化随机数种子
    srand(time(0));
    int i;
    for (i = 0; i < 6; i++)
    {
        s->scores[i] = rand() % 101;
    }
}
// 计算平均分函数
void avg(student *s)
{
    float sum = 0;
    int i;
    for (i = 0; i < 6; i++)
    {
        sum += s->scores[i];
    }
    s->avg = sum / 6;
}
// 按平均分排序函数
void sort_by_avg(student *students)
{
    // 冒泡排序
    int i,j;
    for (i = 0; i < Max - 1; i++)
    {
        for (j = 0; j < Max - i - 1; j++)
        {
            if (students[j].avg < students[j + 1].avg)
            {
                student temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }
}
// 输出学生信息函数
void print_students(student *students)
{
    int i,j;
    for (i = 0; i < Max; i++)
    {
        
        printf("学号:%d 姓名:%s 六科成绩:", students[i].id, students[i].name);
        for(j=0;j<6;j++)
        {
            printf("%d ",students[i].scores[i]);
        }
        printf("平均分:%.2f\n",students[i].avg);
    }
}
int main()
{
    int i,id;
    // 初始化随机数种子
    srand(time(0));
    // 创建学生数组
    struct student students[Max];
    // 初始化学生信息
    for (i = 0; i < Max; i++)
    {
        // 初始化学号和姓名
        printf("请输入第%d位学生的学号:\n",i+1);
        scanf("%d",&students[i].id);
        printf("请输入第%d位学生的姓名:\n",i+1);
        scanf("%s",students[i].name);
        // 随机生成成绩
        get_scores(&students[i]);
        // 计算平均分
        avg(&students[i]);
    }
    // 输出初始学生信息
    printf("初始学生信息:\n");
    print_students(students);
    // 按平均分排序
    sort_by_avg(students);
    // 输出排序后的学生信息
    printf("排序后的学生信息:\n");
    print_students(students);
    return 0;
}

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM_STUDENTS 30

// 定义结构体表示学生信息
struct student
{
    int id;
    char name[32];
    int scores[6];
    float avg;
};
// 生成随机成绩函数
void generate_scores(struct student *s)
{
    for (int i = 0; i < 6; i++)
    {
        s->scores[i] = rand() % 100;
    }
}
// 计算平均分函数
void calculate_avg(struct student *s)
{
    float sum = 0;
    for (int i = 0; i < 6; i++)
    {
        sum += s->scores[i];
    }
    s->avg = sum / 6;
}
// 按平均分排序函数
void sort_by_avg(struct student *students)
{
    // 冒泡排序
    for (int i = 0; i < NUM_STUDENTS - 1; i++)
    {
        for (int j = 0; j < NUM_STUDENTS - i - 1; j++)
        {
            if (students[j].avg < students[j + 1].avg)
            {
                struct student temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }
}
// 输出学生信息函数
void print_students(struct student *students)
{
    for (int i = 0; i < NUM_STUDENTS; i++)
    {
        printf("学号:%d 姓名:%s 平均分:%.2f\n", students[i].id, students[i].name, students[i].avg);
    }
}
int main()
{
    // 初始化随机数种子
    srand(time(0));
    // 创建学生数组
    struct student students[NUM_STUDENTS];
    // 初始化学生信息
    for (int i = 0; i < NUM_STUDENTS; i++)
    {
        // 初始化学号和姓名
        students[i].id = i + 1;
        sprintf(students[i].name, "学生%d", i + 1);
        // 随机生成成绩
        generate_scores(&students[i]);
        // 计算平均分
        calculate_avg(&students[i]);
    }
    // 输出初始学生信息
    printf("初始学生信息:\n");
    print_students(students);
    // 按平均分排序
    sort_by_avg(students);
    printf("排序后的学生信息:\n");
    print_students(students);
    return 0;
}

用结构体更能够体现变量的学生相关性,其他和一般变量没啥区别,前面几个的程序都不错

参考代码
#include <stdio.h>   //标准输出头文件
#include <stdlib.h>//标准库头文件
#include <time.h>//标准时间库函数头文件
#define STU_NUM 30 //最多的学生人数 
// 定义结构体表示学生信息
struct  student  //定义学生结构体
{
    int id;     //学号
    char name[32];  //姓名
    int scores[6];    //6颗成绩
    float avg;      //平均分
};
// 生成随机成绩函数
void generate_scores(struct student *s)
{
    for (int i = 0; i < 6; i++)
    {
        s->scores[i] = rand() % 100;
    }
}
// 计算平均分函数
void calculate_avg(struct student *s)
{
    float sum = 0;
    for (int i = 0; i < 6; i++)
    {
        sum += s->scores[i];
    }
    s->avg = sum / 6;
}
// 按平均分排序函数
void sort_by_avg(struct student *students)
{
    // 冒泡排序
    for (int i = 0; i < STU_NUM - 1; i++)
    {
        for (int j = 0; j < STU_NUM - i - 1; j++)
        {
            if (students[j].avg < students[j + 1].avg)
            {
                struct student temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }
}
// 输出学生信息函数
void print_students(struct student *students)
{
    for (int i = 0; i < STU_NUM; i++)
    {
        printf("学号:%d 姓名:%s 平均分:%.2f\n", students[i].id, students[i].name, students[i].avg);
    }
}
int main()
{
    // 初始化随机数种子
    srand(time(0));
    // 创建学生数组
    struct student students[STU_NUM];
    // 初始化学生信息
    for (int i = 0; i <STU_NUM; i++)
    {
        // 初始化学号和姓名
        students[i].id = i + 1;
        sprintf(students[i].name, "学生%d", i + 1);
        // 随机生成成绩
        generate_scores(&students[i]);
        // 计算平均分
        calculate_avg(&students[i]);
    }
    // 输出初始学生信息
    printf("初始学生信息:\n");
    print_students(students);
    // 按平均分排序
    sort_by_avg(students);
    // 输出排序后的学生信息
    printf("排序后的学生信息:\n");
    print_students(students);
    return 0;
}

参考:

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

#define NUM_STUDENTS 30
#define NUM_SUBJECTS 6
#define MIN_SCORE 0
#define MAX_SCORE 100

typedef struct student {
  int id;
  char name[32];
  int scores[NUM_SUBJECTS];
  float avg;
} Student;

// 输出学生信息
void print_student(Student s) {
  printf("学号:%d\n", s.id);
  printf("姓名:%s\n", s.name);
  printf("成绩:");
  for (int i = 0; i < NUM_SUBJECTS; i++) {
    printf("%d ", s.scores[i]);
  }
  printf("\n平均分:%.2f\n", s.avg);
  puts("");
}

// 按平均分从高到低排序
void sort_students(Student *students, int n) {
  for (int i = 0; i < n - 1; i++) {
    for (int j = 0; j < n - 1 - i; j++) {
      if (students[j].avg < students[j + 1].avg) {
        Student temp = students[j];
        students[j] = students[j + 1];
        students[j + 1] = temp;
      }
    }
  }
}

int main(void) {
  // 初始化随机数生成器
  srand(time(NULL));

  // 生成学生信息
  Student students[NUM_STUDENTS];
  for (int i = 0; i < NUM_STUDENTS; i++) {
    students[i].id = i + 1;
    sprintf(students[i].name, "学生%d", i + 1);
    float sum = 0;
    for (int j = 0; j < NUM_SUBJECTS; j++) {
      students[i].scores[j] = MIN_SCORE + rand() % (MAX_SCORE - MIN_SCORE + 1);
      sum += students[i].scores[j];
    }
    students[i].avg = sum / NUM_SUBJECTS;
  }

  // 输出初始学生信息
  puts("初始学生信息:");
  for (int i = 0; i < NUM_STUDENTS; i++) {
    print_student(students[i]);
  }

  // 按平均分从高到低排序
sort_students(students, NUM_STUDENTS);

// 输出排序后的学生信息
puts("排序后的学生信息:");
for (int i = 0; i < NUM_STUDENTS; i++) {
print_student(students[i]);
}

return 0;
}