Ir ao conteúdo
  • Cadastre-se

estrutura


Posts recomendados

EXERCICIO) Usar as informações(nome, sexo, matricula, 4 notas, ano de nascimento) (que já estão no programa) para:

ler e armazenar as informações para os todos alunos;

calcular a média das notas das provas de cada aluno;

mostrar o nome dos alunos reprovados (para ser aprovado o aluno necessita de média igual ou maior que 5.0);

mostrar os nomes dos alunos com a maior e menor média.

 

É em C, não sei o que está errado na hora de ler os nomes e na lista de reprovados

#include <stdio.h>
#include <string.h>
#define MAX 3
struct vetor
{
  char nome[MAX], sexo, n_matricula [9];
  int ano_nasc;
  float nota1, nota2, nota3, nota4;
};
void leitura_alunos (struct vetor CAD[MAX])
{
    int i;
    char nMaior[MAX], nMenor[MAX];
    float media, Mmenor=300, Mmaior=0;
    for (i=0;i<MAX;i++)
    {
        printf ("Insira o numero da matricula: ");
        fflush (stdin);
        gets (CAD[i].n_matricula);
        printf ("Digite o nome do aluno: ");
        fflush (stdin);
        gets (CAD[i].nome);
        printf ("Digite o sexo, 'M' para masc. e 'F' para fem.: ");
        scanf ("%c", &CAD[i].sexo);
        printf ("Digite o ano de nascimento: ");
        scanf ("%d", &CAD[i].ano_nasc);
        printf ("Insira aqui a nota da primeira prova: ");
        scanf ("%f", &CAD[i].nota1);
        printf ("Insira aqui a nota da segunda prova: ");
        scanf ("%f", &CAD[i].nota2);
        printf ("Insira aqui a nota da terceira prova: ");
        scanf ("%f", &CAD[i].nota3);
        printf ("Insira aqui a nota da quarta prova: ");
        scanf ("%f", &CAD[i].nota4);
        media = (CAD[i].nota1 + CAD[i].nota2 + CAD[i].nota3 + CAD[i].nota4)/4;
        printf ("Media = %.2f\n", media);
         if (media>=5)
            printf ("APROVADO!\n");
        else
            printf ("REPROVADO!\n");
        printf ("\n");
        if (media>Mmaior)
        {
            Mmaior=media;
            strcpy (nMaior,CAD[i].nome);
        }
        else if (media<Mmenor)
        {
            Mmenor=media;
            strcpy (nMenor,CAD[i].nome);
        }
    }
    printf ("Aluno com a maior media = %s\nAluno com a menor media = %s\n\n", nMaior, nMenor);
}
void lista_reprovados (struct vetor CAD[MAX])
{
    int i;
    float media;
    printf ("ALUNOS REPROVADOS:\n\n");
    for (i=0;i<MAX;i++)
    {
      if (media<5)
        printf ("%s\n", CAD[i].nome);
      else
        printf ("Nenhum aluno foi reprovado!");
    }
}
main ()
{
    struct vetor CAD[MAX];
    int i;
    leitura_alunos (CAD);
    lista_reprovados (CAD);
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@eyjafjallajokull_    o que vi de errado é que estava juntando o nome com o sexo, e isso é por que você declarou a variável nome do tipo char com tamanho estipulado por MAX que vale 3 então o nome poderia ter apenas 3 caracteres e não sei bem por que mas ele juntava as duas variáveis, então para corrigir coloque nome com tamanho de 10 e sexo com tamanho 3.  e lá na função lista_reprovados o else estava causando um erro também,  então modifiquei isso colocando uma flag para imprimir o resultado certo.

veja seu código com algumas modificações :

#include <stdio.h>
#include <string.h>
#define MAX 3
struct vetor{
  char nome[10], sexo[3], n_matricula [9];
  int ano_nasc;
  float nota1, nota2, nota3, nota4;
};
void leitura_alunos (struct vetor CAD[MAX]){
    int i;
    char nMaior[MAX], nMenor[MAX];
    float media, Mmenor=300, Mmaior=0;
    for (i=0;i<MAX;i++){
        printf ("Insira o numero da matricula: ");
        fflush (stdin);
        gets (CAD[i].n_matricula);
        printf ("Digite o nome do aluno: ");
        fflush (stdin);
        gets (CAD[i].nome);
        printf ("Digite o sexo, 'M' para masc. e 'F' para fem.: ");
        scanf ("%c", &CAD[i].sexo);
        printf ("Digite o ano de nascimento: ");
        scanf ("%d", &CAD[i].ano_nasc);
        printf ("Insira aqui a nota da primeira prova: ");
        scanf ("%f", &CAD[i].nota1);
        printf ("Insira aqui a nota da segunda prova: ");
        scanf ("%f", &CAD[i].nota2);
        printf ("Insira aqui a nota da terceira prova: ");
        scanf ("%f", &CAD[i].nota3);
        printf ("Insira aqui a nota da quarta prova: ");
        scanf ("%f", &CAD[i].nota4);
        media = (CAD[i].nota1 + CAD[i].nota2 + CAD[i].nota3 + CAD[i].nota4)/4;
        printf ("Media = %.2f\n", media);
         if (media>=5)
            printf ("APROVADO!\n");
        else
            printf ("REPROVADO!\n");
        printf ("\n");
        if (media>Mmaior){
            Mmaior=media;
            strcpy (nMaior,CAD[i].nome);
        }
        else if (media<Mmenor){
            Mmenor=media;
            strcpy (nMenor,CAD[i].nome);
        }
    }
    printf ("Aluno com a maior media = %s\nAluno com a menor media = %s\n\n", nMaior, nMenor);
}
void lista_reprovados (struct vetor CAD[MAX]){
    int i,flag;
    float media;
    printf ("ALUNOS REPROVADOS:\n\n");
    flag=0;
    for (i=0;i<MAX;i++){
      media = (CAD[i].nota1 + CAD[i].nota2 + CAD[i].nota3 + CAD[i].nota4)/4;
      if (media<5){
        printf("%s\n", CAD[i].nome);
        flag=1;
      }
    }
    if(flag==0){printf ("Nenhum aluno foi reprovado!");}
}
main (){
    struct vetor CAD[MAX];
    int i;
    leitura_alunos (CAD);
    lista_reprovados (CAD);
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@devair1010  Eu consegui fazer de uma outra maneira sem usar o flag (pois sou iniciante e não sei o que  ele faz exatamente); eu não tinha colocado na função lista_reprovados a média e isso poderia estar dando erro! E sobre o nome[MAX] você estava certo, por isso não mostrava o nome todo, o sexo não precisava colocar [3], e outro erro era no nMaior e nMenor que também estavam com o [MAX] invés de um número mais alto! Obrigado e vou deixar aqui o código para futuras dúvidas que possam surgir!

#include <stdio.h>
#include <string.h>
#define MAX 3
struct vetor
{
  char nome[50], sexo, n_matricula [9];
  int ano_nasc;
  float nota1, nota2, nota3, nota4;
};
void leitura_alunos (struct vetor CAD[MAX])
{
    int i;
    char nMaior[50], nMenor[50];
    float media, Mmenor=300, Mmaior=0;
    for (i=0;i<MAX;i++)
    {
        printf ("Insira o numero da matricula: ");
        fflush (stdin);
        gets (CAD[i].n_matricula);
        printf ("Digite o nome do aluno: ");
        fflush (stdin);
        gets (CAD[i].nome);
        printf ("Digite o sexo, 'M' para masc. e 'F' para fem.: ");
        scanf ("%c", &CAD[i].sexo);
        printf ("Digite o ano de nascimento: ");
        scanf ("%d", &CAD[i].ano_nasc);
        printf ("Insira aqui a nota da primeira prova: ");
        scanf ("%f", &CAD[i].nota1);
        printf ("Insira aqui a nota da segunda prova: ");
        scanf ("%f", &CAD[i].nota2);
        printf ("Insira aqui a nota da terceira prova: ");
        scanf ("%f", &CAD[i].nota3);
        printf ("Insira aqui a nota da quarta prova: ");
        scanf ("%f", &CAD[i].nota4);
        media = (CAD[i].nota1 + CAD[i].nota2 + CAD[i].nota3 + CAD[i].nota4)/4;
        printf ("Media = %.2f\n", media);
         if (media>=5)
            printf ("APROVADO!\n");
        else
            printf ("REPROVADO!\n");
        printf ("\n");
        if (media>Mmaior)
        {
            Mmaior=media;
            strcpy (nMaior,CAD[i].nome);
        }
        else if (media<Mmenor)
        {
            Mmenor=media;
            strcpy (nMenor,CAD[i].nome);
        }
    }
    printf ("A maior media foi do(a) %s: %.2f\nA menor media foi do(a) %s: %.2f\n\n", nMaior, Mmaior, nMenor, Mmenor);
}
void lista_reprovados (struct vetor CAD[MAX])
{
    int i;
    float media;
    printf ("ALUNOS REPROVADOS:\n\n");
    for (i=0;i<MAX;i++)
    {
        media = (CAD[i].nota1 + CAD[i].nota2 + CAD[i].nota3 + CAD[i].nota4)/4;
        if (media<5)
           printf ("%s\n", CAD[i].nome);
    }
}
main ()
{
    struct vetor CAD[MAX];
    int i;
    leitura_alunos (CAD);
    lista_reprovados (CAD);
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@eyjafjallajokull_    a flag é apenas uma variável comum, apenas que eu inicializei ela com o valor zero antes de testar se algum aluno ficou reprovado, então se algum aluno tiver ficado reprovado a flag passa a ter o valor hum assim saberei que teve aluno reprovado, caso no final dos testes a flag continuar com valor zero é por que não teve nenhum aluno reprovado e aí escreve aquela mensagem informando que nenhum aluno foi reprovado.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

4 horas atrás, devair1010 disse:

@eyjafjallajokull_    a flag é apenas uma variável comum, apenas que eu inicializei ela com o valor zero antes de testar se algum aluno ficou reprovado, então se algum aluno tiver ficado reprovado a flag passa a ter o valor hum assim saberei que teve aluno reprovado, caso no final dos testes a flag continuar com valor zero é por que não teve nenhum aluno reprovado e aí escreve aquela mensagem informando que nenhum aluno foi reprovado.

Ahhhh.... Entendi! Agora faz sentido rs obrigado!

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!