问题不是什么大问题,但是我不确定我是否缺乏了解给我的具体评论的知识。
这是我必须使用指针的一部分。
我从我的老师那里收到了关于使用指针的函数returnfunc
的一段代码的评论。
注释如下:“函数具有什么输入/输出?唯一要输入的就是判断点!”
我会要求进一步的清理,但接下来的1-2天该教练不可用。
所以我没有等我,而是希望有人可以看看,也许能确定是什么意思?
代码中突出显示的部分如下所示:
//function declaration
void returnfunc(float *low, float *average, float *high, float array[],int judges);
//calling function in the main function
returnfunc(&low, &average, &high, pointArray,judges);
//code for returnfunc function
void returnfunc(float *low, float *average, float *high, float pointArray[],int judges){
float small =pointArray[0];
float large =pointArray[0];
float total;
for(int i =0;i<judges;i++){
if(small>pointArray[i]){
small = pointArray[i];
}
if(large<pointArray[i]){
large = pointArray[i];
}
}
for(int i = 0;i<judges;i++){
total += pointArray[i];
}
*average = (total-(large+small))/(judges-2); //average without largest and smallest value
*high=large;
*low=small;
}
judges
是用户选择的判断量。
pointArray
是一个数组,其中包含每个法官给出的点。
我对代码的解释是,输入是low
,high
和average
的地址,也是pointArray
和judges
的地址。
输出将是average
,high
和low
的更新变量
您会说这是正确的吗?
答案 0 :(得分:3)
是的。我的猜测是,您的讲师希望您具有三种独立的功能,一种可以找到最低的分数,一种可以找到最高的分数,另一种可以找到没有最低和最高分数的平均值。这将允许每个函数直接返回单个结果。
void returnfunc(float *low, float *average, float *high, float pointArray[],int judges)
{
float small =pointArray[0];
float large =pointArray[0];
float total;
for(int i =0;i<judges;i++){
if(small>pointArray[i]){
small = pointArray[i];
}
if(large<pointArray[i]){
large = pointArray[i];
}
}
for(int i = 0;i<judges;i++){
total += pointArray[i];
}
*average = (total-(large+small))/(judges-2); //average without largest and smallest value
*high=large;
*low=small;
}
一个nitpick:为什么可以在单个循环中完成所有操作,为什么要在两个pointArray
循环中对for
进行两次迭代?
又一个“ nitpick”:虽然small>pointArray[i]
与pointArray[i] < small
的含义相同,但我认为后者可以更好地传达代码的意图。
还有一个错误:开始添加内容之前,请不要将total
设置为零。您也可以在开始时将total
设置为pointArray[0]
,然后从1开始循环。
答案 1 :(得分:0)
构造函数显然表示不清楚该函数的输入和输出是什么。可以通过以下方式对此进行改进:
大卫·史瓦兹(David Schwarz)答复说,他认为您的教练可能期望有多种功能:一种用于平均水平,一种用于低水平,另一种用于高水平。从性能的角度看,这似乎并不吸引人,因为这意味着所有这些函数都必须在点数组上进行迭代,而一个函数可以在一次迭代中完成。正如其他人已经指出的那样:通过将两个for循环合并为一个,可以改善您的功能。