Você está na página 1de 40

Curso de Extensão - 2008

C
Linguagem
Para Engenharia()
{
aplicação à programação
de microcontroladores;
}
Professor Tiago Balen
Na última aula
Aula 1 – 09/05/2009
1) Introdução à lógica de programação
2) Introdução à linguagem C
3) Declaração e utilização de bibliotecas
4) Diretivas de compilação
5) Declaração de variáveis / tipos de dados
6) Estrutura geral de um programa em C
7) Funções de entrada e saída
Hoje
Aula 2 – 16/05/2009
1) Operadores matemáticos, lógicos,
relacionais, incremento/decremento e
igualdade
2) Testes de condição (if, switch/case)
3) Laços de repetição (for, while, do/while)
4) Funções
Operadores
 São elementos da linguagem utilizadas para
alterar valores de variáveis, a fim de realizar
uma determinada operação
 Tipos de operadores:
 Atribuição
 Aritméticos
 Incremento/decremento
 Relacionais
 Lógicos
 Operadores de ponteiros
 Outros operadores especiais
Operadore de Atribuição
 Utilizado para atribuir um valor a uma variável,
diretamente, ou através de uma expressão
 Seu símbolo é um sinal de igualdade: =
 Utilização:
nome_da_variavel = expressão, valor ou variável;
Exemplo:
int x=1, y=7, z;
z=x+y; O operador de atribuição não é igual ao
operador relacional de igualdade, como
veremos posteriormente
Conversão de tipos na Atribuição
 Em C, pode-se atribuir à uma variável de
um tipo o valor de uma variável de outro
tipo
 A variável do lado direito da expressão é
convertida no tipo do lado esquerdo
 Para isso se houver uma redução de tipo
o valor da variável maior é truncado,
ignorando-se os BITs mais significativos
Conversão de tipos na Atribuição
 Exemplo:
int x = 100; // incializa as variáveis atribuindo 100 para “x”,
char letra = ‘C’; // “C” para letra e
float f; // nada para “f”
void funcao(void) // cria a função “funcao” – veremos depois
{
letra = x; // atribui o valor de “x” à variável “letra”
x = f; // atribui o valor de “f” à variável “x”
f = letra; // atribui o valor de “letra” à variável “x”
f = x ; // atribui o valor de “x” à variável “f”
Múltiplas atribuições:
}
y = z = x = w = 1;
Operadores Aritméticos
 São operadores matemáticos

- Subtração ou indicador de no negativo


+ Adição
* Multiplicação
/ Divisão
% Módulo (resto da divisão)
-- Decremento
++ Incremento
Operadores Aritméticos
 Exemplos:
Operações básicas:
y = x +5; z = y – x; w = w*w; h = 1/w;

Módulo:
x = y%2; // divide y por dois e atribui o resto da divisão à x
// se no momento da operação y tiver o vlor 3,
por // exemplo: (3/2 = 1 com resto =1), o resto (1)
será // atribuído a x
Operadores Aritméticos
 Exemplos:
Incremento
x++; // ambas instruções incrementam a variável x em uma
++x; // unidade (x=x+1)

Decremento
x--; // ambas instruções decrementam a variável x em uma
--x; // unidade (x=x-1)
A ordem do operador (prefixo ou sufixo) é tratada de maneira diferente
quando aparece em expressões ou testes condicionais

x = 5;
y = ++x; // incrementa x e y recebe x (6)
Exercício
 Crie um projeto no LCC
 Abra o arquivo texto exemplo1.txt (teleduc)
 Cole o código fonte na área de edição do programa
 Estude o programa tentando prever seu funcionamento
 Salve, compile e execute (ctrl+S; ctrl+F5)
 Entre com valores de variáveis tal que y > x;
 Remova o comentário que anula uma das linhas do
programa e re-execute
 Posteriormente escreva algumas linhas para treinar as
funções de decremento e incremento
Operadores relacionais
 São operadores normalmente usados em teste
