Функция дает мне неправильный ответ - PullRequest
0 голосов
/ 20 июня 2020

Я новичок в C. Мне поручили запустить программу, которая вычисляет процент студентов, сдавших экзамен, на основе вводимых оценок N. Я не совсем понимаю, как работают функции. Это то, что я придумал

#include <stdio.h>
#define MAX_N 300
main()

{   
int N,grade,i;

float success(N)
{
    float sum=0.0;
    for (i=0;i<N;i++) {
        if (grade>=5) {
            sum+=1;
        }
        float success=sum/N;
        return(success);
    }
}    

printf("How many students? ");
scanf("%d",&N);
printf("Enter grades(0-10) of %d students ",N);
for (i=0;i<N;i++){
    scanf("%d",&grade);
    
}
printf("%f percent of students have passed the exam ",success(N);
return(0);

} 

Похоже, это должно работать, но я всегда получаю неправильный результат. Он застревает на отображении 0,2 или 0,25 для любого ввода, который я даю. Может кто-нибудь помочь?

Ответы [ 4 ]

1 голос
/ 20 июня 2020

Я думаю, вы берете несколько значений для оценки, а не массив для нее. grade должен быть массивом в l oop scanf ("% d", & grade [i]); должен быть реализован.

1 голос
/ 20 июня 2020

Проблема в том, что в оценках сохраняются только последние введенные данные. Сделайте оценку в виде массива, чтобы можно было сохранить все данные.

0 голосов
/ 21 июня 2020

Думаю, вам следует изучить написанный мной код. Немного плохой код. Но это может помочь.

#include <stdio.h>

int students_success(int *);

int main() {
    int n;

    printf("How many students?\n");
    scanf("%d", &n);
    printf("Enter grades(0-10) of %d students\n", n);
    int grade;
    int pass_std = 0;
    for(int i = 0; i < n; ++i) {
        scanf("%d", &grade);
        pass_std = students_success(&grade);
    }
    printf("%.2f percent of students have passed exam.\n", (double)pass_std / n);
}
int students_success(int *grade) {
    static int pass_std = 0;
    if(4 < *grade) {
        ++pass_std;
    }
    return pass_std;
}
0 голосов
/ 20 июня 2020

grade должен быть массивом из N целых чисел, чтобы каждое значение сохранялось. Вы также забыли умножить успех на 100, чтобы получить процент.

Кажется, я исправил код:

#include <stdio.h>
#define MAX_N 300
float success(int grade[],int N)

{int i;
    float sum=0.0;
    for (i=0;i<N;i++) {
        if (grade[i]>=5) {
            sum+=1;
        }

    }
    float success=sum/N;
    return(success*100);
}

int main(){
int N, i;

printf("How many students? ");
scanf("%d",&N);
int grade[N];
printf("Enter grades(0-10) of %d students ",N);
for(i=0;i<N;i++){
    scanf("%d", &grade[i]);

}
printf("%f percent of students have passed the exam ", success(grade, N));
return(0);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...