UNIVERSIDADE DO VALE DO RIO DOS SINOS - UNISINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS - CENTRO 06. Funções, variáveis, parâmetros formais



Documentos relacionados
Funções em C. Lucas Ferrari de Oliveira Professor Adjunto. Linguagem de Programação Estruturada I. Universidade Federal do Paraná

Programação I Funções. Prof. Carlos Alberto

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Funções em Linguagem C Parte II

Linguagem C. André Tavares da Silva.

As funções são blocos de instruções que facilitam o entendimento do código. Sua sintaxe é:

Métodos Computacionais. Funções, Escopo de Variáveis e Ponteiros

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

3. Linguagem de Programação C

ECT1203 Linguagem de Programação

Linguagem C Funções. André Tavares da Silva.

Computação eletrônica: Funções

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

Fundamentos de Programação. Linguagem C++ aula II - Variáveis e constantes. Prof.: Bruno Gomes

LINGUAGEM C Estrutura / Funções

3.1 - Funções para manipular dados de entrada e saída padrão

ponteiros INF Programação I Prof. Roberto Azevedo

Introdução à Programação. Funções e Escopo de Variáveis

/* Este programa realiza um somatório e exibe o resultado na tela do computador */

Permite modularidade (dividir programa em partes): Facilita a depuração (debug) e portabilidade.

Programação de Computadores I Funções na Linguagem C PROFESSORA CINTIA CAETANO

Modularidade - Funções e Procedimentos

Introdução a Programação. Ponteiros e Passagem de Argumentos por Referência

Algoritmos e Programação

Programação Estruturada

Funções. definição, declaração e chamada

Linguagem C. Programação Estruturada. Modularização (Funções) Prof. Luis Nícolas de Amorim Trigo

INF 1620 P1-13/09/02 Questão 1 Nome:

LISTA DE EXERCÍCIOS MÊS 04

FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara

Programação: Vetores

Programação Estruturada Aula - Tipos, Constantes, Variáveis e Identificadores

Linguagem de Programação I. Aula 10 Funções

Funções. definição, declaração e chamada

Função. Unidade autônoma do programa desenvolvida para executar alguma atividade. A estrutura de uma função C é semelhante à da função main( )

Conceito de procedimentos e funções

Linguagem e Técnicas de Programação

Linguagem C: funções e ponteiros. Prof. Críston Algoritmos e Programação

Introdução a Programação de Jogos

Explicação do programa:

Aula 15 - Aula sobre Funções e Procedimentos

Algoritmos e Programação. Linguagem C Procedimentos e. Eliane Pozzebon

Introdução a Programação. Tipos Estruturados de Dados

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções

Noção de Funções. A Linguagem C permite que um programa seja escrito como um conjunto de funções que são executadas a partir de uma

INF1005: PROGRAMAÇÃO I. Capítulo 12. Ivan Mathias Filho Funções Matemáticas

Métodos Computacionais em Física I (FIW234) Turmas IFA e IFB Noções Básicas de Linguagem C

ECT1203 Linguagem de Programação

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes

A linguagem C (visão histórica)

char *strchr (const char *str, int ch);

char *strchr (const char *str, int ch);

Computação 2. Aula 8. Profª. Fabiany Arquivos

Sub-rotinas em C. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto

Linguagem de Programação C. Funções e Procedimentos

Linguagem C: Introdução

Modularidade - Fun ções e Procedimentos

... Subprogramas Após fazer as tarefas previstas o nosso programa devolve o comando ao sistema operativo. Isto está numa hierarquia onde o nosso progr

Aula 18: Funções em C

Tópicos em C. Eliade F. Lima

Computação eletrônica:

Estruturas de Dados. Módulo 4 Funções. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Linguagem C: Ponteiros. Prof. Tiago Alves de Oliveira

MC-102 Aula 13. Instituto de Computação Unicamp. 29 de Setembro de 2016

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

3. Linguagem de Programação C

Aula 13 Oficina de Programação Modularização. Profa. Elaine Faria UFU

Linguagem C: Ponteiros. Prof. Leonardo Barreto Campos 1

Capítulo 4: Programando com Funções. Pontifícia Universidade Católica Departamento de Informática

Variáveis, Comandos de Atribuição e Comando de Entrada e Saída

Estrutura de dados 2. Ponteiro. Prof. Jesuliana N. Ulysses

Introdução à Linguagem C

1. Revisão de Vetores, Ponteiros, Funções e Estruturas em C

