【问题描述】 定义一个包含学生成绩(学号,姓名,成绩)的顺序表,读入相应的成绩信息来完成学生成绩表的创建。然后,(1)查找统计不及格的学生人数,(2)删除并以学号升序方式逐行输出不及格的学生信息。 【输入形式】 输入n+1行,其中第1行是学生人数,后n行是n本图书的信息(学号,姓名,成绩),每条信息占一行,学号、姓名、成绩使用空格分隔,成绩之后没有空格。 【输出形式】 输出数据有m+1行,其中第1行是不及格学生人数,后m行是不及格学生信息,每条信息占一行,学号、姓名、成绩使用空格分隔,成绩之后没有空格。 【样例输入】 3 1001 zhangsan 34 1002 wangwu 66 1003 lisi 56 【样例输出】 2 1001 zhangsan 34 1003 lisi 56 【样例说明】 如果不存在不及格同学,则输出提示信息“not found”
时间: 2023-03-26 21:02:23 浏览: 137
定义一个包含学生信息(学号,姓名,成绩)的顺序表
学生成绩表的创建:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int id;
char name[20];
int score;
} Student;
typedef struct {
Student data[MAXSIZE];
int length;
} SqList;
void CreateList(SqList *L, int n) {
int i;
L->length = n;
for (i = ; i < n; i++) {
scanf("%d %s %d", &L->data[i].id, L->data[i].name, &L->data[i].score);
}
}
int main() {
SqList L;
int n;
scanf("%d", &n);
CreateList(&L, n);
return ;
}
```
查找统计不及格的学生人数:
```c
int CountFail(SqList L) {
int i, count = ;
for (i = ; i < L.length; i++) {
if (L.data[i].score < 60) {
count++;
}
}
return count;
}
```
删除并以学号升序方式逐行输出不及格的学生信息:
```c
void DeleteFail(SqList *L) {
int i, j, k;
for (i = ; i < L->length; i++) {
if (L->data[i].score < 60) {
for (j = i + 1; j < L->length; j++) {
L->data[j - 1] = L->data[j];
}
L->length--;
i--;
}
}
for (i = ; i < L->length - 1; i++) {
k = i;
for (j = i + 1; j < L->length; j++) {
if (L->data[j].id < L->data[k].id) {
k = j;
}
}
if (k != i) {
Student temp = L->data[i];
L->data[i] = L->data[k];
L->data[k] = temp;
}
}
for (i = ; i < L->length; i++) {
printf("%d %s %d\n", L->data[i].id, L->data[i].name, L->data[i].score);
}
}
```
完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int id;
char name[20];
int score;
} Student;
typedef struct {
Student data[MAXSIZE];
int length;
} SqList;
void CreateList(SqList *L, int n) {
int i;
L->length = n;
for (i = ; i < n; i++) {
scanf("%d %s %d", &L->data[i].id, L->data[i].name, &L->data[i].score);
}
}
int CountFail(SqList L) {
int i, count = ;
for (i = ; i < L.length; i++) {
if (L.data[i].score < 60) {
count++;
}
}
return count;
}
void DeleteFail(SqList *L) {
int i, j, k;
for (i = ; i < L->length; i++) {
if (L->data[i].score < 60) {
for (j = i + 1; j < L->length; j++) {
L->data[j - 1] = L->data[j];
}
L->length--;
i--;
}
}
for (i = ; i < L->length - 1; i++) {
k = i;
for (j = i + 1; j < L->length; j++) {
if (L->data[j].id < L->data[k].id) {
k = j;
}
}
if (k != i) {
Student temp = L->data[i];
L->data[i] = L->data[k];
L->data[k] = temp;
}
}
for (i = ; i < L->length; i++) {
printf("%d %s %d\n", L->data[i].id, L->data[i].name, L->data[i].score);
}
}
int main() {
SqList L;
int n;
scanf("%d", &n);
CreateList(&L, n);
int count = CountFail(L);
if (count == ) {
printf("not found\n");
} else {
printf("%d\n", count);
DeleteFail(&L);
}
return ;
}
```
阅读全文