因此,我必须创建一个程序,该程序创建一个数组并向其添加6个等级,然后它必须计算其他函数中的平均值,然后检查哪些等级高于平均值。 一切正常,直到此小操作开始引发如下错误: main.c:29:18:错误:二进制<(具有'float(*)(float *)'和'float')
的无效操作数#include <stdio.h>
#include <stdlib.h>
float media(float grades[]){
int sum = 0;
for(int i = 0; i < 5; i++){
sum += grades[i];
}
float media = sum/6;
printf("A media é %f", media);
return media;
}
int acimamedia(float media(float grades[]), float vetor[], int x){
for(int i = 0; i < 6;i++){
float z = vetor[i];
if(media < z){ // <<<<<<<<<<<<< [Error here]
x += 1;
}
}
return x;
}
int main(int argc, char** argv) {
float grades[6];
int acimadamedia;
printf("As notas sao: \n");
for(int i = 0; i < 6; i++){
grades[i] = rand()%100;
printf("Nota [%d] -- %f",i , grades[i]);
}
printf("Existem %d notas acima da media.", acimadamedia());
答案 0 :(得分:1)
media是一个函数声明:
float media(float grades[])
并且z是单个浮点值
所以您正在尝试将函数指针与浮点数进行比较,因此错误与它的含义完全相同:
error: invalid operands to binary < (have 'float (*)(float *)' and 'float')
此外,您对acimadamedia()的调用试图将整数视为函数。
如果我能理解您要尝试做的事情,并且对代码进行最少的更改:
#include <stdio.h>
#include <stdlib.h>
float media(float grades[]){
int sum = 0;
for(int i = 0; i < 5; i++){
sum += grades[i];
}
float media = sum/6;
printf("A media é %f\n", media);
return media;
}
int acimamedia(float media(float grades[]), float vetor[]){
int x = 0;
float avg = media(vetor);
for(int i = 0; i < 6;i++){
float z = vetor[i];
if(avg < z){
x += 1;
}
}
return x;
}
int main(int argc, char** argv) {
float grades[6];
int acimadamedia;
printf("As notas sao: \n");
for(int i = 0; i < 6; i++){
grades[i] = rand()%100;
printf("Nota [%d] -- %f\n",i , grades[i]);
}
acimadamedia = acimamedia(&media, grades);
printf("Existem %d notas acima da media.\n", acimadamedia);
return 0;
}
将显示成绩,平均成绩和高于平均水平的成绩数
通常用于传递函数的acimamedia函数指定为:
int acimamedia(float (*media)(float grades[]), float vetor[])