【问题描述】 用C语言定义一个包含学生成绩(学号,姓名,成绩)的顺序表,读入相应的成绩信息来完成学生成绩表的创建。然后,(1)查找统计不及格的学生人数,(2)删除并以学号升序方式逐行输出不及格的学生信息。 【输入形式】 输入n+1行,其中第1行是学生人数,后n行是n本图书的信息(学号,姓名,成绩),每条信息占一行,学号、姓名、成绩使用空格分隔,成绩之后没有空格。 【输出形式】 输出数据有m+1行,其中第1行是不及格学生人数,后m行是不及格学生信息,每条信息占一行,学号、姓名、成绩使用空格分隔,成绩之后没有空格。 【样例输入】 3 1001 zhangsan 34 1002 wangwu 66 1003 lisi 56
时间: 2023-03-28 16:00:23 浏览: 103
以下是我的回答:
代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct {
int id;
char name[20];
int score;
} Student;
typedef struct {
Student data[MAX_SIZE];
int length;
} SqList;
void createList(SqList *L) {
int n;
printf("请输入学生人数:");
scanf("%d", &n);
L->length = n;
printf("请输入学生信息(学号 姓名 成绩):\n");
for (int i = ; i < n; i++) {
scanf("%d %s %d", &L->data[i].id, L->data[i].name, &L->data[i].score);
}
}
void printList(SqList L) {
printf("学号\t姓名\t成绩\n");
for (int i = ; i < L.length; i++) {
printf("%d\t%s\t%d\n", L.data[i].id, L.data[i].name, L.data[i].score);
}
}
void findFail(SqList L) {
int count = ;
printf("不及格学生信息:\n");
printf("学号\t姓名\t成绩\n");
for (int i = ; i < L.length; i++) {
if (L.data[i].score < 60) {
printf("%d\t%s\t%d\n", L.data[i].id, L.data[i].name, L.data[i].score);
count++;
}
}
printf("不及格学生人数:%d\n", count);
}
void deleteFail(SqList *L) {
int count = ;
for (int i = ; i < L->length; i++) {
if (L->data[i].score < 60) {
count++;
} else {
L->data[i - count] = L->data[i];
}
}
L->length -= count;
printf("删除不及格学生后的学生信息:\n");
printf("学号\t姓名\t成绩\n");
for (int i = ; i < L->length; i++) {
printf("%d\t%s\t%d\n", L->data[i].id, L->data[i].name, L->data[i].score);
}
}
int main() {
SqList L;
createList(&L);
printf("学生信息如下:\n");
printList(L);
findFail(L);
deleteFail(&L);
return ;
}
```
输出结果:
```
请输入学生人数:3
请输入学生信息(学号 姓名 成绩):
1001 zhangsan 34
1002 wangwu 66
1003 lisi 56
学生信息如下:
学号 姓名 成绩
1001 zhangsan 34
1002 wangwu 66
1003 lisi 56
不及格学生信息:
学号 姓名 成绩
1001 zhangsan 34
1003 lisi 56
不及格学生人数:2
删除不及格学生后的学生信息:
学号 姓名 成绩
1002 wangwu 66
```
阅读全文