Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

Exercícios envolvendo testes e laços em C

Parabéns! Se chegou até aqui, é porque estudou bastante e persistiu em nossa apostila de C!
Esses passos iniciais em programação C são, sem dúvidas, os mais difíceis, e todos já tiveram problemas e dificuldades, inclusive todos nós da equipe do curso C Progressivo.

Antes de estudar funções, porém, você precisa fazer um treino especial, com mais uma leva de questões.

Exercícios sobre testes condicionais e laços

Para fechar mais uma seção com chave de ouro, vamos propor algumas questões para você fazer, mas não vamos dizer "faça usando isso", "faça daquele jeito" ou "aplique esse conhecimento".

Afinal, na vida real como programador C, ninguém vai te dizer como você deve fazer seu trabalho.
Você tem que usar sua criatividade, tem que pensar e desenrolar.

Essas questões, portanto, não tem apenas uma única e correta solução.
Cada programador vai ter ideias diferentes e maneiras diferentes de resolver o problema.

Pense, relembre as aulas e tente resolver da maneira mais simples, eficiente e bonita...ou simplesmente tente resolver, já será um passo importante.

Use:
Teste condicional IF ELSE
Laço WHILE
Laço FOR
Teste condicional SWITCH, com ou sem CONTINUE e BREAK
Laço DO WHILE

Fique a vontade para criar sua própria solução, da maneira que mais lhe convier.


0. Escreva um programa em C que recebe 'n' números do usuário, e recebe o número 'n' também, e determine qual destes números é o menor.






1. Escreva um programa em C que recebe um inteiro 'n' do usuário e calcula o produto dos números pares e o produtos dos números ímpares, de 1 até n.

2. Faça um programa em C que recebe um inteiro do usuário e calcula seu fatorial.
O fatorial de 'n' é dado por:
n*(n-1)*(n-2)...*3*2*1
e é representado por n!

3. Crie um aplicativo bancário em C que pede o valor do depósito inicial, o valor do investimento mensal e o número de meses que o dinheiro vai ficar rendendo na poupança.
Após isso, calcule o lucro obtido, sabendo que o juros da poupança é de 0,5%.

4. Crie um programa em C que peça um número inteiro ao usuário, e imprima a seguinte tabela::
1
2 4
3 6 9
4 8 12 16
...
5. Escreva um programa que peça um númer 'n' ao usuário, e que gere um novo n de acordo com a seguinte regra:

• se n é par, n = n / 2
• se n é impar, n = 3 * n + 1
• imprime n
• O programa deve parar quando x tiver o valor igual a 1. Por exemplo, para n = 13, a saída será:
40 -> 20 -> 10 -> 5 -> 16 -> ˜8 -> 4 -> 2 -> 1



Desafio dos números de FIbonacci
Crie um aplicativo em C que peça um número inteiro ao usuário - 'n' - e exiba o n-ésimo termo da série de Fibonacci, sabendo que o primeiro termo é 0, o segundo é 1 e o próximo número é sempre a soma dos dois anteriores.

Desafio do diamante de asteriscos:
Escreva um aplicativo em C que peça um número inteiro ímpar ao usuário e desenhe um diamante no seguinte formato:

    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *


Nesse caso, o número é 9, pois há 9 colunas e 9 asteriscos na linha central.

Super hiper mega desafio de Fibonacci
Fazer o desafio dos números de FIbonacci, mostrador anteriormente, usando apenas duas variáveis.



Soluções e códigos comentados das questões

26 comentários:

Anônimo disse...

Eu não entendi a parte "e exiba o n-ésimo termo da série de Fibonacci," do desafio dos números Fibonacci. Se puder me esclarecer agradeço.
O site é muito bom, tudo muito bem explicado, objetivo e sem perde tempo com coisas desnecessárias, Parabéns.

Anônimo disse...

Ele quis dizer que vc deve exibir o termo na posição n da tabela de fibonacci

Laura Puntel disse...

Oi, tenho que resolver os dois exercícios abaixo mas não estou conseguindo, será que pode me dar uma mão?
1) Faça um programa em linguagem C que receba a idade, a altura e o peso de 25 pessoas. Calcule e mostre:
* a quantidade de pessoas com idade superior a 50 anos;
* a média de altura das pessoas com idade entre 10 e 20 anos;
* o percentual de pessoas com peso inferior a 40Kg;

