C Programlama Dili'ne Giriş

  Dersler
* �ns�z

* Giriş
* Veri Tipleri, De�i�kenler
* Operat�rler
* Temel G/� Fonksiyonlar�
* Temel K�t�phane Fonksiyonlar�
* Kar��la�t�rma Deyimleri
* D�ng�ler
* Fonksiyonlar I
* Fonksiyonlar II
* Diziler
* G�sterici (Pointer) Kavram�
* Katarlar (Stringler)
* Dinamik Bellek Y�netimi
* G�sterici Uygulamalar�
* Yap�lar ve Birlikler
* Dosya Y�netimi
* Bit D�zeyinde �al��mak
* Port Denetimi
* Grafik Kullan�m�
* C Makrolar�

* K�saca C++
* Derleme Se�enekleri
* Tarih-Saat Fonksiyonlar�
* Monte-Carlo Y�ntemleri
* Fortran ve C

* Yararlan�lan Kaynaklar

  C/C++ Derleyicileri
* Dev-C++
* Salford (silversoft FTN95)
* GCC
* Turbo C
* Eclipse IDE
* NetBeans IDE

  D�� Ba�lant�lar
* programlama.com
* C Programc�lar� Derne�i

* C (wikipedia)
* C++ (wikipedia)
* cplusplus.com
* koders.com
* Hot scripts

 

Ders 2: Veri Tipleri, Degiskenler ve Sabitler

###################- (%95)

En son gncelleme: Wed, 30 Nov 2011 13:22:02 +0200

Giris

Orta ve yksek seviyeli dillerin hemen hemen hepsinde veri tipi ve degisken kavrami bulunmaktadir. Bu kisimda C programlama dilindeki temel veri tipleri, tanimlayicilar, degiskenler ve sabitler konu edilecektir.


2.1   Veri Tipleri

Veri tipi (data type) program iinde kullanilacak degisken, sabit, fonksiyon isimleri gibi tanimlayicilarin tipini, yani bellekte ayrilacak blgenin byklgn, belirlemek iin kullanilir. Bir programci, bir programlama dilinde ilk olarak grenmesi gereken, o dile ait veri tipleridir. nk bu, programcinin kullanacagi degiskenlerin ve sabitlerin sinirlarini belirler. C programlama dilinde drt tane temel veri tipi bulunmaktadir. Bunlar:

      char
      int
      float
      double
Fakat bazi zel niteleyiciler vardir ki bunlar yukaridaki temel tiplerin nne gelerek onlarin trevlerini olusturur. Bunlar:
      short
      long
      unsigned

Bu niteleyiciler sayesinde degiskenin bellekte kaplayacagi alan istege gre degistirilebilir. Kisa (short), uzun (long), ve normal (int) tamsayi arasinda yalnizca uzunluk farki vardir. Eger normal tamsayi 32 bit (4 bayt) ise uzun tamsayi 64 bit (8 bayt) uzunlugunda ve kisa tamsayi 16 biti (2 bayt) gemeyecek uzunluktadir. Isaretsiz (unsigned) n eki kullanildigi taktirde, veri tipi ile saklanacak degerin sifir ve sifirdan byk olmasi saglanir. Isaretli ve isaretsiz verilerin bellekteki uzunluklari aynidir. Fakat, isaretsiz tipindeki verilerin st limiti, isaretlinin iki katidir.

 NOT
Kisa ve uzun tamsayi tutacak tanimlayicilar iin int anahtar kelimesinin yazilmasina gerek yoktur.
     short s;  /* short int s; anlaminda */
     long k;   /* long int k;  anlaminda */

Bir C programi ierisinde, veri tiplerinin bellekte kapladigi alan sizeof operatr ile grenilebilir. Ilgi cekici olan, bu alanlarin derleyiciye ve isletim sistemine bagli olarak degisiklik gstermesidir. Program 2.1'de, sizeof operatr kullanilarak, veri tiplerinin bellek uzunlularinin nasil ekrana yazdirilacagi gsterilmistir. Programin iktisi, farkli derleyiciler ve isletim sisteminde denendiginde bu durum daha iyi anlasilir. Ltfen inceleyin.

Program 2.1: Degisken tipleri ve trevlerinin bellekte kapladiklari alanlar
01: 
02: 
03: 
04: 
05: 
06: 
07: 
08: 
09: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
/* 02prg01.c : sizeof operatrnn kullanimi */

#include <stdio.h>

