Caso a questão peça para fazer uma função, a função não pode conter, dentro dela, comandos de interação com usuário, como input, disp, scanf ou mprintf. Se algum comando de interação com usuário existir dentro da função, a nota será automaticamente o,o. Além disso, para essas questões que pedem para fazer uma função, é permitido fazer várias funções, desde que exista uma função principal, ou seja, que combine todas as outras. Nessas questões, todo o código-fonte que existir fora das funções será ignorado.
É necessário utilizar o comando for para resolver os problemas descritos. É permitido utilizar os comandos continue e break. Não é permitido usar o comando while. O objetivo disso é que você perceba a diferença quando esses comandos passarem a ser utilizados, se tornam mais fácil ou mais difícil a resolução do problema.
Escreva um programa que leia o valor inicial a0 e a razão r de uma progressão aritmética, bem como uma quantidade n de elementos, e exiba os valores de a0 até an dessa progressão.

Passo 1

Beleza, a gente tem que escrever um programa em C que leia três coisas do usuário:
  1. o valor inicial da progressão aritmética, chamado de ,
  2. a razão ,
  3. a quantidade de elementos (queremos de até ).
O conteúdo da matéria é progressão aritmética (PA) e uso de laço for em C.
Para resolver precisamos:
  • Saber a fórmula geral de uma PA,
  • Montar um for que vá de 0 até n,
  • Separar a leitura de dados (em main) e a geração/exibição da PA (em uma função).

Passo 2

Teoria da PA: numa progressão aritmética, cada termo avança sempre a mesma “diferença” (razão) ak ;=; a0 + k , r .
A fórmula do k-ésimo termo é
Isso significa que, se quisermos do até o , basta variar de 0 a e aplicar essa fórmula.

Passo 3

Planejamento do código:
  1. Em main, fazemos scanf para ler , e .
  2. Criamos uma função void geraPA(double a0, double r, int n) que:
    • Usa for (int k = 0; k <= n; k++)
    • Calcula double termo = a0 + k*r;
    • printf desse termo.
  3. Chamamos geraPA(a0, r, n); em main.
  4. Não colocamos nenhum scanf ou printf dentro de geraPA além do printf dos termos.

Resposta

#include <stdio.h>

// Função que gera e exibe os termos de uma PA
// sem usar input dentro dela.
void geraPA(double a0, double r, int n) {
    for (int k = 0; k <= n; k++) {
        double termo = a0 + k * r;  // a_k = a0 + k*r
        printf("a_%d = %.2f\n", k, termo);
    }
}

int main() {
    double a0, r;
    int n;

    // Leitura dos parâmetros da PA
    printf("Digite a0, r e n: ");
    if (scanf("%lf %lf %d", &a0, &r, &n) != 3) {
        printf("Entrada inválida!\n");
        return 1;
    }

    // Chama a função principal que gera a PA
    geraPA(a0, r, n);

    return 0;
}

Exercícios relacionados