Jump to content
darthmagus

Me ajudem a resolver um exercício, por favor! E se possível, me mostrem como entender melhor estruturas de repetição.

Recommended Posts

Escreva um programa que calcule a média dos números digitados pelo usuário, se eles forem pares. O programa deve terminar a leitura se o usuário digitar zero.

 

Isso foi o que fiz até agora, mas não deu muito certo:

 

  main(void){
        setlocale(LC_ALL,"Portuguese");
        int n1, n2, n3;
        float media;
        int i;

        printf("Digite o 1º número: ");
        scanf("%d", &n1);

        printf("Digite o 2º número: ");
        scanf("%d", &n2);

        printf("Digite o 3º número: ");
        scanf("%d", &n3);

        while (n1%2 ==0 && n2%2 ==0 && n3%2 == 0) {
            media = (n1 + n2 + n3)
        }

        printf("%d", media);

    return 0;
    system ("pause");
}
 

Share this post


Link to post
Share on other sites

@darthmagus,  nessa situação não faz muito sentido usar o while. Tu poderia fazer 3 if's pra testar se são pares e ir somando numa variável. Depois, dividiria pelo total. Mas e se tu salvasse esses números dentro de um vetor? Aí sim tu poderia usar uma estrutura de repetição pra iterar nele. 

int main(){
    int numeros[3], somaGeral = 0;
    float media;

    for(int i=0; i<3; i++){
        printf("Digite o %d numero: ", i+1);
        scanf("%d", &numeros[i]);
            
        if(numeros[i] % 2 == 0)
            somaGeral += numeros[i];
    }

    media = somaGeral / 3;

    printf("%.2f", media);

    return 0;
}

Olha como a estrutura de repetição nos fez poupar linhas de código. Antes, precisávamos escrever três vezes "Insira nº número". Eram apenas três, ok, mas imagina que fossem 1000 números... 

Share this post


Link to post
Share on other sites

Dado Enunciado:

Em 10/05/2018 at 19:41, darthmagus disse:

Escreva um programa que calcule a média dos números digitados pelo usuário, se eles forem pares. O programa deve terminar a leitura se o usuário digitar zero.

 

 

 

O programa termina a leitura se quando ler 0, se não então continua o laço e a condição de soma.

Por questões didática vou portar solução:

#include <stdio.h>    /* incluir as funções: scanf; printf.                   */

int main( void )
{
  int numero= 0;      /* Para todas as entradas do usuario                    */
  float media= 0;     /* Para média                                           */
  int elemento= 0;    /* Quantidade de elementos do conjunto de números       */
  int somatorio= 0;   /* Soma de todos os números do conjunto que são pares   */
  
  printf( "%s","Informe todos os numeros e 0 quando terminar?\n" );
  do {
    
    printf( "%s%d%s","[",elemento,"]: " );
    scanf( " %i",&numero );
    
    if (0 == (numero % 2)) { /* o resto (%) da divisão de um número par por 2 é 
    igual 0, inclusive 0 que também é par                                     */
      
      elemento+= 1;
      somatorio+= numero; 
    }
    
  }while (0 != numero); /* somente se numero é diferente continua o laço      */

  media= ((float)somatorio) / elemento;
  printf( "%s%g%s","Media:= ",media,"\n" );/* mostra resultado                */
  return 0;/* fim do programa                                                 */
}

 

 

*** Até

Share this post


