c语言代码运行出现逻辑错误,如何解决?

这一段代码能正常运行但是都是错误数据





#include <stdio.h>
#define N 5
int ave(int a);
int i, max;
int a, b, c, d, e, f;
int score[N];

int main () {
    printf ("输入小于30人的学生成绩\n");
    int counter1 = 0, counter2 = 0, counter3 = 0, counter4 = 0, counter5 = 0, counter6 = 0;
    for (i = 0; i < N; i++) {
        scanf("%d", &score[i]);
        if (score[i] < 0)
            break;
        else if (score[i] >= 90)
            counter1++;
        else if (score[i] >= 80)
            counter2++;
        else if (score[i] >= 70)
            counter3++;
        else if (score[i] >= 60)
            counter4++;
        else
            counter5++;
    }
    int p, o;
    f = ave(a);
    for (p = 0; p < N; p++) {
        if (score[p] > f)
            counter6++;
        else
            break;
    }
    max = score[0];
    for (o = 0; o < N; o++) {
        if (max < score[o])
            max = score[o];
        else
            break;
    }
    a = (counter1 / N);
    b = (counter2 / N);
    c = (counter3 / N);
    d = (counter4 / N);
    e = (counter5 / N);
    printf("最高分为:%d\n", max);
    printf("不及格有:%d人,所占百分比为:%d%%\n", &counter5, &e);
    printf("分数>90占百分比为:%d%%\n", &a);
    printf("90=>分数>80占百分比为:%d%%\n", &b);
    printf("80=>分数>70占百分比为:%d%%\n", &c);
    printf("70=>分数>60占百分比为:%d%%\n", &d);
    printf("在平均分数之上的有:%d人\n", &counter6);

    return 0;

}

int ave(int a) {
    int total = 0, i, b;
    for (i = 0; i < N; i++) {
        total += score[i];
    }
    b = total / N;
    return b;
}

求问该怎么修改


#include <stdio.h>
#define N 5
int ave(int a);
int i, max;
float a, b, c, d, e, f;
int score[N];
int main () {
   printf ("输入小于30人的学生成绩\n");
   int counter1 = 0, counter2 = 0, counter3 = 0, counter4 = 0, counter5 = 0, counter6 = 0;
   for (i = 0; i < N; i++) {
       scanf("%d", &score[i]);
       if (score[i] < 0)
           break;
       else if (score[i] >= 90)
           counter1++;
       else if (score[i] >= 80)
           counter2++;
       else if (score[i] >= 70)
           counter3++;
       else if (score[i] >= 60)
           counter4++;
       else
           counter5++;
   }
   int p, o;
   f = ave(a);
   for (p = 0; p < N; p++) {
       if (score[p] > f)
           counter6++;
   }
   max = score[0];
   for (o = 0; o < N; o++) {
       if (max < score[o])
           max = score[o];
   }
   a = (counter1*100.0 / N);
   b = (counter2*100.0 / N);
   c = (counter3*100.0 / N);
   d = (counter4*100.0 / N);
   e = (counter5*100.0 / N);
   printf("最高分为:%d\n", max);
   printf("不及格有:%d人,所占百分比为:%.2f%%\n", counter5, e);
   printf("分数>90占百分比为:%.2f%%\n", a);
   printf("90=>分数>80占百分比为:%.2f%%\n", b);
   printf("80=>分数>70占百分比为:%.2f%%\n", c);
   printf("70=>分数>60占百分比为:%.2f%%\n", d);
   printf("在平均分数之上的有:%d人\n", counter6);
   return 0;
}
int ave(int a) {
   int total = 0, i;
   float b;
   for (i = 0; i < N; i++) {
       total += score[i];
   }
   b = total*1.00 / N;
   return b;
}

你这代码写得问题稍微有点多啊兄弟,我大概改了一下