Baixe o app para aproveitar ainda mais
Prévia do material em texto
L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados L i n g u a g e m C Linguagem C >> Funções Prof. Isaac Benjamim Benchimol ibench@ifam.edu.br L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 2 Ementa • Introdução • Operadores e Expressões • Funções de E/S • Estruturas de Controle • Vetores e Matrizes • Strings • Ponteiros • Funções • Estruturas • Alocação Dinâmica de Memória • Arquivos L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 3 Funções • É uma sub-rotina que realiza uma tarefa específica. • Um programa em C é uma coleção de funções. • Forma geral de uma função: tipo_retorno nome(lista_parâmetros) { // corpo da função } tipo_retorno especifica o tipo de dado retornado pela função. Pode ser qualquer tipo válido exceto um array. nome especifica o nome da função. lista_parâmetros é uma seqüência de pares de tipo e identificador separados por vírgulas. São as variáveis que recebem o valor dos argumentos passados para a função quando chamada. L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 4 Função sem parâmetro // Este programa contém duas funções: main() e minha_func() void minha_func(); // protótipo de minha_func() // Não há parâmetros formais int main(){ printf(“Em main() \n”); minha_func(); // chame minha_func() printf(“De volta a main()”); } // Esta é a definição da função. void minha_func(){ printf(“De dentro de minha_func()\n”); } Em main() De dentro de minha_func() De volta a main() L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 5 Função com parâmetro void box(int length, int width, int height); // protótipo de box() com 3 parâmetros formais int main(){ box(7, 20, 4); // passa argumentos para box box(28, 30, 25); box(3, 5, 4); } // Computa o volume da caixa. void box(int length, int width, int height){ printf(“Volume da caixa e %d”, length*width *height); } // Os parâmetros recebem os valores dos argumentos passados para box(). L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 6 O retorno de valores • Uma função pode retornar um valor para seu chamador. • Para retornar um valor usamos return valor. • O tipo do valor retornado deve ser compatível com o tipo de retorno declarado na função. Se não for, um erro em tempo de compilação ocorrerá. L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 7 Função com retorno int box(int length, int width, int height); // box() agora retorna um inteiro int main(){ int volume; volume=box(7, 20, 4); // o valor de retorno de box() é atribuído a volume. printf(“O Volume da caixa e %d”, volume); } // Computa o volume da caixa. int box(int length, int width, int height){ return length*width*hieght; } // box() retorna o volume da caixa para main() O Volume da caixa e 560 L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 8 Regras de Escopo • Existem três tipos de variáveis: variáveis locais, parâmetros formais e variáveis globais. • As regras de escopo regem a visibilidade e o tempo de vida de cada um desses tipos. Variáveis Locais � Declaradas dentro de uma função ou dentro de um bloco de código. � Conhecidas apenas dentro do bloco no qual estão declaradas. � São criadas na entrada do bloco e destruídas na saída. L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 9 Variáveis Locais void func1() { int x; //x é local para func1() x=10; printf(“x = %d”,x); } void func2(){ int x=9; //x é local para func2(). if (x==9){ int y=20; //y é local ao bloco if printf(“x + y = %d”, x+y); } y=100; //erro! Y não é conhecido aqui. } L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 10 Parâmetros Formais • Parâmetros Formais – São as variáveis que recebem os argumentos de uma função. – Dentro de uma função, elas se comportam como qualquer outra variável local. – Os parâmetros formais declarados devem ser do mesmo tipo dos argumentos usados para chamar a função. L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 11 Parâmetros Formais #include <stdio.h> /* declaração do arquivo de cabeçalho*/ int mul_var(int, int); /* declaração do protótipo mul_var */ int mul_var(int x, int y) /* declaração da função mul_var */ { int z; z = x * y; return(z); } void main(void) /* declaração da função main() { int a, b, mul; printf("Digite 2 valores:\n"); scanf("%d %d", &a, &b); mul = mul_var( a, b); /* chamada da função mul_var*/ printf("\n %d ", mul); } Parâmetros formais da função Argumentos da função, devem ser do mesmo tipo do parâmetro formal L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 12 Variáveis Globais • Variáveis Globais – Estas variáveis são declaradas fora das funções, ou seja, logo após as declarações #include. – São conhecidas por todo o programa e podem ser usadas por qualquer parte do código. – Variáveis globais retêm seus valores durante toda a execução do programa. L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 13 Variáveis Globais #include <stdio.h> void func1(); int count; // count é global int main() { int i; // i é local for (i=0;i<10;i++) { count = i*2; func1(); } return 0; } void func1() { printf(“count: %d\n”, count); //acessa count global } L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 14 Exercícios 1. Escreva e teste a seguinte função média(), que retorna a média dos três números: float media(float x1, float x2, float x3) 2. Escreva e teste a seguinte função power(), que retorna x elevado a potência de n, onde n pode ser qualquer inteiro: double power(double x, int p) Utilize o algoritmo que calcularia x20 multiplicando 1 por x 20 vezes. 3. Escreva e teste a seguinte função isSquare(), que determina se o inteiro dado é um número quadrado: int isSquare(int n) Os primeiros 10 números quadrados são: 0, 1, 4, 9, 16, 25, 36, 49, 64 e 81 L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 15 Passagem de ponteiros para funções #include <stdio.h> void f(int *j); // f adota um ponteiro int* como parâmetro int main() { int i=0, *p; p=&i; f(p); // passa o ponteiro // ou f(&i)� passa o endereço de i printf(“ i = %d”, i); return 0; } // f recebe um ponteiro para um int void f(int *j) { *j=100; // var apontado por j recebe 100 } L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 16 Passagem de um array • Quando um array é um argumento para uma função, o endereço do array é passado, e não uma cópia detodo o array. • Um nome de array sem qualquer índice é um ponteiro para o primeiro elemento no array. L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 17 Passagem de um array #include <stdio.h> void mostra(int num[10]); int main() { int t[10], i; for (i=0; i<10 ;i++) t[i]=i; mostra (t); // passa o array t para uma função return 0; } // Parâmetro é um array dimensionado void mostra(int num[10]) { int i; for (i=0; i<10 ;i++) printf(“%d “,num[i]); } OBS: O Compilador C automaticamente converterá o parâmetro num para um ponteiro int, já que nenhum parâmetro pode receber um array inteiro. Apenas o endereço do array é passado. L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 18 Passagem de um array Outras possibilidades de passar um ponteiro de array: • Parâmetro é um array não dimensionado void mostra(int num[ ]) { int i; for (i=0; i<10 ;i++) printf(“%d “,num[i]); } • Parâmetro declarado como ponteiro void mostra(int *num) { int i; for (i=0; i<10 ;i++) printf(“%d “,num[i]); } // um ponteiro pode ser indexado usando [], como se // fosse um array L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 19 Passagem de strings • Como uma string é simplesmente um array de caracteres que é terminado por caractere nulo, quando passamos uma string para uma função, apenas um ponteiro para o início da string é na realidade passado. L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 20 Passagem de strings void strInvertCase(char *str); int main() { char str[80]; strcpy(str, “Isto E Um Teste”); strInvertCase(str); //passa ponteiro para str puts(str); return 0; } void strInvertCase(char *str){ while(*str) { if (isupper(*str)) *str=tolower(*str); else if (islower(*str)) *str=toupper(*str); str++; }} L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 21 A função main() • Podemos passar informações para um programa ao rodá-lo. Isto é possível passando argumentos de linha de comando para a função main(). • C define dois parâmetros embutidos, mas opcionais para main(). Eles são argc e argv. • argc é um número inteiro que contém o número de argumentos na linha de comandos. Ele sempre será pelo menos 1, porque o nome do programa se qualifica como primeiro argumento. • argv é um ponteiro para um array de ponteiros de caracteres. Cada ponteiro no array argv aponta para uma string contendo um argumento de linha de comando. L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 22 A função main() • O nome do programa é apontado por argv[0]; argv[1] apontará para o primeiro argumento, argv[2] para o segundo argumento e assim por diante. • argv é declarado da seguinte forma: char *argv[]; L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 23 argc e argv • Esse programa exibe os argumentos da linha de comando: int main(int argc, char *argv[]) { for (int i=0; i<argc; i++) puts(argv[i]); return 0; } Se o programa for chamado de ComLine, então executá-lo da forma: Comline um dois tres, teríamos a seguinte saída: Comline um dois tres L i n g u a g e m C Treinamento em Desenvolvimento de Aplicativos para Sistemas Embarcados 24 Exercícios 1. Escreva e teste a seguinte função que retorna o índice do menor valor de um array dado: int minIndex(float a[ ]) 2. Escreva e teste a seguinte função que retorna o valor mínimo entre os primeiros n elementos de um array dado: float min(float a[ ], int n) 3. Escreva a função strcpy(). 4. Escreva um programa que exiba a soma dos dois argumentos numéricos de linha de comando.
Compartilhar