linguagem de programação aula 06 – macros e funções
Post on 17-Apr-2015
116 Views
Preview:
TRANSCRIPT
Linguagem de Programação
Aula 06 – Macros e Funções
Média de uma seqüência de valores
Dado n positivo e uma seqüência de n números reais calcular a média dos elementos da seqüência.
Faça um loop para validar se n é maior que zero, ou seja, enquanto n<=0 exiba uma mensagem de erro e solicite um novo valor de n.
Soluçãomain(){
int qtd, i; float vlr, soma, media; soma = 0; do /* loop validação*/ { printf("\nDigite a quantidade: "); scanf("%d", &qtd); } while (qtd <=0);
printf("\nDigite os valores:\n "); for(i=0; i<qtd; i++) /*loop entrada de dados*/ { scanf("%f", &vlr); soma = soma + vlr; } media = soma/qtd; /*Calcula média*/ printf("\nMedia %.2f", media);
}
Exercício para entregar Numa agência bancária, as contas são identificadas
por números de até 6 dígitos seguidos de um dígito verificador, calculado da seguinte forma:
Ex.: Seja n = 7314 o número da conta.
1) Obtemos a soma dos dígitos de n:s = 7+3+1+4 = 15
2) Obtemos o dígito verificador a partir do resto da divisão de s por 10:d = s % 10 = 15 % 10 = 5
O número da conta é: 007314-5 Dado um número de conta n, exiba o número de
conta completo correspondente.
Lógica para a solução
Leia n (long int para suportar 6 dígitos);
Use um laço de repetição para somar seus dígitos;
Após o laço, obtenha o DV pelo resto da divisão por 10;
Imprima o número da conta formatado, incluindo o DV;
Soluçãomain(){ long int n, s, c; printf("\n Digite numero da conta: "); scanf("%ld", &n); c = n; s = 0; while (n != 0) {
s = s + (n % 10); /* ou s += (n%10);*/ n /= 10; /* ou n = n / 10;*/ } printf("\nConta: %06ld-%1d",c ,s%10);}
Mais exercícios
Um comerciante precisa informatizar o caixa de sua loja. Codifique um programa que:- Leia uma série de valores correspondendo aos preços das mercadorias compradas por um cliente (o valor zero finaliza a entrada);- Calcule o valor total;- Aplique o desconto
conforme tabela ao lado;- Mostre o valor a ser pago
pelo cliente.
Soluçãomain(){ float total, vlr, final; total = 0; do { printf ("\nValor do item:"); scanf("%f", &vlr); total = total + vlr; } while (vlr!= 0); (...)
Solução - continuação(...)if (total < 50)
final = (total * 0.95); else if (total <= 100)
final = (total * 0.90); else
if (total <=200)final = (total * 0.85);
elsefinal = (total * 0.80);
printf ("\nTotal da compra: %.2f", total);printf ("\nValor final com desconto: %.2f", final);
}
Pré-processador
Módulo adicional pelo qual passa o programa C antes de ser compilado.
Modifica o programa antes do mesmo ser compilado
Modificações feitas a partir de diretivas embutidas no código fonte
Principais diretivas: #include #define
Diretiva #define
Usada para definir constantes simbólicas (substituições)
Dá maior legibilidade do código. Sintaxe:
#define identificador texto
Ex.:
#define PI 3.14
Exemplo
# include <stdio.h>
# define diga printf
# define oi “\nOlá, tudo bem?”
main()
{
diga (oi);
}
Exercício
Inclua as diretivas define para o programa abaixo compilar/executar corretamente.
programainicio
limpaTela;diga ("olá !");
fim
Macros
Quando a diretiva é usada para definir substituições com parâmetros.
Exemplo:
#define quad(n) nn
Substituições:quad( x ) => x * x
quad( 2 ) => 2 * 2
quad( f(x-3)) => f(x–3) * f(x–3)
quad( x+4 ) => x+4 * x+4
Cuidado com espaços!
Possíveis erros Cuidado ao construir macros, pois a
substituição pode provocar alguns erros. Por exemplo:quad( 2+3 ) = 25?2+3 * 2+3 = 11
100/quad(2) = 25?100/ 2 * 2 = 100
Corrigindo
Gostaríamos que ao invés de:quad(2 + 3) = 2+3*2+3
Tivéssemos:quad(2 + 3) = (2+3)*(2+3)
Então alteremos:#define quad(n) nn
Para:#define quad(n) (n)(n)
Exercício
Defina as seguintes macros: soma(x, y); max(x, y); abs(n);
Para casa: eh_minuscula(c); eh_maiuscula(c); minuscula(c); maiuscula(c);
Diretiva #include
Inclui uma cópia do arquivo entre <> ou “” no código fonte do nosso programa
Exemplos:
#include <stdio.h>
#include <conio.h>
#include <math.h>
Incluindo nossos arquivos
Podemos desenvolver nossos arquivos cabeçalho (header) e incluí-los usando a diretiva #include.
Em geral usamos os sinais <> para arquivos do compilador C que ficam no diretório INCLUDE.
E “” para arquivos que nós mesmos desenvolvemos.
Exemplo: arquivo de macros
/* macros.h */
# define abs(n) ((n)<0 ? -(n) : (n))
# define max(x, y) ((x)>(y)? (x) : (y))
# define soma(x, y) ((x) + (y))
Salvar como macros.h
Usando arquivo de macros/*teste.c*/
#include <stdio.h>
#include “macros.h”
main()
{
int n1 = -7;
int n2 = 8;
printf("\n %d ", soma(2*3, 1 + 3));
printf("\n %d ", abs(n2));
printf("\n %d ", max(n1, n2));
}
Exercício para casa
Crie o arquivo boolean.h com as definições necessárias para que o programa abaixo possa produzir a saída: true false true.
main() {
printf("%s ", bool(not false) );
printf("%s ", bool(false and true) );
printf("%s ", bool(true or false) );
}
Funções
Que são funções? Programas em C possuem uma função
main( ) com a lógica principal do programa. Fazemos uso de funções existentes em
bibliotecas C. printf(); scanf(); getch(); clrscr();
Definição de funções
Podemos definir nossas próprias funções.
Vantagens: Clareza do código fonte Reuso da lógica. Uma vez codificada
pode ficar disponível em bibliotecas
Sintaxe
tipo_devolvido nome_funcao (parâmetros) {
declarações
comandos
} tipo_devolvido: tipo de dado que a função
devolve. (void: não devolve dados) nome_funcao: nome que identifica a função parâmetros: lista de variáveis que
representam entrada de dados na função
Funções que não devolvem valores void boas_vindas( void ){
printf("\nSeja bem vindo.");}void main(){ boas_vindas(); getch();}
Não é possível atribuir a variáveis ou expressões; x = boas_vindas ();
Não é possível usar parâmetros quando não definidos;boas_vindas(“Olá”);
Funções com parâmetrosvoid cumprimentos( char c ){
switch(c){
case ‘N’: printf("\nBoa noite!"); break;case ‘T’: printf("\nBoa tarde! ");break;default : printf("\nBom dia!");
}}void main(){ cumprimentos(‘N’); getch();}
Funções que devolvem valores
Funções que não são do tipo void usam comando return para devolver o resultado da função;
O comando return interrompe a execução da função, voltando com o controle para o programa principal ou para a função que a chamou.
Neste caso, as linhas de comando codificadas após o comando return não serão executadas.
Exemplosfloat hip (float a, float b) { float h; h = sqrt( pow(a,2)+pow(b,2)); return h;}
... x = hip (3, 4); /* x recebe 5 */
double max (double a, double b) { if ( a>b )
return a; /* interrompe a função*/ return b;}
... y = max (10, 20); /* y recebe 20*/
Exercícios (entregar)
Codifique a função fat(n), que devolve o fatorial de n.
Codifique a função rodizio(placa), que recebe o número da placa de um veículo e exibe o dia em ele está no rodízio.
Data da P1
Primeira prova de LP 13/out Após semana de tecnologia
top related