C Programlama Dili/Veri Türleri

Vikikitap, özgür kütüphane
C Programlama Dili -/+

Veri Türleri[değiştir]

Bir önceki bölümde basitçe değişken kullanmayı ve aritmetik işlemleri incelemiştik. Bu bölümde konuyu biraz daha genişleterek tamsayıdan başka ne gibi veri türlerini kullanabiliriz bunu inceleyeceğiz.

Tamsayılar[değiştir]

Hatırlayacağınız üzere, int türündeki değişkenlerin tamsayıları saklamak için kullanıldığını söylemiştik. Aslında bu tam olarak doğru değil.

Bir işlemci tamsayıları sabit sayıda basamaktan oluşan veri yapıları şeklinde saklar ve işler. Örneğin Pentium gibi PC işlemcileri tamsayıları 32 basamak olarak saklar. 32 bit işlemci deyiminin anlamı budur. C dili sistem programlama için tasarlanmiş bir dil olduğundan dili tasarlayanlar int türünü bu tamsayı formatına karşılık gelecek şekilde tanımlamışlardır. Bu yüzden int türü sadece 31 basamaklı tamsayıları temsil edebilir. Eğer çok büyük sayılarla işlem yapıyorsanız, özellikle çarpma işlemlerinde, bu sınırlamayı göz onüne almalısınız.

Peki neden 31 basamak, bir basamağı neden kullanmıyoruz? İşlemciler 32nci basamağı işaret basamaği olarak kullanır. 32nci basamakta 1 değeri varsa bu, o sayının negatif olduğu anlamına gelir. 0 değeri varsa, bu da sayı pozitif demektir. Bu yüzden int türü 31 basamakla sınırlandırilmıştır.

Bildiğiniz gibi bilgisayarlar işlemlerini hep ikili sayı sisteminde yaparlar. Bir tamsayının basamakları sadece ikili sayı sistemindeki sayıları saklayabilir: 1 ve 0. Bu nedenle yukarıda bahsettiğimiz basamaklar onlu sayı sisteminde değil ikili sayı sisteminde kullanılan basamaklardır. Özetleyecek olursak int türündeki değerlerin alt ve üst sınırları yaklaşik olarak -2 milyar ve +2 milyardır. Bu diğer sistemlerde farklı olarak tanımlanabilir fakat modern bir işletim sistemi yüklü (Linux, BSD, Windows XP gibi) olan PC sistemleri için bu kadarını bilmeniz şimdilik yeterli olacaktır.

Rasyonel Sayılar[değiştir]

C dili, rasyonel sayıları işlemek ve saklamak için de bir veri türü içerir: double. Gene işlemci tasarımından dolayı, bu türdeki sayıların da int türündeki sayılara benzer basamak problemleri var.

Double türündeki sayılar 64 basamaklı bir veri yapısında saklanır. Bu yüzden double türündeki sayıların sonsuz basamağı olan irrasyonel sayılari veya 1/3 gibi basamakları sonsuza değin tekrar eden sayıları tam olarak ifade edebilmesi mümkün değildir. Bunun yerine, en küçük basamaklar atılarak yaklaşık bir değer kullanılır.

Bir önceki bölümde int türündeki değişkenleri kullanıcıdan nasıl isteyebileceğimizi ve int değerleri ekrana nasıl yazdırabileceğimizi görmüştük. Şimdi de aynı şeyi double değerler için yapalım:

   #include <stdio.h>
   
   int main() {
       double a;
       printf(" bir rasyonel sayı giriniz>");
       scanf("%lf", &a);
       printf(" rasyonel sayılar birden fazla\n");
       printf(" biçimde yazdırılabilir:\n ");
       printf("%f", a);
       printf(" veya ");
       printf("%e", a);
       printf(" gibi.\n");
       return 0;
   }

double değişkenimizi tanımlarken geçen bölümde gördüğümüz tip ad biçimini kullandık. printf kullanarak ekrana yazı yazdırmayı artık zaten biliyorsunuz. double sayımızı kullanıcıdan almak ve ekrana yazdırmak için aynı geçen bölümdeki gibi scanf ve printf fonksiyonlarını kullandık. Bu fonksiyonların kullanım şekillerini şimdilik fazla irdelemenize gerek yok. double ve int türleri için nasıl kullanıldıklarını bilmeniz yeterli. Daha ayrıntılı bilgiyi işaretçiler bölümüne geldiğimiz zaman vereceğim.

