Faça um programa que leia o nome de um aluno, a quantidade de provas realizadas por ele e suas respectivas notas. O algoritmo deve apresentar ao final o nome e a média das notas obtidas do aluno.
Obs.: Utilize a função gets para fazer leitura de strings. (2)
Obs.: Utilize a função gets para fazer leitura de strings. (2)
Passo 1
O enunciado pede que o programa:
- leia o nome de um aluno (uma string);
- leia a quantidade de provas realizadas por ele (um inteiro);
- leia as respectivas notas das provas (números, uma por prova);
- calcule a média das notas e apresente, ao final, o nome do aluno e a média calculada.
Dados que o programa deve receber:
- o nome do aluno (uma linha de texto; usar a função
getsconforme pedido); - a quantidade de provas
(um inteiro); - as
notas (valores numéricos, por exemplo ponto flutuante).
O programa deve exibir:
- o nome do aluno;
- a média das notas.
Passo 2
Roteiro do algoritmo (passo a passo lógico):
- Ler o nome do aluno usando
gets. - Ler a quantidade de provas
. - Inicializar uma variável acumuladora
(soma) com zero. - Repetir
vezes: ler uma nota e adicionar a . - Calcular a média
usando a fórmula
- Imprimir o nome do aluno e a média
.
Passo 3
Explicando a fórmula da média (para você entender e conseguir aplicar na prova):
- A média aritmética das
notas é definida por
- Aqui
é a i-ésima nota e é a quantidade total de notas. No código isso corresponde a ler cada nota e somar em uma variável acumuladora , depois dividir por .
Passo 4
Tipos de variáveis que vamos usar e por quê:
-
: buffer de caracteres (por exemplo char nome[100];) para guardar a string do aluno. O tamanhoé arbitrário mas suficiente para nomes comuns. -
: inteiro ( int) para a quantidade de provas. -
: número de ponto flutuante ( floatoudouble) para acumular a soma das notas (usarfloaté suficiente). -
: número de ponto flutuante ( float) para ler cada nota. -
: número de ponto flutuante ( float) para guardar a média calculada.
Passo 5
Sobre a função
gets (pedida no enunciado) e cuidados:gets(nome)lê uma linha inteira até o caractere de nova linha e coloca a string emnome.- Observação prática:
getsé insegura porque não impede estouro de buffer se a linha for maior que o espaço disponível. Entretanto, como o enunciado exigegets, usaremosgetsno exemplo. Na prática, prefirafgets(nome, sizeof(nome), stdin)para evitar estouro. - Para evitar problemas com
gets, garanta que o arraynomeseja grande o suficiente para os nomes esperados (por exemplo 100 caracteres).
Passo 6
Casos especiais e validações simples que vale considerar:
- Se
a divisão por não faz sentido. Podemos detectar isso e avisar o usuário ou terminar o programa. No exemplo abaixo, verifico e saio com mensagem de erro. - Assuma que o usuário irá fornecer
notas (cada uma lida por scanf("%f", ¬a)). - Formatação de saída: normalmente mostra-se a média com duas casas decimais (por exemplo
%.2f).
Passo 7
Pseudocódigo rápido antes do código real:
- Ler
nomecomgets. - Ler
ncomscanf. - Se
n <= 0então imprimir mensagem de erro e sair. S = 0- Para
ide1atén:- ler
nota S = S + nota
- ler
media = S / n- Imprimir
nomeemedia
Resposta
#include <stdio.h>
int main(void) {
char nome[100];
int n, i;
float nota, soma = 0.0f, media;
char nome[100];
int n, i;
float nota, soma = 0.0f, media;
printf("Digite o nome do aluno:\n");
gets(nome); /* Conforme pedido no enunciado (nota: gets é insegura em C moderno) */
printf("Digite a quantidade de provas:\n");
if (scanf("%d", &n) != 1) {
printf("Entrada invalida para a quantidade de provas.\n");
return 1;
}
if (n <= 0) {
printf("Quantidade de provas invalida.\n");
return 1;
}
for (i = 0; i < n; i++) {
printf("Digite a nota %d:\n", i + 1);
if (scanf("%f", ¬a) != 1) {
printf("Entrada invalida para a nota.\n");
return 1;
}
soma += nota;
}
media = soma / n;
printf("Aluno: %s\n", nome);
printf("Media: %.2f\n", media);
return 0;
}