C //例 7.14 有一个一维数组,内放10个学生成绩,写一个函数,当主函数调用此函数后,能求出平均分、最高分和最低分。

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

例 7.14 有一个一维数组,内放10个学生成绩,写一个函数,当主函数调用此函数后,能求出平均分、最高分和最低分。

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

 

代码块
方法:使用指针、动态分配内存
#include <stdio.h>
#include <stdlib.h>

#define N 10

float Max = 0;
float Min = 0;

void initialStu(float **stu, int n){
	*stu = (float*)malloc(n * sizeof(float));
}

void inputStu(float *stu, int n){
	printf("Enter the scores of %d students: ", n);
	for(int i = 0; i < n; i++){
		scanf("%f", &stu[i]);
	}
}

float average(float *stu, int n){
	float sum = 0.0;
	Max = stu[0];
	Min = stu[0];
	for(int i = 0; i < n; i++){
		sum += stu[i];
		if(stu[i] > Max){
			Max = stu[i];
		}
		if(stu[i] < Min){
			Min = stu[i];
		}
	}
	return sum / (float)n;
}

void outputStu(float *stu, int n, float average(float*, int)){
	printf("Max = %.2f  Min = %.2f  Average = %.2f\n", Max, Min, average(stu, n));
}

int main(){
	float *stu = NULL;

	initialStu(&stu, N);
	inputStu(stu, N);
	outputStu(stu, N, average);
	free(stu);

	system("pause");
	return 0;
}
在C语言中,你可以按照以下步骤编程序来完成这个习题: ```c #include <stdio.h> #include <string.h> // 用于处理字符串 // 结构体表示一个学生及其成绩 typedef struct { char name[50]; int scores[5]; // 学生五门课的成绩 } Student; // 计算学生平均分 float student_average(Student student) { float sum = 0; for (int i = 0; i < 5; i++) { sum += student.scores[i]; } return sum / 5.0; } // 计算每门课的平均分 void course_average(int *scores, int num_students) { float total = 0; for (int i = 0; i < num_students; i++) { total += scores[i]; } printf("平均分:%.2f\n", total / num_students); } // 找出最高分学生课程 void find_highest_score(Student students[], int num_students) { int highest_score = students[0].scores[0], max_index = 0; for (int i = 0; i < num_students; i++) { for (int j = 0; j < 5; j++) { if (students[i].scores[j] > highest_score) { highest_score = students[i].scores[j]; max_index = i; } } } printf("最高分学生:%s, 最高分课程:%d\n", students[max_index].name, max_index); } // 计算方差 double variance(Student students[], int num_students) { double mean = 0; for (int i = 0; i < num_students; i++) { mean += student_average(students[i]); } mean /= num_students; double sum_of_squares = 0; for (int i = 0; i < num_students; i++) { sum_of_squares += pow(student_average(students[i]) - mean, 2); } return sum_of_squares / num_students; } int main() { Student students[10]; for (int i = 0; i < 10; i++) { scanf("%s", students[i].name); for (int j = 0; j < 5; j++) { scanf("%d", &students[i].scores[j]); } } // 使用函数计算并打印结果 for (int i = 0; i < 10; i++) { printf("学生 %s 的平均分:%.2f\n", students[i].name, student_average(students[i])); } course_average(students[0].scores, 10); find_highest_score(students, 10); double overall_variance = variance(students, 10); printf("整体平均分方差:%.2f\n", overall_variance); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Navigator_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值