Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Exerc 2 - Lista 07
- #include <stdio.h>
- #include <stdlib.h>
- #define MAX_ALUNOS 3
- #define TAM_NOME 50
- struct TipoAluno {
- char nome[TAM_NOME];
- float media;
- int faltas;
- };
- // protótipos das funções
- float solicitaNota(void);
- float calculaMedia(float nota1, float nota2, float pontos, int fal);
- void exibeAluno(struct TipoAluno aluno);
- float bonusMedia(int fal);
- void exibeTodosAlunos(struct TipoAluno turma[]);
- // programa principal com as chamadas das funções criadas
- int main(void) {
- // As variáveis criadas aqui dentro (chamadas de variáveis locais) não são
- // visíveis em outras funções. Variáveis declaradas fora de qualquer função
- // são chamadas de variáveis globais.
- // Se houver necessidade de acessar uma variável dentro de outra função
- // deve-se passa-la como argumento como acontece com: calculaMedia e exibeAluno
- struct TipoAluno alunos[5];
- float nota1, nota2, pontos, faltas;
- int i;
- for(i=0; i < MAX_ALUNOS; i++) {
- printf("\nEntre com o nome do aluno: ");
- fflush(stdin);
- gets(alunos[i].nome);
- printf("Entre com a primeira nota (0 a 10): ");
- nota1 = solicitaNota();
- printf("Entre com a segunda nota (0 a 10): ");
- nota2 = solicitaNota();
- printf("Entre com os pontos (0 a 10): ");
- pontos = solicitaNota();
- faltas = solicitaFaltas();
- alunos[i].media = calculaMedia(nota1, nota2, pontos, faltas);
- }
- exibeTodosAlunos(alunos);
- return 0;
- }
- // Funções:
- // solicita uma nota exigindo que a mesma esteja na faixa válida: 0 a 10
- float solicitaNota(void) {
- // a variável nota tem escopo local, ou seja ela só existe dentro desta função
- float nota;
- do {
- scanf("%f", ¬a);
- if(nota < 0 || nota > 10) {
- printf("Erro, valor deve ser de 0 a 10: ");
- }
- }while(nota < 0 || nota > 10);
- return nota;
- }
- // solicita uma quantidade de faltas e a retorna em seguida
- int solicitaFaltas(void) {
- int falt;
- printf("Entre com a quantidade da faltas: ");
- scanf("%d", &falt);
- return falt;
- }
- // calcula a média a partir de duas notas, pontos extras e faltas
- // não permitindo que a média ultrapasse de 10
- float calculaMedia(float nota1, float nota2, float pontos, int fal) {
- // a variável media tem escopo local, ou seja ela só existe dentro desta função
- float media = (nota1 + nota2)/2 + pontos;
- media = media + bonusMedia(fal);
- // não permite que o retorno seja maior que 10
- if(media > 10)
- return 10;
- else
- return media;
- }
- // calcula os bônus a partir da quantidade de faltas
- float bonusMedia(int fal) {
- if(fal == 0)
- return 0.5;
- else
- return 0;
- }
- // exibe os dados de uma aluno passado como argumento
- void exibeAluno(struct TipoAluno aluno) {
- printf("\n\nAluno: %s", aluno.nome);
- printf("\nMedia: %.2f", aluno.media);
- }
- // exibe todos os alunos
- void exibeTodosAlunos(struct TipoAluno turma[]) {
- int i;
- printf("\n\nExibicao dos dados:");
- for(i=0; i<MAX_ALUNOS; i++)
- exibeAluno(turma[i]);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement