İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Son dakika Yazarlar
  1. Ana sayfa
  2. Topluluk
  3. Programlama
  4. Programlama Dilleri
Programlama Dilleri

C dilinde 3 soru :)

gosdah14.10.20123 cevap1.685 görüntüleme
2012'den beri62 mesaj
#1
1) niçin gülen adam?

int main(void) 
{ 
char x; x=!((!x&&x)+(x&&!x)); 
printf("\n%c\n",x); 
system("PAUSE"); 
return 0; 
}


2) niçin 4321?

int main() 
{ 
int i=43; 
printf("%d\n",printf("%d",printf("%d",i))); 
system("PAUSE"); 
return 0; 
}


3) i 6 değil miydi?

int main() 
{ 
int i = 6; 
if (((++i<7)&&(i++/6))||(++i<=9)); 
printf("i=%d\n",i); 
system("PAUSE"); 
return 0; 
}

Yukarıdaki 3 kod için özetlersek:
1)Doğrular mı?
2)Doğru iseler niçin bu çıktıları veriyorlar?
3)Bütün bunlar bir çelişki midir?

:D
Cevaplar
2011'den beri7.329 mesaj
#2
böyle bir kodu ben incelemem.
iki satır bile olsa.
öncelikle gelişmiş sekmesine tıklayıp kod kısmına yazın kodlarınızı.
c dilinin standardı der ki fonksiyonlar şu şekilde yazılmalıdır

int main()
{
    değişkentipi değişkenismi;
    fonksiyon();
    return 0;
}
2011'den beri3.263 mesaj
#3
3. örnek için;

((++i<7)&&(i++/6)) -> ++i dendiğinde i değişkeninin değeri 7 olmuş olacak ve 7<7 koşulu gerçekleşmediği için && operatörünün sağ tarafını hiç dikkate almayacak.
||
(++i<=9) -> bir önceki koşul da 7 değerine arttırılan i değişkeni burada tekrar ++i sebebiyle 8'e yükselecek.

print ettiğimizde i değişkeninin değerini 8 olarak göreceğiz.

Birçok dilde karşılaştırma sırasında olsa bile ++ yaptığımızde işlem gerçekleşmiş oluyor ve değişkenin değeri bundan etkileniyor.

2. örnek için;

printf("%d\n",printf("%d",printf("%d",i)));

satırında derleme hatası verilmesi gerekir bence fakat dildeki bir eksiklik yada bug dan doyayı printf komutunu printlemeye çalışıyor ve 2 ve 1 gibi saçma sapan nereden geldiği belirsiz değerler veriyor anlaşılan:)

1. örnek için;

dil geliştiricilerinin bir şakası olsa gerek :) Öyle saçma bir işlem yaptın ki ben buna biryerlerimle gülerim hesabı.
2011'den beri597 mesaj
#4
printf serisi için bi fikrim var, printf yapısı gereği fonksiyon sonucu olarak double döndürüyor, zaten bir printf sonucunu (çıktısını değil) diğerine gömmek için çıktı örnek katarında verinin double olarak ele alındığını görüyoruz...
c++'da aynı nüansları yakalayabilirsen güzel bi şekilde cevaplarım ama printf'in prototipini gördüm sadece ve sonra sayfayı çevirdim kitapta. :D

Ve önce 43 çıktılanıyor, sanırım çıktılanan karakter katarının uzunluğunu döndürüyor, zaten bi çıktı olmazsa sıfır yani false, sanırım printf'i yazan arkadaş cout'u görünce pekde takmamıştır, bu da fena şekilde zekice. :D

sonra çıktı 2 ve tek karakter, sonra çıktı 1 sonra zaten ordan dönen sonuç işlenmiyor.

Denemedim, tezim doğru, aksini iddia edenlede sabaha kadar tartışırım. :D

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.