7)Fazer uma função que receba 3 números reais como parâmetros,
,
e
,e os ordene de tal forma que,ao final da função,A contenha o menor número e C o maior.Em seguida,fazer um programa que receba 3 números do usuário,chame a função e mostre os números ordenados.
Passo 1
O enunciado pede uma função que receba três números reais (vamos chamar de
,
e
) e os coloque em ordem crescente de modo que, ao final,
seja o menor e
seja o maior. Em seguida, devemos escrever um programa que leia três números do usuário, chame essa função e mostre o resultado ordenado. O conteúdo envolvido é: passagem de parâmetros por referência e algoritmo de ordenação simples (trocas entre pares).
Passo 2
Definimos a assinatura da função usando ponteiros para permitir a troca dos valores originais. Em C, ficaria assim:
void ordena(float *A, float *B, float *C);
Aqui,
,
e
referem-se aos valores passados, e podemos modificá-los dentro da função.
Passo 3
Dentro de
ordena
usamos comparações sucessivas e uma variável temporária para trocar valores. A estratégia é:- Se
, trocamos com . - Se
, trocamos com . - Se
, trocamos com .
Esse conjunto de três comparações garante que, no fim,.
Passo 4
No
main
lemos três valores reais do usuário em variáveis locais (por exemplo, x
, y
, z
), chamamosordena(&x, &y, &z);
e então imprimimos
x
, y
e z
, que já estarão em ordem crescente.Resposta
#include <stdio.h>
/* Função ordena três valores em ordem crescente via passagem por referência */
void ordena(float *A, float *B, float *C) {
float temp;
/* Garante *A <= *B */
if (*A > *B) {
temp = *A;
*A = *B;
*B = temp;
}
/* Garante *A <= *C */
if (*A > *C) {
temp = *A;
*A = *C;
*C = temp;
}
/* Garante *B <= *C */
if (*B > *C) {
temp = *B;
*B = *C;
*C = temp;
}
}
int main() {
float x, y, z;
printf("Digite tres numeros reais:
");
scanf("%f %f %f", &x, &y, &z);
ordena(&x, &y, &z);
printf("Numeros em ordem crescente: %.2f %.2f %.2f
", x, y, z);
return 0;
}