Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
eyjafjallajokull_

estrutura

Recommended Posts

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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×