Standart Kütüphane Fonksiyonları
Bölüm 4: Standart Kütüphane Fonksiyonları - C’nin Hazır Araçları
C programlama dili, standart kütüphane adı verilen bir dizi hazır fonksiyon koleksiyonuyla gelir. Bu fonksiyonlar, programcıların sık kullanılan işlemleri kolayca gerçekleştirmesini sağlar. Girdi/çıktı işlemleri, matematiksel hesaplamalar, string manipülasyonu, bellek yönetimi, zaman ve tarih işlemleri gibi birçok farklı amaç için fonksiyonlar mevcuttur. Bu bölümde, C’nin standart kütüphanesindeki bazı önemli fonksiyonları ve bunları nasıl kullanabileceğinizi öğreneceksiniz.
4.1 Başlık Dosyaları: Kütüphane Fonksiyonlarına Erişim
Standart kütüphane fonksiyonları, başlık dosyaları (.h
uzantılı dosyalar) içinde tanımlanmıştır. Bir fonksiyonu kullanmadan önce, ilgili başlık dosyasını #include
direktifi ile kaynak koda eklemeniz gerekir.
Örnek:
#include <stdio.h> // printf ve scanf fonksiyonları için gerekli
int main() {
("Merhaba Dünya!\n");
printfreturn 0;
}
Bu örnekte, #include <stdio.h>
direktifi, standart girdi/çıktı kütüphanesinin (stdio.h
) başlık dosyasını programa ekler. Bu başlık dosyası, printf
fonksiyonunun tanımını içerir, bu yüzden programda printf
fonksiyonunu kullanabiliriz.
4.2 Yaygın Kullanılan Standart Kütüphane Fonksiyonları
Şimdi, farklı başlık dosyalarında bulunan bazı yaygın kullanılan standart kütüphane fonksiyonlarına ve bunların nasıl kullanılacağına dair örnekler inceleyelim.
4.2.1 <stdio.h>
: Girdi/Çıktı İşlemleri
<stdio.h>
başlık dosyası, standart girdi/çıktı işlemleri için fonksiyonlar sağlar. En sık kullanılan fonksiyonlar şunlardır:
printf()
: Ekrana çıktı yazdırmak için kullanılır.Örnek:
#include <stdio.h> int main() { int sayi = 10; float ondalikSayi = 3.14; char karakter = 'A'; char metin[] = "Merhaba"; ("Sayı: %d\n", sayi); printf("Ondalık Sayı: %.2f\n", ondalikSayi); printf("Karakter: %c\n", karakter); printf("Metin: %s\n", metin); printf return 0; }
scanf()
: Kullanıcıdan girdi almak için kullanılır.Örnek:
#include <stdio.h> int main() { int sayi; ("Bir sayı girin: "); printf("%d", &sayi); scanf ("Girdiğiniz sayı: %d\n", sayi); printf return 0; }
getchar()
: Standart girişten (genellikle klavye) tek bir karakter okur ve bu karakteriint
türünde bir değer olarak döndürür.Örnek:
#include <stdio.h> int main() { char karakter; ("Bir karakter girin: "); printf= getchar(); karakter ("Girdiğiniz karakter: %c\n", karakter); printf return 0; }
putchar()
: Belirtilen karakteri standart çıktıya (genellikle ekran) yazar. Başarı durumunda yazdırılan karakteri, hata durumunda ise EOF (End-of-File) değerini döndürür.Örnek:
#include <stdio.h> int main() { char karakter = 'A'; (karakter); // Ekrana 'A' karakterini yazar putchar return 0; }
4.2.2 <math.h>
: Matematiksel İşlemler
<math.h>
başlık dosyası, matematiksel işlemler için fonksiyonlar sağlar. En sık kullanılan fonksiyonlar şunlardır:
sqrt(x)
: x sayısının karekökünü hesaplar.double
türünde bir değer döndürür.Örnek:
#include <stdio.h> #include <math.h> int main() { double sayi = 25.0; double karekok = sqrt(sayi); ("%.2f sayısının karekökü: %.2f\n", sayi, karekok); printf return 0; }
pow(x, y)
: x sayısının y’inci kuvvetini hesaplar.double
türünde bir değer döndürür.Örnek:
#include <stdio.h> #include <math.h> int main() { double taban = 2.0; double us = 3.0; double sonuc = pow(taban, us); ("%.2f sayısının %.2f. kuvveti: %.2f\n", taban, us, sonuc); printf return 0; }
sin(x)
,cos(x)
,tan(x)
: x açısının (radyan cinsinden) sinüs, kosinüs ve tanjant değerlerini hesaplar.double
türünde bir değer döndürür.Örnek:
#include <stdio.h> #include <math.h> int main() { double aci = 30.0; // Derece cinsinden double radyan = aci * M_PI / 180.0; // Dereceyi radyana çevirme ("sin(%.2f): %.2f\n", aci, sin(radyan)); printf("cos(%.2f): %.2f\n", aci, cos(radyan)); printf("tan(%.2f): %.2f\n", aci, tan(radyan)); printf return 0; }
double
Veri Tipi:double
veri tipi,float
gibi ondalıklı sayıları temsil eder, ancakfloat
’a göre daha fazla hassasiyet sağlar.double
, genellikle 8 bayt bellek kullanırken,float
4 bayt kullanır.%.2lf
Format Belirteci:%.2lf
,printf
fonksiyonundadouble
tipindeki bir değişkeni yazdırırken, virgülden sonra iki basamak göstermek için kullanılır.lf
, “long float” anlamına gelir vedouble
veri tipi için kullanılır.
4.2.3 <stdlib.h>
: Genel Amaçlı Fonksiyonlar
<stdlib.h>
başlık dosyası, bellek yönetimi, sayı dönüştürme, rastgele sayı üretme gibi genel amaçlı fonksiyonlar sağlar. En sık kullanılan fonksiyonlar şunlardır:
rand()
: Rastgele bir sayı üretir.Örnek:
#include <stdio.h> #include <stdlib.h> int main() { int rastgeleSayi = rand(); ("Rastgele sayı: %d\n", rastgeleSayi); printfreturn 0; }
srand(seed)
: Rastgele sayı üreteci için başlangıç değeri (seed) ayarlar.Örnek:
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { (time(NULL)); // Her çalıştırmada farklı rastgele sayılar üretir srand for (int i = 0; i < 5; i++) { int rastgeleSayi = rand() % 100; // 0 ile 99 arasında rastgele sayı ("%d ", rastgeleSayi); printf} ("\n"); printfreturn 0; }
time(NULL)
Fonksiyonu:time(NULL)
ifadesinde,time()
fonksiyonunaNULL
değeri parametre olarak verilir. Bu, fonksiyonun zaman bilgisini sadece dönüş değeri olarak döndürmesini ve ek bir yere yazmamasını sağlar.NULL
Değeri:NULL
, C dilinde bir işaretçinin hiçbir yeri göstermediğini belirtmek için kullanılan özel bir değerdir.abs(x)
: x tam sayısının mutlak değerini hesaplar ve sonucuint
türünde döndürür.Örnek:
#include <stdio.h> #include <stdlib.h> int main() { int sayi = -15; int mutlakDeger = abs(sayi); ("%d sayısının mutlak değeri: %d\n", sayi, mutlakDeger); printfreturn 0; }
atoi(str)
:str
stringini tam sayıya (int
) dönüştürür.Örnek:
#include <stdio.h> #include <stdlib.h> int main() { char metin[] = "123"; int sayi = atoi(metin); ("String: %s, Tam Sayı: %d\n", metin, sayi); printfreturn 0; }
4.2.4 <time.h>
: Zaman ve Tarih İşlemleri
<time.h>
başlık dosyası, zaman ve tarih işlemleri için fonksiyonlar sağlar. En sık kullanılan fonksiyonlar şunlardır:
time()
: Geçerli zamanı saniye cinsinden döndürür (1 Ocak 1970’den beri geçen saniye sayısı).Örnek:
#include <stdio.h> #include <time.h> int main() { time_t suAn = time(NULL); ("Şu anki zaman (saniye cinsinden): %ld\n", suAn); printfreturn 0; }
Unix Epoch: 1 Ocak 1970, Unix işletim sisteminin ve birçok programlama dilinin zamanı hesaplamak için kullandığı başlangıç noktasıdır. Bu tarihe “Unix epoch” denir.
localtime()
:time_t
türündeki bir zaman bilgisini, yerel zaman dilimine göre yapılandırılmış birstruct tm
yapısına dönüştürür.Örnek:
#include <stdio.h> #include <time.h> int main() { time_t suAn = time(NULL); struct tm *zamanBilgisi = localtime(&suAn); ("Yıl: %d\n", zamanBilgisi->tm_year + 1900); printf("Ay: %d\n", zamanBilgisi->tm_mon + 1); printf("Gün: %d\n", zamanBilgisi->tm_mday); printf return 0; }
4.3 Rastgele Sayı Üretimi
<stdlib.h>
başlık dosyasında bulunanrand()
fonksiyonu, sözde rastgele sayılar üretmek için kullanılır.rand()
fonksiyonu, her çağrıldığında 0 ileRAND_MAX
arasında bir tam sayı döndürür (RAND_MAX
stdlib.h’de tanımlanmış bir makrodur).srand(seed)
fonksiyonu, rastgele sayı üreteci için bir başlangıç değeri (seed) ayarlar.- Farklı rastgele sayı dizileri elde etmek için
srand()
fonksiyonunu genellikletime()
fonksiyonu ile birlikte kullanırız.
Örnek: Zar Atma Simülasyonu
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
(time(NULL)); // Rastgele sayı üreteci başlatılır
srandint zar = (rand() % 6) + 1; // 1 ile 6 arasında rastgele bir sayı üretir
("Zar: %d\n", zar);
printfreturn 0;
}
4.4 Alıştırmalar
- Kullanıcıdan bir sayı girmesini isteyin ve bu sayının karekökünü hesaplayıp ekrana yazdırın. (
sqrt()
fonksiyonunu kullanın). - Kullanıcıdan iki sayı girmesini isteyin (taban ve üs) ve bu sayıların üssünü hesaplayıp ekrana yazdırın. (
pow()
fonksiyonunu kullanın). - Rastgele bir sayı üretin (0 ile 100 arasında) ve bu sayının tek mi çift mi olduğunu ekrana yazdırın.
- Kullanıcıdan bir saniye cinsinden zaman değeri girmesini isteyin (örneğin, 1 Ocak 1970’den beri geçen saniye sayısı) ve bu zamanı yerel zaman dilimine göre tarih ve saat formatında ekrana yazdırın. (
localtime()
fonksiyonunu kullanın). - Kullanıcıdan bir tam sayı girmesini isteyin ve bu sayının mutlak değerini hesaplayıp ekrana yazdırın. (
abs()
fonksiyonunu kullanın). - Zar atma simülasyonu yapan bir program yazın. Program her çalıştırıldığında 1 ile 6 arasında rastgele bir sayı üretsin.
- 0 ile 99 arasında 10 tane rastgele sayı üreten bir program yazın.
- Bir önceki soruda rastgele üretilen 10 sayının ortalamasını bulup ekrana yazdırın.
- Kullanıcıdan 1 ile 12 arasında bir ay numarası girmesini isteyin ve o aya karşılık gelen kaç gün olduğunu ekrana yazdırın. (Şubat ayı için 28 gün olduğunu varsayın).
- Kullanıcıdan Fahrenheit cinsinden sıcaklık değerini alıp Celsius’a çeviren bir program yazın. (Dönüşüm formülünü internette arayabilirsiniz.)
- Kullanıcıdan bir kenar uzunluğu girmesini isteyin (ondalıklı sayı olabilir) ve bir küpün hacmini hesaplayıp ekrana yazdırın.
- 0 ile 10 arasında rastgele 5 sayı üretin ve bu sayıların en büyüğünü ekrana yazdırın.
- Kullanıcıdan doğum yılını girmesini isteyin ve yaşını hesaplayıp ekrana yazdırın.
- Kullanıcıdan iki tarih bilgisi girmesini isteyin (saniye cinsinden, Unix zaman damgası formatında). Bu iki tarih arasındaki farkı gün olarak hesaplayan bir program yazın.
- Rastgele 10 tam sayı üretin (0-100 arasında) ve bu sayılardan kaç tanesinin 50’den büyük olduğunu ekrana yazdırın.
4.5 Sonuç
C’nin standart kütüphanesi, programcıların hayatını kolaylaştıran birçok hazır fonksiyon sağlar. Bu fonksiyonları kullanarak, programcılar karmaşık işlemleri daha kolay ve verimli bir şekilde gerçekleştirebilirler. Bu bölümde, C’nin standart kütüphanesindeki bazı önemli fonksiyonları ve bunların nasıl kullanılacağına dair örnekler gördük. Bu fonksiyonları öğrenerek, daha güçlü ve etkili C programları yazabilirsiniz.