C Sınav Sorusu

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    mt93
    mt93's avatar
    Kayıt Tarihi: 15/Ocak/2013
    Erkek

    #include <stdio.h>

    #include <conio.h>

     

    main(){

    int i,j;

     

    i=j=2,3;

      while(--i&&j++)

    printf("%d %d",i,j);

     

    getch();

     

    return 0;

     

    }

    Ekrana verilen çıktıyı,while'ın kaç kere döndüğünü,kaç kere doğruyu gösterdiğini sordu hoca. Ben sonsuz döngü diye düşündüm ama çıktı 1 3 şeklide çıkıyor.Nedenini açıklayabilen var mı?

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek

    ilk girişte j ve i int olduğu için 2.3 ün tam sayı kısmı olan 2 olurlar. Döngüye girmeden döngü kontrolünde i kontrol yapılmadan 1 eksiltilir yani 1 olur. J ise döngü kontrolü yapıldıktan sonra 1 arttırılır ve 3 olur. Daha sonra bunlar döngü içinde yazdırılır. Tekrar döngü kontrolüne gelinmeden önce i 1 azaltılır ve 0 olur. Döngü kontrolü yapıldığında i 0 olduğu için mantıksal FALSE değeri alır ve döngüye girmeden çıkar. Olay bundan ibaret.

     

    Ekleme: 2,3'ü 2.3 olarak yanlış görmüşüm o yüzden açıklamam tam olarak doğru değil. 2,3 olunca soldaki değeri alıyor virgül operatöründen dolayı. Diğer açıklamalarımdaki gibi işlemler devam ediyor. @NMC açıklamış aşağıda.

    DrKill tarafından 25/Nis/13 13:19 tarihinde düzenlenmiştir

    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    HeadBanger
    HeadBanger's avatar
    Kayıt Tarihi: 13/Eylül/2007
    Erkek

    kpoya vermeyinb bırakın öğrensin çabalasın ibiş


    Boş İşler Uzmanı..
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    pSkpt
    pSkpt's avatar
    Kayıt Tarihi: 10/Aralık/2010
    Erkek
    HeadBanger bunu yazdı

    kpoya vermeyinb bırakın öğrensin çabalasın ibiş

    Hocam sen bırak TBT'yi "boş işlerle" uğraş bence.

    Aynı sınava girdim sınavda çıkan bir soru başlığa bakarsan "Sınavdayım Acil Yardım Edin..." gibi bir başlık değil.

    Kodu çalıştırıp baktık sonuç 1 3 çıkıyor.

    Mantığını kavramak amacıyla soru sorduk.


    İmza...
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    mt93
    mt93's avatar
    Kayıt Tarihi: 15/Ocak/2013
    Erkek
    DrKill bunu yazdı

    ilk girişte j ve i int olduğu için 2.3 ün tam sayı kısmı olan 2 olurlar. Döngüye girmeden döngü kontrolünde i kontrol yapılmadan 1 eksiltilir yani 1 olur. J ise döngü kontrolü yapıldıktan sonra 1 arttırılır ve 3 olur. Daha sonra bunlar döngü içinde yazdırılır. Tekrar döngü kontrolüne gelinmeden önce i 1 azaltılır ve 0 olur. Döngü kontrolü yapıldığında i 0 olduğu için mantıksal FALSE değeri alır ve döngüye girmeden çıkar. Olay bundan ibaret.

    şu ilk girişte 2.3 ondalık olarak mı aldınız?i'ye 2 j'ye 3 değerini atamak değil midir ordaki? Kalınla yazdıklarınızı anladım onda sıkıntı yok zaten ama şu döngünün durmasını anlamış değilim.Bu arada saol yardımın için.

    @HeadBanger Diyecek lafım yok ...

    mt93 tarafından 25/Nis/13 00:30 tarihinde düzenlenmiştir
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Odd Emoji 3D
    BerkayCit
    BerkayCit's avatar
    Kayıt Tarihi: 25/Şubat/2011
    Erkek
    mt93 bunu yazdı
    DrKill bunu yazdı

    ilk girişte j ve i int olduğu için 2.3 ün tam sayı kısmı olan 2 olurlar. Döngüye girmeden döngü kontrolünde i kontrol yapılmadan 1 eksiltilir yani 1 olur. J ise döngü kontrolü yapıldıktan sonra 1 arttırılır ve 3 olur. Daha sonra bunlar döngü içinde yazdırılır. Tekrar döngü kontrolüne gelinmeden önce i 1 azaltılır ve 0 olur. Döngü kontrolü yapıldığında i 0 olduğu için mantıksal FALSE değeri alır ve döngüye girmeden çıkar. Olay bundan ibaret.

    şu ilk girişte 2.3 ondalık olarak mı aldınız?i'ye 2 j'ye 3 değerini atamak değil midir ordaki? Kalınla yazdıklarınızı anladım onda sıkıntı yok zaten ama şu döngünün durmasını anlamış değilim.Bu arada saol yardımın için.

    @HeadBanger Diyecek lafım yok ...

     

    integer yani tam sayı olarak aldığın için değişkenleri

    bkz: int i, j; 


    küsürlü sayı yazsanda 2,3 gibi sadece tam sayı kısmını alır derleyici. Küsürlü şekilde almak istersen float veya benzer bir şekilde tanımlayacaksın i ve j değişkenlerini.

     


    havalı bir şeyler yazdığımı hayal edin
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    mt93
    mt93's avatar
    Kayıt Tarihi: 15/Ocak/2013
    Erkek
    mRBerkay bunu yazdı
    mt93 bunu yazdı
    DrKill bunu yazdı

    ilk girişte j ve i int olduğu için 2.3 ün tam sayı kısmı olan 2 olurlar. Döngüye girmeden döngü kontrolünde i kontrol yapılmadan 1 eksiltilir yani 1 olur. J ise döngü kontrolü yapıldıktan sonra 1 arttırılır ve 3 olur. Daha sonra bunlar döngü içinde yazdırılır. Tekrar döngü kontrolüne gelinmeden önce i 1 azaltılır ve 0 olur. Döngü kontrolü yapıldığında i 0 olduğu için mantıksal FALSE değeri alır ve döngüye girmeden çıkar. Olay bundan ibaret.

    şu ilk girişte 2.3 ondalık olarak mı aldınız?i'ye 2 j'ye 3 değerini atamak değil midir ordaki? Kalınla yazdıklarınızı anladım onda sıkıntı yok zaten ama şu döngünün durmasını anlamış değilim.Bu arada saol yardımın için.

    @HeadBanger Diyecek lafım yok ...

     

    integer yani tam sayı olarak aldığın için değişkenleri

    bkz: int i, j; 


    küsürlü sayı yazsanda 2,3 gibi sadece tam sayı kısmını alır derleyici. Küsürlü şekilde almak istersen float veya benzer bir şekilde tanımlayacaksın i ve j değişkenlerini.

     

    i=j=2,3;

    Bu şekilde atama değerini ilk defa gördüm.Sınavda da nasıl düşündüysem yani hiç o şekil düşünemedim sıralı şekilde atamadır diye düşündüm.i=2,j=3 diye... Daha önce atamaların böyle yapıldığını biliyodum bu farklı bi gösterimdir diye düşündüm.Saolun...

     

  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    NmC
    NmC's avatar
    Kayıt Tarihi: 23/Kasım/2008
    Erkek
    mRBerkay bunu yazdı
    mt93 bunu yazdı
    DrKill bunu yazdı

    ilk girişte j ve i int olduğu için 2.3 ün tam sayı kısmı olan 2 olurlar. Döngüye girmeden döngü kontrolünde i kontrol yapılmadan 1 eksiltilir yani 1 olur. J ise döngü kontrolü yapıldıktan sonra 1 arttırılır ve 3 olur. Daha sonra bunlar döngü içinde yazdırılır. Tekrar döngü kontrolüne gelinmeden önce i 1 azaltılır ve 0 olur. Döngü kontrolü yapıldığında i 0 olduğu için mantıksal FALSE değeri alır ve döngüye girmeden çıkar. Olay bundan ibaret.

    şu ilk girişte 2.3 ondalık olarak mı aldınız?i'ye 2 j'ye 3 değerini atamak değil midir ordaki? Kalınla yazdıklarınızı anladım onda sıkıntı yok zaten ama şu döngünün durmasını anlamış değilim.Bu arada saol yardımın için.

    @HeadBanger Diyecek lafım yok ...

     

    integer yani tam sayı olarak aldığın için değişkenleri

    bkz: int i, j; 


    küsürlü sayı yazsanda 2,3 gibi sadece tam sayı kısmını alır derleyici. Küsürlü şekilde almak istersen float veya benzer bir şekilde tanımlayacaksın i ve j değişkenlerini.

     

    Kafanız mı güzel ya :) Hangi programlama dilinde virgül ondalık için kullanılmış? Küsürat için nokta kullanılır. Virgül operatördür, kullanımı için

    http://msdn.microsoft.com/en-us/library/zs06xbxh.aspx bak buraya aşağı yukarı fikir verir right to left, left to right mantığı ile alakalı.

    Sonuç olarak soldaki değeri aldığı için i ve j ye 2 atıyor daha sonra i yi bir azaltıp ( 1 ) j yi de 1 artırıyor ( 3 )

    fakat --i ile i-- farklı şeylerdir. Mesela

    i = 5

    a = --i;

    printf("%d %d",i,a); // 4 4 basarken

    i = 5

    a = i--;

    printf("%d %d",i,a); // 5 4 basar

    Sonuç olarak ilk döngü basamağında 1 ile 2 yi and işlemine sokuyosun ki sonucu 1dir. While devam eder. 2. dönüşte ise 0 ile 3ü and işlemine sokuyosun sonuç 0 o yüzden döngüden çıkıyor :)

     

    Edit: Virgülü burda daha güzel anlatmış :) http://en.wikipedia.org/wiki/Comma_operator

    NmC tarafından 25/Nis/13 00:12 tarihinde düzenlenmiştir

    There are 10 types of people in the world. Those who knows binary and those who dont...
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    LynXMaSTeR
    LynXMaSTeR's avatar
    Kayıt Tarihi: 19/Temmuz/2003
    Erkek

    hocam int i=j=2,3 dediğin zaman. integer yani tam sayı olarak i ve j tanımlamış, bu iki değişkeni de küsüratlı bi sayıya eşitlemiş oluyosun. yani sonuç olarak i de j de 2 oluyor. while döngüsünde --i yaptığı için i değişkeni 2 yerine 1 den başlıyor, j için de j++ dediğinden dolayı j değeri de 3 olarak başlıyor. && bağlacı olduğu için ikisinin de sağlanması lazım.

    bu şekilde olması gerekir die düşünüyorum.


    goo.gl/qBNZmW
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    barispamuk
    barispamuk's avatar
    Kayıt Tarihi: 11/Aralık/2009
    Erkek

    int den dolayı tam kısmını alır i=2; j =2; birini bir azaltıyor yani i=1; birini de bir artırıyor yani j =3 bu yüzden çıktı bu şekilde

  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    NmC
    NmC's avatar
    Kayıt Tarihi: 23/Kasım/2008
    Erkek

    Ya ısrarla niye herkes tam kısmı alır diyo ya.. Orda küsüratlı bir sayı yok küsürat nokta ile yazılır.

    i=j=2,3,4,5,6;

    yazılmış olsa ne yapacaktınız merak ediyorum :)


    There are 10 types of people in the world. Those who knows binary and those who dont...
Toplam Hit: 4460 Toplam Mesaj: 20