Buscar

Aula_02_C_Algoritmos

Prévia do material em texto

Algoritmos
BCC
Diego Bertolini
diegobertolini@gmail.com
http://www.inf.ufpr.br/diegob/
Aula 002 – Introdução à Ling. 
C.•Aula Anterior:
• Introdução à linguagem C.
•Aula de Hoje:
• Operadores aritméticos, lógicos e relacionais.
Operador de Atribuição “=”
• A Atribuição “ = “ é uma das operações mais usadas na 
programação ;
• Responsável por atribuir determinado valor a uma 
variável ;
• Em linguagem C, o uso do operador “=” segue esta 
forma geral:
nome_da_variavel = expressao ;
• Por expressão, entende-se: Valores, Variáveis, 
Constantes ou Chamadas de Funções ;
Exemplos:
• A Atribuição “ = “ é uma das operações mais usadas na 
programação ;
• Responsável por atribuir determinado valor a uma 
variável ;
• Em linguagem C, o uso do operador “=” segue esta 
forma geral:
nome_da_variavel = expressao ;
• Por expressão, entende-se: Valores, Variáveis, 
Constantes ou Chamadas de Funções ;
Exemplos:
Operador de Atribuição “=”
• A Linguagem C suporta Múltiplas Atribuições ;
Operador de Atribuição “=”
• A Linguagem C também permite atribuição entre dois 
tipos básicos diferentes ;
• O compilador converte automaticamente o valor do lado 
direito para o tipo do lado esquerdo do comando de 
atribuição “=”;
• Durante a etapa de conversão de tipos, pode haver 
perda de informação.
Operador de Atribuição “=”
• Na conversão de tipos, durante a atribuição, pode haver 
perdas...
Operadores Aritméticos
Operadores Aritméticos
Operador de Atribuição “=”
• Podemos devolver o resultado de uma expressão a uma 
variável ;
• Ou para um outro comando ou função que espere 
receber um valor do mesmo tipo do resultado da 
operação.
• De modo geral, os operadores aritméticos são 
operadores binários (atuam sobre dois valores); 
• Os operadores de Adição e Subtração podem ser 
unários ;
• x = - y ;
• X = (-1) * y ;
Operador de Atribuição “=”
• Em uma operação utilizando o operador de quociente (/), Em uma operação utilizando o operador de quociente (/), 
se o numerador e o denominador forem números se o numerador e o denominador forem números 
inteiros, por padrão o compilador retornará apenas a inteiros, por padrão o compilador retornará apenas a 
parte inteira da divisão ;parte inteira da divisão ;
Operadores Relacionais
• Os operadores relacionais são aqueles que operam 
sobre dois valores (valores, variáveis, constantes ou 
chamadas de funções) e/ou expressões e verificam a 
magnitude (qual é maior ou menor) e/ou igualdade entre 
eles.
• Os operadores relacionais são operadores de 
comparação de valores ;
• A linguagem C possuem 6 operadores relacionais:
Operadores Relacionais
Operadores Relacionais
• Como resultado, esse tipo de operador retorna:
• O valor UM (1), se a expressão relacional for 
considerada VERDADEIRA ;
• O valor ZERO (0), se a expressão relacional for 
considerada FALSA ; 
Operadores Relacionais
Operadores Lógicos
• Certas situações não podem ser modeladas apenas 
utilizando operadores aritméticos e relacionais ;
• Um exemplo bem simples disso é saber se determinada 
variável esta dentro de uma faixa de valores ;
• Por exemplo:
0 < x < 10
Para modelar esse tipo de situação, a linguagem C 
possui um conjunto de três operadores Lógicos.
Operadores Lógicos
Operadores Lógicos
• Operador E (&&): A expressão só é verdade se ambas as 
expressões unidas por esse operador também forem.
• Operador OU (||): A expressão resultante é verdadeira se 
alguma das expressões unidas por esse operador também 
for.
• Operador NEGAÇÃO (!): Inverte o valor lógico da 
expressão à qual se aplica. 
• Os operadores Lógicos atuam sobre valores lógicos e 
retornam um valor lógico
• 1 : Se a expressão for verdadeira ;
• 0 : Se a expressão for falsa;
Operadores Lógicos
Tabela Verdade
Operadores de Atribuição 
Simplificada
• Muitos operadores são sempre usado em conjunto com o 
operador de atribuição ;
• Para tornar esta tarefa mais simples, a Linguagem C permite 
simplificar algumas expressões
Operadores de Atribuição 
Simplificados.
• Exemplos:
Op. Significado Exemplo
*= Aritmético de atribuição 
(multiplicação)
N*=2; equivale a N=N*2;
/= Aritmético de atribuição (divisão) N/=4; equivale a N=N/4;
%= Aritmético de atribuição (módulo) N%=5; equivale a N igual ao resto da divisão de N por 5;
+= Aritmético de atribuição (adição) N+=3; equivale a N=N+3;
-= Aritmético de atribuição (subtração) N-=2; equivale a N=N-2;
Operadores de Pré e Pós Incremento
• Além dos operadores simplificados, a linguagem C também 
possui operadores de incremento (++) e decremento (--). 
Esses operadores podem ser utilizados sempre que for 
necessário somar uma unidade (incremento) ou subtrair 
uma unidade (decremento) a determinado valor.
– Incremento (++)
– Decremento (–)
Exemplos:
– x++ → x = x + 1
– y-- → y = y - 1 
– ++x → x = x + 1
– --y → y = y - 1 
Operadores de Pré e Pós Incremento
• Note que este operador pode ser usado antes ou depois do 
nome da variável, com uma diferença significativa:
– ++x (pré-incremento): Soma +1 a variável x antes de 
utilizar seu valor ;
– x++ (pós-incremento): Soma +1 a variável x depois de 
utilizar seu valor ;
– --x (pré-decremento): Subtrai -1 a variável x antes de 
utilizar seu valor ;
– x-- (pós-decremento): Subtrai -1 a variável x depois de 
utilizar seu valor ;
Operadores de Pré e Pós Incremento
• Essa diferença de sintaxe no uso do operador não tem 
importância se o operador for usado sozinho;
Operadores de Pré e Pós Incremento
• Porém, se esse operador for utilizado dentro de uma 
expressão aritmética, a diferença entre os dois operadores 
será evidente;
Operadores de Pré e Pós Incremento
– y = ++x ; é equivalente à: 
– x = x + 1
– y = x
– y = x++ ; é equivalente à :
– y = x ;
– x = x + 1 ;
Modeladores de Tipo (casts)
Modeladores de tipo ou (type cast) são uma forma explícita 
de conversão de tipo, na qual o tipo a ser convertido é 
explicitamente definido dentro de um programa. Em 
linguagem C, o uso do modelador de tipo, segue a forma 
geral:
(nome_do_tipo) expressão
– Um modelador de tipo é definido pelo próprio 
nome_do_tipo entre parênteses. Ele é colocado à frente 
de uma expressão e tem como objetivo forçar o 
resultado da expressão a ser de um tipo especificado
Modeladores de Tipo (casts)
Modeladores de Tipo (casts)
Operador Vírgula (,)
Na Linguagem C, o operador vírgula pode ser utilizado de 
duas maneiras ;
– Como pontuação para separar elementos de uma 
função:
• int minha_funcao (int a , int b, float r)
- Para determinar uma lista de expressões que devem 
ser executadas sequencialmente:
X = (y = 2 , y + 3) ;
Nesse caso, as expressões serão executadas da esquerda 
para direita;
Precedência de Operadores
A Linguagem C contém muitos operadores. 
Consequentemente o uso de muitos operadores em uma 
expressão pode tornar confuso a sua interpretação. Por esse 
motivo a linguagem C possui uma série de regras de 
precedência de operadores. 
Isso permite que o compilador possa decidir corretamente 
qual a ordem que os operadores serão executados ;
Seguem basicamente as regras matemáticas ;
Pode-se utilizar parênteses para forçar o compilador a 
executar uma parte da expressão antes das demais ;
Tabela em pdf.
Lista dos Mais Utilizados...
• Exemplos:Op. Significado Exemplo
= Atribuição A=5; caracter=‘B’;
*= Aritmético de atribuição 
(multiplicação)
N*=2; equivale a N=N*2;
/= Aritmético de atribuição (divisão) N/=4; equivale a N=N/4;
%= Aritmético de atribuição (módulo) N%=5; equivale a N igual ao resto da divisão de N por 5;
+= Aritmético de atribuição (adição) N+=3; equivale a N=N+3;
-= Aritmético de atribuição (subtração) N-=2; equivale a N=N-2;
+ Soma A=A+1;
- Subtração Total=subtotal-desconto;
* Multiplicação nota=nota*2;
/ Divisão Comissão=lucro/4;
% Módulo (retorna o resto da divisão) Resto=8%3;
++ Incrementa de um o operando i++;
-- Decrementade um o operando j--;
Atividades:
Bloco de Comandos
• Blocosde código formados por um ou mais comandos 
que são tratados como uma unidade.
• Em C, os delimitadores de bloco: { e };
• Utilizados normalmente em conjunto com outros 
comandos: if(), while(), for();
Escopo de Variáveis
• Trata sobre a acessibilidade das variáveis.
• Escopo de uma variável entende-se o bloco de código onde esta variável é 
válida.
• Escopo local: visível em um local específico
• Exemplo: variáveis locais de uma função.
• Escopo global: visível a todo o programa.
• Exemplo: variáveis globais do programa.
Escopo de Variáveis
• Algumas regras a partir do conceito:
• As variáveis valem no bloco que são definidas;
• As variáveis definidas dentro de uma função recebem o nome 
de variáveis locais;
• Os parâmetros formais de uma função valem também somente 
dentro da função;
• Uma variável definida dentro de uma função não é acessível 
em outras funções, mesmo que tenham nomes idênticos.
Escopo de Variáveis
main
funcaoB
funcaoA
funcaoC
funcaoB: 3
funcaoA: 1
funcaoC: 4
resultado
Teste de Mesa
• Consiste em elencar as variáveis em uma espécie de 
tabela e mostrar as alterações que estas sofrem no 
decorrer da execução do programa.
Funções
• É o conceito de subprogramas
• Permite modularizar um programa → divisão em 
várias partes
• É um conjunto de comandos agrupados em um 
bloco que recebe um nome e através deste 
nome pode ser invocado (chamado).
Por que usar?
• Reaproveitamento de código existente.
• Evitar que um trecho de código que seja repetido várias 
vezes dentro de um mesmo programa.
• Permitir a alteração de um trecho de código de uma 
forma mais rápida. Com o uso de uma função é preciso 
alterar apenas dentro da função que se deseja;
• Para que os blocos do programa não fiquem grandes 
demais → mais difíceis de entender;
• Facilitar a leitura do programa-fonte → legibilidade
• Para separar o programa em partes (blocos) que 
possam ser logicamente compreendidos de forma 
isolada.
Funções de entrada e saída
• Exemplo que já vimos de uso de funções.
Formato Geral de uma função em 
C
• A Lista de Parâmetros (lista_de_parametros) ou Lista de 
Argumentos, é opcional.
• O próprio main (programa principal) é uma função.
tipo_da_funcao NomeDaFuncao (lista_de_parametros)
{
 /* corpo da função */
}
int main(){
/* Corpo do programa principal */
return 0;
}
Parâmetros
• A utilização de parâmetros torna o uso de 
funções um pouco mais amplo.
• Eles determinam sobre quais dados a função 
trabalhará.
• A função printf(“Olá Mundo!”) recebe por 
parâmetro a mensagem “Olá Mundo!” e a 
imprime na saída padrão.
Parâmetros
• A definição de parâmetros é feita da mesma forma que a 
declaração de variáveis, entre os parênteses do 
cabeçalho da função.
• Caso precise declarar mais de um parâmetro, basta 
separá-los por vírgulas.
• No exemplo a seguir temos a função SOMA que possui 
dois parâmetros, sendo o primeiro um float e o segundo 
um int.
Parâmetros (aqui)
Parâmetros Formais
• Os parâmetros da função na sua declaração são 
chamados parâmetros formais.
Parâmetros Reais
•Na chamada da função os parâmetros são 
chamados parâmetros reais ou atuais.
Retorno da função
• O valor que será retornado para o chamador da função.
• Deve respeitar o tipo de retorno declarado.
Retorno da função
• O valor que será retornado para o chamador da função.
• Deve respeitar o tipo de retorno declarado.
Passagem de parâmetros
• Dois tipos:
–Por valor
–Por referência
• Os parâmetros são passados para uma função de 
acordo com a sua posição.
• O primeiro parâmetro real (da chamada) define o valor o 
primeiro parâmetro formal (na definição da função)
• O segundo parâmetro atual define o valor do segundo 
parâmetro formal e assim por diante.
• Os nomes dos parâmetros na chamada não tem relação 
com os nomes dos parâmetros na definição da função.
Passagem por valor
• Os parâmetros reais devem ser do mesmo tipo que os 
parâmetros formais, respectivamente.
• Se foi declarado (formalizado):
float soma(float a, int b)
A chamada à função:
 soma(1.0, 2)
