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;
}