同时利用顺序表和链表,用C语言实现有若干学生数据(学生数小于50),每个学生数据包含学号(每个学生学号是唯一的,但学生记录不一定按学号顺序存放)、姓名、班号和若干门课程成绩(每个学生所选课程数目可能不等,但最多不超过6门)。 要求:设计一个程序输出每个学生的学号、姓名和平均分以及每门课程(课程编号从1~6)的平均分。
时间: 2023-05-29 18:06:48 浏览: 90
顺序表实现:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 50
#define COURSENUM 6
typedef struct {
int id;
char name[20];
int class;
int scores[COURSENUM];
float avg;
} Student;
typedef struct {
Student data[MAXSIZE];
int length;
} SeqList;
void Input(SeqList *L) {
int i, j;
printf("请输入学生个数:");
scanf("%d", &L->length);
for (i = 0; i < L->length; i++) {
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
scanf("%d", &L->data[i].id);
printf("姓名:");
scanf("%s", L->data[i].name);
printf("班号:");
scanf("%d", &L->data[i].class);
printf("成绩:");
for (j = 0; j < COURSENUM; j++) {
scanf("%d", &L->data[i].scores[j]);
}
}
}
void Avg(SeqList *L) {
int i, j;
float sum;
for (i = 0; i < L->length; i++) {
sum = 0;
for (j = 0; j < COURSENUM; j++) {
sum += L->data[i].scores[j];
}
L->data[i].avg = sum / COURSENUM;
}
}
void Output(SeqList L) {
int i, j;
printf("学号\t姓名\t班号\t平均分\t");
for (j = 0; j < COURSENUM; j++) {
printf("课程%d\t", j + 1);
}
printf("\n");
for (i = 0; i < L.length; i++) {
printf("%d\t%s\t%d\t%.2f\t", L.data[i].id, L.data[i].name, L.data[i].class, L.data[i].avg);
for (j = 0; j < COURSENUM; j++) {
printf("%d\t", L.data[i].scores[j]);
}
printf("\n");
}
}
int main() {
SeqList L;
Input(&L);
Avg(&L);
Output(L);
return 0;
}
链表实现:
#include <stdio.h>
#include <stdlib.h>
#define COURSENUM 6
typedef struct node {
int id;
char name[20];
int class;
int scores[COURSENUM];
float avg;
struct node *next;
} Student;
void Input(Student **L) {
int i, j, n;
Student *p, *q;
printf("请输入学生个数:");
scanf("%d", &n);
for (i = 0; i < n; i++) {
p = (Student *)malloc(sizeof(Student));
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
scanf("%d", &p->id);
printf("姓名:");
scanf("%s", p->name);
printf("班号:");
scanf("%d", &p->class);
printf("成绩:");
for (j = 0; j < COURSENUM; j++) {
scanf("%d", &p->scores[j]);
}
p->next = NULL;
if (*L == NULL) {
*L = p;
} else {
q->next = p;
}
q = p;
}
}
void Avg(Student *L) {
int i, j;
float sum;
Student *p = L;
while (p != NULL) {
sum = 0;
for (j = 0; j < COURSENUM; j++) {
sum += p->scores[j];
}
p->avg = sum / COURSENUM;
p = p->next;
}
}
void Output(Student *L) {
int i, j;
printf("学号\t姓名\t班号\t平均分\t");
for (j = 0; j < COURSENUM; j++) {
printf("课程%d\t", j + 1);
}
printf("\n");
Student *p = L;
while (p != NULL) {
printf("%d\t%s\t%d\t%.2f\t", p->id, p->name, p->class, p->avg);
for (j = 0; j < COURSENUM; j++) {
printf("%d\t", p->scores[j]);
}
printf("\n");
p = p->next;
}
}
int main() {
Student *L = NULL;
Input(&L);
Avg(L);
Output(L);
return 0;
}
阅读全文