比较float和float的元素数组时出错

时间:2018-10-25 18:13:06

标签: c

因此,我必须创建一个程序,该程序创建一个数组并向其添加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());

1 个答案:

答案 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[])