main()
{
  printf( "char           : %d bayt\n", sizeof(char));
  printf( "short          : %d bayt\n", sizeof(short));
  printf( "int            : %d bayt\n", sizeof(int));
  printf( "long           : %d bayt\n", sizeof(long));
  printf( "unsigned char  : %d bayt\n", sizeof(unsigned char));
  printf( "unsigned short : %d bayt\n", sizeof(unsigned short));
  printf( "unsigned int   : %d bayt\n", sizeof(unsigned int));
  printf( "unsigned long  : %d bayt\n", sizeof(unsigned long));
  printf( "float          : %d bayt\n", sizeof(float));
  printf( "double         : %d bayt\n", sizeof(double));
  printf( "long double    : %d bayt\n", sizeof(long double));
}

IKTI
Windows (32 bit) Turbo C Windows (32 bit) Salford Linux (32 bit) GCC Linux (64 bit) GCC
char           : 1 bayt
short          : 2 bayt
int            : 2 bayt
long           : 4 bayt
unsigned char  : 1 bayt
unsigned short : 2 bayt
unsigned int   : 2 bayt
unsigned long  : 4 bayt
float          : 4 bayt
double         : 8 bayt
long double    : 10 bayt
char           : 1 bayt
short          : 2 bayt
int            : 4 bayt
long           : 4 bayt
unsigned char  : 1 bayt
unsigned short : 2 bayt
unsigned int   : 4 bayt
unsigned long  : 4 bayt
float          : 4 bayt
double         : 8 bayt
long double    : 10 bayt
char           : 1 bayt
short          : 2 bayt
int            : 4 bayt
long           : 4 bayt
unsigned char  : 1 bayt
unsigned short : 2 bayt
unsigned int   : 4 bayt
unsigned long  : 4 bayt
float          : 4 bayt
double         : 8 bayt
long double    : 12 bayt
char           : 1 bayt
short          : 2 bayt
int            : 4 bayt
long           : 8 bayt
unsigned char  : 1 bayt
unsigned short : 2 bayt
unsigned int   : 4 bayt
unsigned long  : 8 bayt
float          : 4 bayt
double         : 8 bayt
long double    : 16 bayt

int veritipi ve trevleri ile hesaplanabilecek en kk ve en byk tamsayilar iin asagidaki forml kullanilabilir:

Alt sinir = -28*sizeof(tip)
st sinir = 28*sizeof(tip)-1
rnegin 4 baytlik bir int tipi iin:
Alt sinir = -28*sizeof(int) = -232 = -2147483648
st sinir = 28*sizeof(int)-1 = 232-1 = 2147483647

Tablo 2.1'de btn tipler, bellekte kapladiklari alanlar ve hesaplanabilcek (bellekte dogru olarak saklanabilecek) en byk ve en kk sayilar listelenmistir.

Tablo 2.1: Degisken tipleri ve bellekte kapladiklari alanlar

Veri Tipi Aiklama Bellekte isgal ettigi boyut (bayt) Alt sinir st sinir
char Tek bir karakter veya
kk tamsayi iin
1 -128 127
unsigned char 0 255
short int Kisa tamsayi iin 2 -32,768 32,767
unsigned short int 0 65,535
int Tamsayi iin 4 -2,147,483,648 2,147,483,647
unsigned int 0 4,294,967,295
long int Uzun tamsayi iin 8  -9,223,372,036,854,775,808 9,223,372,036,854,775,807
unsigned long int 0  18,446,744,073,709,551,615
float Tek duyarli gerel sayi iin (7 basamak) 4 -3.4e +/- 38 +3.4e +/- 38
double ift duyarli gerel sayi iin (15 basamak) 8 -1.7e +/- 308 +1.7e +/- 308

2.2   Degiskenler

Degiskenler bilgisayarin geici belleginde bilginin saklandigi gzlere verilen sembolik adlardir. Bir C programinda, bir degisken tanimlandiginda bu degisken iin bellekte bir yer ayrilir. Her degiskenin tuttugu degerin nasil bir veri oldugunu gsteren (nceki blmde anlatilan) bir veri tipi vardir [1], [3].

C programlama dilinde, degiskenler ve sabitler programin basinda bulunmalidir. Bazi uygulamalarda degiskenin bir baslangi degerinin olmasi istenir. Byle durumlarda degisken bildirilirken baslangi degeri verilebilir. rnegin:

      char isim='X', z;    /* deger atamak zorunlu degil */
      int  sayi=0, n;
      float toplam=0.0, sonuc=22.14;

