首页 > 专题系列 > C基础练习 > C语言程序设计-求平均成绩[指针应用]
2013
11-25

C语言程序设计-求平均成绩[指针应用]

10071 求平均成绩

【问题描述】某班期末考试后要统计本班某门课程的平均成绩、最高成绩和最低成绩,你的任务是编程序实现这一功能。 一个班的人数不超过30人,要求实现求最高成绩,最低成绩和平均成绩的功能用一个函数完成,并用参数返回最高成绩,最低成绩和平均成绩。
【输入形式】一组测试数据,第一行为一个整数N,表示本班有N个人(N<=30),接下来的N行中每行一个整数,表示一个人的成绩。
【输出形式】输出一行。该行包含三个数,分别是:最高成绩、最低成绩和平均成绩。成绩之间由空格分隔,其中平均成绩为实数,并精确到小数点后两位。
【样例输入】5
90
83
76
85
62
【样例输出】90 62 79.20
【样例说明】某班有5个学生,他们的成绩分别是90、83、76、85、62。该班的最高成绩、最低成绩和平均成绩分别为90、62以及79.20。
【评分标准】本题共2个测试点,每个测试点1.0分,共2.0分。

//author: xiaohuang
#include <stdio.h>
int nums[30];
void count(int n,int* nums, int* max,int* min, float* average);
int main()
{
	int n;
	float average=0.0f;
	int max=-1,min=101;
	scanf("%d",&n);

		int i;
		for (i=0;i<n;i++)
		{
			scanf("%d",&nums[i]);
		}
		count(n,nums,&max,&min, &average);

		printf("%d %d %.2f\n",max,min,average);

	return 0;
}

void count(int n,int* nums, int* max,int* min, float* average)
{
	int i;
	int sum = 0;
	for (i=0;i<n;i++)
	{
		sum += nums[i];
		if (nums[i] > *max)
		{
			*max = nums[i];
		}
		if(nums[i] < *min)
		{
			*min = nums[i];
		}
	}
	*average = (sum * 1.0f) / (n * 1.0f);
}

 


  1. 第二个方法挺不错。NewHead代表新的头节点,通过递归找到最后一个节点之后,就把这个节点赋给NewHead,然后一直返回返回,中途这个值是没有变化的,一边返回一边把相应的指针方向颠倒,最后结束时返回新的头节点到主函数。

  2. 嗯 分析得很到位,确实用模板编程能让面试官对你的印象更好。在设置辅助栈的时候可以这样:push时,比较要push的elem和辅助栈的栈顶,elem<=min.top(),则min.push(elem).否则只要push(elem)就好。在pop的时候,比较stack.top()与min.top(),if(stack.top()<=min.top()),则{stack.pop();min.pop();},否则{stack.pop();}.