Subprogramas. Prof. Carlos Lopes

Ponteiros de Variáveis

Introdução à Programação

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

MESMO QUE ESTAS VARIÁVEIS TENHAM NOME IDÊNTICOS

Linguagens de Programação I

Linguagem C. Prof. Alessandra Bussador

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Estruturas em C

Sub Rotinas. Estrutura de Dados. Prof. Kleber Rezende

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

Computação 2. Aula 9. Diego Addan Arquivos

Escopo das Variáveis. Funções. Funções. Funções. Funções. Algoritmos e Lógica de Programação. Programação Estruturada Funções Recursividade

#include <stdio.h> main() { int i; // Cabeçalho for (i = 1; i <=20; i++) putchar( * ); putchar( \n ); puts( Numeros entre 1 e 5 );

Estrutura de Dados. Struct (Registro) Lais Farias Alves

Programação de Computadores I Funções de Repetição da Linguagem C PROFESSORA CINTIA CAETANO

Programação científica C++

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

Computação 2. Aula 7. Profª. Fabiany Ponteiros

SSC304 Introdução à Programação Para Engenharias. Introdução a Linguagem C. GE4 Bio

Computação 2. Aula 5. Profª. Fabiany defines vetor, strings e matriz por parâmetros de função

Encapsulamento de Código: Funções e Procedimentos

INF 1005 Programação I - Prof. Hélio Lopes 24/04/2012

Introdução à Programação Aula 09. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Transcrição:

UNIVERSIDADE DO VALE DO RIO DOS SINOS - UNISINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS - CENTRO 06 Disciplina: Linguagem de Programação C Profª Viviane Todt Diverio Funções, variáveis, parâmetros formais Uma função é uma unidade de código de programa autônoma desenhada para cumprir uma tarefa particular. Um programa em C geralmente consiste de várias pequenas funções ao invés de poucas de maior tamanho. Principais razões para se usar funções: Evitar escrever o mesmo código várias vezes; Isolar trechos de código que executam tarefas específicas e que, por esta razão, podem ser aproveitados em vários pontos de um programa ou em vários programas. Em C, cada função é um bloco discreto de código. Um código de uma função é privativo àquela função e não pode ser acessado por nenhum comando em uma outra função, exceto por meio de uma chamada à função (ex.: não é possível usar goto para saltar para o meio de outra função). Além disto, todas as funções estão no mesmo nível de escopo, isto é, não é possível definir uma função internamente a uma função. Formato de uma função: <tipo> <nome_da_função>(<lista de argumentos>) corpo da função Ex.1: /* FUNCAO */ double media(int a,int b) double med; med=((double) a+(double)b)/2.0); return(med); Funções - 1

/* CHAMADA DA FUNCAO*/ void main() double m; int v1,v2; scanf( %d %d,&v1,&v2); m=media(v1,v2); printf( %f\n,m); O <tipo> especifica o tipo de valor que o comando return da função devolve, podendo ser qualquer tipo válido. Se nenhum tipo é especificado, o compilador assume que a função devolve um resultado inteiro. A lista de parâmetros é uma lista de nomes de variáveis separados por vírgulas com seus tipos associados. Os parâmetros (ditos parâmetros formais) recebem os valores dos argumentos quando a função é chamada. Uma função pode não ter parâmetros, porém, mesmo assim os parênteses devem ser mantidos. O comando return com parâmetro devolve o valor do parâmetro pelo nome da função. Sem parâmetro, apenas, encerra a execução da função. O comando return não precisa ser o último comando, além de poder aparecer várias vezes, dentro de uma função. Ex.2: /* FUNCAO */ char minusculo() char ch; ch=getch(); if((ch>= A )&&(ch<= Z )) ch+= a - A ; return(ch); /* CHAMADA DA FUNCAO*/ void main() char a; a= minusculo(); printf( %c\n,a); Funções - 2

