Desenvolva um programa em C que realize as seguintes operações:
- Crie um arquivo chamado numeros.txt e escreva nele 10 números inteiros fornecidos pelo usuário. Cada número deve ser escrito em uma nova linha.
- Após escrever os números no arquivo, feche o arquivo.
- Reabra o arquivo numeros.txt para leitura e leia os números armazenados, salvando-os em um vetor unidimensional de inteiros.
- Crie uma função chamada calculaMedia que receba como parâmetros:
- O vetor de inteiros (passado por referência).
- O tamanho do vetor (passado por valor).
Essa função deve calcular e retornar a média dos elementos do vetor.
- Exiba no console os números lidos do arquivo, o conteúdo do vetor e a média calculada pela função.
Requisitos da Questão
- O programa deve abrir o arquivo duas vezes (uma para escrita e outra para leitura).
- O vetor deve ser usado para armazenar os números lidos.
- A função calculaMedia deve ser implementada com passagem por valor para o tamanho do vetor.
Essa função deve calcular e retornar a média dos elementos do vetor.
Requisitos da Questão
Passo 1
Beleza, então o enunciado pede um programinha em C que:
- Abra um arquivo chamado numeros.txt e escreva 10 números inteiros (cada um em uma linha).
- Feche o arquivo.
- Reabra o mesmo arquivo, leia esses 10 números e guarde num vetor de inteiros.
- Crie uma função
calculaMedia
que receba o vetor (por referência) e o tamanho (por valor) e devolva a média. - Por fim, exiba no console os números lidos e a média calculada.
Conteúdo que vamos usar:
- Manipulação de arquivos em C (
FILE *
,fopen
,fprintf
,fscanf
,fclose
). - Vetores (arrays) e laços
for
. - Funções com passagem de parâmetro por referência (o vetor) e por valor (o tamanho).
- Cálculo de média:
.
Passo 2
Primeiro, a gente abre o arquivo em modo de escrita:
FILE *arquivo = fopen("numeros.txt", "w");
if (arquivo == NULL) {
printf("Erro ao abrir o arquivo para escrita.\n");
return 1;
}
Aqui usamos
fopen
com "w"
pra criar/limpar o arquivo. Se der NULL
, deu ruim.Depois, lemos 10 números do usuário num laço e escrevemos cada um em uma linha com
fprintf
:for (int i = 0; i < 10; i++) {
int num;
printf("Digite o %dº número inteiro: ", i + 1);
scanf("%d", &num);
fprintf(arquivo, "%d\n", num);
}
fclose(arquivo);
Fechamos com
fclose
pra garantir que tudo foi salvo.Passo 3
Agora reabrimos o arquivo em modo leitura e criamos o vetor pra guardar os valores:
arquivo = fopen("numeros.txt", "r");
if (arquivo == NULL) {
printf("Erro ao abrir o arquivo para leitura.\n");
return 1;
}
int vetor[10];
for (int i = 0; i < 10; i++) {
fscanf(arquivo, "%d", &vetor[i]);
}
fclose(arquivo);
Aqui
fscanf
lê cada linha e armazena em vetor[i]
.Passo 4
Vamos criar a função
calculaMedia
. A ideia é somar todos os elementos e dividir pelo número total. Em fórmula:Em código:
double calculaMedia(int *v, int n) {
int soma = 0;
for (int i = 0; i < n; i++) {
soma += v[i];
}
return (double)soma / n;
}
- Recebemos
int *v
(vetor por referência) eint n
(tamanho por valor). - Somamos tudo e retornamos a divisão convertida pra
double
.
Passo 5
No
main
, depois de ler o vetor, chamamos a função e mostramos os resultados:double media = calculaMedia(vetor, 10);
printf("\nNúmeros lidos do arquivo:\n");
for (int i = 0; i < 10; i++) {
printf("%d\n", vetor[i]);
}
printf("Média: %.2f\n", media);
Isso imprime cada número e logo em seguida a média com duas casas decimais.
Resposta
#include <stdio.h>
double calculaMedia(int *v, int n) {
int soma = 0;
for (int i = 0; i < n; i++) {
soma += v[i];
}
return (double)soma / n;
}
int main() {
FILE *arquivo = fopen("numeros.txt", "w");
if (arquivo == NULL) {
printf("Erro ao abrir o arquivo para escrita.\n");
return 1;
}
for (int i = 0; i < 10; i++) {
int num;
printf("Digite o %dº número inteiro: ", i + 1);
scanf("%d", &num);
fprintf(arquivo, "%d\n", num);
}
fclose(arquivo);
arquivo = fopen("numeros.txt", "r");
if (arquivo == NULL) {
printf("Erro ao abrir o arquivo para leitura.\n");
return 1;
}
int vetor[10];
for (int i = 0; i < 10; i++) {
fscanf(arquivo, "%d", &vetor[i]);
}
fclose(arquivo);
double media = calculaMedia(vetor, 10);
printf("\nNúmeros lidos do arquivo:\n");
for (int i = 0; i < 10; i++) {
printf("%d\n", vetor[i]);
}
printf("Média: %.2f\n", media);
return 0;
}