BİLİŞİM - BİLGİSAYAR - EĞİTİM
  Döngü Deyimleri
 

3.2  Döngü Deyimleri:

                  Bir ya da birden fazla deyimin tekrar edilemesini sağlarlar. C dilinde while, for ve do-while deyimleri döngü işlevini saşlar. Tekrar edilen deyimlere döngü gövdesi denir.

 

3.2.1  while Deyimi:

                  while <mantıksal ifade>

Mantıksal ifade doğru olduğu sürece Deyim yürütülür. Eğer yanlış ise kontrol bir sonraki deyime geçer.

 

Örnek 3.2.1.1 :  1'den 100'e kadar olan sayıların toplamı.

 

1.     i =1

2.     j = 0

3.     i < 101 olduğu sürece

3.1     j = j + i

3.2     i = i + 1

4. Toplam j ‘ yi yaz

 

                 main()

               {

                    int i, j;

                    i =1;

                    j = 0;                 

                    while (i<101) {

                           j =j+i;

                           i =i+1

                }

                    printf("Toplam = %d",j);

                }

 

Örnek 3.2.1.2: Toplama ve çarpma kullanarak çarpma işmeini gerçekleyiniz.

 

1.     a ve b sayılarını oku

2.     c =0

3.     b>0 olduğu sürece tekrarla

                .3.1. c=c + a

                 3.2. b = b-1

4.  c değerini yaz ve dur

 main()

{

  int a, b, c;

  printf (“iki sayıyı giriniz “);  scanf(“%d%d”, &a, &b);

  c = 0;

  while (b > 0) {

    c = c + a;

    b = b - 1;

  }

  printf(“Sonuç = &dn”, c);

}

 

 

 

 

Örnek 3.2.1.3: Girilen sayının faktoriyelini hesaplayan programı yazınız.

 

1.     n değerini oku

2.     F=1

3.     n >1 olduğu sürece tekrarla

                .3.1. F=F*n

                 3.2. n= n-1

4.     F değerini yaz

 

 main()

{

  int n;

  long f;

  printf (“sayıyı giriniz “);  scanf(“%d”, &n);

  f = 1;

  while (n > 1) {

    f = f * n;

    n = n - 1;

  }

  printf(“Sonuç = &dn”, f);

}

 

Örnek 3.2.1.4: Klavyeden girilen sayıları oku. Sayıların toplamı 21'den büyük veya eşit olduğu zaman dur.

 

                main()

                {

                     int i, j = 0;

                     while (j<21) {

                               scanf("%d",&i);

                               j =j+i;

                }

                    printf("Toplam = %d",j);

                }

 

Örnek 3.2.1.5: 1993 yılı itibarı ile ülke nüfüsu 60 milyondur. Yıllık nüfüs artış oranı %2.3 tür. Sonraki 10 yılda ülke nüfüsunu yıllara göre listeleyen program.

 

/* Nufus Tablosu  */

#include <stdio.h>

 

main()

{

  int       i;   /* sayac */

  int     yil;   /* yillar */

  float nufus;   /* nufus miktari */

  float artis;   /* artis orani */

  artis = 0.023;

  yil = 1993;

  nufus = 60000000;

  printf("%d - %10.0fn",yil,nufus);

  i = 1;

  while (i < 11)

    {

      nufus = nufus * (1 + artis);

      printf("%d - %10.0fn",yil + i,nufus);

      i = i + 1;

    }

}

 

Örnek 3.2.1.6 : Girilen tamsayının mükemmel sayı olup olmadığının söyleyen programı yazınız.

 

(mükemmel sayı = tam bölenlerin toplamı sayının kendisine eşit)

 

Örnek 3.2.1.7 : Girilen tamsayının kaç basamaktan oluıştuğunu söyleyen programı yazınız.

 

Örnek 3.2.1.8 : Girilen tamsayı içerisinde kaç tane 1 olduğunu söyleyen programı yazınız.

 

Örnek 3.2.1.9: Girilen tamsayının son üç basamağını yuvarlayan programı yazınız.

 

son üç basamağı >=500 > 1000 e, <500 ise 0 a yuvarlayacak

 

(2560 à 3000, 2490 à 2000 )

 

 

 

Örnek 3.2.1.10: Sınavın ortalamasını hesaplayan programı yazınız.

 

1.     Durum : sınava giren öğrenci sayısı belli

 

main()

{

  int i, ogr_say, not_top, not;

  float ort;

  not_top = 0;

  i = 0;

  printf(“Öğrenci sayısını giriniz “); scanf(“%d”, &ogr_say);

  while (i < ogr_say) {

                printf”Sıradaki öğrencinin notu  = “); scanf(“%d”, &not);

                not_top = not_top + not;

                i = i + 1;

   }

   ort = float (not_top) / ogr_say;

   printf(“Ortalama = &fn”, ort);

}

 

2.     Durum : sınava giren öğrenci sayısı belli değil

 

