Ir ao conteúdo
  • Cadastre-se
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

@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

O resultado é:
a1=6, b1=30

 

está correto.

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

×