C语言运用函数和数组学生成绩统计 从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能: (1)统计不及格人数并打印不及格学生名单; (2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单; (3)统计各分数段的学生人数及所占的百分比。 (4)用一维数组和指针变量作为函数参数,编程打印某班一门课成绩的最高分及其学号
时间: 2024-01-03 09:02:58 浏览: 89
C语言程序设计-统计出若干个学生的平均成绩,最高分以及得最高分的人数;
5星 · 资源好评率100%
好的,我可以为你编写这个程序。以下是代码实现:
```
#include <stdio.h>
#define MAX_SIZE 30
void print_fail_students(int scores[], int n); // 打印不及格学生名单
int count_above_average(int scores[], int n); // 统计成绩在平均分及平均分之上的学生人数
void print_above_average_students(int scores[], int n); // 打印成绩在平均分及平均分之上的学生名单
void print_score_distribution(int scores[], int n); // 打印各分数段的学生人数及所占百分比
void print_max_score(int scores[], int n, int *max_score_ptr, int *max_score_index_ptr); // 打印最高分及其学号
int main() {
int scores[MAX_SIZE];
int score_count = 0; // 成绩数量
int fail_count = 0; // 不及格人数
int above_average_count = 0; // 成绩在平均分及平均分之上的学生人数
int sum = 0; // 成绩总和
float average; // 平均分
int max_score; // 最高分
int max_score_index; // 最高分所在位置
// 输入学生成绩
printf("请输入学生成绩,以负数结束输入:\n");
while (score_count < MAX_SIZE) {
int score;
scanf("%d", &score);
if (score < 0) {
break;
}
scores[score_count] = score;
score_count++;
sum += score;
}
// 计算平均分
average = (float)sum / score_count;
// 统计不及格人数并打印不及格学生名单
printf("不及格人数:%d\n", fail_count);
print_fail_students(scores, score_count);
// 统计成绩在平均分及平均分之上的学生人数
above_average_count = count_above_average(scores, score_count);
printf("成绩在平均分及平均分之上的学生人数:%d\n", above_average_count);
// 打印成绩在平均分及平均分之上的学生名单
print_above_average_students(scores, score_count);
// 打印各分数段的学生人数及所占百分比
print_score_distribution(scores, score_count);
// 打印最高分及其学号
print_max_score(scores, score_count, &max_score, &max_score_index);
printf("最高分:%d,学号:%d\n", max_score, max_score_index);
return 0;
}
void print_fail_students(int scores[], int n) {
printf("不及格学生名单:");
for (int i = 0; i < n; i++) {
if (scores[i] < 60) {
printf("%d ", i+1);
}
}
printf("\n");
}
int count_above_average(int scores[], int n) {
int count = 0;
float sum = 0;
for (int i = 0; i < n; i++) {
sum += scores[i];
}
float average = sum / n;
for (int i = 0; i < n; i++) {
if (scores[i] >= average) {
count++;
}
}
return count;
}
void print_above_average_students(int scores[], int n) {
printf("成绩在平均分及平均分之上的学生名单:");
float sum = 0;
for (int i = 0; i < n; i++) {
sum += scores[i];
}
float average = sum / n;
for (int i = 0; i < n; i++) {
if (scores[i] >= average) {
printf("%d ", i+1);
}
}
printf("\n");
}
void print_score_distribution(int scores[], int n) {
int score_range[6] = {0}; // 分数段人数
float score_percentage[6] = {0}; // 分数段所占百分比
for (int i = 0; i < n; i++) {
if (scores[i] >= 90) {
score_range[0]++;
} else if (scores[i] >= 80) {
score_range[1]++;
} else if (scores[i] >= 70) {
score_range[2]++;
} else if (scores[i] >= 60) {
score_range[3]++;
} else {
score_range[4]++;
}
}
score_range[5] = n - score_range[0] - score_range[1] - score_range[2] - score_range[3] - score_range[4];
printf("各分数段的学生人数及所占百分比:\n");
printf("90分以上: %d,%.2f%%\n", score_range[0], (float)score_range[0]/n*100);
printf("80-89分: %d,%.2f%%\n", score_range[1], (float)score_range[1]/n*100);
printf("70-79分: %d,%.2f%%\n", score_range[2], (float)score_range[2]/n*100);
printf("60-69分: %d,%.2f%%\n", score_range[3], (float)score_range[3]/n*100);
printf("60分以下: %d,%.2f%%\n", score_range[4], (float)score_range[4]/n*100);
}
void print_max_score(int scores[], int n, int *max_score_ptr, int *max_score_index_ptr) {
*max_score_ptr = scores[0];
*max_score_index_ptr = 1;
for (int i = 1; i < n; i++) {
if (scores[i] > *max_score_ptr) {
*max_score_ptr = scores[i];
*max_score_index_ptr = i+1;
}
}
}
```
这个程序可以实现你的要求:统计不及格人数并打印不及格学生名单;统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;统计各分数段的学生人数及所占的百分比;打印某班一门课成绩的最高分及其学号。
阅读全文