Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Passagem de Parâmetros em C: Valor e Referência, Exercícios de Matemática

Este documento aborda a passagem de parâmetros em c, explicando a diferença entre passagem por valor e passagem por referência. Além disso, é apresentado o mecanismo de chamada de função, como declarar e definir funções, e a passagem de parâmetros por referência usando ponteiros. Também é abordado o conceito de funções que retornam valores e funções que não retornam valores, além de exemplos de funções em c. Por fim, é apresentado o conceito de passagem de parâmetros variáveis em c.

Tipologia: Exercícios

2022

Compartilhado em 21/06/2022

mariana-muniz-35
mariana-muniz-35 🇧🇷

1 documento

1 / 44

Toggle sidebar

Documentos relacionados


Pré-visualização parcial do texto

Baixe Passagem de Parâmetros em C: Valor e Referência e outras Exercícios em PDF para Matemática, somente na Docsity! FUNÇÕES EM C Material preparado pela profa Silvana Maria Affonso de Lara 2º semestre de 2010 1 Universidade de São Paulo – São Carlos Instituto de Ciências Matemáticas e de Computação ROTEIRO DA AULA  Definição de Função  Argumentos, retornos e protótipos  Funcionamento de uma chamada  Passagem de Informações  Passagem de parâmetros por valor e por referência  Pilha de inteiros em C  Número de parâmetros variáveis  Acesso aos parâmetros  Parâmetros para main() 2 O RETORNO DA FUNÇÃO  No seu retorno, uma função pode retornar resultados ao programa que a chamou return (resultados);  O valor da variável local resultados é passado de volta como o valor da função  Valores de qualquer tipo podem ser retornados  Funções predicado: funções que retornam valores  Procedimentos: funções que não retornam valores Exemplo: void function (int x) 5 FUNÇÕES 6  Definições de funções  Funções são definidas de acordo com a seguinte sintaxe: tipo_de resultado nome (lista de parâmetros) { corpo de função } FUNÇÕES - EXEMPLO 7 int MDC (int a, int b) { int aux; if (a < b) { aux = a; a = b; b = aux; } while (b != 0) { aux = b; b = a % b; a = aux; } return (a); } uma função C para calcular o máximo divisor comum entre dois números FUNÇÕES  Funcionamento de uma chamada:  Se um comando return é executado, o controle é passado de volta para o trecho que chamou a função  Se um comando return inclui uma expressão, o valor da expressão é convertido, se necessário, pelo tipo do valor que a função retorna  O valor então é retornado para o trecho que chamou a função  Se um comando return não inclui uma expressão nenhum valor é retornado ao trecho que chamou a função  Se não existir um comando return, o controle é passado de volta para o trecho que chamou a função após o corpo da função ser executado 10 PASSAGEM DE INFORMAÇÕES  Exemplo: 11 double mesada (double notas, int idade) { double total; if (idade > 10) return (idade * 20.0); else{ total = notas*idade*20; return total; } } PASSAGEM DE INFORMAÇÕES  Argumentos são passados por valor  Quando chamada, a função recebe o valor da variável passada  Quando argumento é do tipo atômico, a passagem por valor significa que a função não pode mudar seu valor  Os argumentos deixam de existir após a execução do método 12 FUNÇÕES  Mecanismo do processo de chamada de função 4. Comandos do corpo da função são executados até: 4.1 Encontrar comando return 4.2 Não existirem mais comandos para serem executados 5. O valor da expressão return, se ele existe, é avaliado e retornado como valor da função 6. Pilha criada é liberada 7. Programa que chamou continua sua execução 15 FUNÇÕES  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 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 16 FUNÇÕES  Projeto top-down  Procedimentos e funções permitem dividir um programa em pedaços menores  Facilita sua leitura  É chamado de processo de decomposição  Estratégia de programação fundamental  Encontrar a decomposição certa não é fácil  Requer experiência 17 FUNÇÕES Menor função possível: void faz_nada( void ) { } 20 PASSAGEM DE PARÂMETROS  Em C os argumentos para uma função são sempre 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. } 21 PASSAGEM DE PARÂMETROS  Como, então, mudar o valor de uma variável? 22  enviar o endereço do argumento para a função passagem de parâmetro por referência 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: int x = 10, y = 20; troca(&x, &y); printf(“x=%d y=%d”, x, y) => x=20 y=10 25 PRÁTICA: FUNÇÃO TROCA void troca (int *px, int *py) { int temp; temp=*px; *px=*py; *py=temp; } 26 px: py: x: y: RETORNANDO VALORES  uma função retorna um valor através do comando return Ex: int power (int base, int n) { int i,p; p = 1; for (i = 1; i <= n; ++i) p *= base; return p; } 27 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; } 30 EXEMPLO (CONT.) int main( ) { char nome[80] = "Santos"; char sobrenome[ ] = " Dumont"; printf( "O nome é %s.\n", concatena(nome, sobrenome) ); return 0; } ==> Santos Dumont 31 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 endereço do terceiro caracter do string: &str[2] 32 PILHA COM ARRAY  Uma pilha pode ser implementada como um array onde o topo é indicado com um índice 35 index C D tipo pilha[MAXPIL]; pilha[0] pilha[1] pilha[2] pilha[3] Topo(): index aponta para a posição vazia: retorna pilha[index-1]; Vazia: retorna index == 0 Push(d): pilha[index] = d; incrementa index; Pop(): decrementa index; retorna pilha[index]; Cheia(): retorna index == MAXPIL+1 PILHA DE INTEIROS EM C #define MAXPIL 10 int pilha[MAXPIL]; int index = 0; void push(int dado) { pilha[index++] = dado; } int pop() { return pilha[--index]; } int topo() { return pilha[index-1]; } int vazia() { return (index == 0); } int cheia() { return (index == MAXPIL+1; } 36 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:  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ção Ex: media ( 1, 4, 6, 0, 3, -1 ); 37 EXEMPLO PARÂMETROS VARIÁVEIS #include <stdio.h> #include <stdlib.h> #include <stdarg.h> int sum( int nro_args, ... ) { va_list ap; int result = 0, i; va_start( ap, nro_args ); for( i = 1; i <= nro_args; i++ ) { result += va_arg( ap, int ); } va_end(ap); return result; } 40 sum( 5, 3, 5, 18, 57, 66 ) ==> 149 sum( 2, 3, 5 ) ==> 8 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 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 41 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ãe 42 argv 0 echo\0 Alô, \0 mamãe\0 argc = 3
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved