运用C语言函数和数组学生成绩统计 从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能: (1)统计不及格人数并打印不及格学生名单; (2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单; (3)统计各分数段的学生人数及所占的百分比。 (4)用一维数组和指针变量作为函数参数,编程打印某班一门课成绩的最高分及其学号。 步骤: 1.打开开发环境,新建文件 2.编辑程序 3.编译链接运行程序,调试并修改程序使其运行结果正确。
时间: 2024-01-04 09:04:33 浏览: 134
好的,这是一个关于C语言函数和数组的学生成绩统计问题,我会尽力回答。以下是代码实现和解释:
```c
#include <stdio.h>
#define MAX 30
//函数声明
void printFail(int[], int);
void printAboveAverage(int[], int, float);
void printScoreRange(int[], int);
void findMax(int[], int, int*, int*);
int main()
{
int scores[MAX], failCount = 0, aboveAvgCount = 0, maxScore = 0, maxIndex = 0;
float avgScore = 0.0, totalScore = 0.0;
//输入学生成绩
for (int i = 0; i < MAX; i++)
{
printf("请输入第%d位学生的成绩:", i + 1);
scanf("%d", &scores[i]);
if (scores[i] < 0)
break;
totalScore += scores[i];
}
//计算平均分
avgScore = totalScore / (float)i;
//统计不及格人数并打印不及格学生名单
printFail(scores, i);
//统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单
printAboveAverage(scores, i, avgScore);
//统计各分数段的学生人数及所占的百分比
printScoreRange(scores, i);
//打印最高分及其学号
findMax(scores, i, &maxScore, &maxIndex);
printf("最高分为%d,学号为%d\n", maxScore, maxIndex + 1);
return 0;
}
//统计不及格人数并打印不及格学生名单
void printFail(int scores[], int n)
{
int failCount = 0;
printf("不及格学生名单:\n");
for (int i = 0; i < n; i++)
{
if (scores[i] < 60)
{
printf("学号%d\n", i + 1);
failCount++;
}
}
printf("不及格人数为%d\n", failCount);
}
//统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单
void printAboveAverage(int scores[], int n, float avgScore)
{
int aboveAvgCount = 0;
printf("成绩在全班平均分及平均分之上的学生名单:\n");
for (int i = 0; i < n; i++)
{
if (scores[i] >= avgScore)
{
printf("学号%d\n", i + 1);
aboveAvgCount++;
}
}
printf("成绩在全班平均分及平均分之上的学生人数为%d\n", aboveAvgCount);
}
//统计各分数段的学生人数及所占的百分比
void printScoreRange(int scores[], int n)
{
int rangeCount[6] = {0};
float rangePercent[6] = {0};
for (int i = 0; i < n; i++)
{
if (scores[i] < 60)
rangeCount[0]++;
else if (scores[i] < 70)
rangeCount[1]++;
else if (scores[i] < 80)
rangeCount[2]++;
else if (scores[i] < 90)
rangeCount[3]++;
else if (scores[i] < 100)
rangeCount[4]++;
else
rangeCount[5]++;
}
for (int i = 0; i < 6; i++)
{
rangePercent[i] = (float)rangeCount[i] / (float)n * 100.0;
printf("%d~%d分数段的人数为%d,所占百分比为%.2f%%\n", i * 10, i * 10 + 9, rangeCount[i], rangePercent[i]);
}
}
//打印某班一门课成绩的最高分及其学号
void findMax(int scores[], int n, int *maxScore, int *maxIndex)
{
*maxScore = scores[0];
*maxIndex = 0;
for (int i = 1; i < n; i++)
{
if (scores[i] > *maxScore)
{
*maxScore = scores[i];
*maxIndex = i;
}
}
}
```
解释:
1. 定义了一个常量 `MAX` 表示班级最多人数为30人。
2. 在 `main()` 函数中,首先定义了一些变量和数组,包括学生成绩数组 `scores[]`、不及格人数 `failCount`、成绩在全班平均分及平均分之上的学生人数 `aboveAvgCount`、最高分 `maxScore` 和最高分的学生学号 `maxIndex`。
3. 使用 `for` 循环从键盘输入学生成绩,当输入成绩为负数时,跳出循环。
4. 计算平均分 `avgScore`。
5. 调用 `printFail()` 函数统计不及格人数并打印不及格学生名单。
6. 调用 `printAboveAverage()` 函数统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单。
7. 调用 `printScoreRange()` 函数统计各分数段的学生人数及所占的百分比。
8. 调用 `findMax()` 函数打印某班一门课成绩的最高分及其学号。
9. 定义函数 `printFail()`,它接收两个参数:学生成绩数组 `scores[]` 和学生人数 `n`,统计不及格人数并打印不及格学生名单。
10. 定义函数 `printAboveAverage()`,它接收三个参数:学生成绩数组 `scores[]`、学生人数 `n` 和全班平均分 `avgScore`,统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单。
11. 定义函数 `printScoreRange()`,它接收两个参数:学生成绩数组 `scores[]` 和学生人数 `n`,统计各分数段的学生人数及所占的百分比。
12. 定义函数 `findMax()`,它接收四个参数:学生成绩数组 `scores[]`、学生人数 `n`、最高分 `maxScore` 和最高分的学生学号 `maxIndex`,打印某班一门课成绩的最高分及其学号。
阅读全文