Você está aqui: C ::: Fundamentos da Linguagem ::: Métodos, Procedimentos e Funções

Funções em C: Os mistérios da passagem por valor e passagem por referência

Quantidade de visualizações: 11669 vezes
Quando se trata de funções, os argumentos para estas podem ser passados por valor e por referência. Muitos iniciantes em programação ficam muito confusos em relação a isso. Em resumo, a passagem por valor é usada quando não queremos que alterações efetuadas nos argumentos fornecidos à função afetem os valores das variáveis originais, ou seja, cópias destes valores são feitas e repassadas à função. Veja um exemplo de PASSAGEM POR VALOR:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

// uma função que altera o valor da variável
// fornecida como argumento
void alterar(int valor){
  // multiplicamos o valor recebido por 10
  valor = valor * 10;
  printf("%d\n", valor);
}

int main(int argc, char *argv[]){
  // variável do tipo int
  int a = 2;

  // vamos imprimir o valor original da variável a
  printf("%d\n", a);

  // vamos fornecer este valor para a função alterar()
  alterar(a);

  // vamos imprimir o valor original da variável a novamente
  printf("%d\n", a);

  puts("\n\n");
  system("PAUSE");
  return 0;
}

Ao executar este código nós teremos o seguinte resultado:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

2
20
2

Isso demonstra que a função realmente recebeu uma cópia do valor da variável a e que, qualquer modificação efetuada na cópia não afetou de forma alguma o valor original.

Na PASSAGEM POR REFERÊNCIA nós não passamos uma cópia mas sim uma referência (um ponteiro) para a variável original e qualquer alteração efetuada na função afetará a variável original. Veja um exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

// uma função que altera o valor da variável
// fornecida como argumento
// note o uso de um ponteiro do tipo int
void alterar(int *valor){
  // multiplicamos o valor recebido por 10
  *valor = (*valor) * 10;
  printf("%d\n", *valor);
}

int main(int argc, char *argv[]){
  // variável do tipo int
  int a = 2;

  // vamos imprimir o valor original da variável a
  printf("%d\n", a);

  // vamos fornecer este valor para a função alterar()
  alterar(&a);
  // note o uso do operador de endereço & para enviar 
  // não o valor mas o endereço da variável a

  // vamos imprimir o valor original da variável a novamente
  printf("%d\n", a);

  puts("\n\n");
  system("PAUSE");
  return 0;
}

Ao executar este código nós teremos o seguinte resultado:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

2
20
20

Esta execução demonstra que, de fato, a alteração efetuada na função afetou o valor da variável original. Concentre sua atenção no fato de que, quando queremos usar a PASSAGEM POR REFERÊNCIA, precisamos definir os parâmetros da função como sendo ponteiros e, nas chamadas à função, usar o operador de endereço (&) para fornecer o endereço das variáveis que serão modificadas.

Link para compartilhar na Internet ou com seus amigos:

C ::: Desafios e Lista de Exercícios Resolvidos ::: C Básico

Exercício Resolvido de C - Como calcular o restante de um salário após o pagamento de duas contas com juros

Quantidade de visualizações: 836 vezes
Pergunta/Tarefa:

Cintia acaba de receber seu salário mas precisa pagar duas contas atrasadas. Por causa do atraso, ela deverá pagar multa de 2% sobre cada conta. Faça um programa que leia o valor do salário e das duas contas e que calcule e mostre quanto restará do salário de Cintia.

Sua saída deverá ser parecida com:

Informe o salário: 1350
Valor da primeira conta: 140
Valor da segunda conta: 300

Total das contas sem juros: 440.0
Total dos juros: 8.8
Total das contas com juros: 448.8
Sobra do salário: 901.2
Resposta/Solução:

Veja a resolução comentada deste exercício usando C:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main(int argc, char *argv[]){
  setlocale(LC_ALL,""); // para acentos do português

  double salario, conta1, conta2, total_contas;
  double total_juros, total_contas_com_juros;
  double total_contas_sem_juros, sobra_salario;

  // vamos pedir que o usuário informe o valor do salário e das duas contas
  printf("Informe o salário: ");
  scanf("%lf", &salario);
  printf("Valor da primeira conta: ");
  scanf("%lf", &conta1);
  printf("Valor da segunda conta: ");
  scanf("%lf", &conta2);
    
  // total a ser pago nas duas contas sem os juros
  total_contas = conta1 + conta2;
  // calcula os juros
  total_juros = total_contas * 0.02;
  // total a ser pago com juros
  total_contas_com_juros = total_contas + total_juros;
  // sobra do salário
  sobra_salario = salario - total_contas_com_juros;
    
  // mostra os resultados
  printf("\nTotal das contas sem juros: %lf", total_contas);
  printf("\nTotal dos juros: %lf", total_juros);
  printf("\nTotal das contas com juros: %lf", total_contas_com_juros);
  printf("\nSobra do salário: %lf", sobra_salario);
  
  printf("\n\n");
  system("PAUSE");	
  return 0;
}



C ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas

Como calcular o seno de um número ou ângulo em C usando a função sin()

Quantidade de visualizações: 4452 vezes
Em geral, quando falamos de seno, estamos falando do triângulo retângulo de Pitágoras (Teorema de Pitágoras). A verdade é que podemos usar a função seno disponível nas linguagens de programação para calcular o seno de qualquer número, mesmo nossas aplicações não tendo nenhuma relação com trigonometria.

No entanto, é sempre importante entender o que é a função seno. Veja a seguinte imagem:



Veja que temos um triângulo retângulo com as medidas já calculadas para a hipotenusa e os dois catetos, assim como os ângulos entre eles.

Assim, o seno é a razão entre o cateto oposto (oposto ao ângulo theta) e a hipotenusa, ou seja, o cateto oposto dividido pela hipotenusa. Veja a fórmula:

\[\text{Seno} = \frac{\text{Cateto oposto}}{\text{Hipotenusa}} \]

Então, se dividirmos 20 por 36.056 (na figura eu arredondei) nós teremos 0.5547, que é a razão entre o cateto oposto e a hipotenusa (em radianos).

Agora, experimente calcular o arco-cosseno de 0.5547. O resultado será 0.9828 (em radianos). Convertendo 0.9828 radianos para graus, nós obtemos 56.31º, que é exatamente o ângulo em graus entre o cateto oposto e a hipotenusa na figura acima.

Pronto! Agora que já sabemos o que é seno na trigonometria, vamos entender mais sobre a função sin() da linguagem C. Esta função, disponível no header math.h, recebe um valor numérico e retorna um valor, também numérico) entre -1 até 1 (ambos inclusos). Veja:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <math.h>  
  
int main(int argc, char *argv[]){
  printf("Seno de 0 = %f", sin(0));
  printf("\nSeno de 1 = %f", sin(1));
  printf("\nSeno de 2 = %f", sin(2)); 
   
  printf("\n\n");
  system("PAUSE");
  return 0;
}

Ao executar este código C nós teremos o seguinte resultado:

Seno de 0 = 0.000000
Seno de 1 = 0.841471
Seno de 2 = 0.909297

Note que calculamos os senos dos valores 0, 1 e 2. Observe como os resultados conferem com a curva da função seno mostrada abaixo:




C ::: Fundamentos da Linguagem ::: Estruturas de Controle

Como usar a instrução break da linguagem C para interromper a execução de um laço

Quantidade de visualizações: 15615 vezes
Laços for, while, do...while e switch podem ter suas iterações (repetições) interrompidas com o uso da instrução break. Quando isso acontece, o fluxo de execução salta para a primeira instrução após o laço. Veja um exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int i;

  for(i = 0; i <= 10; i++){
    printf("%d  ", i);

    if(i == 6)
      break; // sai do laço
  }

  printf("\n\n");
  system("PAUSE");
  return 0;
}

Este código exibirá os valores de 0 à 6. Veja que execução do laço é interrompida exatamente no ponto em que a instrução break é encontrada. Se houver mais instruções dentro do laço mas logo após o break, estas instruções não serão executadas.


Desafios, Exercícios e Algoritmos Resolvidos de C

Veja mais Dicas e truques de C

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 66 usuários muito felizes estudando em nosso site.