Ex.3: int abs(int x) return((x<0)? -x : x); Ex.4: void imprime_letras(char li,char lf) int r; if(lf<=li) return; for(r=li;r<=lf;r++) printf( %c\n,r); Tipos de variáveis As variáveis são declaradas em três lugares básicos: dentro das funções, na definição dos parâmetros formais das funções e fora de todas as funções. Estas são variáveis locais, parâmetros formais e variáveis globais, respectivamente. Variáveis globais São reconhecidas pelo programa inteiro e podem ser usadas em qualquer pedaço de código; Guardam seus valores durante toda a execução do programa; São declaradas fora de qualquer função; Útil quando o mesmo dado é usado em muitas funções; Evitar usar variáveis globais desnecessárias, pois ocupam memória durante todo o tempo de execução do programa, além de tornar a função menos geral; Podem ocasionar a mudança acidental do valor de uma variável, por serem usadas em vários locais diferentes. Variáveis locais São definidas internamente a uma função, no início do bloco, antes de qualquer comando do programa; Vem a existir quando ocorre a entrada da função e é destruída ao sair. Assim, não podem manter seus valores entre chamadas a funções. A única exceção ocorre quando a variável é declarada com o especificador de tipo de armazenamento static. Isso faz com que o compilador trate a variável como se ela fosse uma variável global para fins de armazenamento, mas ainda limita seu escopo (acesso) para dentro da função. Funções - 3

Atenção: se uma variável global e uma variável local possuem o mesmo nome, todas as referências ao nome da variável dentro do bloco onde a variável local foi declarada dizem respeito à variável local e não tem efeito algum sobre a variável global. Ex.5: #include <stdio.h> int count; /* eh global*/ void func1(void); /* prototipos de funcoes - ajudam a verificar se os argumentos usados */ void func2(void); /* chamar as funções são compativeis com os parâmetros formais*/ void main() count=100; func1(); void func1(void) int temp; temp=count; func2(); printf( count eh %d, count); /* imprimira 100*/ void func2(void) int count; /* variavel local*/ for(count=1;count<10;count++) printf(. ); Ex. 6: void f(void) int t; scanf( %d, &t); if(t==1) char s[80]; /* a variavel nao existe fora do bloco*/ printf( entre com o nome: ); gets(s); Funções - 4

Parâmetros formais e argumentos de funções Parâmetros formais são variáveis que aceitam os valores dos argumentos da função. Estas variáveis se comportam como quaisquer outras variáveis locais dentro da função e são criadas na entrada e destruídas na saída. Os argumentos usados para chamar a função devem ser compatíveis com o tipo de seus parâmetros. Se os tipos são incompatíveis, o compilador não gera uma mensagem de erro, mas ocorrem resultados inesperados (consultar exemplo 1). Declaração de parâmetros de funções moderna versus clássica Embora obsoleta, a declaração clássica de parâmetros funciona em todos os compiladores mesmo os antigos). Declaração moderna: float f (int a, int b, char ch) corpo da função Declaração clássica: float f (a,b,ch) int a,b; char ch; corpo da função Chamada por valor e por referência Os argumentos podem ser passados para uma função de duas maneiras: Chamada por valor: esse método copia o valor de um argumento no parâmetro formal da função. Assim, alterações feitas nos parâmetros da função não tem nenhum efeito nas variáveis usadas para chamá-la. Chamada por referência: nesse método, o endereço de um argumento é copiado no parâmetro. O endereço é usado para acessar o argumento real (utilizado na chamada). Assim, alterações feitas no parâmetro afetam a variável usada para chamar a função. Pode-se criar uma chamada por referência passando um ponteiro para o argumento. Ex.7: /* EXEMPLO DE USO DE CHAMADA POR VALOR*/ void main(void) int t=10; printf( %d %d, sqr(t),t); int sqr(int x) x=x*x; return(x); Ex.8: /* EXEMPLO DE USO DE CHAMADA POR REFERENCIA*/ Funções - 5

void swap(int *x, int *y) int temp; temp= *x; *x = *y; *y=temp; void main(void) int i, j; i=10; j=20; swap(&i,&j); /* passa os enderecos de i e j*/ Chamando funções com matrizes Quando uma matriz é usada como um argumento para uma função, apenas o endereço da matriz é passado, não uma cópia da matriz inteira, ou seja, um ponteiro para o primeiro elemento da matriz é passado para a função (lembre-se: em C, um nome de matriz sem qualquer índice é um ponteiro para o primeiro elemento na matriz). Assim, a declaração de parâmetros deve ser de um tipo de ponteiro compatível. Existem três maneiras de declarar um parâmetro que receberá um ponteiro para uma matriz: void lemat(int mat[10]) void lemat(int mat[]) void lemat(int *mat) Nota: no segundo caso, mat é declarada como uma matriz de inteiros de tamanho desconhecido. Como C não fornece nenhuma verificação de limites em matrizes, o tamanho real da matriz é irrelevante para o parâmetro (mas não para o programa, é claro). Entretanto, se mat for de duas dimensões é necessário declarar no mínimo a segunda (para que o compilador tenha como calcular o endereço das diversas posições da matriz). Comando return Usos: Provocar uma saída imediata da função que o contém. Isto faz com que a execução do programa retorne ao código chamador; Devolver um valor. Sem o uso do return, a função termina a execução e retorna ao código que a chamou após executar o último comando e encontrar a chave final. Uma função pode ter vários comandos return. Funções - 6

