C Ödev Sorusu

KemalKcK

Kilopat
Katılım
20 Mart 2016
Mesajlar
25
Daha fazla  
Cinsiyet
Erkek
Merhaba, aşağıdaki sorunun çözüm mantığı nedir açıklarsanız sevinirim.

#include <stdio.h>

int main() {
int a = 1, b = 7, c=-2;

b %= (b/=c) * c/b -a;

printf("%d, %d, %d",a, b, c);
return 0;
}
 

Sorunun tüm olayı Operator Precedence (Operatör Önceliği).
Bunun dışında öğrettiği tek şey "Nasıl Kod Yazılmaz".

Çözmek için yapabileceğin en iyi şey a /= b gibi ifadeleri öncelikle ( a = a / b ) şeklinde genişletip parantez içerisine almak. Sonrasında ise işlem önceliğine göre adım adım ilerlemek.
 
Öncelikle işlemlerin öncelik sırası bulunur. Bu konuda daha fazla bilgi için buraya bakabilirsin.

Senin soruna gelecek olursak parentez içindeki işlemin önceliği var b/=c işlemini b=b/c olarak düşünürsek, iki tamsayının bölümü tamsayı çıkar ve -3 değerini alırız. Sonrasında bölme işleminin önceliği devreye girer ve c/b (-2/-3) işlemi sonucu 0 çıkar. Sonrasında çarpma işlemi yapılır -3*0 sonucu 0 çıkar. En son çıkarma kalır ordan da 0-1 sonucu -1 çıkar. Yani işlem satırı b %=-1'e dönüşür. b=(-3'%-1); -3'ün -1'e bölümünde kalan 0 olacağından b en son 0 olur. a ve c'nin değerlerinde zaten bir değişme olmuyor.
 

Geri
Yukarı