Degisken isimleri verirken bazi kurallara uymak zorunludur. Bunlar:

  • Degisken adlari en fazla 32 karakterden olusabilir. 32 karakterden uzun degisken adlari ilk 32 karakteri degerlendirilir. Geriye kalan karakterler isleme tabi tutulmaz.
  • Degisken adlari ingiliz alfabesinde bulunan karakterler (A-Z) veya (a-z) yada rakamlar (0-9) ile yazilmalidir. Trke karakterler, zel karakter veya bosluk karakteri kullanilamaz.
  • Degisken adlari herhangi bir rakam ile baslayamaz. Ilk karakter bir harf olamalidir. Sonrakiler rakamlardan olusabilir.
  • Asagida verilen kelimeler ANSI C 'nin anahtar kelimeleridir (key words) ve degisken ismi olarak kullanilamaz.
    
       auto       double   int        struct 
       break      else     long       switch
       case       enum     register   typedef
       char       extern   return     union
       const      float    short      unsigned
       continue   for      signed     void
       default    goto     sizeof     volatile
       do         if       static     while
    

Bu kurallara gre asagadaki degisken (sabit, fonksiyon) adlarinin geerliligini inceleyiniz.

Degisken/Sabit/Fonksiyon/Yapi Adi   Geerlilik   Aiklama
asal   geerli   -
Momentum   geerli   -
ivme   geerli   -
olasilik   geerli   -
IsikHizi   geerli   -
isik_hizi   geerli   Alt izgi karakteri   '_'   kullanilabilir
isik hizi   geersiz   Bosluk karakteri kullanilamaz
isik_hizi   geersiz   Trke karakter kullanilamaz
1Bit   geersiz   rakam ile baslanamaz
typedef   geersiz   Anahtar kelimelerden birisi kullanilamaz

2.3   Sabitler

Sabit bildirimi, baslangi degeri verilen degisken bildirimi gibi yapilir. Ancak, veri tipinin nne const anahtar szcg konmalidir. rnegin:

      const float   PI = 3.142857;
      const double  NOT= 12345.8596235489;
      const int     EOF= -1;
      const char[] = "devam etmek iin bir tusa basin...";

gibi sabit bildirimleri geerli olup bunlarin ierikleri program boyunca degistirilemez. Yalnizca kullanilabilir. Genellikle, sabit olarak bildirilen degisken isimleri byk harflerle, diger degisken isimlerinin ise kk harflerle yazilmasi (gsterilmesi) C programcilari tarafindan geleneksel hale gelmistir.

Birok C programinda sabitler #define nislemci komutu ile de tanimlandigini grebilirsiniz. Bu komutla sabit bildirimi, bir program parasina ve makro fonksiyon tanimlamasi yapilabilir. Bir program gelistirilirken simgesel sabitlerin kullanilmasi programin okunurlugunu arttirir ve bazen gerekli de olabilir. Asagida verilen simgesel sabit bildirimleri geerlidir. #define nislemcisi ile makro fonksiyon tanimalama islemi, Blm 8 ve Blm 20'de anlatilacaktir.

  #define MAX     100
  #define DATA    0x0378
  #define YARICAP 14.22

2.4   Rakamsal Bilgiler

C programlama dili iinde tanimlanabilecek sabit rakamlar rakamsal bilgi (literal) olarak adlandirilir. Her veri tipi kendi rakamsal bilgisine sahiptir. Bu bilgiler, kaynak kod ierisinde, zel degerleri ifade eder. rnegin asagidaki atama isleminde 25 ve 17.2 sayilari gibi:

   i = 25;    /* 25, int tipinde bir rakamsal bilgidir */
   r = 17.2;  /* 17.2, double tipinde bir rakamsal bilgidir */

C dilinde btn tamsayi sabitler varsayilan (default) olarak int tipinde, gerel sayi sabitler varsayilan olarak double tipindedir. Ancak sabitleri gsteren rakamlarin sonuna eklenecek U (veya u), L (veya l) ve F (veya f) harfleri ile bu durum degistirilebilir. Bu yzden, asagidaki atamalar ayni anlamda degildir.

    i = 25;    /* int           rakam */
    i = 25U;   /* unsigned int  rakam */
    i = 25L;   /* long int      rakam */
    i = 25UL;  /* unsigned long rakam */
    i = 25L;   /* long int      rakam */

    r = 17.2;  /* double        rakam */
    r = 17.2L; /* long double   rakam */
    r = 17.2F; /* float         rakam */

Tamsayi (int) rakamsal bilgiler, 8 (oktal) ve 16 (hexadesimal) sayi tabaninda da gsterilebilir. Bunun iin sabit rakamin basina, 8 tabani iin 0 (sifir) ve 16 tabanini iin 0x sembolleri eklenir. 16'lik sistemdeki hafler byk (A, B, C, D, E ve F) veya kk (a, b, c ,d, e ve f) olabilir. Buna gsterime gre, asagidaki atmalar ayni anlamadadir:

    i = 75;    /* i = 75, 10 tabaninda */
    i = 0113;  /* i = 75,  8 tabaninda */
    i = 0x4b;  /* i = 75, 16 tabaninda */
    i = 0x4B;  /* i = 75, 16 tabaninda */