condicionais do tipo: “se y > x então faça isso...”

> Maior que


>= Maior ou igual que
< Menor que
<= Menor ou igual que
== Igual
!= Diferente
Operadores lógicos
 Utilizados para realiza operações Lógicas e Booleanas
 Podem operar sobre uma variável como um todo ou BIT a BIT

 Breve Revisão

And Or
Operadores lógicos

&& And (E)


|| Or (ou)
! NOT (Não ou negação)

Exemplo
z = (6>4) && !(13<2) || (3<=4); // neste caso z receberá o valor
// booleano 1 (verdadeiro)

Este tipo de operação é comum em testes. Exemplo:


If (a>b)....
If ( (c||d) & !h )...
Operadores lógicos
BIT a BIT
Variáveis que são testadas ou operadas com estes operadores,
sofrem modificações BIT a BIT

& And (E)


| Or (ou)
^ XOR (Ou exclusivo)
~ NOT (Não ou negação)
>> deslocamento (shift) direita
<< deslocamento (shift) esquerda
Operadores lógicos
BIT a BIT
Exemplos:

a = 5; // valor binário correspondente: 00000101


b = 3; // valor binário correspondente: 00000011
c = !a; // c receberá 0 pois o resultado é falso
c = ~a; // c receberá o valor binário 11111010 que corresponde a 250
c = a | b; // c receberá 00000111 que corresponde a 7
c = a & b; // c receberá 00000001 que corresponde a 1
c = a ^ b; // c receberá 00000110 que corresponde a 6
a = a << 1; // c receberá 00001010 que corresponde a 10
Testes Condicionais
 if, do inglês, significa SE, é usado para testar alguma
determinada condição e a partir do resultado executar
alguma operação
 else significa senão, é executado caso a condição do if
não seja atendida
 Sintaxe:
if (condição) comando;
else comando;
 Exemplo
if (x>y) x++;
else y++;
Testes Condicionais
 Quando um bloco grande de programa é condicionado a
um teste de um if convém particionar os blocos
 Exemplo
if (x=7)
{
...
}
else
{
...
}
Testes Condicionais
 Teste sobre múltiplas condições
 Exemplo
if (x == 7) { ... }
else if (x == 1) { ... }
else if (x == 0) { ... }
else { ... }

 As condições são testadas até alguma ser atendida,


quando isto ocorrer as outras condições não são mais
testadas e o programa continua sendo executado abaixo
do ultimo else
Testes Condicionais
 Quando o else não é utilizado todas as condições são
testadas independente de uma já ter sido atendida
if (x == 7) { ... }
if (x == 1) { ... }
if (x == 0) { ... }
else { ... }
Testes Condicionais
 ifs aninhados: quando um teste if é executado dentro de um bloco objeto de
um outro if. Exemplo:

if (x < 10)
{
if (x == 1) { ... }
elseif (x == 2) { ... }
else
A IDENTAÇÃO é um recurso não
{
obrigatório, mas que organiza e
if (x%2)
torna mais legível e compreensível
{ o código fonte em C. Principalmente
printf(“...”); quanto há muitos bloco condicionais
} aninhados
}
}
Testes Condicionais
 Uma alternativa para o teste de condições é o comando switch que testa uma
variável ou expressão sucessivamente contra uma lista de valores inteiros ou
caracteres
 Sintaxe:
switch(expressão)
{
case constante1:
sequência de comandos;
break;

case constante2:
sequência de comandos;
break;

...

default:
sequência de comandos;
}
Testes Condicionais
 Exemplo
switch(x)
{
case 1:
x = x-1;
break;

case 2:
x = x-2;
break;

...

default:
x = x;
}
Exemplo
 Demonstração de programa
Exercício
 Crie um projeto no LCC
 Abra o arquivo texto exemplo2.txt (teleduc)
 Cole o código fonte na área de edição do programa
 Estude o programa tentando prever seu funcionamento
 Salve, compile e execute (ctrl+S; ctrl+F5)
 Adicione uma nova opção qualquer no menu principal do
