Você está na página 1de 29

Algoritmos e estruturas

de dados I
Bloco de comandos, escopo e condições

Elverton Fazzion

Algoritmos e estruturas de dados I


Bloco de comandos e escopo
● Em C, podemos determinar um bloco de comandos usando
chaves
○ Um bloco começa quando abrimos uma chave ({) e termina quando
fechamos a chave (})

● Variáveis declaradas dentro de um bloco são visíveis


apenas no interior do bloco onde foram declaradas
○ Ou seja, apenas dentro do seu escopo
#include <stdio.h>

void main(){
{
int y = 10;
}
printf(“y=%d\n”, y);
}

Algoritmos e estruturas de dados I 2


Bloco de comandos e escopo
● Em C, podemos determinar um bloco de comandos usando
chaves
○ Um bloco começa quando abrimos uma chave ({) e termina quando
fechamos a chave (})

● Variáveis declaradas dentro de um bloco são visíveis


apenas no interior do bloco onde foram declaradas
○ Ou seja, apenas dentro do seu escopo
Endereço Variável Conteúdo
#include <stdio.h> 6612 x 5
6613
void main(){
6614
int x = 5;
Representam posições
{ 6615
de memória diferentes!
int x = 10; 6616 x 10
printf(“x=%d\n”, x);
6617
}
printf(“x=%d\n”, x); 6618
} 6619

Algoritmos e estruturas de dados I 3


Bloco de comandos e escopo

#include <stdio.h> #include <stdio.h>

void main(){ void main(){


int x = 5; int x = 5;
{ {
printf(“x=%d\n”, x); int y = 25;
} printf(“x=%d\n”, x);
printf(“x=%d\n”, x); }
} printf(“y=%d\n”, y);
}

Escopo do x abrange toda a main, Escopo do y está somente entre as


incluindo os blocos internos duas chaves internas

Algoritmos e estruturas de dados I 4


Bloco de comandos e escopo
#include <stdio.h>

void main(){
int x = 5;
{
int x = 10;
{
int x = 15;
printf("x=%d\n", x);
}
printf("x=%d\n", x); Escopo do x = 15
}
Escopo do x = 10
printf("x=%d\n", x);
}
Escopo do x = 5

Quando existem múltiplas declarações de uma mesma variável abrangendo


o mesmo escopo, é considerada a variável com declaração mais interna!

Algoritmos e estruturas de dados I 5


Condições
● Os programas em C vistos até agora são sequenciais
○ um comando é executado após o outro, do começo ao fim, na
ordem em que eles aparecem no código-fonte
○ Nenhum comando é ignorado

● Porém realizamos algoritmos que tinham condições


Início

Recebe V1,V2

Sim
Algoritmo para ler dois valores V1>V2 Imprime “V1”
e imprimir o maior deles Não

Imprime “V2”

Fim

Algoritmos e estruturas de dados I 6


Condições em C: IF
● O if Indica ao computador que ele deve executar um
conjunto de sentenças subordinadas apenas se a condição
(expressão) for atendida
○ Em C, o valor 0 representa falso. Qualquer valor diferente de 0 é
verdadeiro

if(condição) #include <stdio.h>


comando; // executa se verdade
#define SENHA 123456

int main(){
int numero;
scanf(“%d”,&numero);
if(numero == SENHA)
printf(“Acesso Permitido!\n”);
return 0;
}

Algoritmos e estruturas de dados I 7


Condições em C: IF
● O if Indica ao computador que ele deve executar um
conjunto de sentenças subordinadas apenas se a condição
(expressão) for atendida
○ Em C, o valor 0 representa falso. Qualquer valor diferente de 0 é
verdadeiro

#include <stdio.h>

int main(){
if(0)
printf(“Valor 0\n”);
if(0.0)
printf(“Valor 0.0\n”);
if(1)
printf(“Valor 1\n”);
if(1.1)
printf(“Valor 1.1\n”);
return 0;
}

Algoritmos e estruturas de dados I 8


Condições em C: ELSE
● Podemos também determinar um comando para quando a
condição é falsa usando o else
○ O comando else é opcional

if(condição) #include <stdio.h>


comando; // executa se verdade
else #define SENHA 123456
comando; // executa se falso
int main(){
int numero;
scanf(“%d”,&numero);
if(numero == SENHA)
printf(“Acesso Permitido!\n”);
else
printf(“Acesso Negado!\n”);
return 0;
}

Algoritmos e estruturas de dados I 9


