Ir ao conteúdo

Posts recomendados

Postado

1) Crie uma função que receba um número inteiro de 100 a 999 e retorne esse número inteiro invertido. Por exemplo, se o número informado for 123, a função deverá retornar o número 321. No método main() solicite ao usuário um número inteiro, passe esse número para a função e imprima o número invertido retornado pela função. Importante: A função receberá um número inteiro e deverá retornar também um número inteiro.

 

2) Crie uma função que receba duas variáveis por referência e troque o valor das variáveis dentro da função. No método main() solicite ao usuário os valores das duas variáveis, imprima os valores, faça a chamada da função e imprima novamente os valores. Importante: A função não tem retorno, já que vai receber as variáveis por referência e não por valor.

  • Curtir 1
Postado

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

int main(int n, int aux){

    printf("Insira um valor entre 100 e 999: ");
    scanf("%d", &n);
    scanf("%d", &n);
    printf("%4d%4d\n", n, n);
    aux = n;
    n = n;
    n = aux;
    printf("%4d%4d\n", n, n);

    return 0;
  }
 

  • Obrigado 1
Postado

@XIXX     bom começo , mas ele não está fazendo nada do que se pede  ,  você precisa criar uma função lá no início do código antes da função main , que receberá o número pedido dentro da main e enviado por parâmetro para tal função  ,  que fará os cálculos medindo e desmembrando os dígitos do número e novamente montado ele ao contrário , e aí retorna o número pronto e ao contrário para dentro da função main que aí escreverá o resultado na tela  ,  então um exemplo disso pode ser assim ,  mas existe vários outro jeitos de fazer , 

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int invertido(int x){
    int c,a[10],b=0,res=0;
    printf("o Numero desmembrado :\n");
    while(x>0){
        a[b] = x % 10;// desmenbrando os dígitos do número
        printf("a[%d] = %d\n",b,a[b]);
        x   /= 10;  // pois o numero está na base 10 decimal
        b++;        // armazena o dígito nessa posição do vetor
    }
    x = 1; // inicaliza com valor 1 hum
    c = b; // guarda o valor em c
    b--  ; // atualiza a qtd de dígitos
    while(b>0){
        x *= 10;
        b--;
    }
    b=0;
    printf("\nInvertendo o numero :\n");
    while(c>0){
        res += a[b] * x;
        printf("res = %d\n",res);
        x   /= 10;
        c--;
        b++;
    }
    printf("\nValor final de Retorno %d\n\n",res);
    return res;
}
int main(){
    setlocale(LC_ALL,"portuguese");
    int n;
    printf("Insira um valor entre 100 e 999: ");
    scanf("%d",&n);
    printf("\nPronto\n\n");
    n=invertido(n);
    printf("O númrero invertido eh %d\n\n\n",n);
    return 0;
  }

 

Postado
    scanf("%d", &n);
    scanf("%d", &n);
    printf("%4d%4d\n", n, n);

Esse trecho é interessante. Qual o propósito de ler duas vezes a mesma variável?

  n = n;

Esse trecho é mais interessante: Qual o propósito de atribuir o valor de n....... a n ?

 

Em 18/05/2020 às 22:19, XIXX disse:

se o número informado for 123, a função deverá retornar o número 321

 

Uma maneira bem simples de fazer isso é simplesmente um loop: você pega um outro int e enquanto o original for maior que zero você dive por 10 w multiplica o outro por 10 e soma a unidade desse. Simples assim:

original                resultado
  321                       0
unidade: 1               10* 0 + 1 = 1
  divide por 10 (divisao de int trunca o valor)
  32
unidade 2                 10*1 + 2 = 12
  divide por 10
  3                       10*12 + 3 = 123

Quanto à segunda parte

 

Em 18/05/2020 às 22:19, XIXX disse:

A função não tem retorno, já que vai receber as variáveis por referência e não por valor


Esse enunciado é bobinho. Podiam ter escrito melhor. Uma função sempre ter retorno. E não tem nada a ver uma coisa com a outra. Uma função pode ou não ter argumentos passados por valor ou referência (ou os dois)  e mesmo assim retornar algo.

 

Passar por referência é o que faz no scanf() por exemplo, no seu programa. O & comercial prefixando a variável transfere o endereço. Do outro lado um parâmetro do tipo *int vai receber o tal endereço.
 

Imagino que tenha claro visto isso na aula. E o operador * é usado para pegar o valor apontado pela variável...
 

Exemplo

 

Eis uma função assim

int coisa(int*, int);

Essa função coisa() recebe um ponteiro para int e um int. E retorna um int. Se ela for escrita assim:

int coisa(int* um, int outro)
{
    *um = *um + 3;
    return (*um + outro);
};

Ela vai retornar um valor igual ao dobro do primeiro mais o segundo. E na volta da chamada terá dobrado o valor do primeiro...

 

Assim esse trecho 

    int valor = 12;
    printf("valor antes de chamar coisa() = %d\n", valor);
    printf("coisa() retornou = %d\n", coisa(&valor, valor));
    printf("valor depois de chamar coisa() = %d\n", valor);

mostra

valor antes de chamar coisa() = 12
coisa() retornou = 36
valor depois de chamar coisa() = 24

Isto é só um exemplo. Nunca chame funções assim dentro de um print(). É pedir por problemas.

 

Isso é o que precisa para resolver as duas partes, eu acho

 

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!