定义一个包含学生成绩(学号,姓名,成绩)的顺序表,读入相应的成绩信息来完成学生成绩表的创建。然后,(1)查找统计不及格的学生人数,(2)删除并以学号升序方式逐行输出不及格的学生信息。 【输入形式】 输入n+1行,其中第1行是学生人数,后n行是n本图书的信息(学号,姓名,成绩),每条信息占一行,学号、姓名、成绩使用空格分隔,成绩之后没有空格。 【输出形式】 输出数据有m+1行,其中第1行是不及格学生人数,后m行是不及格学生信息,每条信息占一行,学号、姓名、成绩使用空格分隔,成绩之后没有空格。
时间: 2023-03-28 20:00:21 浏览: 204
我可以回答这个问题。首先,我们可以定义一个结构体来表示学生成绩信息,包括学号、姓名和成绩。然后,我们可以使用动态数组来实现顺序表,读入每个学生的信息并将其添加到数组中。接下来,我们可以遍历数组,统计不及格的学生人数,并将不及格的学生信息存储到另一个数组中。最后,我们可以按照学号升序的方式输出不及格的学生信息。
以下是示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
typedef struct {
int id;
char name[MAX_NAME_LEN];
int score;
} Student;
int main() {
int n;
scanf("%d", &n);
Student *students = (Student*) malloc(n * sizeof(Student));
for (int i = ; i < n; i++) {
scanf("%d %s %d", &students[i].id, students[i].name, &students[i].score);
}
int fail_count = ;
Student *fail_students = (Student*) malloc(n * sizeof(Student));
for (int i = ; i < n; i++) {
if (students[i].score < 60) {
fail_count++;
memcpy(&fail_students[fail_count - 1], &students[i], sizeof(Student));
}
}
printf("%d\n", fail_count);
for (int i = ; i < fail_count; i++) {
for (int j = i + 1; j < fail_count; j++) {
if (fail_students[i].id > fail_students[j].id) {
Student temp;
memcpy(&temp, &fail_students[i], sizeof(Student));
memcpy(&fail_students[i], &fail_students[j], sizeof(Student));
memcpy(&fail_students[j], &temp, sizeof(Student));
}
}
printf("%d %s %d\n", fail_students[i].id, fail_students[i].name, fail_students[i].score);
}
free(students);
free(fail_students);
return ;
}
阅读全文
相关推荐

