Link to post
Share on other sites
#include<stdio.h>
int main(void){
    int valor;
    int divisor;
    int media;
    int soma;
    do{
        printf("Valor:");
        scanf("%d",&valor);
        if(valor !=0 && valor % 2 == 0){
            soma += valor;
            divisor++;
            media = soma/divisor;
        }
    }while(valor !=0);
    printf("Média: %d",media);
}

 

  • Haha 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By christin cley
      Construir um algoritmo em C++ que preencha um matriz quadrada de tamanho 4 pelo usuário. Após o preenchimento pelo usuário, verifique na diagonal principal qual foi o maior valor digitado e exiba na tela o valor. Por fim,  exiba na tela toda matriz em forma de matriz na tela.
    • By andreluizsgf
      Boa noite, eu estou tentando implementar uma função que imprima uma árvore como ela deveria ser, com o pai acima e a direita do menor filho e acima e a esquerda do maior filho. 
      Já tenho duas funcões que me permitem imprimir por nível, porém estou tentando adaptá-las para a impressão correta. Exemplo:
      árvore: 5,4,3,2,1;
      Impressão:
                  5
          3             4
      1      2

      O código para o print é este:
       
      void ---ivel(node_t* raiz, int level) { if (raiz == NULL){ for(int i = 0 ; i < 3 ; i++){ printf("\t"); return;} } if (level == 1) { for (int i=0; i<altura(raiz); i++) printf("\t"); simpleprint(raiz); } else if (level > 1) { ---ivel(raiz->left, level-1); ---ivel(raiz->right, level-1); } }   void printarordem(node_t *raiz) { int h = altura(raiz); int i; for (i=1; i<=h; i++) { printf("\t"); ---ivel(raiz, i); printf("\n"); } }

      Se alguém souber como resolver este ou sugerir outra implementação, fico super agradecido! 
    • By vinicius.benedito98
      Faça um Programa em Linguagem C que receba o nome e a nota de 180 alunos de uma sala e armazene em vetor. Calcule e mostre: 
      - A média da sala; 
      - O nome do aluno com a maior nota; 
      - O nome do aluno com a menor nota; 
      - Os nomes dos alunos aprovados;

      O meu código é esse :

      #define N 180 
      int main() { 
      int i, ind_maior, ind_menor; 
      float nota[N], soma=0, media, min_aprov=7; 
      char nome[N][50]; 
      for (i=0; i printf("Informe o nome do %dº aluno: ", i+1); 
      gets(nome); 
      printf("Informe a nota do %dº aluno: ", i+1); 
      scanf(" %d ", &nota); 
      soma += nota; 

      media = soma / N; 
      printf("\nMédia da sal: %.2f\n", media); 
      ind_menor = ind_maior = 0; 
      for (i=1; i if (nota < nota[ind_menor]) 
      ind_menor = i; 
      if (nota > nota[ind_maior]) 
      ind_maior = i; 

      printf("Menor nota: %s com %.2f\n", nome[ind_menor], nota[ind_menor]); 
      printf("Maior nota: %s com %.2f\n", nome[ind_maior], nota[ind_maior]); 
      printf("Aprovados:"); 
      for (i=0; i if (nota >= min_aprov) 
      printf("\t%s com: %.2f\n", nome, nota); 

      return 0; 
      }


      Porém quando vou executa-lo, o programa pede para inserir o nome e nota do aluno apenas uma vez, e fica por isso, ele não exibe os resultados, alguém pode me ajudar ?
    • By WizardTech
      Eu estou criando uma aplicação cliente/servidor em C no ubuntu. O propósito é bem simples, saber se vale mais a pena alugar ou vender um imóvel, o usuário digita o valor do aluguel, os meses que irá alugar e o valor que irá vender e o servidor faz as contas e devolve o resultado. Tudo está dentro de um do while para ficar infinito, no final o usuário digita CONTINUAR para testar outros valores e SAIR para encerrar a conexão. Mas está com um problema que não consigo identificar. A primeira vez que comparamos valores, o servidor retorna o resultado correto(alugar ou vender), porém a partir da segunda vez ao digitar CONTINUAR, ele sempre retorna resultados errados. Eu suspeito que esteja armazenando dados na variáveis erradas a partir da segunda vez, coloquei uns prints no meio do código para mostrar os valores e tem divergência.E também tentei zerar as variáveis no começo e usar vários bzero e fflush, mas sem resultado. Mas não tenho certeza de nada. Podem me ajudar?
       
      CÓDIGO DO CLIENTE:
      #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <strings.h> #include <string.h>  int main () { struct sockaddr_in sock; int con, sockid,numbytes; char resposta[10]; char buf[100]; char aluguel[10]; char venda[10]; char meses[2]; sockid = socket(AF_INET, SOCK_STREAM, 0); bzero(&(sock),sizeof(sock)); sock.sin_family = AF_INET; sock.sin_port = htons(9012); inet_pton(AF_INET, "127.0.0.1",&sock.sin_addr); con=connect(sockid,(struct sockaddr*)&sock,sizeof(sock)); do{ if(con>=0) { printf("=====================================================\n"); printf("Descubra se vale a pena vender ou alugar seu imóvel\n"); printf("=====================================================\n"); printf("Digite por quanto voce quer alugar: \n"); scanf("%s", &aluguel); printf("=====================================================\n"); if(send(sockid,aluguel,strlen(aluguel),0)==-1) { printf("Erro ao enviar mensagem\n"); close(sockid); } printf("Digite por quantos meses ira alugar : \n"); scanf("%s", &meses); printf("=====================================================\n"); if(send(sockid,meses,strlen(meses),0)==-1) { printf("Erro ao enviar mensagem\n"); close(sockid); } printf("Digite por quanto quer vender: \n"); scanf("%s", &venda); printf("=====================================================\n"); if(send(sockid,venda,strlen(venda),0)==-1) { printf("Erro ao enviar mensagem \n"); close(sockid); } bzero(&buf,sizeof(buf)); if((numbytes=recv(sockid,buf,100,0)==-1)) { printf("Erro ao receber a mensagem\n"); } printf("Vale mais a pena: %s\n",buf); printf("Digite SAIR para sair ou CONTINUAR para continuar a comparar.\n"); scanf("%s",&resposta); fflush(stdin); if(send(sockid,resposta,strlen(resposta),0)==-1) { printf("Erro ao enviar mensagem\n"); close(sockid); } if(strcmp(resposta,"CONTINUAR")==0) { continue; } } }while(strcmp(resposta,"SAIR")!=0); close(sockid); }  
      CÓDIGO DO SERVIDOR:
      #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <strings.h> #include <string.h> int main () { int sockid; struct sockaddr_in servidor; int client,numbytes; float convertido; float convertido1; float convertido2; char passar[10]; char buf[100]; char buf1[100]; char buf2[100]; float resultado; char resposta[10];  sockid = socket(AF_INET, SOCK_STREAM,0); if(sockid==-1) { printf("Não foi possivel criar o socket"); exit(1); } servidor.sin_family= AF_INET; servidor.sin_addr.s_addr = htonl(INADDR_ANY); servidor.sin_port = htons(9012); if(bind(sockid,(struct sockaddr*)&servidor, sizeof(servidor))<0) { printf("Falhou ao associar a porta\n"); } listen(sockid, 3); int c, new_socket; while(1) { c = sizeof(struct sockaddr_in); new_socket = accept(sockid, (struct sockaddr *)&client,(socklen_t *)&c); if(new_socket <=0) { printf("Falhou ao aceitar o conector\n"); continue; } while(1){ printf("Conexão aceita\n"); fflush(stdin); resultado = 0; convertido = 0; convertido1 = 0; convertido2 = 0; bzero(&buf,sizeof(buf)); if((numbytes=recv(new_socket,buf,100,0)==-1)) { printf("Erro ao receber a mensagem\n"); } convertido = atof(buf); bzero(&buf1,sizeof(buf1)); if((numbytes=recv(new_socket,buf1,100,0)==-1)) { printf("Erro ao receber mensagem\n"); } convertido1 = atof(buf1); printf(buf1); bzero(&buf2,sizeof(buf2)); if((numbytes=recv(new_socket,buf2,100,0)==-1)) { printf("Erro ao receber mensagem\n"); } convertido2 = atof(buf2); printf(buf2);  resultado = convertido*convertido1; if(resultado>convertido2) { sprintf(passar, "Alugar"); } else { sprintf(passar,"Vender"); } if(send(new_socket,passar,strlen(passar),0)==-1) { printf("Erro ao enviar a mensagem\n"); close(new_socket); } bzero(&resposta,sizeof(resposta)); if((numbytes=recv(new_socket,resposta,strlen(resposta),0)==-1)) { printf("Erro ao receber a mensagem\n"); } fflush(stdin); if(strcmp(resposta,"SAIR")==0) {  close(new_socket); break; }  } }  }  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.