Ir ao conteúdo

Posts recomendados

Postado

Resolvi este exercício porém as saídas não estão corretas. Alguém sabe me dizer o que está errado?

O exercício: Faça um programa que lê 10 valores e os armazena em um vetor (float). Em seguida, mostre na tela: – O maior valor; – A média dos valores; – Quais valores estão acima da média.

#include <stdio.h>

int main() {
    float v[10];
    int i;
    for(i = 0 ; i < 10 ; i++){
        printf("Digite o %d° valor: ",i+1);
        scanf("%f",&v[i]);
    }
    int maior = v[i]; 
    for(i = 0 ; i < 10 ; i++){
        if(v[i] > maior)
            maior = v[i];
    }
    
    int soma = 0;
    for(i = 0 ; i < 10 ; i++){
        soma = soma + v[i];
    }
    float media = soma / 10;
    
    printf("O maior valor eh: %d.\n",maior);
    printf("A media dos valores eh: %.2f.\n",media);
    
    printf("Valores maiores que a media: \n");
    for(i = 0 ; i < 10 ; i++){
        if(v[i] > media)
            printf("%d\n",v[i]);
    }
    
    return 0;
}

 

  • Obrigado 1
Postado

@ningumx       com certeza seu   "int maior = v[i];"  esta fora de faixa , pois depois do loop  ,  i foi incrementado e passou  a valer 10 , e nesse seu vetor não existe  uma posicao  10 , mas apenas de zero até nove .

Postado
5 minutos atrás, devair1010 disse:

@ningumx       com certeza seu   "int maior = v[i];"  esta fora de faixa , pois depois do loop  ,  i foi incrementado e passou  a valer 10 , e nesse seu vetor não existe  uma posicao  10 , mas apenas de zero até nove .

como posso resolver isso?

Fiz algumas modificações mas a média ainda não dá o valor correto. Se colocar os valores de 1 a 10, a média, que é para dar 5.5, está dando 5.0.

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

int main() {
    float v[10];
    int i;
    for(i = 0 ; i < 10 ; i++){
        printf("Digite o %d° valor: ",i+1);
        scanf("%f",&v[i]);
    }
    int maior = v[0];
    int i_maior = 0;
    for(i = 0 ; i < 10 ; i++){
        if(v[i] > maior){
            maior = v[i];
            i_maior = i;
        }
    }
    
    int soma = 0;
    for(i = 0 ; i < 10 ; i++){
        soma = soma + v[i];
    }
    float media = soma / 10;
    
    printf("O maior valor eh: %d.\n",maior);
    printf("A media dos valores eh: %.2f.\n",media);
    
    printf("Valores maiores que a media: \n");
    int acima[10];
    for(i = 0 ; i < 10 ; i++){
        if(v[i] > media){
            acima[i] = v[i];
            printf("%d\n",acima[i]);
        }
    }
    
    return 0;
}

 

  • Amei 1
Postado

@ningumx    seu vetor é de float , e o compilador converte de float para int ao adicionar o valor float na variável do tipo int ,

essa parte das casas decimais pode ser feita com um "cast" 


    int soma = 0;
    for(i = 0 ; i < 10 ; i++){
        soma = soma + v[i];
    }
    float media = (float)soma / 10;

 

  • 1 ano depois...
Postado

@ningumx Bom dia!

 

Notei que maioria das falhas são de especificadores, tipos de dados e atribuir entre tipos diferentes.

 

C'11 - gcc'11.4

#include <stdio.h>
int main() {
    float v[10];
    int i;
    for (i= 0 ; i<10 ; i++) {
        printf ("%c%s%d%s",'\r',"Digite o ",i+ 1,"° valor: ");
        int c= scanf ("%f",&v[i]);
        if (c== EOF) {
          perror ("Falha na leitura");
          return 1;
          }
        if (c!=1) --i;  
        while ('\n'!=(c= getchar ()) && EOF!=c); 
        }
    int maior= 0; 
    for (i= 0 ; i<10 ; i++) {
        if (v[i]>v[maior])
            maior= i;
        }
    float soma= 0;
    for (i= 0 ; i<10 ; i++) {
        soma= soma+ v[i];
        }
    float media= soma/ 10;
    
    printf ("O maior valor eh: %.2f.\n",v[maior]);
    printf ("A media dos valores eh: %.2f.\n",media);
    
    printf ("Valores maiores que a media: \n");
    for (i= 0 ; i<10 ; i++) {
        if (v[i]>media)
            printf ("%.2f\n",v[i]);
            }  
    return 0;
    }

 

Sugestão: dê-se a oportunidade de aprender mais com o compilador, ative todos os alertas (todos, inclusive os pedantes).

 

Dica: utilize gcc'11 e chame-o com estas opções

Citação

-std=c11 -Wall -Wextra -Wfatal-errors -pedantic -pedantic-errors -fanalyzer

 

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