C语言运用函数和数组学生成绩统计 从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能: (1)统计不及格人数并打印不及格学生名单; (2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单; (3)统计各分数段的学生人数及所占的百分比。 (4)用一维数组和指针变量作为函数参数,编程打印某班一门课成绩的最高分及其学号。
时间: 2024-01-02 13:02:32 浏览: 129
这是一个比较全面的问题,需要分步来回答。首先,我们需要定义一个结构体来存储学生的信息,包括学生姓名和成绩。
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 30
struct Student {
char name[20];
float score;
};
```
接下来,我们可以定义一个函数来输入学生的信息,直到输入负值为止。
```c
int input_students(struct Student students[]) {
int count = 0;
printf("请输入学生的姓名和成绩,以负值结束输入:\n");
while (count < MAX_STUDENTS) {
printf("姓名:");
scanf("%s", students[count].name);
if (students[count].name[0] == '-') {
break;
}
printf("成绩:");
scanf("%f", &students[count].score);
if (students[count].score < 0) {
break;
}
count++;
}
return count;
}
```
接下来,我们可以定义一个函数来统计不及格人数,并打印不及格学生的名单。
```c
void print_failed_students(struct Student students[], int count) {
int failed_count = 0;
printf("不及格学生名单:\n");
for (int i = 0; i < count; i++) {
if (students[i].score < 60) {
printf("%s\n", students[i].name);
failed_count++;
}
}
printf("不及格人数:%d\n", failed_count);
}
```
接下来,我们可以定义一个函数来计算平均分,并统计成绩在平均分及平均分以上的学生人数,并打印这些学生的名单。
```c
void print_above_average_students(struct Student students[], int count) {
float sum = 0;
for (int i = 0; i < count; i++) {
sum += students[i].score;
}
float average = sum / count;
printf("平均分:%f\n", average);
int above_average_count = 0;
printf("成绩在平均分及平均分以上的学生名单:\n");
for (int i = 0; i < count; i++) {
if (students[i].score >= average) {
printf("%s\n", students[i].name);
above_average_count++;
}
}
printf("成绩在平均分及平均分以上的学生人数:%d\n", above_average_count);
}
```
最后,我们可以定义一个函数来统计各分数段的学生人数及所占的百分比,并打印某班一门课成绩的最高分及其学号。
```c
void print_score_distribution_and_max_score(struct Student students[], int count, float *max_score, char *max_name) {
int score_count[11] = {0};
for (int i = 0; i < count; i++) {
int score = (int)students[i].score / 10;
score_count[score]++;
if (students[i].score > *max_score) {
*max_score = students[i].score;
strcpy(max_name, students[i].name);
}
}
printf("各分数段的学生人数及所占的百分比:\n");
for (int i = 0; i < 11; i++) {
int percent = score_count[i] * 100 / count;
printf("%d分-%d分:%d人,%d%%\n", i * 10, i * 10 + 9, score_count[i], percent);
}
printf("最高分:%f,最高分学生姓名:%s\n", *max_score, max_name);
}
```
最后,我们可以在主函数中调用这些函数来完成题目要求。
```c
int main() {
struct Student students[MAX_STUDENTS];
int count = input_students(students);
print_failed_students(students, count);
print_above_average_students(students, count);
float max_score = students[0].score;
char max_name[20];
print_score_distribution_and_max_score(students, count, &max_score, max_name);
return 0;
}
```
阅读全文