Gerel sayilar ondalikli veya stel olmak zere iki biimde gsterilebilir. rnegin 123.456 sayisinin ayni anlama gelen drt farkli gsterimi asagida verilmistir. stel gsterimde, 1.23456e+2 veya 1.23456E+2 sayisi matematikteki 1.23456 x 102 gsterimi ile esdegerdir.

    x = 123.456;      /* ondalikli gsterimi */
    x = 123.456e+0;   /* stel gsterim */
    x = 1.23456e+2;   /* stel gsterim */
    x = 1234.56E-1;   /* stel gsterim */

Karakter sabitler, bir harf iin tek tirnak, birden ok karakter iin ift tirnak iinde belirtilirler.

    'A'               /* bir karakter */
    "Merhaba Dunya"   /* bir karakter kmesi */
Program 2.1'de, program iinde tanimlanan degisken sabitlerin ekrana nasil yazdirilacagi gsterilmistir.

Program 2.2: Degiskenlerin ve sabitlerin ekrana yazdirilmasi
01: 
02: 
03: 
04: 
05: 
06: 
07: 
08: 
09: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
/* 02prg02.c : Degiskenler ve sabitlerin ekrana yazdirilmasi */

#include <stdio.h>

#define PI 3.141593

int main()
{
  const int MAX = 100;
  char   c = 'a';
  char  *s = "Bu bir sicim";
  int    i = 22;
  float  f = 33.3;
  double d = 44.4;
 
  printf("PI = %lf\n",PI);
  printf("MAX= %d\n", MAX);
  printf("c  = %c\n", c);
  printf("s  = %s\n", s);
  printf("i  = %d\n", i);
  printf("f  = %f\n", f);
  printf("d  = %lf\n",d);

 return 0;
}

IKTI

PI = 3.141593
MAX= 100
c  = a
s  = Bu bir sicim
i  = 22
f  = 33.299999
d  = 44.400000


2.5   Degisken Bildirim Yerleri ve Trleri

Yerel (local) Bildirim

Yerel degiskenler kullanildigi fonksiyon ierisinde bildirilir. Yalnizca bildirildigi fonksiyon ierisinde taninir ve kullanilabilir.

    int topla(int a,int b)
    {
    /* yerel (local) degisken c nin bildirimi */
     int c;
     c = a + b;
     return c;
   }

Genel (general) Bildirim

Genel degiskenler btn fonksiyonlarin disinda bildirilir. Bir degisken program boyunca srekli olarak kullaniliyorsa genel olarak bildirilmelidir.

   #include <stdio.h>

   void karesi();

   /*  m ve n global tip degiskendir. 
       Bu iki degisken tm program boyunca kullanilmaktadir. */

   int m,n;  

   main()
   {
     m=7;
     karesi();
     printf("%d nin karesi %d dir",m,n);
   }

   void karesi(){
     n = m*m;
   }

2.6   Tip Dnsmleri

Bir forml ierisinde bir ok degisken veya sabit olabilir. Bu degisken ve sabitler birbirinden farkli tipte olursa, hesap sonucunun hangi tipte olacagi nemlidir. Bir bagintida, ierigi dnsme ugrayan degiskenler eski ieriklerini korurlar. Dnstrme islemi iin geii bellek alani kullanilir; dnstrlen deger kullanildiktan sonra o alan serbest birakilir.

    char kr;
    int tam;
    long int ltam;
    unsigned int utam;
    short int stam;
    float f;
    double d;

bildirimlerine gre:

    Baginti      Sonu Tipi
    -------      ----------
    kr+5         int
    kr+5.0       double
    d+tam        double
    f+d-2        double
    utam-tam     unsigned
    ltam*tam     long
    tam/2        int
    tam/2.0      double

 NOT
Tamsayilar arasi blme kesme hatalarina (truncation error) neden olur.
Bunun anlami iki tamsayinin orani yine bir tamsayidir.
rnegin: 4/2=2; ama 3/2=1 (1.5 degil).

Bir degiskenin sabit degerin veya bagintinin nne tr veya taki (cast) yazilarak sonucun hangi tip ikmasi istendigi sylenebilir. Genel yazim biimi:

      (tr tipi)  baginti;
rnegin:
      int x=9;
      float a,b,c;
      double d;
      ...
      a = x/4;
      b = x/4.0;
      c = (float) x/4;

isleminin sonucunda a degiskenine 2.0, b ve c degiskenlerine 2.25 degeri aktarilir. Yani 9/4 ile 9/4.0 farkli anlamdadir.



Powered by PHP