2) Faça um programa em linguagem C que apresente um menu de opções para o cálculo das seguintes operações entre dois numeros:
adiçao, subtraçao, multiplicaçao e divisao. O programa deve possibilitar ao usuario a escolha da operaçao desejada, a exibiçao do
resultado e a volta ao menu de opçoes. O programa so termina quando for escolhida a opçao de saida.

Apostila C Progressivo disse...

Laura, quais suas dúvidas, especificamente? O que já conseguiu fazer?

Alan disse...

To gostando muito dessa apostila\curso, sou formado em Análise e Desenvolvimento de Sistemas e faço Pós Graduação em Segurança da Informação.
Mas Programação sempre foi meu calo, acho que por ter feito faculdade muito jovem, entrei com 17 anos e não pensava muito no futuro, hoje estou começando a correr atrás do prejuízo e aprendendo a programar de novo.
To evoluindo muito rápido com as aulas de vocês.

Unknown disse...

Preciso fazer tipo uma calculadora que resolva Fatorial, Conversão Binário para Decimal e Conversão Decimal para Binário.

Sera que alguém poderia me ajudar?

Unknown disse...

Meu Deus.... Eu consegui o ultramega power desafio...... Valeu muito ai pelo blog.... muito bom mesmo... muito bom.....

#include
#include
int main(void)
{
float n,
phi = 1.61803;

printf("\nInsira o numero do termo que pretende achar na sequência Fibonacci\n");
scanf("%f", &n);
printf("\No número %.0f de Fibonacci é %.0f", n, ((pow(phi, n)-pow((1-phi), n))/2.236));
}

Soccer ID disse...

Nao tendo mais Xuxa de boa!

Unknown disse...

Taí meu código. Tá meio coisado mas é porque eu tô migrando do Object Pascal pro C.
Boa sorte a todos :)
/*
OBJETIVO: Escreva um programa em C que recebe 'n' números
do usuário, e recebe o número 'n' também, e de-
termine qual destes números é o menor.

AUTOR: Marcelo dos Santos, assuncao2gether@gmail.com
*/

#include

int main(void){
int x, maior=0;

do{

printf("Informe um numero ( para ENCERRAR, press. 0): ");
scanf("%d", &x);

if (x > maior){
maior=x;
printf("MAIOR NUMERO ATE AGORA: %d.\n",maior);
}
else{
if (x < maior){
printf("MAIOR NUMERO ATE AGORA: %d.\n",maior);
}
else{
printf("MAIOR NUMERO ATE AGORA: %d.\n",x);
}
}
}
while(x != 0);
system("pause");
return 0;
}

Anônimo disse...

#include
#include
#include
/*0. Escreva um programa em C que recebe 'n' números do usuário, e recebe o número
'n' também, e determine qual destes números é o menor.
*/
int main()
{
setlocale(LC_ALL,"portuguese");
int iCont=0;
char cOp;
float fNum,fMenor;
do
{
printf("Digite um número: ");
scanf("%f",&fNum);
if(iCont==0)
{
fMenor=fNum;
}
if(fNum>fMenor)
{
fMenor=fMenor;
}
else
{
fMenor=fNum;
}

printf("Deseja sair?\nSe sim digite 's'\nSe não digite 'n': \n");
scanf(" %c%*c",&cOp);

if(cOp=='s')
{
break;
}
else
{
system("pause");
system("cls||clear");
iCont++;
}

}while(iCont<1000);
printf("Menor número digitado: %.1f\n",fMenor);
return 0;
}

Anônimo disse...

#include
#include
#include
/*1. Escreva um programa em C que recebe um inteiro 'n' do usuário e calcula o produto
dos números pares e o produtos dos números ímpares, de 1 até n.
*/
int main()
{
setlocale(LC_ALL,"portuguese");
int iNum,iCont,iPrP=1,iPrIm=1;
printf("Digite um número: ");
scanf("%d",&iNum);
for(iCont=1;iCont<=iNum;iCont++)
{
if((iCont%2)==0)
{
iPrP=iPrP*iCont;
printf("Produto dos números pares: %d\n",iPrP);
}
}
system("pause");
system("cls||clear");
for(iCont=1;iCont<=iNum;iCont++)
{
if((iCont%2)!=0)
{
iPrIm=iPrIm*iCont;
printf("Produto dos números ímpares: %d\n",iPrIm);
}
}


return 0;
}

