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 aqueiroz2
      Olá estou com dificuldades em desenvolver um algoritmo que leia um arquivo.txt, faça a correção do texto e crie o resultado
      em outro arquivo de saida. O processo de leitura deverá ocorrer linha por linha, porém o arquivo de entrada possui
      o seguinte erro de sintaxe. O arquivo de entrada possui um problema em que diversas linhas são strings repetidas da 
      linha anterior, diferenciando de apenas um caractere. O algoritmo deverá ter uma função que faça a comparação entre as duas
      strings devolver 0 se forem iguais e o 1 se um caracter for diferente. Se mais caracteres forem diferentes, retorne a quantidade de caracteres diferentes entre elas.
      t
      te
      tes
      test
      teste
      saida: "teste"
      ------------------------------------------------------------------------------------------------------------------------

      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      // cada linha não deverá ter mais que 1000 caractere//
      int Comparar(char *s1, char *s2) {
          int i, j;
          while (*s1) 
              s1++;
          while (*s2) {
              *s1 = *s2;
               s2++;
               s1++;
          }
          *s1 = '\0';
      }
      int main(int argc, char *argv[]) {
          char Linha[1000]
          FILE *arquivo;
          arquivo = fopen("entrada.txt", "r");
          if (arquivo == NULL) {
              printf("Nao foi possivel abrir o arquivo \n");
                 return 1;
          }
          while (fgets(Linha, 1000, arquivo) != NULL)
              printf("%s", arquivo);
              fclose(
        if (argc != 3) {
          printf("\nExecute o programa da forma:\n");
          
          return 0;
          
        }
        
        return 0;
      }
    • By {Hyroshima)
      bom-dia pessoal, não tenho conhecimento para fazer essa conversão ou deixar compatível, se alguém puder por favor fazer isso pra mim ficarei agradecido de coração.
       
      meu problema é o código abaixo que está usando biblioteca do windows WINSOCK2.H para fazer um ping no ip fornecido por um comando ping("ip")  e retornar uma msg igual ao ping do windows, gostaria se possível que o mesmo fosse utilizado em linux (centos) mantendo a mesma funcionalidade ?
       
      ping.c
      #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #include <WINSOCK2.H> #define DEF_BUF_SIZE 1024 #define IP_HEADER_SIZE 20 #define ICMP_HEADER_SIZE 12 typedef struct _ICMP_HEADER { BYTE bType; BYTE bCode; USHORT nCheckSum; USHORT nId; USHORT nSequence; UINT nTimeStamp; }ICMP_HEADER, *PICMP_HEADER; USHORT GetCheckSum(LPBYTE lpBuff, DWORD dwSize) { DWORD dwCheckSum = 0; USHORT* lpWord = (USHORT*)lpBuff; while(dwSize > 1) { dwCheckSum += *lpWord++; dwSize -= 2; } if(dwSize ==1) dwCheckSum += *((LPBYTE)lpBuff); dwCheckSum = (dwCheckSum >> 16) + (dwCheckSum & 0XFFFF); return (USHORT)(~dwCheckSum); } BOOL Ping(char* lpDestIP, int *nRet_, int *nTime_) { int nTime = 0; int ret = 0; char ICMPPack[ICMP_HEADER_SIZE] = {0}; char szRcvBuff[DEF_BUF_SIZE] = {0}; int i = 0; int nRet = 0; int nLen = 0; int nError = 0; SOCKET s; PICMP_HEADER pRcvHeader; SOCKADDR_IN SourceSockAddr; SOCKADDR_IN DestSockAddr; PICMP_HEADER pICMPHeader; DestSockAddr.sin_family = AF_INET; DestSockAddr.sin_addr.S_un.S_addr = inet_addr(lpDestIP); DestSockAddr.sin_port = htons(0); pICMPHeader = (PICMP_HEADER)ICMPPack; pICMPHeader->bType = 8; pICMPHeader->bCode = 0; pICMPHeader->nId = (USHORT)GetCurrentProcessId(); pICMPHeader->nCheckSum = 0; pICMPHeader->nTimeStamp = 0; s = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); nTime = 1000; ret = setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (char*)&nTime, sizeof(nTime)); for(i=0; i <1; i++) { pICMPHeader->nCheckSum = 0; pICMPHeader->nSequence = i; pICMPHeader->nTimeStamp = GetTickCount(); pICMPHeader->nCheckSum = GetCheckSum((LPBYTE)(ICMPPack), ICMP_HEADER_SIZE); nRet = sendto(s, ICMPPack, ICMP_HEADER_SIZE, 0, (SOCKADDR*)&DestSockAddr, sizeof(DestSockAddr)); if(nRet == SOCKET_ERROR) { return FALSE; } nLen = sizeof(SOCKADDR_IN); if(nRet == SOCKET_ERROR) { return FALSE; } nRet = recvfrom(s, szRcvBuff,DEF_BUF_SIZE,0,(SOCKADDR*)&SourceSockAddr,&nLen); if(nRet == SOCKET_ERROR) { return FALSE; } pRcvHeader = (PICMP_HEADER)(szRcvBuff + IP_HEADER_SIZE); nTime = GetTickCount() - pRcvHeader->nTimeStamp; //printf("Return Message: %s bytes=%d time=%dms\n", inet_ntoa(SourceSockAddr.sin_addr), nRet, nTime); *nRet_ = nRet; *nTime_ = nTime; } return TRUE; }  
      a outra estrutura:
      #include "ping.c" BUILDIN_FUNC(ping) { // const char *name; char _cmd[500]; int nRet=0, nTime=0; // // name = script_getstr(st,2); Ping((char *)name, &nRet, &nTime); if( nRet <= 0 || nTime < 0 ) sprintf(_cmd,"Return Message: %s fail to connect", (char *)name); else sprintf(_cmd,"Return Message: %s bytes=%d time=%dms\n", (char *)name, nRet, nTime); // script_pushstrcopy(st, _cmd); return 0; } BUILDIN_DEF(ping,"s")  
      Desde já muito obrigado, fiz algumas buscas mas não achei nada que possa me ajudar a fazer essa conversão ou até mesmo redigir o código para funcionar em linux.
    • By MiihLeite
      Bom galerinha me ajudem com essa questão, não estou sabendo como resolver:
       
       
      Escreva um programa em C que recebe inicialmente como entrada uma quantidade N de valores a serem lidos. Após isto, crie um vetor de tamanho N e leia os N valores inteiros a partir da entrada e armazene-os no vetor. Com isto, crie um segundo vetor de tamanho N. Copie os valores do primeiro vetor no segundo vetor mas de maneira invertida. Por fim, imprima o segundo vetor para verificar se os elementos foram realmente invertidos.
    • By TohoSeiwa
      Olá bom dia/tarde/noite pessoal... 
      Então eu gostaria de saber se é possível colocar o que aparece no system em uma variável... 
      Ex: escrever "system(" date/t");" e obter uma variavel que tenha sempre essa data... tipo você está em 1/1/2020 e a variável armazena isso mesmo que você já não esteja nessa data. 
      Estou fazendo um projeto para o meu curso... se me puderem ajudar muito obrigado. 
    • By Nwband
      programar um determinado programa pf
       
      Preciso de um programa em C que seja capaz de ler uma frase com ate 100 caracteres e imprimi-la, conseguir identificar quantas letras maiusculas e minusculas tem na frase e escreve-la ao contrario
×

Important Information

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