Ir ao conteúdo
  • Cadastre-se

C Dados do aluno com a maior média


OWL

Posts recomendados

Boa tarde pessoal,

 

Estou a alguns dias pensando em como resolver a alternativa "f" do exercício abaixo:

 

Desafio:

Faça um programa em C que cadastre 3 alunos. Os dados a serem cadastrados são: nome, CPF, idade, sexo, naturalidade, mensalidade e média da disciplina Algoritmos. Após o cadastro, informe:

a)   A quantidade de alunos cadastrados (sexo masculino);

B) A média das idades das alunas cadastradas (sexo feminino);

c)   A média das mensalidades dos alunos(as) que nasceram em “BRASILIA”;

d)   A quantidade de alunas (sexo feminino) cadastradas com mais de 20 anos;

e)   A idade do aluno(a) mais novo;

f)   O nome, o CPF e o sexo do aluno(a) com maior média em Algoritmos.

 

Regras:

·         O programa não deve aceitar o cadastro do sexo inválido (aceitar apenas ‘M’ ou ‘F’);

·         O usuário não digitará a média da disciplina Algoritmos e sim 3 notas. A média deverá ser calculada, através da forma da média ponderada (1ª nota – peso 2.5, 2ª nota – peso 3.5 e 3ª nota – peso 4.0)

 

Se fosse para simplesmente calcular a média ponderada e capturar a maior media dentre os 3 alunos era tranquilo de fazer, o que estou sem a menor ideia é como faço para saber qual o aluno tirou a maior média. Como posso criar um vínculo entre a maior media e os dados do aluno para poder imprimir no final do meu programa? O que vocês me sugerem? Segue abaixo o código que fiz:

 

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

int main()
{
    //Declaração de variáveis
    float med,men,num,soma,notas[3],media = 0,soma2 = 0,media2;
    int i,idade,x,y,cont = 0,cont2 = 0,cont3 = 0,s_idade = 0,media_f,cont4 = 0,menor,nat,cont5 = 0;
    char nome[100],sexo,cpf[20];
    setlocale(LC_ALL,"portuguese");

    for(i = 1; i <= 1; i++)
    {
        printf("\nInforme seu nome: ");
        gets(nome);
        fflush(stdin);
        printf("\nInforme o número do seu CPF: ");
        gets(cpf);
        fflush(stdin);
        printf("\nInforme sua idade: ");
        scanf("%d",&idade);
        fflush(stdin);
        if(i == 1)
            menor = idade;
        else{
            if(idade < menor)
                menor = idade;
        }
        //Validação do sexo
        do{
            printf("\n- M = MASCULINO\n");
            printf("- F = FEMININO\n");
            printf("\nSelecione uma das opções acima: ");
            sexo = getchar();
            fflush(stdin);
            if(sexo == 'M' || sexo == 'F')
                x = 0;
            else{
                printf("\nOpção inválida!\n");
                x++;
            }
            if(sexo == 'M') //Capturando pessoas do sexo masculino
                cont++;
            else{
                cont2++;
                s_idade = s_idade + idade; //Dados para média de idade do sexo feminino
            }
            if(sexo == 'F' && idade > 20)
                cont4++;
         }while(x != 0);
        printf("\nInforme o valor referente a mensalidade: ");
        scanf("%f",&men);
        fflush(stdin);
        //Validação da naturalidade
        do{
            printf("\n1 - BRASÍLIA\n");
            printf("2 - OUTRO\n");
            printf("\nInforme sua naturalidade: ");
            scanf("%d",&nat);
            if(nat == 1){
                cont5++;
                soma2 = soma2 + men;
            }
            if(nat > 2){
                printf("\nOPÇÃO INVÁLIDA!");
            }
        }while(nat > 2);
        //Cadastro e validação da nota
        for(y = 0 ; y <= 2; y++){
            do{
                printf("\nInforme a nota de 1-10: ");
                scanf("%f",&notas[y]);
                fflush(stdin);
                if(notas[y] >= 1 && notas[y] <=10)
                    cont3++;
                else
                    printf("\nNota Inválida!");
            }while(notas[y] <1 || notas[y] > 10);
        }
        system("cls");
    }

//RESULTADOS**********************************************************************************************************************/
    printf("\na)A quantidade de alunos cadastrados (sexo masculino): %d",cont);
    if(cont2 == 0)
        printf("\nb)A média das idades das alunas cadastradas (sexo feminino): Não informado dados para cálculo!");
    else{
        media_f = s_idade / cont2; //Média das idades do sexo feminino
        printf("\nb)A média das idades das alunas cadastradas (sexo feminino): %d",media_f);
    }
    if(cont5 == 0)
        printf("\nc)A média das mensalidades dos alunos(as) que nasceram em BRASILIA: Não foram inseridos dados para cálculo!");
    else{
        media2 = soma2 / cont5;
        printf("\nc)A média das mensalidades dos alunos(as) que nasceram em BRASILIA: %.2f",media2);
    }
    printf("\nd)A quantidade de alunas (sexo feminino) cadastradas com mais de 20 anos: %d",cont4);
    printf("\ne)A idade do aluno(a) mais novo: %d",menor);
    //printf("\nf)O aluno(a)  %s, o CPF: %s e o sexo do aluno(a) %c, obteve maior média em Algoritmos:",nome,cpf,sexo);
    return(0);
}

 