Anônimo disse...

#include
#include
#include
/*2. Faça um programa em C que recebe um inteiro do usuário e calcula seu fatorial.
O fatorial de 'n' é dado por:
n*(n-1)*(n-2)...*3*2*1
e é representado por n!
*/
int main()
{
setlocale(LC_ALL,"portuguese");
int iNum,iCont;
printf("Digite um número: ");
scanf("%d",&iNum);
iCont=(iNum-1);
while(iCont>=1)
{

printf("%d * %d= %d\n",iNum,iCont,iNum*iCont);
iNum=iNum*iCont;
iCont--;
}
return 0;
}

Anônimo disse...

#include
#include
//#include
/*4. Crie um programa em C que peça um número inteiro ao usuário, e imprima
a seguinte tabela::
1
2 4
3 6 9
4 8 12 16
*/
int main()
{
setlocale(LC_ALL,"portuguese");
int iCont=1,iNum,iValor=0,iCont2=1;;
printf("Digite um número: ");
scanf("%d",&iNum);
do
{
iValor=iValor+iCont;
printf("%d",iCont);
while(iCont2<iCont)
{
iValor=iValor+iCont;
printf("%d",iValor);
iCont2++;
}
printf("\n");
iCont2=1;
iValor=0;
iCont++;
}while(iCont<=iNum);
return 0;
}

Anônimo disse...

#include
#include
/*5. Escreva um programa que peça um númer 'n' ao usuário, e que gere um novo n
de acordo com a seguinte regra:

• se n é par, n = n / 2
• se n é impar, n = 3 * n + 1
• imprime n
• O programa deve parar quando x tiver o valor igual a 1. Por exemplo, para n = 13, a saída será:
40 -> 20 -> 10 -> 5 -> 16 -> ˜8 -> 4 -> 2 -> 1
*/
int main()
{
setlocale(LC_ALL,"portuguese");
int iNum,iCont,iAux;
printf("Digite um número: ");
scanf("%d",&iNum);
iCont=iNum;
while(iCont!=1)
{
if(iNum%2==0)
{
iCont=iNum/2;
}
else
{
iCont=3*iNum+1;
}
iAux=iCont;
iNum=iAux;
printf("%d\n",iCont);
}
return 0;
}

Anônimo disse...

#include
#include
/*
Desafio dos números de FIbonacci
Crie um aplicativo em C que peça um número inteiro ao usuário - 'n' - e exiba o
n-ésimo termo da série de Fibonacci, sabendo que o primeiro termo é 0,
o segundo é 1 e o próximo número é sempre a soma dos dois anteriores.
1, 1, 2, 3, 5, 8, 13…
*/
int main()
{
setlocale(LC_ALL,"portuguese");
int iFib=1,iCont,iN1=0,iN2=1;
printf("Digite um número: ");
scanf("%d",&iCont);
while(iCont>0)
{
iFib=iN1+iN2;
iN2=iN1;
iN1=iFib;
printf("%d\n",iFib);
iCont--;
}
return 0;
}

Unknown disse...

Questão 4:

int main () {
int i, j, contador = 1, numero = 0, multiplicador = 0;

setlocale(LC_ALL, "Portuguese");

do {
printf("- Digite um número: ");
scanf("%d", &numero);
if (numero < 1) {
printf("\nNúmero Inválido\nTente Novamente.\n\n");
}
} while (numero < 1);

for (i = 1; i <= numero; i++) {
multiplicador = 1;
for (j = 0; j < contador; j++) {
printf("%d ", i * multiplicador);
multiplicador++;
}
contador++;
printf("\n");
}
return 0;
}

Unknown disse...

Questão 5:

#include < stdio.h >
#include < stdlib.h >
#include < locale.h >

int main () {
int numero = 0;

setlocale(LC_ALL, "Portuguese");

do {
printf("- Digite um número: ");
scanf("%d", &numero);

if (numero < 0) {
printf("\nNúmero Inválido!\n\nTente Novamente.\n\n");
}
} while (numero < 0);

printf("\n");
while (numero != 1) {
if (numero % 2 == 0) {
numero = numero / 2;
} else {
numero = 3 * numero + 1;
}
printf("%d ", numero);
}
printf("\n");

return 0;
}

Unknown disse...

