1

我正在尝试学习 C,但在为我正在上课的项目编写函数时遇到了麻烦。我需要找到从文件中读取并拆分为结构成员的 7 个不同分数的平均值。我遇到的问题是我似乎无法找到编写模块化函数的方法,因此我可以使用结构的不同成员。我包括结构以及我编写的功能和原型。任何建议将不胜感激,因为我已经搜索和搜索,似乎找不到任何有用的东西。

我的结构:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXNAME         50
#define MAXSTUDENTS     100

int count;

typedef struct {

    char  name[MAXNAME];
    float quiz1;
    float quiz2;
    float quiz3;
    float quiz4;
    float midTerm1;
    float midTerm2;
    float final;
    float totalScore;
    char  finalGpa;

}student;

我的原型:

float averageQuiz1(int count, student *dataList);

我的功能:

float averageQuiz1(int count, student *dataList)
{
int i;
float total = 0;

for (i = 0; i < count; i++) {

    total += dataList[i].quiz1;

}
return total/count;
}

再次,任何帮助我指出正确的方向以使这个模块化,以便我可以用结构的另一个成员替换 dataList[i].quiz,将不胜感激。

4

1 回答 1

2

如果您更改结构以使所有分数都在一个数组中,您将拥有更大的灵活性,例如

typedef enum { // define a new enum to select which score you're working with 
    quiz1,
    quiz2,
    quiz3,
    quiz4,
    midTerm1,
    midTerm2,
    final,
    totalScore,
    NUM_SCORES
} Score;

typedef struct {
    char  name[MAXNAME];
    float scores[NUM_SCORES]; // array of scores
    char  finalGpa;
} student;

然后,您可以有一个通用averageQuiz函数,您可以在其中指定要计算平均值的分数:

float averageQuiz(int count, student *dataList, Score s)
{
    int i;
    float total = 0;
    float average = 0;

    for (i = 0; i < count; i++) {
        total += dataList[i].scores[s]; // <<< note that we are summing score `s` here
    }
    average = total/count; // <<< bug fix from @user2722968
    return average;
}

然后你会称之为例如

averageScore = averageQuiz(count, dataList, quiz1);
于 2013-09-10T05:48:38.570 回答