Ir ao conteúdo
  • Cadastre-se

COMO MOSTRAR O MAIS NÚMERO EM C ?


zennom
Ir à solução Resolvido por Pedro Math.pi,

Posts recomendados


Boa tarde pessoal,estou com duvida nesse exercicio,

já programei o princípio, entretanto como posso fazer com que o meu computador saiba qual 

vai ser o número maior a ser digitado? qual algoritmo deve ser feito?

poderiam me esclarecer? estou fazendo com while, para tentar solucionar o problema, tentei colocar

o IF, para me mostrar qual o numero maior é digitado, mas acho que está errado pois o IF é uma condição de escolha e no meu caso eu só quero

MOSTRAR O MAIOR NÚMERO.

Segue o meu código


 

 

2. Desenvolva um programa que solicite 10 números inteiros positivos e

mostre o maior deles.

#include <stdio.h>

#include <stdlib.h>

 

main()

{

 

int n1,resultado,contador=1;

 

contador=1;

while(contador==15)

{

printf("digite um numero");

scanf("%d",&n1);

contador++;

 

if(n1>resultado)

{

printf("o maior numero e %d",resultado);

}

 

}

}

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@zennom

Fácil

Coloque isso dentro do while:

Se contador for igual a 1 ele guarda o maior. Senão ele faz as comparações necessárias.

 

Obs: se você precisa informar 10 números, por que contador está indo até 15?

 

Dica: incremente "contador ++" somente antes de fechar as chaves '{ }' do while, para evitar problemas no uso da variável contador em algum programa futuro.

Link para o comentário
Compartilhar em outros sites

Oi!eu 

percebi que fiz um erro no meu código, esqueci de colocar o sinal de maior ou igual para que ele repita as quantidades necessárias

e são 10 vezes, não 15.

 #include <stdio.h>#include <stdlib.h> main(){ int n1,resultado,contador=1; contador=1;while(contador<=10){printf("digite um numero");scanf("%d",&n1);contador++; if(n1>resultado){printf("o maior numero e %d",resultado);} }} 
Link para o comentário
Compartilhar em outros sites

aconteceu um erro estranho

#include <stdio.h>#include <stdlib.h> main(){ int n1,resultado,contador=1; contador=1; // contador=1 para guardar o maiorwhile(contador<=10){printf("digite um numero");scanf("%d",&n1);if(n1>resultado){printf("o maior numero e %d",resultado);contador++;} }// coloquei o contador e o if dentro das chaves que contem while }

post-784537-0-27357800-1447111410_thumb.

Link para o comentário
Compartilhar em outros sites

Olá!

 

 

Oi sou iniciante em C, mas acho que posso lhe ajudar um pouco . . .

 

 

Aqui o meu compilador retornou os seguintes alertas:

 

 

|4|warning: return type defaults to ‘int’ - esse alerta está te alertando que você não definiu o tipo de retorno para a função main(), e por isso o compilador o definiu por padrão como sendo do tipo “ int ”

 

 

|22|warning: control reaches end of non-void function – esse alerta está te alertando que a função main(), como lhe foi definida pelo compilador o tipo de retorno como sendo “ int ”, por padrão no final da função antes da ultima chave de fechamento de main(), faltou você colocar um return 0;

 

 

|14|warning: ‘resultado’ may be used uninitialized in this function – neste caso o mais provável é de que este alerta está te alertando de que a não inicialização da variável “ resultado ” pode causar algum problema no futuro, pois, se existir algum outro valor na porção de memoria ocupada pela sua variável o chamado ( lixo de memoria ), este valor poderá ser usado no seu programa causando os mais diversos problemas, no meu caso surgiu o seguinte valor para a variável “ resultado ” ( - 1928848504830 ) por isso é sempre bom iniciar as suas variáveis com algum valor antes que estas sejam utilizadas pelo seu código, no meu caso um simples resultado = 0; já é o bastante

 

 

Com relação ao erro estranho ele está acontecendo pelo seguinte:

 

 

- a variável que irá armazenar o maior valor é a variável “ resultado “, porém no seu código o if, ate faz a comparação entre o numero digitado e o valor da variável “ resultado ”, mas o valor da variável “resultado” ( 1 ) muito provavelmente é lixo de memoria de algum valor que está sendo alocado ali ou que está sendo definido durante a execução do programa, para isso defina um valor como resultado = 0; antes de usar a variável

 

 

