标题:一道用指针的题目(记录成绩)
只看楼主
ClearningC
Rank: 2
等 级:论坛游民
帖 子:98
专家分:43
注 册:2016-10-26
结帖率:89.47%
已结贴  问题点数:20 回复次数:2 
一道用指针的题目(记录成绩)
假设事前不知道考生数目和学科数目,但要编写程序求每个考生的平均分。
考生数目,学科数目和分数都在程序运行的时候输入
考生    语文    数学    英语    ...
1    1.0    2.0    3.0    ...
2    2.0    3.0    4.0    ...
3    5.0    6.0    7.0    ...
你的任务
完成以下两个函数的编写
void average(score, nStuNum, nCourseNum, avg);       nStuNum代表考生数,nCourseNum代表科目数
void output(score, nStuNum, avg);
nStuNum, nCourseNum 范围 [1, 100]
考生成绩范围 [0.00, 100.00]
average用来求每一位考生的平均分,
output用来输出每个学生的平均成绩,格式为:学生序号 成绩
学生序号从1开始,到nStuNum
注意
成绩用double记录,输出精确到小数点后两位
在output函数需要free掉main函数申请的内存空间,否则会有内存泄露
Sample Input
3 3
1.0 2.0 3.0
2.0 3.0 4.0
5.0 6.0 7.0
Sample Output
1 2.00
2 3.00
3 6.00
搜索更多相关主题的帖子: 编写程序 average 英语 记录 数学 
2016-12-06 20:41
ClearningC
Rank: 2
等 级:论坛游民
帖 子:98
专家分:43
注 册:2016-10-26
得分:0 
两个函数是我写的
[code][/#include <stdio.h>
#include <stdlib.h>
void input(double** score, int nStuNum, int nCourseNum) {
    int i, j;
    for (i = 0; i < nStuNum; i++) {
        for (j = 0; j < nCourseNum; j++) {
            scanf("%lf", &score[i][j]);
        }
    }
}

void average(double **score, int nStuNum,int nCourseNum, double *avg)
{
    double sum=0;
    int i,j;
    for (i = 0; i < nStuNum; i++) {
        for (j = 0; j < nCourseNum; j++) {
            sum+=score[i][j];
        }
        *avg=sum/nCourseNum;
    }
}
void output(double** score, int nStuNum,  double* avg)
{
    int k=1;
    for(k=1;k<=nStuNum;k++)
    {
        printf("%d %.2lf\n",k,*avg);
    }
}
int main() {
    double **score, *avg;
    int nStuNum, nCourseNum, i;
    scanf("%d%d", &nStuNum, &nCourseNum);
    avg = (double*)malloc(sizeof(*avg) * nStuNum);
    score = (double**)malloc(sizeof(*score) * nStuNum);
    for (i = 0; i < nStuNum; i++)
        score[i] = (double*)malloc(sizeof(**score) * nCourseNum);
    input(score, nStuNum, nCourseNum);
    average(score, nStuNum, nCourseNum, avg);
    output(score, nStuNum, avg);
    return 0;
}
code]
调试结果是这样的

我觉得是average 函数出错了,但是不知道该怎么改?
求问!
2016-12-06 20:44
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:20 
void average(double **score, int nStuNum,int nCourseNum, double *avg)
{
    double sum=0;
    int i,j;

    for (i = 0; i < nStuNum; i++)
    {
        for (j = 0,sum=0; j < nCourseNum; j++)
            sum+=score[i][j];

        *avg=sum/nCourseNum;
        avg++;
    }

}
void output(double** score, int nStuNum,  double* avg)
{
    int k=1;

    for(k=1;k<=nStuNum;k++,avg++)   
        printf("%d %.2lf\n",k,*avg);
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-07 00:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-472054-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.094321 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved