PTA C语言 6-3 统计平均分,最高分及得最高分人数

文章描述了一个名为`fun`的函数,用于统计给定学生分数数组的平均成绩、最高分及得最高分的人数。该函数接收一个浮点数数组和数组长度作为参数,通过遍历数组计算并更新全局变量Max和J。

请编写一个函数fun,函数的功能是:统计出若干个学生的平均成绩,最高分以及得最高分的人数。

函数接口定义:

float fun(float array[],int n);

其中 array 和 n 都是用户传入的参数。函数须统计 array数组中学生的平均成绩,最高分以及得最高分的人数,函数返回平均成绩,最高分以及得最高分的人数存放在全局变量 Max 和 J中 。

裁判测试程序样例:

#include <stdio.h>
float Max=0;
int J=0;
float fun(float array[],int n);
int main()
{
float  a[10],ave;
int i=0;
for(i=0;i<10;i++)
scanf("%f",&a[i]);
ave=fun(a,10);
printf("ave=%.2f\n",ave);
printf("max=%.02f\n",Max);
printf("Total:%d\n",J);
return 0;
 }

/* 请在这里填写答案 */

输入样例:

84 75 86 59 25 94 76 84 15 65

输出样例:

ave=66.30
max=94.00
Total:1

答案:

float fun(float array[], int n)
{
	int i = 0, temp = 0;
	float sum = 0;
	J++;
	for (i = 0; i < n; i++)
	{
		sum += array[i];
		if (array[i] > Max)
		{
			temp = Max;
			Max = array[i];
			array[i] = temp;
		}
		if (array[i] == Max)
			J++;
	}
	return sum / n;
}

 

PTA平台上统计有效成绩平均分有不同的实现场景和方法。 对于简单的学生成绩统计,可通过以下思路实现:定义变量存放成绩总和与循环变量,使用循环遍历成绩数组,将成绩累加到总和中,最后用总和除以成绩数量得到平均成绩。示例伪代码如下: ```plaintext 定义变量sum存放成绩总和,i为循环变量 for i = 0 to n - 1 执行 sum = sum + a[i] end for 计算平均成绩 aver = sum / n ``` 对应的C语言代码示例(以练习3 - 3为例): ```c #include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]) { int N = 0, i = 0, sum = 0; double average = 0; scanf("%d", &N); if (N) { int* score = (int*)malloc(N * sizeof(int)); int* p = score; for (i = 0; i < N; i++, p++) { scanf("%d", p); sum += *p; } average = (double)sum / N; printf("average = %.1f\n", average); free(score); } return 0; } ``` 在处理录入学生成绩并统计的情况(如PTA7 - 17 - 1),要考虑成绩的有效性(分数在0到100之间)。当录入无效成绩时,需重新输入并给提醒。实现步骤大致为:先输入学生人数N(要求N为正整数,若N小于等于0,程序直接退),接着逐个输入学生成绩,若成绩无效则重新输入,最后统计有效成绩的平均分。 若要统计多个科目成绩的平均分(如PTA学生成绩的统计),可以为每个学生计算平均成绩,然后根据需求进一步处理。例如定义学生结构体,包含学号、姓名、各科成绩和平均成绩,从键盘输入学生数据,计算每个学生平均成绩,最后可找最高平均分学生信息。代码示例如下: ```c #include <stdio.h> #define N 5 typedef struct { int id; char name[20]; int math; int chinese; double aver; } STU; void InputData(STU *p, int num); STU *FindMaxIndex(STU *p, int num); int main(void) { STU classone[N]; STU *pmax; InputData(classone, N); pmax = FindMaxIndex(classone, N); printf("maxinfo:%d %s %d %d %.1f\n", pmax->id, pmax->name, pmax->math, pmax->chinese, pmax->aver); return 0; } void InputData(STU *p, int num) { for (int i = 0; i < num; i++) { scanf("%d %s %d %d", &p[i].id, p[i].name, &p[i].math, &p[i].chinese); p[i].aver = (p[i].math + p[i].chinese) / 2.0; } } STU *FindMaxIndex(STU *p, int num) { STU *max = p; for (int i = 1; i < num; i++) { if (p[i].aver > max->aver) { max = &p[i]; } } return max; } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值