作业题干如下:
学生成绩管理
学号 | 成绩 |
---|---|
1 | 88 |
2 | 87 |
3 | 99 |
4 | 89 |
5 | 78 |
6 | 87 |
7 | 98 |
1.将线性表初始化为如上所示的完整表;
2.统计:查找表中成绩低于平均值的学生,并输出其学号;
3.排序功能;
4.插入:将学号,成绩插入到顺序表中的合适位置。
代码实现如下:
#include "stdio.h"
#include "stdlib.h"
#define initsize 100
#define error -1
#define ok 0
typedef struct {
int id;
int mark;
}stu;
typedef struct {
stu* data;
int maxsize;
int length;
}seqlist;
void create_list(seqlist* L)
{
L->data = (stu*)malloc(initsize * sizeof(stu));
L->length = 0;
L->maxsize = initsize;
}
int insert_list(seqlist* L, int i, int e1, int e2)
{
if (i<1 || i>L->length + 1)
return error;
if (L->length > L->maxsize)
return error;
for (int k = 0;k < L->length;k++)
{
if (L->data[k].id == e1)
return error;
}
for (int j = L->length;j >= i;j--)
{
L->data[j].id = L->data[j - 1].id;
L->data[j].mark = L->data[j - 1].mark;
}
L->data[i - 1].id = e1;
L->data[i - 1].mark = e2;
L->length++;
return ok;
}
int delete_list(seqlist *L, int i)
{
if (i<1 || i>L->length + 1)
return error;
for (int j = i;i < L->length;j++)
{
L->data[i - 1].id = L->data[i].id;
L->data[i - 1].mark = L->data[i].mark;
}
L->length--;
return ok;
}
void print_list(seqlist* L)
{
int i;
for (i = 0;i < L->length;i++)
printf("%d %d\n", L->data[i].id,L->data[i].mark);
}
int average_list(seqlist* L,int n)
{
float sum = 0, avg = 0;
int i;
for (i = 0;i < L->length;i++)
{
sum = sum + L->data[i].mark;
}
avg = sum / L->length;
if (L->data[n].mark < avg)
printf("%d ", L->data[n].id);
return 0;
}
void sort_list(seqlist* L)
{
int len = L->length, i, tmp;
while (len > 1)
{
for (i = 0;i < len - 1;i++)
{
if (L->data[i].mark > L->data[i+1].mark)
{
tmp = L->data[i].mark;L->data[i].mark = L->data[i + 1].mark;L->data[i + 1].mark = tmp;
tmp = L->data[i].id;L->data[i].id = L->data[i + 1].id;L->data[i + 1].id = tmp;
}
}
len--;
}
}
int main()
{
seqlist list;
create_list(&list);
insert_list(&list, 1, 1, 88);
insert_list(&list, 2, 2, 87);
insert_list(&list, 3, 3, 99);
insert_list(&list, 4, 4, 89);
insert_list(&list, 5, 5, 78);
insert_list(&list, 6, 6, 87);
insert_list(&list, 7, 7, 98);
printf("The list has been created successfully!\n");
printf("0->End the Program.\n");
printf("1->Find students whose marks lower than average.\n");
printf("2->Sort the list.\n");
printf("3->Insert new messages.\n");
printf("4->Print the list.\n");
int tmp,number=7,i,id,mark,flag=0;
while (1)
{
scanf_s("%d", &tmp);
if (tmp == 0) break;
else if (tmp == 1)
{
printf("Ids of students whose marks lower than average are:\n");
for (i = 0;i < number;i++)
{
average_list(&list, i);
}
printf("\n");
}
else if (tmp == 2)
{
sort_list(&list);
printf("The list has been sorted successfully!\n");
}
else if (tmp == 3)
{
printf("Please input the student's id and marks you want to insert:\n");
scanf_s("%d %d", &id, &mark);
flag=insert_list(&list, number +1, id, mark);
if (flag == error)
printf("ERROR!\n");
else
printf("Inserted successfully!\n");
flag = 0;
}
else if (tmp == 4)
{
printf("ID Marks\n");
print_list(&list);
}
else
{
printf("Error!Please input number from 0 to 4!\n");
}
}
return 0;
}
``