(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:
aebsão os inteiros a dividir;*resé onde a gente vai guardar o resultado se der certo;- o
intde 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,yer; - pede pro usuário digitar
xeycomprintf+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.