2016-07-06 2 views
2

Примечание: Я новичок и просто изучаю.Среднее количество баллов в C

У меня есть студенческая структура с 5 именами, их оценками, их возрастом и их оценками. Я хотел бы знать, как писать и вызывать функцию, которая будет вычислять среднее значение их оценок, а затем печатать.

#include <stdio.h> 
#include <string.h> 

typedef struct{ 
    char name[100]; 
    int age; 
    int scores[5]; 
} student; 

student grade(student st, int grade, int num) { 
    st.scores[num]=grade; 
    return st; 
} 

int main(){ 
    student s1; 
    strcpy(s1.name, "Student1"); 

    s1.age = 20; 

    //printf("Size: %d\n", sizeof(s1)); 
    printf("Name: %s\tAge: %d\n", s1.name, s1.age); 

    s1=grade(s1, 100, 0); 
    s1=grade(s1, 96, 1); 
    s1=grade(s1, 99, 2);  
    s1=grade(s1, 100, 3); 

    printf("Grade: %d\n", s1.scores[0]); 
    printf("Grade: %d\n", s1.scores[1]); 
    printf("Grade: %d\n", s1.scores[2]); 
    printf("Grade: %d\n", s1.scores[3]); 

    printf("\n"); 

    return 0; 

} 
+0

Typos: 's2 = grade (s1, 94, 0);' и следующие 3 строки должны читать 's2 = grade (s2 ...' и выравнивать строки 4 's3 ='. –

+3

добавить оценки и деления .... в чем проблема? –

+1

@WeatherVane Я просто изменил его, спасибо – user1049876

ответ

2

Вы можете создать функции, чтобы знать, в средних классах отправлено структура таким образом:

float average(student st, int no_of_grades) 
{ 
    float sum=0; 
    for(int num=0 ; num < no_of_grades ; num++) 
    { 
     sum += st.scores[num]; 
    } 

    return sum/no_of_grades; 
} 

Здесь аргументы структура и количество классов вводится для студента.


После печати всех сортов студента в main(), добавить это заявление:

printf("average of %s : %f",s1.name,average(s1,4)); //average(structure, no of grades) 

Выходные:

Name: Student1 Age: 20 
Grade: 100 
Grade: 96 
Grade: 99 
Grade: 100 
average of Student1 : 98.750000 

Предложения:

  • Не используйте int main(), вместо того, чтобы использовать int main(void) в качестве аргументов не посылаются в main() функции. Но в первом случае это int main(), любое количество аргументов может быть отправлено в функцию main().
-1

Вы можете хардкор среднего, возможно, как, например s3.scores [3]

1

Добавить новый элемент в student structure так:

typedef struct{ 
    char name[100]; 
    int age; 
    int scores[5]; 
    double average; /* new member */ 
} student; 

Определить новую функцию для вычисления среднего для студент и вернуть его обратно, например:

double calc_average(student st) 
{ 
    int i; 
    double sum = 0.0; 

    /* Calculate sum of 5 scores */ 
    for (i = 0; i < 5; i++) 
     sum = sum + st.scores[i]; 

    /* Return average */ 
    return sum/5; 
} 

Затем в main - (как только вы добавите все баллы для студента) - вы можете вызвать эту функцию, чтобы получить средний балл, как это:

student1.average = calc_average(student1); 
+3

Вам также понадобится член, говорящий * сколько * баллов.Код OP только ввел 4 из 5 возможных баллов. –

+0

Да, я тоже видел это в коде OP :). Вот почему я написал «как только вы добавите все оценки для ученика», по которому я имел в виду, что OP добавит все 5 баллов. – sps

+0

Ну, если вы добавляете новые элементы структуры, вы можете добавить 'int numscores' и удалить последний аргумент функции' grade() '. –

Смежные вопросы