Как передать массив вложенных структур функции в качестве параметра?

У меня есть 2 структуры с именами Class и Student. Я хочу рассчитать среднюю оценку студентов, обратившись к массиву Student[30] в структуре Class.

Вот мой код:

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

typedef struct Student{
  char name [20] ;
  int grade ;
  int number ;
} Student;

typedef struct Class{
  char className[20] ;
  Student Students[30] ;
} Class;  

double calculateAverageGrade(/* I want to pass the Students[30] array here */ ) {
  int i ;
  int sum = 0 ;
  for(i=0;i<3;i++) {
  }
  return sum/3 ;
}   

int main() {
  Student s1  = {"John",75,758} ;
  Student s2 = {"Jack",85,123} ;
  Student s3 = {"Lisandra",50,321} ;
  Class c1  = {'\0'} ;

  strcpy(c1.className,"Physics") ;

  c1.Students[0] = s1 ;
  c1.Students[1] = s2 ;
  c1.Students[2] = s3 ;

  calculateAverageGrade(/*needs to take Students[30] array*/);
  return 0 ;
}        

Я пробовал что-то Class Students[30] , Class.Student Students[30] подобное, но они не работали.

Привет! Опубликуйте Минимальный, полный и проверяемый пример, который показывает проблему. Это также должно показать файлы #include, которые вы используете. Трудно читать фрагменты кода с двойным или тройным интервалом или компилировать их.

Weather Vane 18.05.2019 16:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
127
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете рассчитать средний балл вот так, почти как в вашей программе. Обратите внимание, что я добавил количество студентов в вызов функции, но ваш тип Class действительно должен содержать это в любом случае, и было бы лучше передать Class в функцию, а не только содержащийся в ней массив.

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

typedef struct Student{
    char name [20];
    int grade;
    int number;
}Student;

typedef struct Class{
    char className[20];
    Student Students[30];
}Class;  

double calculateAverageGrade(Student *Students, int count) {  // pass the number of students
    int i;
    int sum = 0;
    for(i = 0; i < count; i++) {                 // don't guess the number of students
        sum += Students[i].grade;
    }
    return (double)sum / count;                  // otherwise integer division
}   

int main(void) {
    Student s1 = { "John",     75, 758 };
    Student s2 = { "Jack",     85, 123 };
    Student s3 = { "Lisandra", 50, 321 };
    Class c1 = {'\0'};
    strcpy(c1.className, "Physics");
    c1.Students[0] = s1;
    c1.Students[1] = s2;
    c1.Students[2] = s3;
    printf("The average grade in %s is %.2f\n", c1.className,
            calculateAverageGrade(c1.Students, 3));
return 0;
}     

Вывод программы:

The average grade in Physics is 70.00

Другие вопросы по теме