deve respeitar a ordem estabelecida na declaração formal 
da função.
O primeiro parâmetro é um float e o segundo é um int.
Passagem por valor
• As alterações feitas a um parâmetro formal NÃO 
modifica o parâmetro real correspondente.
• {EXEMPLO: param_por_valor.c}
Passagem por referência
• Os parâmetros reais devem ser endereços de memória.
• Os parâmetros formais devem ser ponteiros.
• Se foi declarado (formalizado):
float soma(float *a, int *b)
A chamada à função:
float x = 1.2;
int t = 5;
soma(&x, &t)
Passagem por referência
• A alteração de um parâmetro formal MODIFICA o 
parâmetro real correspondente.
Forma de Organizar
• A princípio podemos tomar com regra:
• “toda função deve ser declarada antes de ser usada”
• Foi o que fizemos até agora → definir as funções antes 
de usa-las.
• Na definição da função está implícita a declaração.
• Pode-se preferir que a função principal (main) seja a 
primeira parte do programa.
• A linguagem C permite que se declare uma função, 
antes de defini-la.
• Esta declaração é feita através do protótipo da função, 
que é a assinatura da função → trecho de código que 
especifica o nome e os seus parâmetros.
Exemplo de prototipação de 
funções
• Prototipadas antes de serem usadas, sendo chamadas 
antes de serem definidas.
Exemplo de prototipação de 
funções
• Prototipadas antes de serem usadas, sendo chamadas 
antes de serem definidas.
Declaradas
Chamadas
Exemplo de prototipação de 
funções
• Definições das Funções depois do main.
Definições
depois do main, 
na ordem
que se preferir.
Verificação de Parâmetros
• Os parâmetros atuais (aqueles da chamada da função) 
devem ser dos mesmos tipos dos parâmetros formais.
• Se isto não ocorrer, dependendo do compilador, ele 
pode se encarregar de converter automaticamente (cast 
automático).
• No caso de você declarar corretamente a função antes 
de usá-la, a conversão de tipos é feita como no caso de 
variáveis.
Verificação de Parâmetros
Na segunda chamada, a 
função multiplicar é chamada 
com os parâmetros reais dos 
tipos int e float, nesta ordem. 
Como na declaração da 
função o primeiro parâmetro é 
float e o segundo é int, é feita 
uma conversão de int para 
float e de float para int, 
respectivamente.
Exercícios
1) Modificar o programa do cálculo da média para que 
utilize uma função media(...) no cálculo.
2) Ler um número e chamar uma função que retorna o 
dobro e o quadrado do número.
3)Ler os coeficientes (a, b, c) de uma equação do 2º grau 
e chamar uma função que retorne o valor do delta e das 
raízes.
Dúvidas, Críticas ou 
Sugestões
diegobertolini@gmail.com
Operadores Aritméticos
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16
	Slide 17
	Slide 18
	Slide 19
	Slide 20
	Slide 21
	Slide 22
	Slide 23
	Slide 24
	Slide 25
	Slide 26
	Slide 27
	Slide 28
	Slide 29
	Slide 30
	Slide 31
	Slide 32
	Slide 33
	Slide 34
	Slide 35
	Slide 36
	Slide 37
	Slide 38
	Slide 39
	Slide 40
	Slide 41
	Slide 42
	Slide 43
	Slide 44
	Slide 45
	Slide 46
	Slide 47
	Slide 48
	Slide 49
	Slide 50
	Slide 51
	Slide 52
	Slide 53
	Slide 54
	Slide 55
	Slide 56
	Slide 57
	Slide 58
	Slide 59
	Slide 60
	Slide 61
	Slide 62
	Slide 63
	Slide 64
	Slide 65
	Slide 66

Continue navegando