Buscar

Funcoes (2013)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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.

Outros materiais