Programlama Temelleri

4 - Standart Kütüphane Fonksiyonları

Emre Can Yılmaz

Ondokuz Mayıs Üniversitesi

2024

Standart Kütüphane: C’nin Güçlü Yardımcıları

  • C programlama dili, birçok hazır fonksiyon içeren zengin bir standart kütüphane ile gelir.
  • Bu fonksiyonlar, programcıların sık kullanılan işlemleri (girdi/çıktı, matematiksel hesaplamalar, string işlemleri, zaman ve tarih işlemleri vb.) kolayca gerçekleştirmesini sağlar.

Başlık Dosyaları: Kütüphaneye Erişim

  • Standart kütüphane fonksiyonları, başlık dosyaları (.h uzantılı dosyalar) içinde tanımlanır.
  • Bir fonksiyonu kullanabilmek için, ilgili başlık dosyasını #include direktifi ile programa eklememiz gerekir.

Örnek

#include <stdio.h> // printf fonksiyonunu kullanabilmek için

int main() {
  printf("Merhaba Dünya!\n");
  return 0;
}
  • Bu örnekte, #include <stdio.h> direktifi, standart girdi/çıktı kütüphanesinin (stdio.h) başlık dosyasını programa ekler. printf fonksiyonu, bu başlık dosyasında tanımlandığı için, programda kullanabiliriz.

Yaygın Kullanılan Başlık Dosyaları ve Fonksiyonlar

  • C standart kütüphanesi birçok başlık dosyası içerir. Bu bölümde, en sık kullanılan başlık dosyalarından bazılarını ve içerdikleri önemli fonksiyonları inceleyeceğiz.

<stdio.h>: Standart Girdi/Çıktı

  • printf(): Ekrana çıktı yazdırmak için kullanılır.
#include <stdio.h>

int main() {
  int sayi = 10;
  printf("Sayının değeri: %d\n", sayi);
  return 0;
}
  • scanf(): Kullanıcıdan girdi almak için kullanılır.
#include <stdio.h>

int main() {
  int yas;
  printf("Yaşınızı girin: ");
  scanf("%d", &yas);
  printf("Girdiğiniz yaş: %d\n", yas);
  return 0;
}
  • getchar(): Standart girişten (genellikle klavye) tek bir karakter okur.
#include <stdio.h>

int main() {
  char karakter;
  printf("Bir karakter girin: ");
  karakter = getchar();
  printf("Girdiğiniz karakter: %c\n", karakter);
  return 0;
}
  • putchar(): Belirtilen karakteri standart çıktıya (genellikle ekran) yazar.
#include <stdio.h>

int main() {
  char karakter = 'A';
  putchar(karakter);  // Ekrana 'A' karakterini yazar
  return 0;
}

<math.h>: Matematiksel Fonksiyonlar

  • sqrt(x): x sayısının karekökünü hesaplar ve sonucu double türünde döndürür.
#include <stdio.h>
#include <math.h>

int main() {
  double sayi = 25.0;
  double karekok = sqrt(sayi);
  printf("%.2lf sayısının karekökü: %.2lf\n", sayi, karekok);
  return 0;
}
  • double Veri Tipi: double veri tipi, float gibi ondalıklı sayıları temsil eder, ancak float’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 fonksiyonunda double 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 ve double veri tipi için kullanılır.
  • pow(x, y): x sayısının y’inci kuvvetini hesaplar ve sonucu double türünde döndürür.
#include <stdio.h>
#include <math.h>

int main() {
  double taban = 2.0;
  double us = 3.0;
  double sonuc = pow(taban, us);
  printf("%.2lf sayısının %.2lf. kuvveti: %.2lf\n", taban, us, sonuc);
  return 0;
}
  • sin(x), cos(x), tan(x): x açısının (radyan cinsinden) sinüs, kosinüs ve tanjant değerlerini hesaplar ve sonucu double türünde döndürür.
#include <stdio.h>
#include <math.h>

int main() {
  double aci = 30.0; // Derece cinsinden
  double radyan = aci * M_PI / 180.0; // Dereceyi radyana çevirme

  printf("sin(%.2lf): %.2lf\n", aci, sin(radyan));
  printf("cos(%.2lf): %.2lf\n", aci, cos(radyan));
  printf("tan(%.2lf): %.2lf\n", aci, tan(radyan));

  return 0;
}

