Considerando a execução do Programa C seguinte:
#include <stdio.h>
void imprimeNCaracteres(char, int);
int main() {
    int i, lado = 3;
    char resp;
    for(i=0;i<lado;i++){
        imprimeNCaracteres (' ', lado - i);
        imprimeNCaracteres ('*', 2 * i + 1);
        printf("\n");
}
for(i=0;i<lado;i++){
        imprimeNCaracteres (' ', i + 2);
        imprimeNCaracteres ('*', 2 * (lado - i) - 3);
        printf("\n");
    }
resp = getchar();
return 0; }

Passo 1

O programa define uma função
\text{void imprimeNCaracteres(char c, int vezes)}
que, para cada chamada, imprime exatamente vezes cópias do caractere c. No main, com lado=3, há dois laços for que usam essa função para desenhar um padrão de espaços e asteriscos.

Passo 2

No primeiro for(i=0; i<lado; i++):
  • imprime lado - i espaços
  • imprime 2 \cdot i + 1 asteriscos
  • faz printf("\n") para quebrar a linha
Como lado=3, para cada i calculamos:
  • i =0: espaços = 3 - 0 = 3, estrelas = 2 \cdot 0 + 1 = 1
  • i =1: espaços = 3 - 1 = 2, estrelas = 2 \cdot 1 + 1 = 3
  • i =2: espaços = 3 - 2 = 1, estrelas = 2 \cdot 2 + 1 = 5

Passo 3

No segundo for(i=0; i<lado; i++):
  • imprime i + 2 espaços
  • imprime 2 \cdot (lado - i) - 3 asteriscos
  • faz printf("\n")
Ainda com lado=3:
  • i =0: espaços = 0 + 2 = 2, estrelas = 2 \cdot (3 - 0) - 3 = 3
  • i =1: espaços = 1 + 2 = 3, estrelas = 2 \cdot (3 - 1) - 3 = 1
  • i =2: espaços = 2 + 2 = 4, estrelas = 2 \cdot (3 - 2) - 3 = -1
    Como o número de estrelas fica negativo, o for interno não imprime nada (condição k < -1 falha logo de cara), gerando apenas 4 espaços e depois a quebra de linha.

Resposta

O texto exibido na saída padrão é (onde cada linha está entre aspas apenas para evidenciar o número de espaços iniciais):
"   *"
"  ***"
" *****"
"  ***"
"   *"
"    "

Exercícios relacionados