Baixe o app para aproveitar ainda mais
Prévia do material em texto
CC Para Para Bruno Jurkovski Fábio da Fontoura Beltrão Felipe Augusto Chies Kauê Soares da Silveira Lucas Fialho Zawacki Marcos Vinicius Cavinato Para Para EngenhariasEngenharias � Na última aula vimos... ‘laços’... � ...e outras coisas... Revisão da Aula 2 � ...e outras coisas... Revisão da Aula 2 Revisão da Aula 2 Revisão da Aula 2 Revisão da Aula 2 Funções - Introdução � A linguagem C é totalmente baseada em funções; � Você já deve ter notado que o corpo principal do � Você já deve ter notado que o corpo principal do programa (a main) nada mais é que a função por onde o programa começa; � Geralmente, os programas em C são várias ‘mini-funções’, ao contrário de um único bloco monolítico de código. � Conclusão: � As funções devem ser reaproveitáveis e generalistas; Funções - Introdução � Funções não devem alterar variáveis globais; � Funções devem ser atômicas, ou seja, devem, se possível, executar apenas uma operação. Funções - Declaração � Uma funções possui as seguintes partes: � Corpo, parâmetros e valor de retorno. tipo_de_retorno nome_da_funcao (parametros) { corpo_da_funcao; return (valor_de_retorno); } Tipos de Dados e Retorno � Como variáveis, as funções possuem um tipo de dado; � As funções podem ser dos cinco tipos de dados do C:do C: � int; � char; � float; � double; � void (vazio, sem valor de retorno). Tipos de Dados e Retorno � Toda função não void deve retornar um dado do tipo declarado; � Usa-se para isso o comando return; � return finaliza a função, todo código seguinte a esse comando não será executado. int sete () { printf(“Essa funcao retorna o numero 7”); return 7; } � Observe esta função: Exemplo de Função int soma2 (int x, int y) { int temp; temp = x + y;temp = x + y; return temp; } int main() { int soma, valor1 = 2, valor2 = 5; soma = soma2(valor1, valor2); printf(“A soma e %d”, soma); } Exemplo de Função int soma2 (int x, int y) { int temp; temp = x + y; soma recebe o valor do retorno de soma2 = 7temp = x + y; return temp; } int main() { int soma, valor1 = 2, valor2 = 5; soma = soma2(valor1, valor2); printf(“A soma e %d”, soma); } retorno de soma2 = 7 O main passa os valores para soma2: x = valor1 = 2 y = valor2 = 5 temp = 2 + 5 Exemplo de Função int soma2 (int x, int y) { int temp; temp = x + y; return temp; O main passa os valores para soma2:return temp; } int main() { int soma, valor1 = 2, valor2 = 5; soma = soma2(valor1, valor2); printf(“A soma e %d”, soma); } soma2: x = valor1 = 2 y = valor2 = 5 temp = 2 + 5 soma recebe o valor do retorno de soma2 = 15 � Especificação do limite dentro do qual os recursos de sistema podem ser utilizados: Em C, cada função tem o seu escopo; O Escopo � Em C, cada função tem o seu escopo; � Logo, “escondemos” os códigos e variáveis de uma função das outras; � Por isso que variáveis locais de cada função são acessíveis apenas por ela própria. � Observe as seguintes chamadas de funções: � variavel = funcao(par1,par2,par3); � funcao2(par4,par5); � printf(“%d%d”, sqrt(t), t); if (abs(n) == n); Chamadas de Funções � if (abs(n) == n); � Você pode chamar uma função em qualquer lugar onde você usaria um dado do tipo de retorno da função; � Quando você chama uma função ela irá executar independente de você usar o valor de retorno. 1. Faça uma função que receba uma string e retorne o número de caracteres que constituem essa string (não conte o ‘\0’); Exercícios � Protótipos são declarações de funções antes delas serem codificadas; Protótipos � Isso indica ao compilador que essas funções serão utilizados, tornando possível o uso de tais funções antes da codificação das mesmas. Exemplo: int soma2 (int x, int y); int main() { int soma, valor1 = 2, valor2 = 5; soma = soma2(valor1, valor2); printf(“A soma e %d”, soma); } int soma2 (int x, int y) { int temp; temp = x + y; return temp; } Protótipo da função ‘soma2’, se não houvesse o protótipo iria dar erro de compilação, pois a main tentaria chamar uma função que não foi declarada, ou seja, o compilador não sabe que ela existe. 2. Faça uma função que receba dois números , faça sua soma e chame outra função que faz o quadrado desse número. Retorne o resultado final. Exercícios final. � Use protótipos. � Parâmetros podem ser passados para uma função de duas maneiras: � Por Valor: � É passado o nome da variável para função, que faz uma cópia da mesma para uso dentro de seu escopo(variável Parâmetros cópia da mesma para uso dentro de seu escopo(variável local); � NÃO ALTERA O VALOR DO PARÂMETRO. � Por Referência: � É passado um ponteiro para a variável, tornando possível o acesso direto ao endereço da mesma; � Logo, é possível alterar o valor da variável dentro do esopo da função. � Observe as seguintes funções: � elevaQuadrado – retorna o quadrado de X. Note que a função NÃO altera o valor da variável original: int elevaQuadrado (int x) { Parâmetros � elevaQuadrado2 – retorna o quadrado de X, mas dessa vez muda o valor original de X: x = x*x; return x; } VALOR void elevaQuadrado2 (int *x){ *x *= *x; } REFERÊNCIA Como seriam as chamadas? int main() { int x = 7, y; y = elevaQuadrado(x); ‘y’ recebe 49 e ‘x’ continua com o valor 7 y = elevaQuadrado(x); printf(“%d %d\n”, x, y); elevaQuadrado2(&x); printf(“%d %d”, x, y); } O valor de ‘x’ é alterado para 49 Como seriam as chamadas? int main() { int x = 7, y; y = elevaQuadrado(x); ‘y’ recebe 49 e ‘x’ continua com o valor 7 y = elevaQuadrado(x); printf(“%d %d\n”, x, y); elevaQuadrado2(&x); printf(“%d %d”, x, y); } O valor de ‘x’ é alterado para 49 3. Faça uma função swap que troca os valores de ‘x’ e ‘y’, inteiros, recebidos como argumentos. Exercício 4. Faça uma função que receba o endereço de uma variável(int ou float) e um número(int) e retorne a variável^número. � Uma função recursiva é uma função que chama a si mesma; Recursão � Recursão é uma ferramenta poderosa. � Fazer uma função que calcula o fatorial de um número. Exemplo double fatorial(double n)double fatorial(double n) { if (n == 1) return 1; return (n * fatorial(n-1)); } � Algumas das vantagens do uso de recursão são: � A clareza na interpretação do código; Recursão � Simplicidade e elegância na implementação. � Algumas das desvantagens são: � Dificuldade para encontrar erros; � Podem ser ineficientes. * A principal preocupação na implementação de algoritmos recursivos é a questão de eficiência tanto de espaço quanto de tempo. Mesma função com for double fatorial(double n) { double res=1;double res=1; for(double i=n; i>1; i--) res *= i; return res; } 5. Fazer uma função que “descubra” o numero de Euler (Somatório de 1/n! com n tendendo ao infinto, nesse caso n tendendo ao numero que se desejar para melhorar a precisão do “e”). Exercício se desejar para melhorar a precisão do “e”). � A declaração normal da função main: � int main(int argc, char *argv[]) � Esses dois argumentos são passados como padrão pelo sistema operacional indicando os argumentos Curiosidade pelo sistema operacional indicando os argumentos passados para o programa em linha de código, como: Curiosidade � A main, normalmente declarada como int, devolve um de dois inteiros para o sistema operacional, 0 ou 1, indicando, Curiosidade II operacional, 0 ou 1, indicando, respectivamente, sucesso ou erro na execução do programa.
Compartilhar