<stdlib.h>: Genel Amaçlı Fonksiyonlar

  • abs(x): x tam sayısının mutlak değerini hesaplar.
#include <stdio.h>
#include <stdlib.h>

int main() {
  int sayi = -15;
  int mutlakDeger = abs(sayi);
  printf("%d sayısının mutlak değeri: %d\n", sayi, mutlakDeger);
  return 0;
}
  • atoi(str): str stringini tam sayıya (int) dönüştürür.
#include <stdio.h>
#include <stdlib.h>

int main() {
  char metin[] = "123";
  int sayi = atoi(metin);
  printf("String: %s, Tam Sayı: %d\n", metin, sayi);
  return 0;
}

Rastgele Sayı Üretimi

  • <stdlib.h> başlık dosyasında bulunan rand() fonksiyonu, sözde rastgele sayılar üretmek için kullanılır.
  • rand() fonksiyonu, her çağrıldığında 0 ile RAND_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 genellikle time() fonksiyonu ile birlikte kullanırız.
  • rand(): 0 ile RAND_MAX arasında bir tam sayı döndürür.
#include <stdio.h>
#include <stdlib.h>

int main() {
  int rastgeleSayi = rand();
  printf("Rastgele sayı: %d\n", rastgeleSayi);
  return 0;
}
  • srand(seed): Rastgele sayı üreteci için başlangıç değeri (seed) ayarlar.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
  srand(time(NULL)); // Her çalıştırmada farklı rastgele sayılar üretir

  for (int i = 0; i < 5; i++) {
    int rastgeleSayi = rand() % 100; // 0 ile 99 arasında rastgele sayı
    printf("%d ", rastgeleSayi);
  }
  printf("\n");
  return 0;
}
  • time(NULL) Fonksiyonu: time(NULL) ifadesinde, time() fonksiyonuna NULL 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.

Örnek: Zar Atma Simülasyonu

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
  srand(time(NULL)); // Rastgele sayı üreteci başlatılır
  int zar = (rand() % 6) + 1; // 1 ile 6 arasında rastgele bir sayı üretir
  printf("Zar: %d\n", zar);
  return 0;
}

<time.h>: Zaman ve Tarih İşlemleri

  • time(): Geçerli zamanı saniye cinsinden döndürür (1 Ocak 1970’den beri geçen saniye sayısı).
#include <stdio.h>
#include <time.h>

int main() {
  time_t suAn = time(NULL);
  printf("Şu anki zaman (saniye cinsinden): %ld\n", suAn);
  return 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.

Alıştırmalar

1. Yazı tura atma simülasyonu yapın. Program, kullanıcıdan kaç kez yazı tura atılacağını alarak, bu sayı kadar yazı tura atsın ve kaç kez yazı, kaç kez tura geldiğini ekrana yazdırsın.

2. while döngüsü kullanarak bir sayı tahmin oyunu yazın. Program, 1 ile 100 arasında rastgele bir sayı tutsun ve kullanıcıdan bu sayıyı tahmin etmesini istesin. Kullanıcı doğru sayıyı tahmin edene kadar, program kullanıcıya sayının daha büyük mü yoksa daha küçük mü olduğunu söylesin. Kullanıcı doğru sayıyı tahmin ettiğinde, program kaç tahminde bulunduğunu ekrana yazdırsın.

3. 0 ile 99 arasında 10 tane rastgele sayı üretip ekrana yazdırın.

4. Bir önceki soruda rastgele üretilen 10 sayının ortalamasını bulup ekrana yazdırın.

5. Bir önceki soruda rastgele üretilen 10 sayının en büyüğünü ve en küçüğünü ekrana yazdırın.

Özet

  • C standart kütüphanesi, programcıların işini kolaylaştıran birçok hazır fonksiyon sağlar.
  • Bu fonksiyonlar, girdi/çıktı, matematiksel işlemler, string işlemleri, zaman ve tarih işlemleri gibi birçok farklı amaç için kullanılabilir.
  • Standart kütüphane fonksiyonlarını kullanabilmek için, ilgili başlık dosyasını #include direktifi ile programa eklememiz gerekir.

Gelecek Hafta

  • Fonksiyonlar: Kodun Yapı Taşları