Praticando condições com IF-ELSE
➔ Implemente o algoritmo do fluxograma a seguir para um
programa na linguagem C

Início

Recebe V1,V2

Sim
Algoritmo para ler dois valores V1>V2 Imprime “V1”
e imprimir o maior deles Não

Imprime “V2”

Fim

Algoritmos e estruturas de dados I 10


Praticando condições com IF-ELSE
➔ Implemente o algoritmo do fluxograma a seguir para um
programa na linguagem C

Início
#include <stdio.h>

int main(){ Recebe V1,V2


int v1, v2;
scanf(“%d%d”,&v1, &v2); Sim
if(v1 > v2) V1>V2 Imprime “V1”
printf(“%d\n”, v1);
else Não
printf(“%d\n”, v2);
return 0; Imprime “V2”
}

Fim

Algoritmos e estruturas de dados I 11


Praticando condições com IF-ELSE
➔ Elabore um programa que receba a idade de uma pessoa e
mostre na saída qual categoria a pessoa se encontra
○ 10-14 Infantil
○ 15-17 Juvenil
○ 18-50 Adulto
○ >= 51 Idoso

Algoritmos e estruturas de dados I 12


Praticando condições com IF-ELSE
➔ Elabore um programa que receba a idade de uma pessoa e
mostre na saída qual categoria a pessoa se encontra
○ 10-14 Infantil
○ 15-17 Juvenil
○ 18-50 Adulto #include <stdio.h>
○ >= 51 Idoso
int main(){
int idade;
printf(“Insira sua idade: “);
scanf(“%d”,&idade);
if(idade <= 14 && idade >= 10)
printf(“Infantil\n”);
if(idade <= 17 && idade >= 15)
printf(“Juvenil\n”);
if(idade <= 50 && idade >= 18)
printf(“Adulto\n”);
if(idade >= 51)
printf(“Idoso\n”);
return 0;
}

Algoritmos e estruturas de dados I 13


Executando mais comandos no IF-ELSE
● Caso o programador desejar que mais de um comando seja
executado, terá que usar um bloco de comandos
○ É recomendado que sempre use o bloco de comando mesmo que
tenha apenas um comando

if(condição){ #include <stdio.h>


comando 1;
comando 2; #define SENHA 123456

comando n; int main(){
} else { int numero;
comando 1; scanf(“%d”,&numero);
comando 2; if(numero == senha){
… printf(“Acesso Permitido!\n”);
comando n; printf(“Seu saldo é de 400,00\n);
} }
return 0;
}

Algoritmos e estruturas de dados I 14


Praticando condições com IF-ELSE
➔ Faça um programa que receba os coeficientes de uma
equação de segundo grau e calcule as raízes usando a
fórmula de Bhaskara

Dica: para calcular a raíz quadrada, use a função double


sqrt(double) da biblioteca <math.h>
○ Exemplo: sqrt(4.0) retorna o valor 2.0 do tipo double

Algoritmos e estruturas de dados I 15


Praticando condições com IF-ELSE
➔ Faça um programa que receba os coeficientes de uma
equação de segundo grau e calcule as raízes usando a
fórmula de Bhaskara
#include <stdio.h>
#include <math.h>

int main(){
int a, b, c;
float delta, x1, x2;

scanf(“%d%d%d”, &a, &b, &c);


delta = pow(b,2) + 4*a*c;
if(delta >= 0){
x1 = (-b + sqrt(delta))/(2*a);
x2 = (-b - sqrt(delta))/(2*a);
printf(“Raiz x1 = %f\nRaiz x1 = %f\n”, x1, x2);
} else {
printf(“Não tem raiz real\n”);
}
return 0;
}

Algoritmos e estruturas de dados I 16


Praticando condições com IF-ELSE
➔ Faça um programa que receba os coeficientes de uma
equação de segundo grau e calcule as raízes usando a
fórmula de Bhaskara
#include <stdio.h>
#include <math.h>

int main(){
int a, b, c;
Necessário passar o -lm
float delta, x1, x2;
para compilar
scanf(“%d%d%d”, &a, &b, &c);
-l indica ao compilador
delta = pow(b,2) + 4*a*c;
que queremos incluir
if(delta >= 0){
uma biblioteca
x1 = (-b + sqrt(delta))/(2*a);
x2 = (-b - sqrt(delta))/(2*a);
m indica que é a
printf(“Raiz x1 = %f\nRaiz x1 = %f\n”, x1, x2);
biblioteca math.h
} else {
printf(“Não tem raiz real\n”);
}
return 0;
}

Algoritmos e estruturas de dados I 17


Praticando condições com IF-ELSE
➔ Faça um programa que verifique se o valor de uma variável
é divisível por 2 e por 3

Algoritmos e estruturas de dados I 18


Praticando condições com IF-ELSE
➔ Faça um programa que verifique se o valor de uma variável
é divisível por 2 e por 3

#include <stdio.h>

int main(){
int a = 5;

if(a % 2 == 0 && a % 3 == 0){


printf(“É divisível\n”);
} else {
printf(“Não é divisível\n”);
}
}

Algoritmos e estruturas de dados I 19


Aninhando vários IF-ELSE
● É possível também usar o comando IF dentro do bloco de
comandos de outro IF

#include <stdio.h>

int main(){
int a = 5;

if(a % 2 == 0){
if(a % 3 == 0){
printf(“É divisível\n”);
} else {
printf(“Não é divisível\n”);
}
} else {
printf(“Não é divisível\n”);
}
}

Algoritmos e estruturas de dados I 20


Condições em C: Switch
● Além dos comandos if e else, a linguagem C possui um
comando de seleção múltipla: switch
○ o comando switch apenas verifica se uma variável é igual a um
valor constante
○ indicado quando se deseja testar uma variável em relação a
diversos valores
○ Variável deve ser apenas dos tipos char e int

switch (variável) {
case valor_1:
sequência de comandos;
case valor_2: case valor_1 é o
sequência de comandos; mesmo que:
. . .
case valor_n:
sequência de comandos; valor_1 == variável
default: // Opcional
sequência de comandos;
}

Algoritmos e estruturas de dados I 21


Condições em C: Switch

#include <stdio.h>

int main(){
int x = 10;
switch (x) {
case 5:
printf(“5\n”);
case 10:
printf(“10\n”);
case 15:
printf(“15\n”);
default:
printf(“default\n”);
}
return 0;
}

Algoritmos e estruturas de dados I 22


Condições em C: Switch

#include <stdio.h>

int main(){
int x = 10;
switch (x) {
case 5:
printf(“5\n”);
case 10:
printf(“10\n”);
case 15:
printf(“15\n”);
default: Não deveria aparecer
printf(“default\n”);
} somente o 10?
return 0;
}

Algoritmos e estruturas de dados I 23


Condições em C: Switch
● Fluxograma de um comando switch

Início
switch

Sim
Valor_1 Comandos 1
Uma vez que um case é
Não verdadeiro, todos os comandos do
Sim
Valor_2
case (e posteriores) são
Comandos 2
executados
Não

Comandos
padrão

Fim
switch

Algoritmos e estruturas de dados I 24


Comando break
● O comando break interrompe o fluxo de execução do
switch, fazendo o comando terminar
Início
switch

Sim
Valor_1 Comandos 1 switch (variável) {
case valor_1:
Não comandos 1;
break
break;
Sim
case valor_2:
Valor_2 Comandos 2 comandos 2;
break;
Não break default:
comandos padrão;
Comandos break; // Opcional
padrão }

Fim
switch

Algoritmos e estruturas de dados I 25


Praticando condições com Switch

➔ Faça um programa em C, usando o switch, que verifique


se o usuário digitou o valor 1 ou 2

Algoritmos e estruturas de dados I 26


Praticando condições com Switch

➔ Faça um programa em C, usando o switch, que verifique


se o usuário digitou o valor 1 ou 2
#include <stdio.h>

void main(){

int opcao;
printf( "Digite 1 ou 2: ");
scanf( "%d", &opcao );
switch ( opcao ) {
case 1:
printf( "\nVoce digitou 1." );
break;
case 2:
printf( "\nVoce digitou 2." );
break;
default:
printf( "\nVoce nao digitou 1 nem 2." );
}
}

Algoritmos e estruturas de dados I 27


Considerações importantes sobre o Switch
● Cada caso cobre apenas um possível valor da variável.
Portanto, somente constantes literais ou nomeadas do
mesmo tipo da variável podem ser usadas;

● Não é obrigatório cobrir todas as possibilidades (toda a


faixa de valores do tipo da variável) com os casos;

● O caso default é opcional, mas, se existir, deve ser


sempre o último;

● Se não existir um caso para um determinado valor e


também não existir o caso default e esse valor acontecer,
o comando switch não faz nada.

Algoritmos e estruturas de dados I 28


Algoritmos e estruturas
de dados I
Escopo e Condições

Elverton Fazzion

Algoritmos e estruturas de dados I

Você também pode gostar