Gostaria também da opinião/críticas de vocês quanto ao meu código, como indentação, estruturas utilizadas e etc. E sugestões de como posso estar melhorando, sou iniciante.

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

@OWL    para conseguir vincular as medias e os alunos o melhor é usar vetor  para os nomes use vetor de char e para as notas use vetor de float ou ainda melhor seria usar struct  e então vai cadastrando os alunos e as notas e incrementa o contador, para fazer outro cadastro,   a identação está boa , as variáveis eu prefiro colocar antes da main para que elas sejam do tipo global , para poder ser acessadas em qualquer parte do programa .

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

@devair1010  reescrevi o programa. Utilizei vetores para nome e CPF de cada aluno, um vetor para receber o sexo e outro para receber as médias e ao final fiz as comparações das médias utilizando a estrutura if. Dessa maneira deu certo, valeu pelas sugestões. Meu código reescrito ficou assim:

 

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

int main()
{
    float media1,media2,medias[4],notas1[4],notas2[4],notas3[4];
    int i,idade,naturalidade,cont1 = 0,cont2 = 0,cont3 = 0,cont4 = 0,soma1 = 0,soma2 = 0,soma3 = 0,mensalidade,menor = 0,y;
    char nome1[100],nome2[100],nome3[100],cpf1[20],cpf2[20],cpf3[20],sexo[4];
    setlocale(LC_ALL,"portuguese");
    for(i=1; i<=3; i++)
    {
        if(i==1) //Cadastro primeiro aluno
        {
            printf("\n\t =====CADASTRO ALUNO %d=====\n\nInforme seu nome: ",i);
            gets(nome1);
            printf("\nCPF: ");
            gets(cpf1);
            printf("\nM - MASCULINO OU F PARA FEMININO\nSEXO: ");
            sexo[i] = getchar();
            fflush(stdin);
        }
        else if(i==2) //Cadastro segundo aluno
        {
            printf("\n\t =====CADASTRO ALUNO %d=====\n\nInforme seu nome: ",i);
            gets(nome2);
            printf("\nCPF: ");
            gets(cpf2);
            printf("\nM - MASCULINO OU F PARA FEMININO\nSEXO: ");
            sexo[i] = getchar();
            fflush(stdin);

        }
        else if(i==3) //Cadastro terceiro aluno
        {
            printf("\n\t =====CADASTRO ALUNO %d=====\n\nInforme seu nome: ",i);
            gets(nome3);
            printf("\nCPF: ");
            gets(cpf3);
            printf("\nM - MASCULINO OU F PARA FEMININO\nSEXO: ");
            sexo[i] = getchar();
            fflush(stdin);
        }
        while(sexo[i] != 'M' && sexo[i] != 'F')
        {
            printf("\nOPÇÃO INVÁLIDA!");
            printf("\nM - MASCULINO OU F PARA FEMININO\nSEXO: ");
            sexo[i] = getchar();
            fflush(stdin);

        }
        printf("\nIDADE: ");
        scanf("%d",&idade);
        fflush(stdin);
        printf("\n1 - BRASÍLIA\n2 - OUTRO\nNATURALIDADE: ");
        scanf("%d",&naturalidade);
        fflush(stdin);
        while(naturalidade != 1 && naturalidade != 2)
        {
            printf("\nOPÇÃO INVÁLIDA!");
            printf("\n1 - BRASÍLIA\n2 - OUTRO\nNATURALIDADE: ");
            scanf("%d",&naturalidade);
            fflush(stdin);
        }
        printf("\nVALOR DA MENSALIDADE: ");
        scanf("%d",&mensalidade);
        fflush(stdin);
        printf("\n\tNotas da disciplina de algoritmos\n");
        if(i==1) //Notas do primeiro aluno
        {
            for(y=1; y<=3; y++)
            {
                do
                {
                    printf("\nNOTA %d: ",y);
                    scanf("%f",&notas1[y]);
                    fflush(stdin);
                    if(notas1[y]<1 || notas1[y]>10)
                        printf("\nNOTA INVÁLIDA!");
                }while(notas1[y]<1 || notas1[y]>10);
            }
            medias[i] = ((notas1[1]*2.5) + (notas1[2]*3.5) + (notas1[3]*4)) / 3;
        }

        if(i==2) //Notas do segundo aluno
        {
            for(y=1; y<=3; y++)
            {
                do
                {
                    printf("\nNOTA %d: ",y);
                    scanf("%f",&notas2[y]);
                    fflush(stdin);
                    if(notas2[y]<1 || notas2[y]>10)
                        printf("\nNOTA INVÁLIDA!");
                }while(notas2[y]<1 || notas2[y]>10);
            }
            medias[i] = ((notas2[1]*2.5) + (notas2[2]*3.5) + (notas2[3]*4)) / 3;
        }

        if(i==3) //Notas do terceiro aluno
        {
            for(y=1; y<=3; y++)
            {
                do
                {
                    printf("\nNOTA %d: ",y);
                    scanf("%f",&notas3[y]);
                    fflush(stdin);
                    if(notas3[y]<1 || notas3[y]>10)
                        printf("\nNOTA INVÁLIDA!");
                }while(notas3[y]<1 || notas3[y]>10);
            }
            medias[i] = ((notas3[1]*2.5) + (notas3[2]*3.5) + (notas3[3]*4)) / 3;
        }

        if(sexo[i] == 'M') //Questão 'a'
            cont1++;
        else if(sexo[i] == 'F') //Questão 'b'
        {
            cont2++;
            soma1 = soma1 + idade;
        }

        if(naturalidade == 1) // Questão 'c'
        {
            cont3++;
            soma2 = soma2 + mensalidade;
        }

        if(sexo[i] == 'F' && idade >20) //Questão 'd'
            cont4++;

        if(i == 1) //Questão 'e'
            menor = idade;
        else if(idade < menor)
            menor = idade;

        system("cls");
    }

    //a)
    if(cont1 == 0)
        printf("\na) A quantidade de alunos cadastrados (sexo masculino): Não foram cadastrados alunos do sexo MASCULINO.");
    else
        printf("\na) A quantidade de alunos cadastrados (sexo masculino): %d",cont1);
    //b)
    if(cont2 == 0)
        printf("\nb) A média das idades das alunas cadastradas (sexo feminino): Não foram cadastradas alunos do sexo FEMININO.");
    else
    {
        media1 = soma1 / cont2;
        printf("\nb) A média das idades das alunas cadastradas (sexo feminino): %.2f",media1);
    }
    //c)
    media2 = soma2 / cont3;
    printf("\nc) A média das mensalidades dos alunos(as) que nasceram em “BRASILIA”: %.2f",media2);
    //d)
    if(cont4 == 0)
        printf("\nd) A quantidade de alunas (sexo feminino) cadastradas com mais de 20 anos: Não foram informados dados para cadastro.");
    else
        printf("\nd) A quantidade de alunas (sexo feminino) cadastradas com mais de 20 anos: %d",cont4);
    //e)
    printf("\ne) A idade do aluno(a) mais novo: %d",menor);
    //f)
    if(medias[1] > medias[2] && medias[1] > medias[3])
        printf("\nf) O aluno %s, CPF %s, sexo %c, obteve a maior média em algoritmos.\n",nome1,cpf1,sexo[1]);
    else
    {
        if(medias[2] > medias[1] && medias[2] > medias[3])
        {
            printf("\nf) O aluno %s, CPF %s, sexo %c, obteve a maior média em algoritmos.\n",nome2,cpf2,sexo[2]);
        }
        else if(medias[3] > medias[1] && medias[3] > medias[2])
        {
            printf("\nf) O aluno %s, CPF %s, sexo %c, obteve a maior média em algoritmos.\n",nome3,cpf3,sexo[3]);
        }

    }

    return(0);
}

 

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

@OWL    seu código ficou bom, mas notei que você repetiu algumas partes do código várias vezes e isso fez o código ficar bem longo, uma forma de reduzir o tamanho dele seria usar apenas um loop de repetição que tenha como sair dele a qualquer momento, como o do / while, você coloca um contador para informar a posição no vetor e faz os cadastros e pega as notas usando esse contador como referencia, e depois que fizer os cadastros pergunta se quer continuar s/n se sim então repete o loop se não então passa,  e ali na hora de pegar a naturalidade você repetiu o mesmo código, o que não precisa, você pode colocar apenas um código dentro do loop while .

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!