Store values in arrays

3

I'm using codeblocks, I'm a beginner in programming, starting with C, because of college.

The error is this: In the snippet of the code where it stores the value of the student average, only stores the correct value of the average of the first student, the means of the following students the algorithm does not average correctly, ie, initially it calculates the average, from the second student it does not store the correct value.

#include <stdio.h>
#include <strings.h>
#include <stdlib.h>

struct aluno{
    char nome[50];
    float nota[6];
    float media;
};

main()
{
    int i, j;
    float soma, troca;
    char classificado[10];
    soma = 0;

    struct aluno ficha[6];
    // Entrada de dados
    for (i=1; i<6; i++){
    printf("\n Digite o nome do aluno: ");
    scanf("%s", &ficha[i].nome);
    printf("\n Nome: %s", ficha[i].nome);
        for (j=1; j<5; j++){
            printf("\n Informe a nota: ",j);
            scanf("%f", &ficha[i].nota[j]);
            soma =  soma + ficha[i].nota[j];
        }
        ficha[i].media = soma/4;
        printf("\n A média do  aluno é: %f",ficha[i].media);


    }
    // Reordernação de vetor para crescente
     for(i=0; i<5; i++){
        for(j=i+1; j<6; j++){
            if(ficha[i].media > ficha[j].media){
                troca = ficha[i].media;
                ficha[i].media = ficha[j].media;
                ficha[i].media = ficha[j].media;
                ficha[j].media = troca;

            }// if
        }
    }




    for(i=1; i<6; i++){
    printf("\n Os nomes dos alunos são: %s",ficha[i].nome);
    }
    // Saída de dados
    for(i=1; i<6; i++){
    printf("\n A média do  aluno é: %2f",ficha[i].media);
    }



}

After compiled

    
asked by anonymous 12.07.2018 / 12:46

1 answer

0

Codeblocks is a development environment, in which it is supported by many compilers.

Evaluating your code:

#include <stdio.h>
#include <strings.h>
#include <stdlib.h>

struct aluno{
    char nome[50];
    float nota[6];
    float media;
};

main()
{
    int i, j;
    float soma, troca;
    char classificado[10];
    soma = 0;

    struct aluno ficha[6];
    // Entrada de dados
    for (i=1; i<6; i++){
    printf("\n Digite o nome do aluno: ");
    scanf("%s", &ficha[i].nome);
    printf("\n Nome: %s", ficha[i].nome);
        for (j=1; j<5; j++){
            printf("\n Informe a nota: ",j);
            scanf("%f", &ficha[i].nota[j]);
            soma =  soma + ficha[i].nota[j];
        }
        ficha[i].media = soma/4;
        printf("\n A média do  aluno é: %f",ficha[i].media);


    }
    // Reordernação de vetor para crescente
     for(i=0; i<5; i++){
        for(j=i+1; j<6; j++){
            if(ficha[i].media > ficha[j].media){
                troca = ficha[i].media;
                ficha[i].media = ficha[j].media;
                ficha[i].media = ficha[j].media;
                ficha[j].media = troca;

            }// if
        }
    }




    for(i=1; i<6; i++){
    printf("\n Os nomes dos alunos são: %s",ficha[i].nome);
    }
    // Saída de dados
    for(i=1; i<6; i++){
    printf("\n A média do  aluno é: %2f",ficha[i].media);
    }



}

I noticed that the soma=0 could be within the first for zeroing the grade for each new student;

I also saw that the last two loops of repeats can become one, for example:

for(i=1; i<6; i++){
    printf("\n Os nomes dos alunos são: %s",ficha[i].nome);
    printf("\n A média do  aluno é: %2f",ficha[i].media);
    }
    
19.07.2018 / 01:53