- além disso o valor da variável “ resultado ” permanecerá igual durante toda a execução do programa, pois você não está alocando um novo valor lido da variavel “ n ” para a variável “ resultado”, if ( n > resultado ) { resultado = n; }

 

 

- alem disso contador++; deve ser colocado antes da chave de fechamento do while e não do if

 

 

- embora não esteja errado o printf que irá exibir o maior numero deve ficar fora do laço while, caso contrario ele será exibido toda vez que o laço for reiniciado, a não ser que este seja o seu objetivo

 

 

- apenas lembrando de que " " " contador=1; // contador=1 para guardar o maior  " " " a variavel " contador " irá ser usada como parte da expressão que irá controlar a execução do laço while()

 

 

Bom por hora é só, veja se as dicas acima resolvem o seu problema . . .

 

 

Ubuntu 14.04  GCC 4.8  CodeBlocks 13.12

 

 

Espero ter Ajudado ! ! !

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Contador é pra contar!

Não é pra guardar maior, nem menor.

 

Seu código sem indentação não ajuda em nada. Já te disse isso rsrs.

#include <stdio.h>#include <stdlib.h> main(){   int n1,resultado,contador=1;   contador=1; // contador É PRA CONTAR  while(contador<=10)  {    printf("digite um numero"); // aqui é a pergunta    scanf("%d",&n1); // aqui é a leitura/entrada de dados        if(n1>resultado) // COMO EU VOU SABER QUANTO VALE O RESULTADO SE VOCÊ NÃO DISSE QUANTO ELE VALE?     {      printf("o maior numero e %d",resultado);          } // fecha if      contador++; //CONTADOR ANTES DE FECHAR O WHILE. VOcê enfiou ele dentro do if, jovem. Já consertei.  } // fecha while }

Olha como fica melhor pra ler. Conserte a variável 'resultado', como expliquei no código.

Ela deve ser inicializada. De preferência guarde a primeira leitura nela.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
  • Solução

@zennom

Tem uma coisa que os professores costumam bater em cima que é o teste de mesa ou teste chinês. Pegue uma folha de papel e simule seu programa rodando.

 

Preste atenção a esses trechos:

printf("digite um numero");scanf("%d",&n1);

Vamos supor que eu digite o número 10.

 

Nesse momento o valor das minhas variáveis é:

n1: 10

resultado: não tem nada

contador: 1

 

Agora passemos para a próxima fase do programa:

if(n1>resultado){   printf("o maior numero e %d",resultado);   contador++;}

Como eu vou testar esse if?

 

if(n1>resultado) 

traduzindo:

Se o 10 for maior que resultado (mas não sei qual é o resultado porque está vazio). Então vai dar erro.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

Vamos consertar esse resultado aí. Vou inicializar ele em 0 (mesmo não sendo o mais correto pois um número negativo não seria válido).

int n1,resultado = 0,contador = 1;

Vamos testar agora:

printf("digite um numero");scanf("%d",&n1);

Digitei 10 novamente.

 

Nesse momento o valor das minhas variáveis é:

n1: 10

resultado: 0

contador : 1

 

Agora passemos para a próxima fase do programa:

if(n1>resultado){   printf("o maior numero e %d",resultado);   contador++;}

Agora a condição vai ser aceita pois n1 é maior do que resultado.

Veja:

if(n1>resultado)  >>>>> se 10 > 1

 

Mas olha o que você pediu pra ele fazer:

printf("o maior numero e %d",resultado);   contador++;

Você pediu pra ele mostrar o resultado. Por que ele vai mostrar o resultado se ele vale 1?

Corrija isso aí também.

A variável 'resultado' tem que guardar o valor de 'n1' antes de poder mostrá-lo.

 

Esse contador aí tem que ficar fora do if. Ele não faz parte dessa instrução. Tem que ficar antes do fechamento do while, como postei no código do meu ouro post.

 

 

E tente fazer os passos do seu programa para não se perder.

Link para o comentário
Compartilhar em outros sites

Ele não está fazendo o loop, está indo para o IF direto e dando um número desconhecido como resultado , veja:

 #include <stdio.h>#include <stdlib.h> main(){    int n1,resultado=0,contador=1;    contador=1;   while(contador<=10)  {       printf("digite um numero");       scanf("%d",&n1);        if(n1>resultado)          {            printf("o maior numero e %d");           }      contador++;     }         }  
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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...