Linguagem de Programação C - Alessandro...
Transcript of Linguagem de Programação C - Alessandro...
![Page 1: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/1.jpg)
ICMC USP
Linguagem de Programação C
Aula: Funções em CProf Alneu de Andrade Lopes
![Page 2: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/2.jpg)
MODULARIZAÇÃO
Um problema complexo é melhor abordado se for divididoprimeiramente em vários
subproblemassubproblemas
MODULARIZAÇÃOMODULARIZAÇÃO
![Page 3: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/3.jpg)
MODULARIZAÇÃO
Um problema complexo é melhor abordado se for divididoprimeiramente em vários
subproblemassubproblemas
MODULARIZAÇÃOMODULARIZAÇÃOMÓDULOSMÓDULOS
![Page 4: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/4.jpg)
MODULARIZAÇÃO
A implementação desses Módulos é feita através de SUBPROGRAMAS
MÓDULOSMÓDULOS
![Page 5: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/5.jpg)
MODULARIZAÇÃO
A implementação desses Módulos é feita através de SUBPROGRAMAS
subprograma1subprograma1 subprograma2subprograma2
programaprograma
......
...... ......
![Page 6: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/6.jpg)
MODULARIZAÇÃO
A implementação desses Módulos é feita através de SUBPROGRAMAS
MÓDULOSMÓDULOS
Os SUBPROGRAMAS em C são
implementados por FUNÇÕESFUNÇÕES
![Page 7: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/7.jpg)
FUNÇÕES
• As linguagens de programação têm à sua disposição várias funções pré-definidas:
• EXEMPLO (C)– pow (X,2) quadrado de X– pow (X,2) quadrado de X
– printf(“%s” ,X) imprime string X
![Page 8: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/8.jpg)
FUNÇÕES
• As linguagens de programação têm à sua disposição várias funções pré-definidas:
• EXEMPLO (C)– pow (X,2) quadrado de X– pow (X,2) quadrado de X
– printf(“%s” ,X) imprime string X
Identificador da Identificador da FUNÇÃOFUNÇÃO
![Page 9: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/9.jpg)
FUNÇÕES
• As linguagens de programação têm à sua disposição várias funções pré-definidas:
• EXEMPLO (C)– pow (X,2) quadrado de X– pow (X,2) quadrado de X
– printf(“%s” ,X) imprime string X
ParâmetrosParâmetros
![Page 10: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/10.jpg)
FUNÇÕES
• As Funções Pré Definidas podem ser usadas diretamente em expressões:
• Exemplo:
H = pow ((pow(X,2) + pow (Y,2)), 0.5);H = pow ((pow(X,2) + pow (Y,2)), 0.5);
![Page 11: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/11.jpg)
FUNÇÕES
• As Funções Pré Definidas podem ser usadas diretamente em expressões:
• Exemplo:
H = pow ((pow(X,2) + pow (Y,2)), 0.5);H = pow ((pow(X,2) + pow (Y,2)), 0.5);
ParâmetrosParâmetrosREAISREAIS
![Page 12: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/12.jpg)
FUNÇÕES
• As Funções Pré Definidas podem ser usadas diretamente em expressões:
• Exemplo:
H = pow ((pow(X,2) + pow (Y,2)), 0.5);H = pow ((pow(X,2) + pow (Y,2)), 0.5);
Estes parâmetros devem ser valores
conhecidos
ParâmetrosParâmetrosREAISREAIS
![Page 13: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/13.jpg)
FUNÇÕES
Se houver necessidade o programador pode definirsuas próprias FUNÇÕESFUNÇÕESsuas próprias FUNÇÕESFUNÇÕES
![Page 14: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/14.jpg)
# include <stdio.h>
int sqr(float x){x = x*x;return(x);return(x);
}
main(){float t=10;printf(“%f”,sqr(t));
}
![Page 15: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/15.jpg)
DEFINIÇÃO DE FUNÇÃO
funçãodeclaração do tipo da saída da função NOMENOME--DADA--
FUNÇÃO FUNÇÃO (declaração do tipo do parâmetro1parâmetro1, parâmetro1, declaração do tipo do parâmetro2
Linguagem AlgoritmicaLinguagem Algoritmica
parâmetro1, parâmetro1, declaração do tipo do parâmetro2 parâmetro2parâmetro2, ..., declaração do tipo do parâmetronparâmetroparâmetronn)
iníciodeclaração das variáveis utilizadas localmentecorpo da função
fim
![Page 16: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/16.jpg)
DEFINIÇÃO DE FUNÇÃO
Tipo do retorno NOMENOME--DADA--FUNÇÃO FUNÇÃO (tipo_p1 p1, tipo_p2 p2,..., tipo_pn pn){
Em CEm C
tipo_p2 p2,..., tipo_pn pn){
declaração de variáveis utilizadas no corpo da função;
corpo da função;
};
![Page 17: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/17.jpg)
CARACTERÍSTICAS DAS FUNÇÕES
• Retorna um único valor
• Na definição da função devem ser declarados:– o tipo de todos os parâmetros– o tipo do valor que a função retorna– o tipo do valor que a função retorna– todas as variáveis utilizadas internamente no subprograma (variáveis locais)
• Para utilizar a função no programa principal basta colocar seu nome (identificador) e os parâmetros.
![Page 18: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/18.jpg)
Resumo
• Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa
• Estrutura:
valor_retornado nome_função ( parâmetros )valor_retornado nome_função ( parâmetros )
{
declarações
comandos
}
![Page 19: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/19.jpg)
Detalhes
• uma função pode retornar qualquer valor válido em C, sejam de tipos pré-definidos ( int, char, float) ou de tipos definidos pelo usuário ( struct, typedef )
• uma função que não retorna nada é definida • uma função que não retorna nada é definida colocando-se o tipo void como valor retornado (= procedure)
• Pode-se colocar void entre parênteses se a função não recebe nenhum parâmetro
![Page 20: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/20.jpg)
Declaração de Funções
• Funções devem ser definidas ou declaradas antes de serem utilizadas
• A declaração apenas indica a assinatura ou protótipo da função:função:
valor_retornado nome_função(declaração_parâmetros);
• Menor função possível:
void faz_nada( void ) {}
![Page 21: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/21.jpg)
DEFINIÇÃO DE FUNÇÃO Exemplo - Função Fatorial
função
real FATFAT(declaração do tipo do parâmetro XX)
início da função//declaração das variáveis utilizadas no subprograma←P← 1
para I de 1 até X X faça P ← P * I
fim parareturn(P);
fim da função
![Page 22: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/22.jpg)
função
real FATFAT(declaração do tipo do parâmetro XX)
início da função//declaração das variáveis utilizadas no subprograma←
DEFINIÇÃO DE FUNÇÃO Exemplo - Função Fatorial
NOME DA NOME DA
tipo do valorque a função
retorna
tipo do parâmetro
P← 1para I de 1 até X X
faça P ← P * Ifim parareturn(return(P);
fim da função
PARÂMETRO FORMALquando a função
for utilizada, este parâmetro recebe um valor reallido ou atribuído no programa principal
NOME DA NOME DA FUNÇÃOFUNÇÃO
![Page 23: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/23.jpg)
função
real FATFAT(declaração do tipo do parâmetro XX)
início da função//declaração das variáveis utilizadas no subprograma←
DEFINIÇÃO DE FUNÇÃO Exemplo - Função Fatorial
P← 1para I de 1 até X X
faça P ← P * Ifim parareturn(P);return(P);
fim da função
Declarações relativas àsvariáveis do algoritmo
![Page 24: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/24.jpg)
função
real FATFAT(declaração do tipo do parâmetro XX)
início da função//declaração das variáveis utilizadas no subprogramaP← 1
DEFINIÇÃO DE FUNÇÃO Exemplo - Função Fatorial
O número para o qual é calculado P← 1
para I de 1 até X X faça P ← P * I
fim parareturn(P);return(P);
fim da função
qual é calculado o fatorial entra
como parâmetro
NÃO PRECISA SER LIDO
DENTRO DA FUNÇÃO
![Page 25: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/25.jpg)
DEFINIÇÃO DE FUNÇÃO Exemplo - Função Fatorial
função
real FATFAT(declaração do tipo do parâmetro XX)
início da função
• O resultado do cálculo do fatorial deve ser retornado início da função
declaração das variáveis utilizadas no subprogramaP← 1para I de 1 até X X
faça P ← P * Ifim parareturn(P);return(P);
fim da função
deve ser retornado para o programa que chamou a função.
![Page 26: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/26.jpg)
Exercício
• Implemente a função fatorial.
![Page 27: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/27.jpg)
Passagem de Parâmetrosem C os argumentos para uma função são, via de regra,
passados por valor (by value), ou seja, uma cópia do argumento é feita e passada para a função
void loop_count( int i ) {
printf( "Em loop_count, i = " );
while( i < 10 )
printf ( "%d ", i++); ==> i = 2 3 4 5 6 7 8 9
}
void main( ) {
int i = 2;
loop_count( i );
printf( "\nEm main, i = %d.\n", i ); ==> i = 2.
}
![Page 28: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/28.jpg)
Passagem de Parâmetros
• como, então, mudar o valor de uma variável ?
passagem de parâmetro por referência
• enviar o endereço do argumento para a função
![Page 29: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/29.jpg)
Passagem de Parâmetros
Passagem por valor Passagem por referência
func_call (arg) func_call (* arg)
Cópia de arg Endereço de arg
arg arg
def_função (arg) def_função (* arg)
Cópia de arg
enviado para
a função
Endereço de arg
enviado para
a função
arg (* arg)
![Page 30: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/30.jpg)
Passagem de Parâmetros
• Passagem por referência:
void loop_count( int *i ) {
printf( "Em loop_count, i = " );
while( i < 10 )
printf ( "%d ", (*i)++); ==> i = 2 3 4 5 6 7 8 9printf ( "%d ", (*i)++); ==> i = 2 3 4 5 6 7 8 9
}
void main( ) {
int i = 2;
loop_count( &i );
printf( "\nEm main, i = %d.\n", i ); ==> i = 10.
}
![Page 31: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/31.jpg)
Prática: função troca
• Fazer uma função troca(px, py) que recebe como parâmetros 2 ponteiros para inteiros e troca o conteúdo deles
• ex:• ex:int x = 10, y = 20;
troca(&x, &y);
printf(“x=%d y=%d”, x, y) => x=20 y=10
![Page 32: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/32.jpg)
Prática: função troca
void troca (int *px, int *py)
{
int temp;
px:
py:
temp=*px;
*px=*py;
*py=temp;
}
x:
y:
![Page 33: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/33.jpg)
Retornando Valores
• uma função retorna um valor através do comando return
• Ex:int power (int base, int n) {
int i,p;int i,p;
p = 1;
for (i = 1; i <= n; ++i)
p *= base;
return p;
}
![Page 34: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/34.jpg)
Funções
• o valor retornado por uma função é sempre copiado para o contexto de chamada (retorno by value)
x = power(2, 5); /* atribuição */
if (power(7, 2) > 12543) /* comparação */if (power(7, 2) > 12543) /* comparação */
printf(“Numero grande!”);
x = 10*power(2,3); /* expressão */
array[get_index()]; /* índice */
funcao( get_arg() ); /* argumento */
![Page 35: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/35.jpg)
Ex: Concatena Strings
char *concatena( char cabeca[], char cauda[] )
{
int i, j;
for (i = 0; cabeca[i] != '\0'; i++);
for (j = 0; (cabeca[i] = cauda[j]) != '\0'; i++, j++);
cabeca[i] = '\0';
return cabeca;
}
![Page 36: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/36.jpg)
Exemplo (cont.)
int main( )
{
char nome[80] = "Santos";
char sobrenome[] = " Dumont";
printf( "O nome é %s.\n",
concatena( nome, sobrenome ) );
return 0;
}
==> Santos Dumont
![Page 37: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/37.jpg)
Prática: Localiza char em string
• Fazer uma função que procura um caracter em um string e retorna o seu endereço caso o encontre, senão retorna NULL (ponteiro nulo)
• Ex:char *achachar (char *str, char c) {...}
char str[] = “abcd5678”;
achachar(str, ‘c’);
==> retorna endeço do terceiro caracter do string: &str[2]
![Page 38: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/38.jpg)
Achachar
char *achachar (char *str, char c) {
char *pc = str;
while (*pc != c && *pc != '\0') pc++;while (*pc != c && *pc != '\0') pc++;
return *pc ? pc : NULL;
}
![Page 39: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/39.jpg)
Número de Parâmetros Variável
• C permite declarar funções com número variável de argumentos através da inserção de reticências “...”
função ( arg1, arg2, ... );
• Como determinar o número de parâmetros passados:• Como determinar o número de parâmetros passados:
– string de formato, como no comando printf:Ex: printf ( “%s %d %f\n”, s, i, f);
– pela especificação do número de parâmetros
Ex: soma (3, 10, -1, 5);
– pela inclusão de um valor de terminaçãoEx: media ( 1, 4, 6, 0, 3, -1 );
![Page 40: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/40.jpg)
Acesso aos Parâmetros
• C oferece uma série de macros para acessar uma lista de argumentos:
• va_list: é um tipo pré-definido utilizado para declarar um ponteiro para os argumentos da lista
• va_start(va_list ap, ultimo_arg_def ): inicia o ponteiro ap fazendo-o apontar para o primeiro argumento da lista, ou seja, o primeiro argumento depois de ultimo_arg_def.– ultimo_arg_def é o nome do último argumento
especificado no declaração da função
![Page 41: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/41.jpg)
Acesso aos Parâmetros
• type va_arg( va_list ap, type ): retorna o valor do argumento apontado por ap e faz ap apontar para o próximo argumento da lista. Type indica o tipo de argumento lido (int, float, etc.)float, etc.)
• void va_end ( va_list ap ) : encerra o acesso à lista de parâmetros. Deve sempre ser chamada no final da função
![Page 42: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/42.jpg)
Exemplo Parâmetros Variáveis
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
int sum( int no_args, ... ) {
va_list ap; int result = 0, i;
sum( 5, 3, 5, 18, 57, 66 ) ==> 149sum( 2, 3, 5 ) ==> 8
va_list ap; int result = 0, i;
va_start( ap, no_args );
for( i = 1; i <= no_args; i++ ) {
result += va_arg( ap, int );
}
va_end(ap);
return result;
}
![Page 43: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/43.jpg)
Parâmetros para main()
• ao executar programas a partir de linha de comando, é possível passar parâmetros diretamente para a função main()
• os argumentos são fornecidos na forma de um • os argumentos são fornecidos na forma de um array de strings.
• main() é definida com dois parâmetros:main ( int argc, char *argv[] )
argc é o número de argumentos
argv é o array de argumentos
![Page 44: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/44.jpg)
Parâmetros para main()
• por convenção, o primeiro argumento argv[0]é o nome do programa e o último é 0 (zero)
• ex:
echo Alô, mamãeecho Alô, mamãe
argv
0
echo\0
Alô, \0
mamãe\0
argc = 3
![Page 45: Linguagem de Programação C - Alessandro Santosalessandrosantos.com.br/.../slides_e_pdfs/aula07_funcoes.pdf · Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade](https://reader031.fdocumentos.tips/reader031/viewer/2022020121/5c168b9209d3f28f0a8ca8ce/html5/thumbnails/45.jpg)
Parâmetros para main()
Uma possível implementação para echo:
#include <stdio.h>
void main( int argc, char *argv[] ) {void main( int argc, char *argv[] ) {
int i;
for ( i = 1; i < argc; i++ )
printf(“%s%s”, argv[i], (i < argc-1)?“ ”:“”);
printf(“\n”);
}