Stoa :: C/C++ :: Blog :: Os laços while e do ... while - Aspectos básicos - parte 2

outubro 10, 2007

user icon

Ao encontrar uma instrução while tal como a do código abaixo, o computador segue uma certa sequência de passos, descrita logo a seguir.

 

int soma = 0, a = 1;

while ( a != 0 )

{

   printf("\nDigite um numero inteiro para somar, ou zero para terminar a soma: ");

   scanf("%d", &a);

   soma = soma + a;

}

printf("\nA soma é %d.", soma);

 

A primeira coisa que o computador faz é verificar se a condição de execução é satisfeita. No caso, como atribuímos o valor 1 à variável a, ela é diferente de 0, e portanto o bloco de instruções será executado. Nesse bloco, é feita uma atribuição de valor à variável a pelo usuário - note que portanto o usuário pode entrar com números diferentes de zero um número indeterminado de vezes - e o bloco será executado até que o usuário entre com o valor 0 para a variável a. Assim que a condição de execução deixa de ser satisfeita, o fluxo passa para a primeira instrução após o laço while, que no exemplo acima imprime o conteúdo da variável soma.

 

Neste exemplo, tivemos de atribuir um valor não-nulo à variável a antes do laço while pois se apenas declarássemos esta variável, seu valor inicial, que é comumento chamado de "lixo", poderia eventualmente ser igual a zero, e nesse caso o laço não seria executado nem mesmo uma vez, resultando em o programa imprimir o valor que estiver contido ena variável soma, no caso, 0. Uma maneira alternativa de resolver esse problema é utilizando o laço do ... while:

 

int soma = 0, a;

do

{

   printf("\nDigite um número inteiro para somar, ou zero para terminar a soma: ");

   scanf("%d", &a);

   soma = soma + a;

}

while ( a != 0 );

printf("\nA soma é %d.", soma);

 

 

Neste último exemplo, só será impresso que a soma é zero se o usuário digitar 0 como o primeiro número ao ser pedido que digite um número para somar.

 

 

Exemplo: obter o primeiro fatorial que é maior que 1000.

 

 

int fatorial = 1, n = 1;

do

{

   fatorial = fatorial * n;

    n++;

}

while ( fatorial <= 1000);

 

 

Exercício: obtenha o primeiro quadrado maior que 2000.

 

 

Exemplo: imprimir o produto de dois números até que esse produto seja maior que 1000 ou menor que 10.

 

 

int produto, a, b;

do

{

   printf("\nDigite um numero inteiro: ");

   scanf("%d", &a);

   printf("\nDigite outro numero inteiro: ");

   scanf("%d", &b);

   produto = a * b;

   printf("\na * b = %d.", produto);

}

while ( produto >= 10 && produto <= 1000);

 

 

Exercício: imprima a soma de dois números até que ocorra de uma soma ser ímpar.

 

 

Exemplo: somar e imprimir a soma de uma sequência de números inteiros estritamente crescente.

 

 

int anterior = -1001, atual, soma = 0;

do

{

   printf("\nDigite um numero real entre -1000 e 1000:");

   scanf("%f", &atual);

   if (atual > anterior)

       soma = soma + atual;

   anterior = atual;

}

while ( atual > anterior ); 

printf("\nA soma da sequencia estritamente crescente eh: %d", &soma);

 

 

Exercício: some e imprima a soma de números entre -1000 e 1000 de uma sequencia crescente até que a soma dos dois últimos termos seja igual ao dobro do termo atual. Suponha que o usuário só entrará com números em sequência crescente.

Palavras-chave: do ... while, laço, laço do ... while, laço while, while

Postado por Renato Callado Borges em C/C++

Comentários

  1. Renato Callado Borges escreveu:

    Ibraim, obrigado pelas correções no código - alterei os pritnf para printf :)

    Quanto a qual curso realizar na usp, a verdade é que em muitos cursos de graduação os alunos terão que aprender programação básica.

    Por exemplo, no Bacharelado em Física o aluno tem que cursar duas disciplinas que exigem programação: "Introdução à computação" e "Cálculo Numérico com Aplicações em Física".

    Pessoalmente, não cursei graduação nem em Engenharia nem em Computação. Sou historiador e estou atualmente fazendo mestrado em Computação. Então não sei te dizer com 100% de certeza que linguagens são vistas em cada um dos cursos de graduação.

    Não existe graduação em "programação" especificamente, mas eu creio que o curso em que mais se programa é o Bacharelado em Ciências da Computação (BCC). Com certeza você terá de aprender a programar - e programar muito bem - ao menos em C e em C++ ou em C e em Java, e em algumas disciplinas, alguns professores exigem o aprendizado de outras linguagens, como Smalltalk, para aprender orientação a objetos, ou Haskell, para aprender linguagens funcionais.

    Além disso, você terá que se desenvolver como programador não apenas no quesito "número de linguagens", mas também ser capaz de escrever código que obedeça a restrições diversas. Por exemplo, você deverá saber escrever código que utiliza bibliotecas escritas por outras pessoas. Você deverá ser capaz de escrever código que "conversa" com outros programas durante sua execução. Terá que aprender a escrever o código com boa documentação, e como elaborar um software desde seu projeto até sua execução.

    Uma característica importante do BCC é que você deverá aprender as bases científicas de porque um programa funciona, e portanto irá aprender a analisar algoritmos, estimar seu tempo de execução, entre outras habilidades. Também irá ver tópicos avançados como técnicas de inteligência artificial, programação paralela, etc.

    Enfim, existe uma infinidade de detalhes entre um "problema" e sua "solução" de software, e no BCC você terá de aprender um pouco de cada um desses temas, e também terá uma formação adequada a se tornar um pesquisador em uma dessas áreas.

    Eu te recomendo que dê uma olhada no site "JupiterWeb", na seção relacionada às disciplinas oferecidas na graduação do BCC: Disciplinas no BCC.

    Quanto à Engenharia Elétrica, eu nunca frequentei um curso lá, e infelizmente nunca fiz amizade com algum colega de lá. O que posso te fazer é linkar para a página no JupiterWeb com as disciplinas de lá: Disciplinas na Eng. Elétrica.

    Finalmente, numa graduação da usp, você sempre terá que fazer cursos chamados "optativos", que você escolhe aonde quiser. Apenas um ou dois cursos vão "contar" para você se formar, mas pode ser que seja o suficiente para o que você quer. Por exemplo, se você se interessa mais pelo curso de Elétrica mas gostaria muito de fazer umas disciplinas específicas da Computação, você pode fazer, e vice-versa.

    Espero que as descrições das disciplinas no JupiterWeb te deixem com ainda mais vontade de se graduar na usp. Como você já demonstrou que é atento a detalhes eu já sei que você tem um dos requisitos para se dar bem nesses cursos :)

    Renato Callado BorgesRenato Callado Borges ‒ terça, 11 janeiro 2011, 14:09 -02 # Link |

Você deve entrar no sistema para escrever um comentário.

Termo de Responsabilidade

Todo o conteúdo desta página é de inteira responsabilidade do usuário. O Stoa, assim como a Universidade de São Paulo, não necessariamente corroboram as opiniões aqui contidas.