C程序设计 (第四版) 谭浩强 例 7.11

例 7.11 有两个班级,分别有35名和30名学生,调用一个average函数,分别求这两个班的学生的平均成绩。

IDE工具:VS2010
Note: 使用不同的IDE工具可能有部分差异。

 

代码块
方法1:使用数组
#include <stdio.h>
#include <stdlib.h>

void inputClass(float classN[], int num, int n){
	printf("Enter the scores of %d students in Class%d: ", n, num);
	for(int i = 0; i < n; i++){
		scanf("%f", &classN[i]);
	}
}

void average(float classN[], int num, int n){
	float sum = 0.0;
	for(int i = 0; i < n; i++){
		sum += classN[i];
	}
	printf("The average score of Class%d: %.2f\n", num, sum / n);
}

int main(){
	float class1[35], class2[30];
	
	inputClass(class1, 1, 35);
	inputClass(class2, 2, 30);
	average(class1, 1, 35);
	average(class2, 2, 30);

	system("pause");
    return 0;
}
方法2:使用指针、动态分配内存
#include <stdio.h>
#include <stdlib.h>

//初始化班级
void initialClass(float **class1, float **class2, int n1, int n2){
	*class1 = (float*)malloc(n1 * sizeof(float));
	*class2 = (float*)malloc(n2 * sizeof(float));
}

//输入班级成绩
void inputClass(float *classN, int num, int n){
	printf("Enter the scores of %d students in Class%d: ", n, num);
	for(int i = 0; i < n; i++){
		scanf("%f", &classN[i]);
	}
}

//求平均值函数
float average(float *classN, int n){
	float sum = 0.0;
	for(int i = 0; i < n; i++){
		sum += classN[i];
	}
	return sum / n;
}

//输出平均值
void outputAver(float *classN, int num, int n, float average(float*, int)){
	printf("Class%d Average Score: %.2f\n", num, average(classN, n));
}

//释放分配内存
void freeClass(float **class1, float **class2){
	free(*class1);
	free(*class2);
}

int main(){
	float *class1 = NULL;
	float *class2 = NULL;

	initialClass(&class1, &class2, 35, 30);
	inputClass(class1, 1, 35);
	inputClass(class2, 2, 30);
	outputAver(class1, 1, 35, average);
	outputAver(class2, 2, 30, average);
	freeClass(&class1, &class2);

	system("pause");
    return 0;
}
11-13 17:11