Bu durumda girişin bittiğini gösterir bir bilgiye (işarete) ihtiyaç vardır. Sınav notu için 0 dan küçük bir değer girildiğinde girme işleminin sona erdiğinin varsayalım.

 

ogr_say = 0;

rintf”Sıradaki öğrencinin notu  = “); scanf(“%d”, &not);

while (not >= 0) {

                not_top = not_top + not;

                ogr_say = ogr_say + 1;

printf”Sıradaki öğrencinin notu  = “); scanf(“%d”, &not);

}

 

3.2.2  For Deyimi:

 

  for (ifade1 ; ifade2 ; ifade3 )

      ifade;

  ifade2 doğru ( veya farklı 0) olduğu sürece ifade yürütülür (bitiş koşulu).

  Döngünün ilk adımından önce ifade1 yürütülür ( başlangıç adımı).

  Döngünün her adımında ifade3 yürütülür (artış miktarı).

 

for (i = 1; i < 5; i++)

      printf("%d ",i);

 

ifade1, ifade2 ve ifade3 seçimliktir. ifade2 belirtilmez ise herzaman

doğru olduğu ( == 1 ) kabul edilir. Yani sonsuz döngü oluşur.

for (i = 1; ; i++)

      printf("%d ",i);

 

Örnek 3.2.2.1:  1'den 100'e kadar olan sayıların toplamı.

 

                j =0;

                for (i=1; i<=100; i=i+1)

                      j =j+i;

                printf("Toplam %d",j);     

 

Örnek 3.2.2.2:  Girilen sayının faktöriyelini bulunuz.

 

                    fact =1;

                    for (j=1; j<=i; j++)

                               fact =fact*j;

                    printf("Faktöriyel  =%f",fact);    

                }

 

Örnek 3.2.2.3:  Çarpım tablosu. (içi içe döngüler)

 

                main()

                {

                    int i,j;

                    for (i=1; i<=10; i++) {

                         for (j =1; j<=10; j++)

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

                         printf("n");

                   }        

                   }

 

3.2.3  do-while Deyimi:

  Bir koşul doğru olana kadar döngü yürütülür.

  do

  while (<mantıksal ifade>)

 Mantıksal ifade doğru olduğu sürece döngü tekrar edilir. Yanlış olduğunda while sözcüğünden

 sonraki deyim yürütülür.  

 

5 sayısı girilene kadar oku

               do

                    scanf("%d",&i);

                while (i!=5);

i =1;

                do {

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

                    i =i+1;

                } while (i<=10);

 

Örnek 3.2.3.1: Sadece +, - kullanarak * işlemini gerçekleştirme.

 

main()

{

   int a, b;

   int c;

   scanf("%d%d", &a, &b);

   c = 0;

   do {

      c = c + a;

      b = b - 1;

   } while (b>0);

   printf("%dn", c);

}

 

Karşılaştırma

                 while : Koşul başlangıçta test ediliyor. Döngü sıfır veya daha fazla yürütülüyor.

                 do-while : Koşul sonda test ediliyor. Döngüye en az bir defa kesin giriliyor.

 

Örnek 3.2.3.2: 0 - 100 arasında tutulan sayının tahmini.

 

main()

{

  int       tahmin;   /*  tahminimiz  */

  int          min;   /*  Tahminin alt siniri  */

  int          max;   /*  Tahminin ust siniri  */

  char       cevap;   /*  Kullanicinin cevabi  */

  min = 0;   max = 100;

  do {

    tahmin = (max - min) / 2 + min;

    printf("Tahminim %dn",tahmin);

    printf("Buyuk / Kucuk / Esit ");

    scanf("%c",&cevap);

   if (cevap == 'B')

       max = tahmin - 1;

     else

        if (cevap == 'K')

          min = tahmin + 1;

 } while (cevap != 'E');

 }

 

Örnek 3.2.3.3: Sin(x) fonksiyonun belli bie x için değerini seri açılımı ile hesaplayınız. Serinin ilk 10 terimini kullanınız. 

n tek sayı.

 

main()

{

  float    x;        /* fonksiyonun hesaplanacağı değer */

  float sinx;        /*  sin(x) in değeri */

  float   xt;        /* eklenen terimin payı */

  float fakt;        /* eklenen terimin paydası, faktoriyel */

  int isaret;        /* terimin +/- olmasını sağlar */

  int      i;

  clrscr();

  printf("Hesaplanacak değer : ");

  scanf("%f",&x);

 

  sinx = x;

  isaret = -1;

  fakt = 1;

  xt = x;

  for (i = 2; i<=10; i++) {

      xt = xt * x * x;

      fakt = fakt * (2 * i - 2) * (2 * i - 1);

      sinx = sinx + isaret * xt / fakt;

      isaret = -isaret;

  }

  printf("Değeri = %fn",sinx);

}
 
 
  Bugün 142 ziyaretçi (222 klik) www.bilisim-egitim.tr.gg  
 
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol