Técnicas de Programação. Revisão Conceitual II. Operadores e Funções. Prof.: José Eustáquio Rangel de Queiroz [email protected], [email protected]. Carga Horária: 60 horas. Roteiro I. Operadores Aritméticos Relacionais Lógicos Bit-a-Bit Condicional ? Para Apontadores - PowerPoint PPT Presentation
Informática na Educaçã
[email protected],
[email protected]
Sizeof
Passagem de Parâmetros
{joseana, rangel}@dsc.ufcg.edu.br
{joseana, rangel}@dsc.ufcg.edu.br
Exemplo
Bit Dígito Binário
Byte Agrupamento de 8 bits
{joseana, rangel}@dsc.ufcg.edu.br
Exercício 1 – Conversão de decimal para binário ou vice-versa
Escrever um programa em C que receba do usuário um número inteiro
positivo, representável em até 2 Bytes e o converta do sistema
decimal para binário ou vice-versa
O usuário deverá poder escolher a base de referência para a
conversão – 10 ou 2
O programa deverá ser verificar, uma vez selecionada a base, se o
número digitado pode ser convertido
O programa deverá incluir mensagens de erro elucidativas, a fim de
instruir o usuário no processo de entrada dos dados
{joseana, rangel}@dsc.ufcg.edu.br
Operações em nível de números como padrões de bits
Para cada bit, x e y AND, OR, XOR e NOT
Operador UNÁRIO
{joseana, rangel}@dsc.ufcg.edu.br
{joseana, rangel}@dsc.ufcg.edu.br
Exemplo 2 - Redução de 256 níveis de cinza para 16 com máscara
AND
Operadores XIV
{joseana, rangel}@dsc.ufcg.edu.br
Exemplo 2 – Resultado do mascaramento de bits sobre uma imagem
digital
Imagem original
256
16
{joseana, rangel}@dsc.ufcg.edu.br
Operador << Movimentação de padrões de bits para a
esquerda
Deslocamento de 1 bit para a esquerda ⇒ Multiplicação do valor
codificado por 2
Exemplo
Operadores XVII
Operador >> Movimentação de padrões de bits para a
direita
Deslocamento de 1 bit para a direita ⇒ Divisão do valor codificado
por 2
Exemplo
Operadores XX
Se Exp1 for VERDADEIRA Exp2 se torna o resultado da operação.
Forma geral
Exp1?Exp2:Exp3;
Descrição
Se Exp1 for FALSA Exp3 se torna o resultado da operação.
Operador Condicional ?
Exemplo
Qual o valor atribuído a y na execução do trecho de programa abaixo
?
x = 10;
Operadores Condicional ?
*
&
Operadores XXIV
Qual o valor armazenado na variável destino após a execução do
programa ?
Operadores de Apontadores - Exemplo
Cast Alteração temporária do tipo de uma variável
int main(void)
double f;
}
A divisão de inteiros será efetuada e seu resultado, 1, será
alterado para double, 1.00000
Se qualquer dos operandos for alterado para double, o outro será
automaticamente alterado
Operadores XXV
Operador sizeof
sizeof Mecanismo para a determinação de quantos bytes uma variável
ocupa
#include <stdio.h>
int main(void)
printf(“Uma variavel short ocupa %u bytes\n", sizeof(short));
printf(“Uma variavel double ocupa %u bytes\n", sizeof
double);
return 0;
Operadores XXVI
* / % esquerda para direita
+ - esquerda para direita
<< >> esquerda para direita
< <= >= > esquerda para direita
== != esquerda para direita
& esquerda para direita
| esquerda para direita
^ esquerda para direita
&& esquerda para direita
|| esquerda para direita
?: direita para esquerda
Fortran (1954)
Algol (1958)
LISP (1957)
Scheme (1975)
{joseana, rangel}@dsc.ufcg.edu.br
/* Bibliotecas */
const float PI=3.141592654;
}
Definição 1:
C permite aninhamento de blocos.
Delimitadores de blocos: { }
{joseana, rangel}@dsc.ufcg.edu.br
Funções são blocos precedidos de um cabeçalho que consiste
em:
nome da função;
{joseana, rangel}@dsc.ufcg.edu.br
tipo_de_retorno nome_da_função(declaração_de_parâmetros)
if (a%2) /* Verifica se a for divisivel por 2 */
return 0; /* Retorna 0 se a nao for divisivel por
2*/
else
}
Funções VII
Escreva a função 'EDivisivel(int a, int b)' (tome como base
EPar(int a)). A função deverá retornar 1 se o resto da divisão de a
por b for zero. Caso contrário, a função deverá retornar 0.
Exercício 2
Regras de Escopo de Variáveis
Variáveis declaradas em um bloco externo são também válidas no
bloco interno ao primeiro.
Variáveis declaradas em um bloco são GLOBAIS para todos os blocos
internos e LOCAIS para o próprio bloco.
Uma variável declarada dentro de um bloco só é conhecida dentro
daquele bloco (e dos blocos internos a ele).
{joseana, rangel}@dsc.ufcg.edu.br
y é variável GLOBAL para B e C.
x é variável LOCAL de B e de C.
x de B e x de C são variáveis distintas, invisíveis em A.
{joseana, rangel}@dsc.ufcg.edu.br
Chamada de Funções
{joseana, rangel}@dsc.ufcg.edu.br
int main() /* Programa principal também é função */
{
printf("%d",c);
int abs(int x) /* cabeçalho */
int res;
Passagem de Parâmetros
Em C, a passagem de parâmetros é sempre por valor (cópia local da
variável original).
A função recebe uma cópia temporária e particular de cada argumento
e, portanto, não pode afetar o argumento original da função
chamada.
{joseana, rangel}@dsc.ufcg.edu.br
int main()
void IncImprime(int valor)
const float PI = 3.141592654;
/* Protótipos (cabeçalhos) das funções */
/* Programa principal */
int main(){
else return b;
void nome_da_função(declaração_de_parâmetros);
tipo_de_retorno nome_da_função(void);
Protótipo de uma função que não tem parâmetros e não retorna
nada:
void nome_da_função(void);
Sem especificação quanto à classe de armazenamento
void main() /* cabeçalho */
} /* término do bloco interno */
} /* término do bloco externo */
Variáveis declaradas fora de uma função
Valor acessível (visível) a todas as funções do módulo no qual
ocorre sua definição
int y;
void main()
} /* término da função main*/
} /* término da função func*/
Memória alocada em tempo de compilação
Ao término do processamento da função, o conteúdo é mantido (novas
chamadas)
{joseana, rangel}@dsc.ufcg.edu.br
Visível apenas no arquivo no qual foi definida
Inacessível a outros módulos posteriormente integrados ao arquivo
no qual foi definida
{joseana, rangel}@dsc.ufcg.edu.br
Classe Registrador register
Indicação ao compilador que seu conteúdo é utilizado com muita
freqüência
Solicitação de alocação de um registrador da CPU para processamento
da variável
Regras
O tipo da variável deve caber (bits) no registrador
{joseana, rangel}@dsc.ufcg.edu.br
Só contêm protótipos de funções
Leitura dos protótipos pelo compilador e geração do código correto
baseado nas informações contidas no arquivo-cabeçalho
Compilação prévia do corpo das funções com protótipos e inclusão ao
programa usualmente no instante da "linkagem“
Possibilidade de reuso de funções em programas ou módulos de
programas, a partir do uso de arquivos-cabeçalhos
{joseana, rangel}@dsc.ufcg.edu.br
Declaração da(s) função(ões) em um arquivo-cabeçalho chamado
funcao.h (e.g. int EPar(int a))
Construção do código da função em um arquivo à parte (e.g. funcao.c
)
Construção do código do programa principal em outro arquivo (e.g.
principal.c)
#include <stdio.h>
#include "funcao.h"
void main ()
{
a = (a+b)/2; /* Qual eh o valor de a apos a atribuicao? */
num -= a;
return a;
num = 10;
num += func(prim, seg); /* Qual eh o valor de num, prim e seg
*/
/* antes e depois da atribuicao? */
printf("\n\nConfira! num=%d\tprim=%d\tseg=%d",num,prim,seg);
}
Exemplo FATORIAL
return res;