Desafio do diamante de asteriscos:

#include < stdio.h >
#include < stdlib.h >
#include < locale.h >

int main () {
int i, j, qtd_Espacos = 0, qtd_Pontos = 1, numero = 0;

setlocale(LC_ALL, "Portuguese");

do {
printf("- Digite um número impar: ");
scanf("%d", &numero);

if (numero % 2 == 0 || numero < 1) {
printf("\nNúmero Inválido!\nTente Novamente.\n\n");
}
} while (numero % 2 == 0 || numero < 1);

printf("\n");
qtd_Espacos = numero / 2 + 1;
for (i = 0; i < numero / 2; i++) {

for (j = 0; j < qtd_Espacos; j++) {
printf(" ");
}
qtd_Espacos--;

for (j = 0; j < qtd_Pontos; j++) {
printf("*");
}
printf("\n");
qtd_Pontos = qtd_Pontos + 2;
}

printf(" ");
for (i = 0; i < numero; i++) {
printf("*");
}
printf("\n");

qtd_Espacos = 2;
for (i = 0; i < numero / 2; i++) {

for (j = 0; j < qtd_Espacos; j++) {
printf(" ");
}
qtd_Espacos++;

qtd_Pontos = qtd_Pontos - 2;
for (j = 0; j < qtd_Pontos; j++) {
printf("*");
}
printf("\n");
}

return 0;
}

Let's Learn disse...

0. Escreva um programa em C que recebe 'n' números do usuário, e recebe o número 'n' também, e determine qual destes números é o menor.

#include

int main (void)
{
int n, counter = 1, number, menor;

printf("\t Qual e a quantidade de numeros? ");
scanf("%d", &n);

printf("\n\n\t Entre com o numero %d: ", counter);
scanf("%d", &number);
menor = number;

while( counter + 1 <= n)
{
printf("\t Entre com o numero %d: ", counter + 1);
scanf("%d", &number);
if (number < menor)
menor = number;
counter++;
}
printf("\n\t O menor numero e: %d \n", menor);

return 0;
}

Let's Learn disse...

1. Escreva um programa em C que recebe um inteiro 'n' do usuário e calcula o produto dos números pares e o produtos dos números ímpares, de 1 até n.

#include

int main (void)
{
int amount, counter = 0, par = 1, impar = 1;
printf("\t Produto dos pares e impares ate o numero [máximo de 19]: ");
scanf("%d", &amount);

if ((amount < 0) || (amount > 19))
printf("\t \nEntre com um valor positivo entre 1 e 19 \n");
else
{
for( counter = 2 ; counter <= amount; counter += 2)
par *= counter;
printf("\n\t Produto dos pares: %d ", par);

for( counter = 1 ; counter <= amount; counter += 2)
impar *= counter;
printf("\n\n\t Produto dos impares: %d \n", impar);
}
return 0;
}

Let's Learn disse...

2. Faça um programa em C que recebe um inteiro do usuário e calcula seu fatorial.
O fatorial de 'n' é dado por:
n*(n-1)*(n-2)...*3*2*1
e é representado por n!



#include

int main(void)
{
int n, i, fatorial = 1;
printf("Entre com um inteiro positivo: ");
scanf("%d", &n);
if ( n < 0 )
printf("\n O numero deve ser um inteiro positivo");
else
{
for ( i = n; i >= 3; i--)
fatorial *= (i - 1);
printf("\n Fatorial e: %d \n", fatorial * n);
}
}

Let's Learn disse...

3. Crie um aplicativo bancário em C que pede o valor do depósito inicial, o valor do investimento mensal e o número de meses que o dinheiro vai ficar rendendo na poupança.
Após isso, calcule o lucro obtido, sabendo que o juros da poupança é de 0,5%.


#include

int main(void)
{
int meses, counter;
float montante, investimento_mensal, rendimento = 0;

printf("Montante: ");
scanf("%f", &montante);
printf("Investimento Mensal: ");
scanf("%f", &investimento_mensal);
printf("Tempo em meses do investimento: ");
scanf("%d", &meses);

if((montante <= 0) || (investimento_mensal < 0) || (meses <= 0))
printf("\n \tMontante > 0 , Investimento Mensal > 0 ou = 0 , Meses > 0 ");
else
{
for( counter = 1; counter <= meses; counter++ )
{
rendimento += (montante * 0.005);
montante *= 1.005;
montante += investimento_mensal;
printf("\n \t No mes %d o montante e igual = %.2f ", counter, montante);
printf(" \t\t Rendimento = %.2f \n", rendimento);
}
}
}

