Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • 0
hederw

Incremente o código do projeto para que este calcule, além da média individual de cada aluno, a média geral da turma.

Pergunta

Olá gostaria da ajuda de vocês, tenho que adicionar essas funções para esse código mas não estou tendo ideia de como fazer, se puderem me ajudar agradeço.

 

- contar quantos alunos foram processados

- acumular as médias individuais

- quando o processamento terminar, calcular a média geral dividindo-se o acumulado das médias individuais pelo total de alunos processados.


#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define bool  int

/* Esta função questiona o usuario sobre continuar ou encerrar
 * o processamento de notas de alunos
 */

bool promptRepetir() {
   printf("Novo aluno? [S|n] ");
   char c;
   c=fgetc(stdin);  // leia 1 caracter
   fflush(stdin);   // e limpe o buffer
   if( c=='s' || c=='S' || c=='\n' ) return TRUE;  // repita!
   return FALSE;   // nao repita!
}

/* Esta função calcula a média simples entre n valores x[i] 
 * Onde 0 < i < n 
 */
float mediaSimplesVetor(int n, float x[]) {
   int i;
   float media, mediaTotal;
   float soma=0.0;
   for(i=0; i<n; i++) soma=soma+x[i];  // calcule somatorio de Xi
   media=soma/n;
   mediaTotal=media/n;
   printf("%5.1f",mediaTotal);
   return media;  // retorne a media
}

/*
 * Esta função le e retorna o numero do aluno
 * Aceita apenas numeros positivos
 */
int   lerNumero() {
      int numero=0; // execute ao menos 1 iteração while()
      while( numero<1 ) {
        printf("Entre com o numero do aluno (positivo): ");
        char linha[10];         // linha para leitura dos caracteres do valor
        fgets(linha,10,stdin);  // leia a linha (entrada do usuario)
        fflush(stdin);          // limpa o buffer de leitura
        numero = atoi(linha);   // converte numero em string para int
      };
      return numero;
}

/*
 * Esta função le e retorna a nota i do aluno numAluno
 * Aceita apenas notas entre 0.0 e 10.0 inclusive
 */
float lerNota(int numAluno, int i) {
      float nota=-1.0; // execute ao menos 1 iteração while()
      while( nota<0.0 || nota>10.0 ) {
        printf("Aluno %3d, nota %02d: ",numAluno,i);
        char linha[10];         // linha para leitura dos caracteres do valor
        fgets(linha,10,stdin);  // leia a linha (entrada do usuario)
        fflush(stdin);          // limpa o buffer de leitura
        nota = atof(linha);     // converte numero em string para float
      };
      return nota;
};

/* Procedimento para processamento repetitivo de alunos */

float processaAluno() {
 
  int   numAluno;      // numero do aluno
  float notaAluno[4];  // as 4 notas do aluno
  float mediaAluno;    // media final do aluno
  
  numAluno = lerNumero();  // ler o numero do aluno
   
  int i;
  for(i=0; i<4; i++) {  // para i de 0 até n-1 faça ...
          notaAluno[i] = lerNota(numAluno, i+1);  // ler a nota i
  };
  
  mediaAluno = mediaSimplesVetor( 4, notaAluno );  // calcula a media simples das 4 notas
  printf("\n");
  printf("Media do aluno %d = %5.1f\n", numAluno, mediaAluno);
  printf("\n");    
}
     
/* Função Principal do programa */

int main(int argc, char *argv[]){
  bool repetir;  // controle do usuario
  int i, n;
  do                           // faça...
     {
    		
		processaAluno();          // processe notas de um aluno, e em seguida
        repetir=promptRepetir();  // pergunte ao usuario se quer repetir (com novo aluno)
        
     } 
     while(repetir);           // ... enquanto usuario solicitar repetição.
            
  printf("\n// Fim do programa. Bye!! //\n");
  system("PAUSE");	
  return 0;
  
};

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

0 respostas a esta questão

Recommended Posts

Até agora não há respostas para essa pergunta


×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.