Desenvolva um programa em C que realize as seguintes operações:
  1. 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.
  2. Após escrever os números no arquivo, feche o arquivo.
  3. Reabra o arquivo numeros.txt para leitura e leia os números armazenados, salvando-os em um vetor unidimensional de inteiros.
  4. 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.
  1. 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.

Passo 1

Beleza, então o enunciado pede um programinha em C que:
  1. Abra um arquivo chamado numeros.txt e escreva 10 números inteiros (cada um em uma linha).
  2. Feche o arquivo.
  3. Reabra o mesmo arquivo, leia esses 10 números e guarde num vetor de inteiros.
  4. Crie uma função calculaMedia que receba o vetor (por referência) e o tamanho (por valor) e devolva a média.
  5. 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:
barx = 1nsumi=0^n-1 xi
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) e int 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;
}

Exercícios relacionados