Let's Learn disse...

4. Crie um programa em C que peça um número inteiro ao usuário, e imprima a seguinte tabela::
1
2 4
3 6 9
4 8 12 16


#include

int main(void)
{
int rows, counter_row, counter_width, counter_row_new;

printf("\t Entre com um inteiro maior que 1 ");
scanf("%d", &rows);
if(rows <= 1)
printf("\t O numero deve ser maior que 1");
else
{
for( counter_row = 1; counter_row <= rows; counter_row++ )
{
printf("\n");
counter_row_new = counter_row;
for ( counter_width = 1; counter_width <= counter_row; counter_width++)
{
if( counter_width > 1 )
printf("%3d ", counter_row_new += counter_row);
else
printf("%3d ", counter_row);
}
}
}
printf("\n\n");

}

Let's Learn disse...

5. Escreva um programa que peça um númer 'n' ao usuário, e que gere um novo n de acordo com a seguinte regra:

• se n é par, n = n / 2
• se n é impar, n = 3 * n + 1
• imprime n
• O programa deve parar quando x tiver o valor igual a 1. Por exemplo, para n = 13, a saída será:
40 -> 20 -> 10 -> 5 -> 16 -> ˜8 -> 4 -> 2 -> 1




#include

int main (void)
{
int n;
printf("\t Entre com um numero > 2 ");
scanf("%d", &n);
if ( n <= 2)
printf("\t O numero tem que ser > 2 \n");
else
{
while ( n != 1)
{
if( n % 2 == 0 )
n = n / 2;
else
n = 3 * n + 1;
printf(" n = %d", n);
}
}
}

Let's Learn disse...

Desafio dos números de FIbonacci
Crie um aplicativo em C que peça um número inteiro ao usuário - 'n' - e exiba o n-ésimo termo da série de Fibonacci, sabendo que o primeiro termo é 0, o segundo é 1 e o próximo número é sempre a soma dos dois anteriores.


#include
int main(void)
{
int number, counter, fibonacci, fibonacciT1 = 0, fibonacciT2 = 1;
printf("\t Entre com um inteiro [ >= 1 ] ");
scanf("%d", &number);
if ( number < 1)
printf("\t O numero deve ser maior que zero \n");
else if (number == 1)
printf("\t Fibonacci Termo [ %3d ] = %3d \n", 1, 0);
else if (number == 2)
printf("\t Fibonacci Termo [ %3d ] = %3d \n", 2, 1);
{
for( counter = 3; counter <= number; counter++)
{
fibonacci = fibonacciT1 + fibonacciT2;
//printf("\t Fibonacci Termo [ %3d ] = %3d \n", counter, fibonacci);
fibonacciT1 = fibonacciT2;
fibonacciT2 = fibonacci;
}
printf("\t Fibonacci Termo [ %3d ] = %3d \n", counter - 1, fibonacci);
}
}

Let's Learn disse...

Desafio do diamante de asteriscos:

#include
#include

int main(void)
{
int rows, counter_row, counter_width, space, asterisk = 1, i, SPACE = 1, ASTERISK;

printf("\t Entre com um inteiro impar maior que 1 ");
scanf("%d", &rows);
space = ((int)floor((float)rows/2));
ASTERISK = rows;
if((rows % 2 == 0) && (rows > 1))
printf("\t O numero deve ser impar maior que 1");
else
{
for( counter_row = 1; counter_row <= rows; counter_row++ )
{
printf("\n");
for ( counter_width = 1; counter_width <= rows; counter_width++)
{
if ( counter_width <= space )
printf(" ");
if ( counter_width == space )
{
for ( i = 1; i <= asterisk; i++ )
printf("*");
space--;
asterisk += 2;
break;
}

if ( counter_row == ((int)ceil((float)rows/2)) )
printf("*");

if ( counter_row > ((int)ceil((float)rows/2)) )
{
{
if ( counter_width <= SPACE )
printf(" ");
else
{
if ( counter_width == ( ASTERISK ))
{
ASTERISK--;
SPACE++;
break;
}
printf("*");
}
}
}
}
}
}

printf("\n\n");

}