quarta-feira, 29 de abril de 2015

Programação de Computadores - Solução exercício sobre estruturas

Senhores alunos:


Segue no final do post, o código fonte de uma solução para o exercício:

Criar uma estrutura para armazenar informação sobre alunos de uma disciplina:
  • Nome do aluno
  • Número de matrícula
  • Notas de três alunos
  • Média das notas

Você usará um vetor (matriz) de estruturas, em que o número de elementos é o número alunos.

Por enquanto, fazer a entrada de dados pelo teclado (veremos, mais à frente, como importá-los de um arquivo):

  • A média deve ser calculada
  • O programa deve informar os alunos aprovados (média final > = 6).
  • Mostrar na tela, também, os alunos em ordem de melhor média.
Até amanhã!

Keywords - struct, sort, C programming.


-------------------------------------------------------------------------

#include <stdio.h>
struct turma {
            char nome[20];
            char mat[7];
            unsigned short int n1, n2, n3;
            float media;
            };
int main()
{
struct turma alunos[5],temp; // turma de apenas 5 alunos
    char controle;
    int j=0,k,i;
    do {
fflush(stdin);
printf("Entre com o nome do aluno\n");
scanf("%[^\n]s",alunos[j].nome);
printf("Entre com o numero de matric. com 6 caracteres\n");
scanf("%s",alunos[j].mat);
printf("Entre com as 3 notas do aluno separadas por espaco\n");
scanf("%hu %hu %hu", &alunos[j].n1, &alunos[j].n2, &alunos[j].n3);
alunos[j].media = (alunos[j].n1 + alunos[j].n2 + alunos[j].n3)/3.0;
j++;
if(j==5)
{
printf("TURMA COMPLETA\n");
break;
}
printf("Digite <q> + <ENTER> para sair ou qquer tecla + <ENTER> para novo aluno\n");
fflush(stdin);
controle=getchar();
    } while(controle!='q'&&controle!='Q');
    //Imprime alunos com a media
printf("Alunos Aprovados\t Media\n");
for(k=0;k<j;k++)
{
if(alunos[k].media>=6)
printf("%s\t\t\t %.2f\n",alunos[k].nome,alunos[k].media);
}
//Ordenação
for(k=0;k<j;k++)
for(i=0;i<j-k-1;i++) // A cada elemento ordenado, ao executar o for interno
{ // necessito uma iteração a menos por isso "j-k"
// o menos "1" se deve ao fato de compararmos [i] com [i+1]
if(alunos[i].media<alunos[i+1].media)
{
temp = alunos[i];
alunos[i] = alunos[i+1];
alunos[i+1]=temp;
}
}
printf("\n\nAlunos\t\t\t Media\n");
for(k=0;k<j;k++)
{
        printf("%s\t\t\t %.2f\n",alunos[k].nome,alunos[k].media);
}
    return 0;
}

Nenhum comentário:

Postar um comentário