Standart C Programlama Dili


1.9. Örnek Programlar

Bu kısımdaki örnek programlar, ne işe yaradıkları hakkında kendi kendilerini açıklayacak şekilde yazılmışlardır, ancak henüz anlatılmamış—if ve while gibi—bazı deyimler ve işleçler içerirler. Bunların anlamlarını ortaya çıkarmak için, okuyucu, eski programlama deneyimlerine dayanarak bir kestirimde bulunabilir.

Örnek Program 1

Bu programda kullanılan _getche fonksiyonu, bir standart girdi fonksiyonu olmadığı için, dosya sonu kontrolü MS-DOS standardına uygun olarak Ctrl+Z karakteri kullanılarak yapılmaktadır. Not: _getche fonksiyonunun kullanımından dolayı, bu program C Standardına uygun değildir. Bu programı unix-benzeri ortamlarda derlemeniz mümkün değildir, çünkü standart dışı conio.h başlık dosyası bu ortamlarda bulunmamaktadır. Programı sadece Windows ortamında ve Kısım 0.3’te anlatılan i686-w64-mingw32-gcc veya x86_64-w64-mingw32-gcc derleyici komutları ile derlemelisiniz. Ayrıca Ek D’ye bakınız.

/* * * * * * * * * * * * * * * * * *\
 *                                 *
 * Bu program, Ctrl+Z girilinceye  *
 * kadar, klavyeden girilen her    *
 * karakterin ASCII kodunu verir.  *
 *                                 *
\* * * * * * * * * * * * * * * * * */

#include <stdio.h>
#include <conio.h>
int main (void)
{
  int  c;
  const char  ctrlz = 26;  /* ASCII ondalık kodu 26 (Ctrl+Z) */

  printf("\nBazi kontrol karakterleri disinda,"
    "\ngirilen karakterin kodu goruntulenecek.");
  while (1) {
/* Ekrana yansıtarak bir klavye tuşunu oku.
 * Ctrl+Z'ye basılmışsa programı bitir.
 */
    printf("\nBir karakter girin: ");
    if ((c = _getche()) == ctrlz)
      break;
/* Girilen karakterle aynı satırda, ondalık, onaltılı
 * ve sekizli olarak ASCII kodunu görüntüle.
 */
    printf(", ondalik: %d, onaltili: %x, sekizli:  %o",c,c,c);
  } /* while */
  return 0;
} /* main */

Örnek Program 2

Bu program scanf fonksiyonu ile kullanıcıdan sayı okumaya çalışır. Eğer kullanıcı sayı olmayan bir veri girerse, ne olur? Programın bu açığını düzeltmek için ne yapmak gerekir? İpucu: Negatif sayı kontrolü yerine scanf fonksiyonunun sonucunu test edin.

/* * * * * * * * * * * * * * * * * * * * * * * *\
 *                                             *
 * Bu program, -1 girilinceye kadar, klavyeden *
 * girilen ondalık sayıları kabul eder.        *
 * Daha sonra, girilen sayıların ağırlıklı     *
 * toplamını, ortalamasını ve varyansını       *
 * hesaplayıp görüntüler.                      *
 *                                             *
 * Uyarı: Çok büyük sayıların ve rakam olmayan *
 * karakterlerin girilmesi sorun yaratabilir.  *
 *                                             *
\* * * * * * * * * * * * * * * * * * * * * * * */

#include <stdio.h>
#define AGIRLIK 1.0
/* Eğer veri değerleri ağırlıklı olarak hesaplanacaksa,
 * AGIRLIK’a farklı bir değer verin.
 */

int main (void)
{
  int    sayi;
  int    adet = 0;
  double kn_sayi, toplam = 0.0, karelerin_toplami = 0.0;
  double ortalama = 0.0, varyans = 0.0;

  printf("\nToplam, ortalama ve varyans hesaplayan  program."
    "\n\nLutfen ilk sayiyi (veya cikmak icin -1) girin: ");
  scanf("%d", &sayi);
  /* Girilen sayı olumsuzsa programı bitir. */
  while (sayi >= 0) {
    adet++;   /* Sayacı artır */
    /* Sayıyı double’a cevirip AGIRLIK’la çarp. */
    kn_sayi = (double)sayi * AGIRLIK;
    /* Yeni toplamı ve karelerin toplamını hesapla. */
    toplam += kn_sayi;
    karelerin_toplami += kn_sayi * kn_sayi;
    /* Yeni ortalama ve varyansı hesapla. */
    ortalama = toplam / (double)adet;
    varyans =  ortalama*ortalama-karelerin_toplami/(double)adet;
    if (varyans < 0.0)
      varyans = -varyans;
    /* Hesaplanan değerleri görüntüle. */
    printf("\nAdet = %d", adet);
    printf(", toplam = %.2f", toplam);
    printf(", ortalama = %.2f", ortalama);
    printf(", varyans = %.2f", varyans);
    /* Bir sonraki sayıyı al. */
    printf("\nLutfen bir sonraki sayiyi "
      "(veya cikmak icin -1) girin: ");
    scanf("%d", &sayi);
  } /* while */

/* En son hesaplanan değerleri bir daha
 * ve değişik bir biçimde görüntüle.
 */
  printf("\nVerilerin adedi : %12d", adet);
  printf("\nToplam          : %15.2f", toplam);
  printf("\nOrtalama        : %15.2f", ortalama);
  printf("\nVaryans         : %15.2f\n", varyans);
  return 0;
} /* main */