学习笔记

作业

//main.c
// 1> 完成班级的创建,创建时,需要传递班级实际人数
// 2> 完成班级学生的信息录入工作
// 3> 完成将班级学生按成绩进行降序排序工作
// 4> 输出班级中成绩最好和最差学生的信息
// 5> 完成信息的输出工作
// 6> 完成班级的销毁工作
// 要求:班级创建在堆区,尽量分文件编译完成
#include <stdio.h>
#include <stdlib.h>
#include "student.h"
int main(int argc, char const *argv[])
{
int size = 0, key = 0;
struct Class *class = NULL;
while (1)
{
menu();
printf("\n");
printf("请输入你要进行的操作:");
scanf("%d", &key);
printf("\n");
switch (key)
{
case 1:
printf("请确定班级的人数:");
scanf("%d", &size);
printf("\n");
class = createclass(size);
break;
case 2:
addStudent(&size, *class);
break;
case 3:
searchStudent(&size, class);
break;
case 4:
sort(&size, class);
break;
case 5:
maxandmin(&size, class);
break;
case 6:
destroy(class);
break;
case 0:
return 0;
}
}
return 0;
}
// student.c
// 定义函数
#include <stdio.h>
#include <stdlib.h>
#include "student.h"
// 菜单
void menu()
{
printf("\t\t==>1.创建班级\n");
printf("\t\t==>2.录入学生成绩\n");
printf("\t\t==>3.查看学生成绩\n");
printf("\t\t==>4.对学生成绩进行降序排序\n");
printf("\t\t==>5.输出最好和最差的学生成绩\n");
printf("\t\t==>6.对班级进行销毁\n");
printf("\t\t==>0.退出\n");
};
// 完成班级的创建
struct Class *createclass(int size)
{
struct Class *class = (struct Class *)malloc(sizeof(struct Class));
class->size = size;
if (NULL != class)
{
printf("创建班级成功\n");
}
else if (NULL == class)
{
printf("创建班级失败\n");
}
return class;
}
// 录入信息
void addStudent(int *size, struct Class *class)
{
for (int i = 0; i < *size; i++)
{
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", class->student[i].name);
printf("请输入第%d个学生的年龄:", i + 1);
scanf("%d", &class->student[i].age);
printf("请输入第%d个学生的成绩:", i + 1);
scanf("%lf", &class->student[i].score);
}
printf("\n");
};
// 查看学生信息
void searchStudent(int *size, struct Class *class)
{
for (int i = 0; i < *size; i++)
{
printf("第%d个学生的姓名: %s 年龄: %d 成绩: %.2lf \n", i + 1,
class->student[i].name,
class->student[i].age,
class->student[i].score);
}
printf("\n");
};
// 对班级学生按成绩进行降序
void sort(int *size, struct Class *class)
{
for (int i = 0; i < *size; i++)
{
for (int j = 0; j < *size - i - 1; j++)
{
if (class->student[j].score <= class->student[j + 1].score)
{
double temp = class->student[j].score;
class->student[j].score = class->student[j + 1].score;
class->student[j + 1].score = temp;
}
}
}
printf("排序完成后:\n");
for (int i = 0; i < *size; i++)
{
printf("第%d个学生的姓名: %s 年龄: %d 成绩: %.2lf \n", i + 1,
class->student[i].name,
class->student[i].age,
class->student[i].score);
}
printf("\n");
}
// 输出最好和最差的学生的信息
void maxandmin(int *size, struct Class *class)
{
// 输出最高最低成员的成绩
int max = 0, min = 1000;
struct Stu maxstudent, minstudent;
for (int i = 0; i < *size; i++)
{
if (class->student[i].score > max)
{
max = class->student[i].score;
maxstudent = class->student[i];
}
if (class->student[i].score < min)
{
min = class->student[i].score;
minstudent = class->student[i];
}
}
printf("最好成绩学生姓名: %s 年龄: %d 成绩: %.2lf\n", maxstudent.name, maxstudent.age, maxstudent.score);
printf("最差成绩学生姓名: %s 年龄: %d 成绩: %.2lf\n", minstudent.name, minstudent.age, minstudent.score);
printf("\n");
};
// 释放内存空间
void destroy(struct Class *class)
{
if (NULL!= class)
{
free(class); // 释放空间
printf("内存空间已释放\n");
}
}
// student.h
// 头文件
#ifndef STUDENT_H
#define STUDENT_H
#define MAX 100 // 最大容量
// 定义学生类型
struct Stu
{
char name[20];
int age;
double score;
};
// 定义班级类型
struct Class
{
struct Stu student[MAX]; // 存放学生的容器
int size; // 实际人数
};
void menu();
struct Class *createclass();
void addStudent();
void searchStudent();
void sort();
void maxandmin();
void destroy();
#endif