Passar por números claramente é um trabalho para um loop. E selecionar o que imprimir é um assunto da execução condicional. Lembre-se que o truque de usar o operador restante %
para checar se um número é divisível por outro número (tem resto zero).
A segunda versão do programa pode ser resolvida de forma simples (apenas adicionando outro "ramo" que precisamente testa a condição dada), ou de forma mais inteligente (construindo uma cadeia de caracteres contendo a palavra para saída, e imprimindo esta palavra ou o número, se não houver palavra, potencialmente fazendo uso do elegante operador ||
).