(4) Faça uma função que retorna a razão entre dois números inteiros. A função deve retornar pelo comando return o valor 1 se a operação foi possível e o valor 0 se a operação não foi possível (divisão por zero, por exemplo). O resultado da divisão deve ser retornado por um parâmetro por referência. Na função main, os valores de entrada devem ser lidos. Se o retorno da função chamada for 1 , imprimir o valor da razão. Se o retorno for 0, imprimir ERRO.
Exemplo de entrada:
Digite um número inteiro: 11
Digite um número inteiro: 2
Exemplo de saída:
Razão: 5
Digite um número inteiro: 2
Passo 1
Beleza, o que a gente tem aqui é um exercício de programação em C. A ideia é criar uma função que receba dois inteiros e devolva a “razão” (divisão inteira) desses números. Se o divisor for zero, a função deve avisar que deu erro (retornando 0); se der certo, retorna 1 e “devolve” o resultado da divisão por um parâmetro por referência (usando ponteiro). Na
Conteúdo: funções em C, passagem por referência com ponteiros, tratamento de erro (divisão por zero), leitura com
main
, a gente lê os dois números, chama a função e, conforme o valor de retorno, imprime o resultado ou “ERRO”.Conteúdo: funções em C, passagem por referência com ponteiros, tratamento de erro (divisão por zero), leitura com
scanf
e impressão com printf
.Passo 2
Primeiro precisamos entender passagem por referência em C. Em C não existe “referência” como em C++, mas a gente usa ponteiro. Se quisermos que uma função altere o valor de uma variável que está na
main
, a gente passa o endereço dela. Por exemplo, para devolver um int
, a função recebe um int *res
. Dentro da função, escrevemos *res = valor;
para alterar a variável da main
.Passo 3
Vamos definir a assinatura da função:
int razao(int a, int b, int *res);
Aqui:
a
eb
são os inteiros a dividir;*res
é onde a gente vai guardar o resultado se der certo;- o
int
de retorno é 1 (sucesso) ou 0 (erro, divisor zero).
Passo 4
Agora o corpo da função. Primeiro a gente verifica se
b == 0
. Se for, retornamos 0 (erro). Senão, calculamos a divisão inteiracom a operação
a / b
e guardamos em *res
. Depois retornamos 1.int razao(int a, int b, int *res) {
if (b == 0) {
return 0; // divisão por zero: erro
}
*res = a / b; // operação de divisão inteira
return 1; // sucesso
}
Passo 5
Na função
main
, a gente faz:- declara três inteiros:
x
,y
er
; - pede pro usuário digitar
x
ey
comprintf
+scanf
; - chama
razao(x, y, &r)
; - se o retorno for 1, imprime
Razão: r
; se for 0, imprimeERRO
.
#include <stdio.h>
int razao(int a, int b, int *res) {
if (b == 0) {
return 0;
}
*res = a / b;
return 1;
}
int main() {
int x, y, r;
printf("Digite um número inteiro: ");
scanf("%d", &x);
printf("Digite um número inteiro: ");
scanf("%d", &y);
if (razao(x, y, &r)) {
// retorno 1 → sucesso
printf("Razão: %d\n", r);
} else {
// retorno 0 → erro (divisão por zero)
printf("ERRO\n");
}
return 0;
}
Resposta
Código completo acima. A função
razao
retorna 1 ou 0 conforme o divisor seja diferente de zero e devolve o resultado da divisão inteira pelo ponteiro res
. Na main
, lemos os valores, chamamos a função e imprimimos “Razão: …” ou “ERRO” conforme o caso.