O formato geral da estrutura de repetição while é apresentado a seguir:
while (condição) { instrução1; instrução2; . . . instruçãon; }
onde while é uma palavra-chave da linguagem C, condição é uma expressão lógica en- volvida por parênteses que é avaliada e possui o valor verdadeiro ou falso, instrução1 a instruçãon fazem parte do bloco de instruções da estrutura de repetição while com as cha-
ves { e } delimitando esse bloco de instruções. Do mesmo modo como vimos nas estruturas condicionais, se o bloco de instruções associado à estrutura de repetição while tem uma única instrução, esses delimitadores são opcionais.
A estrutura de repetição while funciona da seguinte forma. Quando um programa en- contra a palavra-chave while, a expressão descrita na condição é avaliada. Se o resultado da avaliação dessa expressão é verdadeiro, o programa desvia seu fluxo de execução para o bloco de instruções interno à estrutura de repetição. Então, as instruções são executadas uma a uma até a última delas. Quando o programa atinge o final do bloco de instruções, o fluxo de execução é desviado para a linha que contém a palavra-chave while e a expressão é nova- mente avaliada. Se o resultado é verdadeiro, as instruções são todas executadas novamente e o processo se repete. Caso contrário, isto é, se o resultado da avaliação da expressão é falso, o fluxo de execução do programa é desviado para a primeira instrução após o bloco de instruções envolvido por chaves.
6.2 ESTRUTURA DE REPETIÇÃO while 61 Programa 6.1: Primeiro exemplo usando a estrutura de repetição while.
#include <stdio.h>
/* Mostra os 100 primeiros números inteiros positivos */ int main(void) { int numero; numero = 1; while (numero <= 100) { printf("%d\n", numero); numero = numero + 1; } printf("\n"); return 0; }
Exercícios
6.1 Dado um inteiro positivo n, somar os n primeiros inteiros positivos. Programa 6.2: Programa para o exercício6.1.
#include <stdio.h>
/* Recebe um número inteiro n > 0 e mostra a so- ma dos n primeiros números inteiros positivos */ int main(void)
{
int n, numero, soma; printf("Informe n: "); scanf("%d", &n); soma = 0;
numero = 1;
while (numero <= n) { soma = soma + numero; numero = numero + 1; }
printf("Soma dos %d primeiros inteiros é %d\n", n, soma); return 0;
}
6.2 Dado n, imprimir os n primeiros naturais ímpares. Exemplo:
Para n = 4 a saída deverá ser 1, 3, 5, 7. 6.3 Dado um inteiro positivo n, calcular n!.
6.4 Dado n, imprimir as n primeiras potências de 2. Exemplo:
Para n = 5 a saída deverá ser 1, 2, 4, 8, 16. 6.5 Dados x inteiro e n um natural, calcular xn.
6.6 Dado um inteiro positivo n e uma seqüência de n inteiros, somar esses n números. 6.7 Dado um inteiro positivo n e uma seqüência de n números inteiros, determinar a soma
dos números inteiros positivos da seqüência. Exemplo:
Se n = 7 e a seqüência de números inteiros é 6, −2, 7, 0, −5, 8, 4 a saída deve ser 19.
6.8 Dado um inteiro positivo n e uma seqüência de n inteiros, somar os números pares e os números ímpares.
6.9 Durante os 31 dias do mês de março foram tomadas as temperaturas médias diárias de Campo Grande, MS. Determinar o número de dias desse mês com temperaturas abaixo de zero.
6.10 Dado um inteiro positivo n e uma seqüência de n inteiros, determinar quantos números da seqüência são positivos e quantos são não-positivos. Um número é não-positivo se é negativo ou se é igual a 0 (zero).
6.11 Dado um inteiro positivo n e uma seqüência de n inteiros, determinar quantos números da seqüência são pares e quantos são ímpares.
6.12 Uma loja de discos anota diariamente durante o mês de abril a quantidade de discos ven- didos. Determinar em que dia desse mês ocorreu a maior venda e qual foi a quantidade de discos vendida nesse dia.
6.13 Dados o número n de estudantes de uma turma de Algoritmos e Programação I e suas notas de primeira prova, determinar a maior e a menor nota obtidas por essa turma, onde a nota mínima é 0 e a nota máxima é 100.
AULA7
E
XPRESSÕES COM INTEIROS
Nesta aula veremos expressões aritméticas, relacionais e lógicas com números inteiros. Em aulas anteriores já tomamos contato com essas expressões, mas pretendemos formalizá-las aqui. A compreensão destas expressões com números inteiros é fundamental para que pos- samos escrever programas mais eficientes e poderosos e também porque podemos estender esse entendimento a outros tipos de variáveis. Importante destacar que a linguagem C não tem um tipo lógico primitivo, que é então simulado através do tipo inteiro, como veremos.
Esta aula é baseada nas referências [15,16].
7.1 Expressões aritméticas
Uma expressão aritmética na linguagem C é qualquer seqüência de símbolos formada ex- clusivamente por constantes numéricas, variáveis numéricas, operadores aritméticos e parên- teses.
Como já vimos, uma constante numérica do tipo inteiro é qualquer número inteiro descrito em nosso programa, como por exemplo 34 ou −7.
Uma variável numérica do tipo inteiro é aquela que foi declarada com uma instrução int no início do programa.
Os operadores aritméticos são divididos em duas classes: operadores aritméticos unários e operadores aritméticos binários. Um operador aritmético unário é um operador que age so- bre um único número inteiro e devolve um resultado. Há dois operadores aritméticos unários na linguagem C: o operador -, que troca o sinal da expressão aritmética que o sucede, e o operador +, que não faz nada além de enfatizar que uma constante numérica é positiva. Os
operadores aritméticos binários são aqueles que realizam as operações básicas sobre dois nú-
meros inteiros: + para adição, - para subtração, * para multiplicação, / para quociente da divisão e % para o resto da divisão.
As expressões aritméticas formadas por operações binárias envolvendo operandos e ope- radores têm precedências umas sobre as outras: as operações de multiplicação, quociente da divisão e resto da divisão têm prioridade sobre as operações de adição e a subtração. Caso haja necessidade de modificar a prioridade de uma operação em uma expressão, parênteses devem ser utilizados. Expressões envolvidas por parênteses têm maior prioridade sobre expressões que estão fora desses parênteses.
Suponha, por exemplo, que tenhamos declarado as variáveis x, y, a, soma e parcela do tipo inteiro, como abaixo:
int x, y, a, soma, parcela;
Suponha ainda que as seguintes atribuições de valores constantes tenham sido executadas so- bre essas variáveis:
x = 1; y = 2; a = 5; soma = 100; parcela = 134;
As sentenças a seguir são exemplos de expressões aritméticas:
2 * x * x + 5 * -x - +4 soma + parcela % 3
4 * 1002 - 4412 % 11 * -2 + a
(((204 / (3 + x)) * y) - ((y % x) + soma))
De acordo com os valores das inicializações das variáveis envolvidas e o resultado da avaliação das próprias expressões, a avaliação de cada uma das linhas acima tem valores −7, 102, 4037 e 202, respectivamente.
A tabela abaixo, contendo as prioridades dos operadores aritméticos unários e binários, já foi exibida em parte na aula5.
Operadores Tipo Descrição Precedência
+ - unários constante positiva, troca de sinal 1 (máxima)
* / % binários produto, quociente da divisão e resto da divisão 2
+ - binários adição e subtração 3 (mínima)