C dili makine diline çok yakın olduğu için buna benzer çok esnek yapılar içeriyor. Dili öğrendikten sonra C'nin bu alışılmadık gücü programlamada çok büyük kolaylıklar sağlıyor fakat başlangıçta alışmak biraz zaman alabilir. Programı çalıştıralım:

bir rasyonel sayı giriniz>21.9
rasyonel sayılar birden fazla
biçimde yazdırılabilir:
21.900000 veya 2.190000e+01 gibi.

Tekrar çalıştıralım:

bir rasyonel sayı giriniz>0.6
rasyonel sayılar birden fazla
biçimde yazdırılabilir:
0.600000 veya 6.000000e-01 gibi.

Gördüğünüz gibi printf fonksiyonu double sayılari değişik biçimlerde ekrana yazabiliyor. %f formatı verildiğinde normal ondalık biçiminde, %e formatı verildiğindeyse, bilimsel notasyon kullanarak ekrana yazıyor. Çok küçük sayılarla hesaplama yapmadığınız sürece bilimsel notasyonu kullanmaya fazla ihtiyacınız olmayacak fakat programlarınız ekrana hep 0 yazıyorsa ve yazılan sayının çok küçük olduğundan şüpheleniyorsanız geçici olarak %e notasyonunu kullanarak problemi teşhis edebilirsiniz.

Diğer Temel Türler[değiştir]

int ve double türlerinin yanında, C dili bu türlerin değişik varyasyonlarını da tanımlar. İşaretsiz tamsayılar (doğal sayılar), kısa veya uzun tamsayılar, daha az hassas rasyonel sayılar gibi. Dili öğrenmek ve programlamanızı geliştirmek için int ve double türleri uzun bir süre yeterli olacaktır. Başkası tarafından yaratılan verileri işleyen programlar yapmaya basladığımız zaman veya özel kullanım alanlarını anlattığımız zaman bunları detaylı olarak inceleyeceğiz.

Sayılar dışında C dilinin tanımladığı iki temel veri türünden hiç bahsetmedik: char ve void. char türü katarları kullanmayı öğrendikten sonra belki de en çok kullanacağınız veri türlerinden biri. Katarlar işaretçilerle çok yakından ilgili olduğu için kullanımları bir hayli karmaşık. Bu yüzden char türünün bir tamsayı çeşidi olduğunu ve genelde yazı saklamak için kullanıldığını bilmeniz yeterlidir. void türü ise yine işaretçiler ve fonksiyonlarla ilgili bir veri türü. Bu türü de yeri geldiği zaman daha uzun tartışacağız.

Soyut Veri Türleri[değiştir]

Soyut veri türleri bu bölümde anlattığımız temel türlerden olan verileri organize etmek için kullanılan yapılardır. Basit bir örnek olarak matrisleri düşünebiliriz. Bir matris, soyut bir veri türüdür: sayıları (ki bunlar temel veri türüdür) satır ve sütunlar halinde organize eder. (Eğer matris örneği size yabancıysa bir lineer cebir kitabından tanımını ve genel olarak kullanımını öğrenebilirsiniz.)

Bu bölümde birçok veri türünü yüzeysel olarak tanımladık. Hepsini art arda sıralamak yerine kullanım alanlarını gördükçe veri türlerini daha detaylı inceleyeceğiz.

Şimdi dilerseniz bir kaç örnek programla temel veri türleri ve değişkenlerle ilgili öğrendiklerimizi pekiştirelim. İlk programımız bir dairenin alanını hesaplıyor;

 #include <stdio.h>
 #include <math.h>
 
 int main() {
     double R;
     double alan;
     printf("Dairenin yarıçapını giriniz: ");
     scanf("%lf",&R);
     alan= MATH_PI * R * R;
     printf("Dairenin alanı= %f\n", alan);
     return 0;
 }

Değişkenler ve Aritmetik · Koşullar ve Döngüler