Retornando valores (outros detalhes...) Todas as funções, exceto as do tipo void, devolvem um valor. Esse valor é especificado explicitamente pelo comando return. Se nenhum comando return estiver presente, então o valor de retorno da função será tecnicamente indefinido (um valor inteiro). Embora uma determinada função retorne um valor, você não tem necessariamente de usar o valor de retorno. Ex.9: x=power(y); if(max(x,y)>100) printf( maior ); for(ch=getchar();isdigit(ch); )...; fclose(); exit(); /* devolve um valor que retorna o sucesso ou a falha de fechamento de um arquivo*/ /* funcao de procedimento*/ swap(x,y)=100; /* ERRADO!!!*/ Todas as funções que não devolvem valores devem ser declaradas como retornando o tipo void. Ao declarar uma função como void, você a protege de ser usada em uma expressão, evitando uma utilização errada acidental. Assim, usa-se o método de protótipos, atribuindo à função um especificador de tipo explícito (qualquer tipo válido em C ), antes da primeira chamada feita a ela. Desta maneira, C pode gerar um código correto para funções que não devolvem valores inteiros. Método de Protótipos Protótipos de funções não faziam parte da linguagem C original. Eles permitem que C forneça uma verificação mais forte de tipos, como aquela fornecida por linguagens como Pascal. Quando você usa protótipos, C pode encontrar e apresentar quaisquer conversões de tipos ilegais entre o argumento usado para chamar a função e a definição de seus parâmetros. C também encontra diferenças entre o número de argumentos usados para chamar a função e o seu número de parâmetros. Ex.10: Forma geral de uma definição de protótipo: <tipo> <nome_da_função>(<tipo param1>, <tipo param2>,...,<tipo paramn>); float f(void); void le_matriz(int *m); Nota: embora os protótipos sejam opcionais em C, eles são exigidos em C++. Função main() A função main() devolve um inteiro para o processo chamador, que é, geralmente, o sistema operacional. Devolver um valor em main() é equivalente a chamar exit() com o mesmo valor. Se main() não devolve Funções - 7

explicitamente um valor, o valor passado para o processo chamador é tecnicamente indefinido. Pode-se declarar main() como void se ela não devolve um valor. Alguns compiladores geram uma mensagem de advertência, se a função não é declarada como void e também não devolve um valor. Importante: Uma função de propósito geral é aquela que será usada, em uma variedade de situações, talvez por muitos outros programadores. Tipicamente, não se deve basear funções de propósito geral em dados globais. Todas as informações de que uma função precisa devem ser passadas para ela por meio de seus parâmetros. Quando isso não é possível, você deve usar variáveis estáticas. Além de tornar suas funções de propósito geral, os parâmetros deixam seu código legível e menos suscetível a erros resultantes de efeitos colaterais. Exercícios: 1) Para cada um dos trechos de código abaixo, responder: a) O que faz? b) Os argumentos são alterados, ou seja, há uma passagem de parâmetros por referência? /*TRECHO 01*/ #include <stdio.h> #include <ctype.h> void print_upper(char *string); void main(void) char s[80]; gets(s); print_upper(s); void print_upper(char *string) int t; for(t=0;t<80;t++) string[t]=toupper(string[t]); putchar(string[t]); /*TRECHO 02*/ #include <stdio.h> #include <ctype.h> void print_upper(char *string); Funções - 8

void main(void) char s[80]; gets(s); print_upper(s); void print_upper(char *string) int t; for(t=0;t<80;t++) putchar(toupper(string[t])); 1) No trecho 01, identificar: protótipos, parâmetros formais, argumentos, variáveis globais e locais (se houver). 2) Analisar o trecho de código que segue e verificar se há ou não erro de incompatibilidade de tipos: void sqr_it(int *i); void main(void) int x; x=10; sqr_it(x); void sqr_it(int *i) *i= *i * *i; 4) Escrever um programa em C que lê uma string do teclado e a reescreve de trás para frente na tela. Funções - 9