【发布时间】:2012-09-30 23:58:13
【问题描述】:
我正在尝试完成一个实验,在该实验中,我必须根据结构链接列表中给出的课程信息计算总平均绩点 (GPA)。我正在尝试用适当的成绩点定义每个字母等级('A' = 4.0,“A-” = 3.7 ...)。课程成绩存储在字符数组中。我可以使用#define 导数来定义字母等级 A、B、C、D、E,但我在定义 +/- 等级时遇到了麻烦。使用#define 派生是完成此任务的正确方法吗?如果是这样,有人能告诉我正确的语法吗?
/* Definition of a data node holding course information */
struct course {
int term;
char name[15];
char abbrev[20];
float hours;
char grade [4];
char type[12];
struct course *next;
};
float gpa ( struct course *ptr )
{
float totalhours;
float gpa;
float gradepoints;
while (ptr != NULL )
{
totalhours += (ptr->hours);
gradepoints = (ptr->hours * ptr->grade);
}
gpa = (gradepoints / totalhours);
}
【问题讨论】:
-
gpa = (学分/总学时);
-
我将立即建议您将该 ptr 推进到列表中的下一个,否则在 while 循环退出之前将是一个寒冷的日子。
-
为什么不称它们为 A_PLUS 和 A_MINUS?如果这样不行,原因在于您没有提供事实或代码。
-
啊,是的,谢谢! -WhozCraig 我收到了字母等级作为输入。可能的输入值为 {A = 4.0, A- = 3.7, B+ = 3.3, B = 3.0, B- = 2.7, C+ = 2.3, C = 2.0, C- = 1.7, D+ = 1.3, D = 1.0, E = 0.0} 忽略其他等级,UEN、EN、R、I 等。
-
'在 while 循环退出之前' ...但是当它退出时,ptr 将为 NULL,从而导致 UB。大概最后一行应该是 `gpa = (gradepoints / totalhours);` ...如果没有课程,它仍然会产生 UB。给有志成为程序员的人的一个提示:学会关注细节,写完代码再读。
标签: c arrays constants c-preprocessor