Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
re14nan

Problemas com somas e atribuições em c no code::blocks

Recommended Posts

Olá,

Estou com um problema no meu Code::Blocks que está complicadíssimo de encontrar a solução, vejam:

Quando executo o seguinte programa:

#include<stdio.h>
int main(){
int a, b;
b=0;
a=5;
b=a*(a++);
printf("\na1=%d, b1=%d\n", a, b);
return 0;}

O resultado é:
a1=6, b1=30

 

Eu sei que o resultado está errado, pois sigo instruções dada pelo meu professor, além disso também testei em outro compilador (Dev C++), os resultados deveriam ser:

a1=6, b1=25

 

Sou bastante iniciante em programação, não entendo muito bem qual pode ser o problema, estou usando o Code::Blocks 16.01 MingW setup, conforme indicado pelo meu professor.

Agradeceria muito se puderem me ajudar, fico com medo de construir outros programas e não funcionarem corretamente por causa do compilador.

 

Obrigado!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso é por causa da prioridade. Aqui você pode ver uma lista de operadores e suas prioridades.

você vai ver que os operadores -- e ++ estão mais acima que * na tabela. E tambem vai ver o lado que o operador afeta(direita para esquerda). Isso quer dizer que se o operador ++ estiver do lado direito de *, ele vai ter prioridade a todos os operadores que estejam do lado esquerdo conforme a ordem de prioridades nessa tabela, tanto os operadores que estão depois de ++ na linha como na coluna da tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • @vangodp

    Consultei meu professor e um colega programador, ambos dizem que em C, a resposta deveria ser b=25, como padrão.

    Acho que deve ter algo errado no meu compilador.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    amigo... veja nessa tabela a ordem dos operadores conforme prioridade. a ordem para seu calculo é a++, * e por ultimo =, ou seja que primeiro vai ser incrementado, ainda que esse seja pós-fixo, logo será feita a multiplicação e por ultimo a atribuição, não ha nada de errado com o código. Por os operadors ( e ) você só está aumentando a prioridade e deixando o código mais claro, com b=a*(a++); você está obrigando a a++ a incrementar antes de fazer a multiplicação. Pergunte ao seu professor se ele averiguou a ordem de prioridade dos operadors.

    Editado por vangodp

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Entendo, então o cálculo do Codeblocks está correto.

    Mas o cálculo do Dev C++ está incorreto então ?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×