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 */