#include#include #include #define INIT_SIZE 100 #define SIZE 3 typedef struct Student { char id[15]; char name[20]; char sex[10]; int age; double score[SIZE]; double sum; double avg; }Student,*PStudent; typedef struct Student_Head { struct Student* arr;//用来保存malloc返回的堆内内存块地址 int length;//当前空间已使用的个数 int list_size;//当前空间总大小 }Student_Head,*PStudent_Head; void Init_Student_Head(struct Student_Head* p)//初始化模块 { assert(p != 0); if (p == NULL) { printf("指针为NULLn"); return; } p->arr = (struct Student*)malloc(INIT_SIZE * sizeof(struct Student)); assert(p->arr != NULL); p->length = 0; p->list_size = INIT_SIZE; } bool IsFull(struct Student_Head* p)//判满 *** 作 { return p->length == p->list_size; } static void Inc(struct Student_Head* p)//扩容 *** 作 { p->arr = (struct Student*)realloc(p->arr, p->list_size * sizeof(struct Student) * 2); assert(p->arr != NULL); //p->length } bool Add_Student(PStudent_Head p)//添加学生信息 { assert(p != NULL); if (p == NULL) { printf("指针为NULLn"); return false; } if(IsFull(p)) { Inc(p);//扩容 } printf("请输入学生学号:"); scanf_s("%s", &p->arr[p->length].id,15);//下一个要插入的位置 printf("请输入学生姓名:"); scanf_s("%s", &p->arr[p->length].name,20); printf("请输入学生性别:"); scanf_s("%s", &p->arr[p->length].sex,10); printf("请输入学生年龄:"); scanf_s("%d", &p->arr[p->length].age); printf("请输入学生语文成绩:"); scanf_s("%lf", &p->arr[p->length].score[0]); printf("请输入学生数学成绩:"); scanf_s("%lf", &p->arr[p->length].score[1]); printf("请输入学生英语成绩:"); scanf_s("%lf", &p->arr[p->length].score[2]); p->arr[p->length].sum = p->arr[p->length].score[0] + p->arr[p->length].score[1] + p->arr[p->length].score[2]; p->arr[p->length].avg = p->arr[p->length].sum / SIZE; p->length++; return true; } void Show(struct Student_Head* p) { printf("学号 姓名 性别 年龄 语文成绩 数学成绩 英语成绩 总成绩 平均成绩n"); for (int i = 0; i < p->length; i++) { printf("%s ", p->arr[i].id); printf("%s ", p->arr[i].name); printf("%s ", p->arr[i].sex); printf("%d ", p->arr[i].age); printf("%f ", p->arr[i].score[0]); printf("%f ", p->arr[i].score[1]); printf("%f ", p->arr[i].score[2]); printf("%f ", p->arr[i].sum); printf("%fn", p->arr[i].avg); } } int main() { struct Student_Head tmp; Init_Student_Head(&tmp); int n; printf("请输入添加人数:"); scanf_s("%d", &n); for (int i = 0; i < n; i++) { printf("请输入第%d个人的信息:n", i + 1); Add_Student(&tmp); } Show(&tmp); return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)