Ir ao conteúdo

Posts recomendados

Postado

faça um programa que receba do usuário um vetor com 10 posições.
em seguida deverá ser impresso o maior  e o menor elemento do vetor.

preciso de ajuda nesse código, pois o maior apresenta na tela perfeitamente, mas o menor fica aparecendo -1.

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

int main () {
    int C[10], i=0, menor, maior;
    menor= C[i];
    maior= C[i];

    for(i; i<10; i++){
        printf("escreva um numero\n");
        scanf("%d", &C[i]);
        if(menor>C[i]){
            menor= C[i];    
        }
        if(maior<C[i]){
            maior=C[i];
        }
    }
    printf(" o menor e %d\n", menor);
    printf("o maior e %d\n", maior);
    
    system("pause");
    return 0;

Postado
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>

int main () {
    int C[10], i=0, menor, maior;
    menor= INT_MAX;
    maior= INT_MIN;

    for(i; i<10; i++){
        printf("escreva um numero\n");
        scanf("%d", &C[i]);
        if(menor>C[i]){
            menor= C[i];    
        }
        if(maior<C[i]){
            maior=C[i];
        }
    }
    printf(" o menor e %d\n", menor);
    printf("o maior e %d\n", maior);
    
    system("pause");
    return 0;
}

 

Postado
1 hora atrás, Ray12 disse:

#include<stdlib.h>

int main () {
    int C[10], i=0, menor, maior;
    menor= C[i];
    maior= C[i];

 

Você ainda não leu C[0]... ;) É um pouco cedo para usar o valor.

 

 

sua ideia de salvar o primeiro como maior e menor antes de entrar no loop é boa. O convencional é mesmo usar constantes como no outro exemplo postado.

 

Sobre o programa

 

Seu programa tem vários problemas comuns, o que sugere que os livros adotados e os instrutores seguem uma mesma cartilha.

 

  • para que o include de stdlib?
  • main() sem parâmetros: devia indicar por int main(void)
  • declare a variável de controle do loop DENTRO do loop. Era uma falha na linguagem, mas foi corrigido. Nos anos 80.
  • inicialize todas as variáveis, e declare uma por linha. É grátis
  • TESTE SEMPRE o retorno de scanf(). É ingênuo seguir cegamente sem testar. O vetor já estará corrompido
  • não use system() nunca. Para nada.
  • Não use chaves em comandos de uma linha
  • ao coletar uma resposta sempre que possível termine a pergunta na mesma linha em que o cara vai digitar a resposta.
  • Em seu programa se encontrar um menor não pode ser o maior na mesma linha: use else e não teste a toa. 
  • um printf() de duas linhas é muito melhor que 2 printf() de uma linha.

 

Compare com esse exemplo, com seu programa do lado direito
 

image.thumb.png.3c55ad81bc9965658d531b0f12f934c0.png

 

A saída do exemplo

 

[1 de 4] Numero: 4
[2 de 4] Numero: 3
[3 de 4] Numero: 2
[4 de 4] Numero: -1
o menor e -1
o maior e 4

 

O código

 

#include <stdio.h>
int main()
{
    int n = 4; // total
    int C[10];
    printf("[%d de %d] Numero: ", 1,n);
    if( scanf("%d", &C[0]) !=1 ) return -1; // não leu
    int maior = C[0];
    int menor = maior;

    for (int i=1; i<n; i+=1)
    {
        printf("[%d de %d] Numero: ", 1+i, n);
        if (scanf("%d", &C[i]) != 1) return -1; // não leu
        if (menor > C[i]) menor = C[i];
            else if (maior < C[i]) maior = C[i];
    }

    printf("\
o menor e %d\n\
o maior e %d\n",
        menor, maior);
    return 0;
}

 

  • Curtir 1
  • 2 anos depois...
Postado

Olá @Ray12

 

O Problema

Faça um programa que receba do usuário um vetor com 10 posições,
em seguida deverá ser impresso o maior  e o menor elemento do vetor.

 

O dado é um vetor (com 10 posições)

Em 20/10/2021 às 09:24, Ray12 disse:

printf("escreva um numero\n");

*Nada disso!

É "Entre com 10 números ..."; e não até 10 números. 

 

O programa não cede enquanto não obter/receber/ler o vetor, e somente o vetor.

  printf ("%s","Entre com 10 números decimais (separe-os com a Enter ou a Espaço): ");

 

Por exemplo.

#include <stdio.h>
int main (void){
  int C[10], i= 0;

  printf ("%s","Entre com 10 números (separe-os com a Enter ou a Espaço): ");
  for ( ; i<10; i++) {
    
    int c= getchar ();
    if (EOF==c) {
      perror ("Falha na leitura");
      return 1;
      }
    if ('\n'==c) printf ("%2d%c",i+ 1,'>');
        else ungetc (c,stdin);

    c= scanf("%d",&C[i]);
    if (1==c) continue;

    while ('\n'!=(c= getchar ()) && EOF!=c);
    ungetc ('\n',stdin);
    --i;
    }
  /* ... */
  return 0;
  }

Suponha que o dado é vetor, somente ele satisfaz.

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!