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; }
#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
que, para cada chamada, imprime exatamente
cópias do caractere
. No , há dois laços
main
, com
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
espaços - imprime
asteriscos - faz
printf("\n")
para quebrar a linha
Como
, para cada
calculamos:
- i
: espaços , estrelas - i
: espaços , estrelas - i
: espaços , estrelas
Passo 3
No segundo
for(i=0; i<lado; i++)
:- imprime
espaços - imprime
asteriscos - faz
printf("\n")
Ainda com
:
- i
: espaços , estrelas - i
: espaços , estrelas - i
: espaços , estrelas
Como o número de estrelas fica negativo, ofor
interno não imprime nada (condiçãofalha logo de cara), gerando apenas 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):
" *"
" ***"
" *****"
" ***"
" *"
" "