programa (inicial)
 Adicione uma nova opção de operação (x2) a ser
realizada
Laços de Repetição
 Os principais comandos de repetição da linguagem C são:
 for
 while
 do / while
 São utilizados para repetir um determinado trecho de
programa um numero de vezes que pode ser:
 definido
 indefinido
 infinito
Laço de Repetição for
 O laço for
 Sintaxe:
for(inicialização; condição; incremento/decremento)
{
sequência de comandos;
}
 Exemplo
for(x=0; x<10; x++) printf(“ %d”, x); // imprime o valor da variavel x em
// cada iteração do laço
Laço de Repetição for
 Laço for encadeado

for(x=0; x<10; x++)


{
for(y=0; y<10; y++)
{
printf(“ %d”, x);
}
}
Exercícios
 Analise e execute os programas for1 e for2 (estão em
arquivos txt)
 Em cada programa modifique os intervalos de repetição, e
as ações dos laços
Laço de Repetição while
 While significa enquanto em inglês
 É usado para repetir um trecho de programa enquanto uma
determinada condição for ou não for satisfeita
 Sintaxe:
while(x==0) // primeiro testa a condição, se esta for satisfeita
{ // entra no laço
...
} // enquanto x = 0 repete o laço

 Observe que neste caso quando o programa entra na laço (x==0) só


sairá quando x for modificado, para isso é necessário que dentro do
laço exista a possibilidade de modificação
Laço de Repetição do{...}while
 Forma alternativa do laço while
 Condição é testada no final do laço
 Garante que laço seja executado ao menos uma vez
 Sintaxe:
do{ // entra no laço
... // executa uma vez
}while(condição) // se e enquanto a condição for satisfeita
// repete o laço

 Da mesma maneira é necessário que dentro do laço exista a


possibilidade de modificação da variável que esta sendo testada
Exercícios
 Analise e execute o programa exemplo3.txt
 Verifique como a inserção do laço do{}while permite que o
programa seja repetido sempre que desejado
Laço while infinito
 Em determinadas situações pode-se desejar que um
programa seja executado repetidamente, de maneira
ininterrupta
 Este modo de operação é freqüentemente utilizado em
sistemas eletrônicos embarcados, onde um
microcontrolador usualmente tem a função de monitorar
entradas continuamente, processá-las e atuar sobre saídas
 Isso se faz através do laço while, garantindo que a condição
de teste é sempre verdadeira. Exemplo:

while(1) // a condição é verdadeira e nunca é modificada


{ // entra no laço e não sai mais, executa para sempre
...
}
Funções
 São trechos de programa que, por serem,
bastante utilizados são definidos como
funções
 São declarados uma vez apenas, e quando
tem que ser repetidos são “chamados” pelo
programa
 Podem receber ou não parâmetros e
retornar ou não valores
Funções
 Forma geral de uma função

tipo nome_da_função(tipo param1, tipo param2...)


{
corpo da função;
return variável ou valor;
}
Funções
 Exemplo, declaração:
float soma(float a, float b)
{
float res;
res = a+b;
return res;
}

 Chamada

X = soma(y, z); // chama a função soma passando


os // parâmetros y e z, result retornados
armazenados em x
Funções
 Pode-se declara e definir a função antes de main:

float soma(float a, float b)


{
float res;
res = a+b;
return res;
}

void main()
{
programa principal;
}
Funções
 Ou declarar antes e definir no final

float soma(float a, float b);

void main()
{
programa principal;
}

float soma(float a, float b)


{
float res;
res = a+b;
return res;
}
Funções
 Chamada
 Por valor
 Por referência
Exercício
 Altere o código do programa “calculadora”
(exemplo3) para que cada operação matemática
seja realizada por uma função

Você também pode gostar