本题要求实现一个函数,使用数组指针作函数参数,进行学生成绩的输入和统计输出。要求如下:输入m个学生(最多30人)n门课程(最多5门)的成绩,然后计算并打印每个学生各门课的总分和平均分。
函数接口定义:
void Array_InputCalculate(int *p, int m, int n);
其中:p
为指向学生成绩的数组指针,m
和n
依次是学生人数、课程数,其值分别由用户从键盘输入。
裁判测试程序样例:
#include <stdio.h>
void Array_InputCalculate(int *p, int m, int n);
int main() { int *p = NULL, m, n;
double aver;
scanf("%d", &m); //输入学生数
scanf("%d", &n); //输入课程数
p = (int *)calloc(m*n, sizeof(int)); //向系统申请内存
if (p == NULL) /*确保指针使用前是非空指针,当p为空指针时结束程序运行*/
{ printf("No enough memory!\n"); exit(1); }
Array_InputCalculate(p, m, n); //学生成绩输入及统计输出
free(p); // 释放向系统申请的内存
return 0; } /* 请在这里填写答案 */
输入格式:
学生个数m 课程数n 学生1课程1分数 学生1课程2分数 ... 学生1课程n分数 学生2课程1分数 学生2课程2分数 ... 学生2课程n分数 ... 学生m课程1分数 学生m课程2分数 ... 学生m课程n分数
输出格式:
每个学生总分(整数) 平均分(实数,保留1位小数)
输入样例:
2 3
61 62 70
75 82 90
输出样例:
193 64.3
247 82.3
答案样例如下
void Array_InputCalculate(int *p, int m, int n){
int i,j,score,sum[m];
double ave[m];
for(i=0;i<m;i++){
sum[i]=0;
for(j=0;j<n;j++){
scanf("%d",&score);
sum[i]+=score;
}
ave[i]=sum[i]*1.0/n;
}
for(i=0;i<m;i++){
printf("%d %.1f\n",sum[i],ave[i]);
}
}