Faculdade de Computação Universidade Federal de Mato Grosso do Sul
Algoritmos e Programação I, 2012
2 Estrutura condicional simples
3 Estrutura condicional composta
4 Troca de conteúdos
5 Revisão de números inteiros
6 Representação de números inteiros
instruções são sempre executadas uma após a outra?
há possibilidade de seleção de um grupo de instruções de acordo com alguma situação que ocorre durante a execução de um programa?
estruturas condicionais permitem tomadas de decisão, com desvio de fluxo de execução;
estruturas condicionais fornecem maior poder de programação
instruções são sempre executadas uma após a outra?
há possibilidade de seleção de um grupo de instruções de acordo com alguma situação que ocorre durante a execução de um programa?
estruturas condicionais permitem tomadas de decisão, com desvio de fluxo de execução;
estruturas condicionais fornecem maior poder de programação
instruções são sempre executadas uma após a outra?
há possibilidade de seleção de um grupo de instruções de acordo com alguma situação que ocorre durante a execução de um programa?
estruturas condicionais permitem tomadas de decisão, com desvio de fluxo de execução;
estruturas condicionais fornecem maior poder de programação
instruções são sempre executadas uma após a outra?
há possibilidade de seleção de um grupo de instruções de acordo com alguma situação que ocorre durante a execução de um programa?
estruturas condicionais permitem tomadas de decisão, com desvio de fluxo de execução;
estruturas condicionais fornecem maior poder de programação
if (condição) { ..
.
bloco de instruções;
.. . }
Quando um bloco de instruções contém uma única instrução ou sentença, então os símbolos delimitadores de bloco { e } são opcionais.
uma decisão é tomada de acordo com a avaliação dacondição, que é uma expressão lógica;
caso o resultado dessa avaliação sejaverdadeiro, a instrução, ou o bloco de instruções, será executada(o); caso contrário, isto é, se o resultado da avaliação éfalso, será ignorada(o).
uma decisão é tomada de acordo com a avaliação dacondição, que é uma expressão lógica;
caso o resultado dessa avaliação sejaverdadeiro, a instrução, ou o bloco de instruções, será executada(o); caso contrário, isto é, se o resultado da avaliação éfalso, será ignorada(o).
/* Recebe um número inteiro positivo que representa uma idade e emite uma mensagem na saída se a idade é inferior a 30 */
int main(void) {
int idade;
printf("Quantos anos você tem? ");
scanf("%d", &idade);
if (idade < 30)
printf("Puxa! Você é bem jovem!\n");
printf("Até breve!\n");
.. .
primeiro bloco de instruções;
.. . } else {
.. .
segundo bloco de instruções;
.. . }
que é uma expressão lógica;
caso o resultado dessa avaliação sejaverdadeiro, o primeiro bloco de instruções será executado e, ao término desse bloco, a instrução da próxima linha após a estrutura condicional composta será executada;
caso contrário, isto é, se o resultado da avaliação da expressão lógica éfalso, o segundo bloco de instruções, logo após a
palavra-chave else, será executado; e ao final da execução das instruções desse bloco, a instrução da próxima linha após a estrutura condicional composta será executada.
que é uma expressão lógica;
caso o resultado dessa avaliação sejaverdadeiro, o primeiro bloco de instruções será executado e, ao término desse bloco, a instrução da próxima linha após a estrutura condicional composta será executada;
caso contrário, isto é, se o resultado da avaliação da expressão lógica éfalso, o segundo bloco de instruções, logo após a
palavra-chave else, será executado; e ao final da execução das instruções desse bloco, a instrução da próxima linha após a estrutura condicional composta será executada.
que é uma expressão lógica;
caso o resultado dessa avaliação sejaverdadeiro, o primeiro bloco de instruções será executado e, ao término desse bloco, a instrução da próxima linha após a estrutura condicional composta será executada;
caso contrário, isto é, se o resultado da avaliação da expressão lógica éfalso, o segundo bloco de instruções, logo após a
palavra-chave else, será executado; e ao final da execução das instruções desse bloco, a instrução da próxima linha após a estrutura condicional composta será executada.
/* Recebe um número inteiro e emite uma mensagem de acordo com esse número */
int main(void) {
int idade;
printf("Quantos anos você tem? ");
scanf("%d", &idade);
if (idade < 30)
printf("Puxa! Você é bem jovem!\n");
else
printf("Puxa! Você já é velhinho!\n");
printf("Até breve!\n");
valores em x e o maior em y, mostrando o resultado na saída */
int main(void) {
int x, y, aux;
printf("Informe o valor de x: ");
scanf("%d", &x);
printf("Informe o valor de y: ");
scanf("%d", &y);
if (x > y) { aux = x;
x = y;
y = aux;
}
de memória para armazenamento de informações;
variáveis: valores podem ser atribuídos e sobrescritos nesses compartimentos e, portanto, podem variar durante a execução do programa;
regra fundamental sobre variáveis em programas:qualquer variável usada em um programa deve ser previamente declarada;
podemos atribuir um nome simbólico a um endereço de um compartimento de memória:identificadorounomeda variável;
o identificador de uma variável pode ser escolhido pelo(a) programador(a) de modo a refletir de alguma forma o seu
de memória para armazenamento de informações;
variáveis: valores podem ser atribuídos e sobrescritos nesses compartimentos e, portanto, podem variar durante a execução do programa;
regra fundamental sobre variáveis em programas:qualquer variável usada em um programa deve ser previamente declarada;
podemos atribuir um nome simbólico a um endereço de um compartimento de memória:identificadorounomeda variável;
o identificador de uma variável pode ser escolhido pelo(a) programador(a) de modo a refletir de alguma forma o seu
de memória para armazenamento de informações;
variáveis: valores podem ser atribuídos e sobrescritos nesses compartimentos e, portanto, podem variar durante a execução do programa;
regra fundamental sobre variáveis em programas:qualquer variável usada em um programa deve ser previamente declarada;
podemos atribuir um nome simbólico a um endereço de um compartimento de memória:identificadorounomeda variável;
o identificador de uma variável pode ser escolhido pelo(a) programador(a) de modo a refletir de alguma forma o seu
de memória para armazenamento de informações;
variáveis: valores podem ser atribuídos e sobrescritos nesses compartimentos e, portanto, podem variar durante a execução do programa;
regra fundamental sobre variáveis em programas:qualquer variável usada em um programa deve ser previamente declarada;
podemos atribuir um nome simbólico a um endereço de um compartimento de memória:identificadorounomeda variável;
o identificador de uma variável pode ser escolhido pelo(a) programador(a) de modo a refletir de alguma forma o seu
pequeno conjunto de regras para um(a) programador(a) determinar os identificadores das suas variáveis:
os símbolos válidos em um identificador de uma variável são os caracteres alfabéticos, minúsculos ou maiúsculos, os dígitos numéricos e o sublinhado ou (_);
o identificador de uma variável deve iniciar com uma letra do alfabeto ou com um sublinhado (_);
após o primeiro caractere, o identificador de uma variável é determinado por qualquer sequência de letras minúsculas ou maiúsculas, de números ou de sublinhados.
pequeno conjunto de regras para um(a) programador(a) determinar os identificadores das suas variáveis:
os símbolos válidos em um identificador de uma variável são os caracteres alfabéticos, minúsculos ou maiúsculos, os dígitos numéricos e o sublinhado ou (_);
o identificador de uma variável deve iniciar com uma letra do alfabeto ou com um sublinhado (_);
após o primeiro caractere, o identificador de uma variável é determinado por qualquer sequência de letras minúsculas ou maiúsculas, de números ou de sublinhados.
pequeno conjunto de regras para um(a) programador(a) determinar os identificadores das suas variáveis:
os símbolos válidos em um identificador de uma variável são os caracteres alfabéticos, minúsculos ou maiúsculos, os dígitos numéricos e o sublinhado ou (_);
o identificador de uma variável deve iniciar com uma letra do alfabeto ou com um sublinhado (_);
após o primeiro caractere, o identificador de uma variável é determinado por qualquer sequência de letras minúsculas ou maiúsculas, de números ou de sublinhados.
identificadores de variáveis válidos:
soma num1 i
soma_total _sistema A3x3 fracao
identificadores de variáveisnão-válidos:
preço$
soma total 4quant int
letras minúsculas e maiúsculas na linguagem C são diferentes: as variáveis soma, Soma e SOMA são todas diferentes;
declaração de variáveis do tipo inteiro pode ser realizada com uma única instrução int e mais uma lista de identificadores de variáveis, separados por um espaço e uma vírgula, finalizada por ponto e vírgula:
int i, num1, num2, soma, produto, aux;
ou ainda, pode ser realizada uma a uma, com uma instrução int para cada variável:
int i;
int num1;
int num2;
int soma;
int produto;
int aux;
identificadores de variáveis podem ser tão longos quanto se queira;
porém, um programa escrito com identificadores de variáveis muito longos pode ser difícil de ser escrito e compreendido:
TotalDeDinheiroQueTenho = TotalDoDinheiroQueGuardeiAnoPassado + TotalDeDinheiroQueGuardeiEsteAno - TotalDeImpostosEmReais;
TotalGeral = TotalAno + TotalAnterior - Impostos;
identificadores de variáveis podem ser tão longos quanto se queira;
porém, um programa escrito com identificadores de variáveis muito longos pode ser difícil de ser escrito e compreendido:
TotalDeDinheiroQueTenho = TotalDoDinheiroQueGuardeiAnoPassado + TotalDeDinheiroQueGuardeiEsteAno - TotalDeImpostosEmReais;
TotalGeral = TotalAno + TotalAnterior - Impostos;
identificadores de variáveis podem ser tão longos quanto se queira;
porém, um programa escrito com identificadores de variáveis muito longos pode ser difícil de ser escrito e compreendido:
TotalDeDinheiroQueTenho = TotalDoDinheiroQueGuardeiAnoPassado + TotalDeDinheiroQueGuardeiEsteAno - TotalDeImpostosEmReais;
TotalGeral = TotalAno + TotalAnterior - Impostos;
números inteiros que ocorrem em algumas expressões são conhecidos comoconstantes numéricas, ou simplesmente constantes: 37, 108926, -2623, etc;
expressões aritméticas que se constituem apenas de constantes numéricas e de operadores são chamadas deexpressões aritméticas constantes: 781 + 553 - 12 * 44
números inteiros que ocorrem em algumas expressões são conhecidos comoconstantes numéricas, ou simplesmente constantes: 37, 108926, -2623, etc;
expressões aritméticas que se constituem apenas de constantes numéricas e de operadores são chamadas deexpressões aritméticas constantes: 781 + 553 - 12 * 44
podemos definir uma constante numérica, conhecida na linguagem C como umamacro, usando a diretiva do pré-processador #define:
#define identificador constante
exemplos:
#define NUMERADOR 4
#define MIN -10000
#define MAX 100
podemos definir uma constante numérica, conhecida na linguagem C como umamacro, usando a diretiva do pré-processador #define:
#define identificador constante
exemplos:
#define NUMERADOR 4
#define MIN -10000
#define MAX 100
podemos usar com números inteiros:
+ para adição;
- para subtração;
* para multiplicação;
/ para quociente da divisão; e
% para resto da divisão.
operadores aritméticos sãobinários, isto é, necessitam de dois operandos para execução da operação aritmética
correspondente;
operandos podem ser constantes, variáveis ou expressões
podemos usar com números inteiros:
+ para adição;
- para subtração;
* para multiplicação;
/ para quociente da divisão; e
% para resto da divisão.
operadores aritméticos sãobinários, isto é, necessitam de dois operandos para execução da operação aritmética
correspondente;
operandos podem ser constantes, variáveis ou expressões
podemos usar com números inteiros:
+ para adição;
- para subtração;
* para multiplicação;
/ para quociente da divisão; e
% para resto da divisão.
operadores aritméticos sãobinários, isto é, necessitam de dois operandos para execução da operação aritmética
correspondente;
operandos podem ser constantes, variáveis ou expressões
/* Realiza operações aritméticas com números inteiros */
int main(void) {
int x, y, z, r;
y = 10;
r = NUM + y;
printf("A soma de %d e %d é %d\n", NUM, y, r);
x = 38;
r = x - NUM;
printf("A subtração de %d e %d é %d\n", x, NUM, r);
x = 51;
y = 17;
r = x / y;
printf("O quociente da divisão de %d por %d é %d\n", x, y, r);
x = 17;
y = 3;
r = x % y;
printf("O resto da divisão de %d por %d é %d\n", x, y, r);
x = -7;
r = -x;
printf("%d com sinal trocado é %d\n", x, r);
x = 10;
y = 4;
z = 15;
r = x + y * z;
printf("A expressão %d+%d*%d é %d\n", x, y, z, r);
operadorunário - age sobre um único operando e troca o seu sinal, isto é, troca o sinal de uma constante, uma variável ou uma expressão aritmética do tipo inteiro: x = -7; e r = -x;
o resultado da avaliação da expressão aritmética 10 + 4 * 15 não é14×15=210, mas sim10+60=70;
operadores aritméticos na linguagem C têm precedências uns sobre os outros;
o resultado da expressão:
x + y * z
é dado primeiro pela avaliação da multiplicação e depois pela avaliação da adição;
o resultado da avaliação da expressão aritmética 10 + 4 * 15 não é14×15=210, mas sim10+60=70;
operadores aritméticos na linguagem C têm precedências uns sobre os outros;
o resultado da expressão:
x + y * z
é dado primeiro pela avaliação da multiplicação e depois pela avaliação da adição;
o resultado da avaliação da expressão aritmética 10 + 4 * 15 não é14×15=210, mas sim10+60=70;
operadores aritméticos na linguagem C têm precedências uns sobre os outros;
o resultado da expressão:
x + y * z
é dado primeiro pela avaliação da multiplicação e depois pela avaliação da adição;
Operador Descrição Precedência
* / % Multiplicação, quociente da divisão e resto da divisão 1 (máxima)
+ - Adição e subtração 2 (mínima)
informação que pode ser armazenada na memória e pode assumir apenas dois valores possíveis: 0 ou 1;
um byte pode assumir 256 valores possíveis:
00000000,00000001, . . . ,11111111;
o conjunto de todas as sequências dekbits representa os números naturais de 0 a2k−1
uma sequência de bits é chamada de umnúmero binárioou número na base 2:010110é um número binário representado por uma sequência de 6 bits;
podemos converter um número binário em umnúmero decimal,
informação que pode ser armazenada na memória e pode assumir apenas dois valores possíveis: 0 ou 1;
um byte pode assumir 256 valores possíveis:
00000000,00000001, . . . ,11111111;
o conjunto de todas as sequências dekbits representa os números naturais de 0 a2k−1
uma sequência de bits é chamada de umnúmero binárioou número na base 2:010110é um número binário representado por uma sequência de 6 bits;
podemos converter um número binário em umnúmero decimal,
informação que pode ser armazenada na memória e pode assumir apenas dois valores possíveis: 0 ou 1;
um byte pode assumir 256 valores possíveis:
00000000,00000001, . . . ,11111111;
o conjunto de todas as sequências dekbits representa os números naturais de 0 a2k−1
uma sequência de bits é chamada de umnúmero binárioou número na base 2:010110é um número binário representado por uma sequência de 6 bits;
podemos converter um número binário em umnúmero decimal,
informação que pode ser armazenada na memória e pode assumir apenas dois valores possíveis: 0 ou 1;
um byte pode assumir 256 valores possíveis:
00000000,00000001, . . . ,11111111;
o conjunto de todas as sequências dekbits representa os números naturais de 0 a2k−1
uma sequência de bits é chamada de umnúmero binárioou número na base 2:010110é um número binário representado por uma sequência de 6 bits;
podemos converter um número binário em umnúmero decimal,
informação que pode ser armazenada na memória e pode assumir apenas dois valores possíveis: 0 ou 1;
um byte pode assumir 256 valores possíveis:
00000000,00000001, . . . ,11111111;
o conjunto de todas as sequências dekbits representa os números naturais de 0 a2k−1
uma sequência de bits é chamada de umnúmero binárioou número na base 2:010110é um número binário representado por uma sequência de 6 bits;
podemos converter um número binário em umnúmero decimal,
informação que pode ser armazenada na memória e pode assumir apenas dois valores possíveis: 0 ou 1;
um byte pode assumir 256 valores possíveis:
00000000,00000001, . . . ,11111111;
o conjunto de todas as sequências dekbits representa os números naturais de 0 a2k−1
uma sequência de bits é chamada de umnúmero binárioou número na base 2:010110é um número binário representado por uma sequência de 6 bits;
podemos converter um número binário em umnúmero decimal,
digitar
int i;
cada variável do tipo int é armazenada embbytes consecutivos na memória, ondebé dependente da arquitetura do computador;
a maioria dos computadores pessoais atuais têmb=4e assim cada variável do tipo int é representada por uma sequência de 8×4=32bits, perfazendo um total de232valores possíveis, contidos no conjunto
digitar
int i;
cada variável do tipo int é armazenada embbytes consecutivos na memória, ondebé dependente da arquitetura do computador;
a maioria dos computadores pessoais atuais têmb=4e assim cada variável do tipo int é representada por uma sequência de 8×4=32bits, perfazendo um total de232valores possíveis, contidos no conjunto
digitar
int i;
cada variável do tipo int é armazenada embbytes consecutivos na memória, ondebé dependente da arquitetura do computador;
a maioria dos computadores pessoais atuais têmb=4e assim cada variável do tipo int é representada por uma sequência de 8×4=32bits, perfazendo um total de232valores possíveis, contidos no conjunto
digitar
int i;
cada variável do tipo int é armazenada embbytes consecutivos na memória, ondebé dependente da arquitetura do computador;
a maioria dos computadores pessoais atuais têmb=4e assim cada variável do tipo int é representada por uma sequência de 8×4=32bits, perfazendo um total de232valores possíveis, contidos no conjunto
cada sequência de 32 bits que começa com0representa um int não-negativo em notação binária;
cada sequência de 32 bits que começa com1representa o inteiro negativok−232, ondeké o valor da sequência em notação binária (complemento-de-dois);
números inteiros que estejam fora do intevalo
−231,231−1 são representados módulo232.
cada sequência de 32 bits que começa com0representa um int não-negativo em notação binária;
cada sequência de 32 bits que começa com1representa o inteiro negativok−232, ondeké o valor da sequência em notação binária (complemento-de-dois);
números inteiros que estejam fora do intevalo
−231,231−1 são representados módulo232.
cada sequência de 32 bits que começa com0representa um int não-negativo em notação binária;
cada sequência de 32 bits que começa com1representa o inteiro negativok−232, ondeké o valor da sequência em notação binária (complemento-de-dois);
números inteiros que estejam fora do intevalo
−231,231−1 são representados módulo232.
01 #include <stdio.h>
02
03 int main(void)
04 {
05 int idade;
06
07 printf("Quantos anos você tem? ");
08 scanf("%d", &idade);
09 if (idade < 30)
10 printf("Puxa! Você é bem jovem!\n");
11
12 printf("Até breve!\n");
13
14 return 0;
01 #include <stdio.h>
02
03 int main(void)
04 {
05 int idade;
06
07 printf("Quantos anos você tem? ");
08 scanf("%d", &idade);
09 if (idade < 30)
10 printf("Puxa! Você é bem jovem!\n");
11
12 printf("Até breve!\n");
13
14 return 0;
entrada/saida memoria
entrada/saida memoria
entrada/saida memoria
entrada/saida memoria
entrada/saida memoria
idade
?
entrada/saida memoria
idade
?
entrada/saida memoria
idade
Quantos anos voce tem?
?
entrada/saida memoria
idade
Quantos anos voce tem? 21 21
entrada/saida memoria
idade
Quantos anos voce tem? 21 21
entrada/saida memoria
idade
Quantos anos voce tem? 21 21
Puxa! Voce e bem jovem!
entrada/saida memoria
idade
Quantos anos voce tem? 21 21
Puxa! Voce e bem jovem!
entrada/saida memoria
idade
Quantos anos voce tem? 21 21
Puxa! Voce e bem jovem!
Ate breve!
entrada/saida memoria
idade
Quantos anos voce tem? 21 21
Puxa! Voce e bem jovem!
Ate breve!
entrada/saida memoria
idade
Quantos anos voce tem? 21 21
Puxa! Voce e bem jovem!
Ate breve!
entrada/saida memoria
idade
Quantos anos voce tem? 21 21
Puxa! Voce e bem jovem!
Ate breve!
2. Faça a simulação passo a passo da execução do programa5.2.
3. Faça a simulação passo a passo da execução do programa5.3.
4. Faça a simulação passo a passo da execução do programa5.4.
2. Faça a simulação passo a passo da execução do programa5.2.
3. Faça a simulação passo a passo da execução do programa5.3.
4. Faça a simulação passo a passo da execução do programa5.4.
2. Faça a simulação passo a passo da execução do programa5.2.
3. Faça a simulação passo a passo da execução do programa5.3.
4. Faça a simulação passo a passo da execução do programa5.4.
5. O programa5.5recebe a temperatura ambiente em um dado instante em graus Célsius e mostra uma mensagem para o(a) usuário(a) informando se a temperatura está muito quente, considerando como temperatura limite o valor de 30 graus Célsius. Faça a simulação passo a passo da execução da solução5.5.
/* Recebe um número inteiro que representa uma temperatura e imprime uma mensagem de aviso */
int main(void) {
int temperatura;
printf("Informe uma temperatura (em graus Célsius):");
scanf("%d", &temperatura);
if (temperatura > 30)
printf("Hoje é um dia bem quente!\n");
else
printf("Hoje não é um dia tão quente.\n");
comprimento finito construída a partir de variáveis e constantes, usando apenas as operações de adição, subtração, multiplicação e expoentes não-negativos. Por exemplo,x3+x2−8é um
polinômio.
Umafunção polinomialé uma função que pode ser definida pela avaliação de um polinômio. Uma funçãof, de um único
argumento, é chamada uma função polinomial se satisfaz:
f(x) =anxn+an−1xn−1+· · ·+a2x2+a1x+a0 para qualquerx, ondené um número inteiro não-negativo e
6. (continuação)
Por exemplo, a funçãof:Z→Zdefinida por
f(x) =x3+x2−8
é uma função polinomial de um argumento (x).
Escreva um programa que receba um número inteiroxe avalie o polinômio
p(x) =3x3−5x2+2x−1.
Faça a simulação passo a passo da execução de sua solução.
m=i+j−imodj,
onde o operador mod é o operador de resto de divisão inteira na notação matemática usual, que corresponde ao nosso operador %. Por exemplo, suponha que usamosi=256dias para alguma atividade e queremos saber qual o total de diasmque devemos ter de forma que esse número seja divisível porj=7, para termos uma ideia do número de semanas que usaremos na atividade. Então, pela fórmula acima, temos que
m=256+7−256mod7
=256+7−4
=259.
seaé par ou ímpar. Faça a simulação passo a passo da execução de sua solução.
9. Escreva um programa que receba um número inteiroae verifique seaé positivo, negativo ou igual a 0. Faça a simulação passo a passo da execução de sua solução.
10. Escreva um programa que receba três valores, armazenando-os nas variáveisx,yez, e ordene esses valores de modo que, ao final, o menor valor esteja armazenado na variávelx, o valor intermediário esteja armazenado na variávelye o maior valor esteja armazenado na variávelz. Faça a simulação passo a
seaé par ou ímpar. Faça a simulação passo a passo da execução de sua solução.
9. Escreva um programa que receba um número inteiroae verifique seaé positivo, negativo ou igual a 0. Faça a simulação passo a passo da execução de sua solução.
10. Escreva um programa que receba três valores, armazenando-os nas variáveisx,yez, e ordene esses valores de modo que, ao final, o menor valor esteja armazenado na variávelx, o valor intermediário esteja armazenado na variávelye o maior valor esteja armazenado na variávelz. Faça a simulação passo a
seaé par ou ímpar. Faça a simulação passo a passo da execução de sua solução.
9. Escreva um programa que receba um número inteiroae verifique seaé positivo, negativo ou igual a 0. Faça a simulação passo a passo da execução de sua solução.
10. Escreva um programa que receba três valores, armazenando-os nas variáveisx,yez, e ordene esses valores de modo que, ao final, o menor valor esteja armazenado na variávelx, o valor intermediário esteja armazenado na variávelye o maior valor esteja armazenado na variávelz. Faça a simulação passo a