C Programlamada Diziler

Diziler
Bu bölümde 10 rastgele sayı üretip bunları sıralayan bir C programı oluşturulacaktır. Bunu yapabilmek için dizi olarak isimlendirilen yeni bir değişken düzeni incelenecektir. Diziler kullanıldığında aynı tipteki değerler kümesi ile çalışma ve tanımlama imkanı doğmaktadır. Örneğin 5 integer sayıdan oluşan bir küme oluşturulmak istensin. Bu sayılar tanımlamak için direkt olarak;

int a, b, c, d, e;
şeklinde tanımlanabilir. Yukarıdaki gösterimin herhangi bir yanlışlığı yoktur. Ancak değişken sayısı arttığında yukarıdaki gibi bir ifade çok anlamsız olacaktır. 5 integer sayıyı tanımlamanın daha kolay bir yolu :

int a[5];

C Programlamada Diziler

şeklinde olacaktır. Yukarıdaki dizinin içerisinde birbirinden farklı 5 integer sayı tanımlanmıştır. Bu sayılara indeks numaralarıyla ulaşılabilir. İndeks sayısı 0′ dan başlar.

int a[5];

a[0] = 12;

a[1] = 9;

a[2] = 14;

a[3] = 5;

a[4] = 1;

Dizi indekslemeyle ilgili en güzel özelliklerden biri de indeksi değiştirmek için döngülerin kullanılabilmesidir. Örneğin aşağıdaki program kodu dizideki tüm değerleri sıfırlar

int a[5];

int i;

for (i=0; i<5; i++)

a[i] = 0;

Aşağıdaki kod ise dizinin tüm değerlerini sıralı olarak initalize eder ve sonra çıktısını alır.

#include

int main()

{

int a[5];

int i;

for (i=0; i<5; i++)

a[i] = i;

for (i=0; i<5; i++)

printf(“a[%d] = %d\n”, i, a[i]);

}

Diziler C programlamada herzaman kullanılırlar. Dizilerin kullanımını daha iyi anlamak için aşağıdaki örnek incelenebilir.

#include

#define MAX 10

int a[MAX];

int rand_seed=10;

/* from K&R

– returns random number between 0 and 32767.*/

int rand()

{

rand_seed = rand_seed * 1103515245 +12345;

return (unsigned int)(rand_seed / 65536) % 32768;

}

int main()

{

int i,t,x,y;

/* fill array */

for (i=0; i < MAX; i++) { a[i]=rand(); printf("%d\n",a[i]); } /* more stuff will go here in a minute */ return 0; } Yukarıdaki kod birçok yeni yapı içermektedir. #define satırı MAX isimli bir sabiti tanımlamakta ve 10 değerini atamaktadır. Sabit isimleri geleneksel olarak daha rahat farkedilebilmeleri için büyük harfle yazılmaktadırlar. int a[MAX] satırı C programlamada integer dizilerin nasıl tanımlandığını göstermektedir. Dizinin tanımlanma yeri dolayısıyla global yapıdadır yani tüm programda geçerlidir. int rand_seed=10 satırı da global bir değişken bildirimi yapmaktadır. Her program başlangıcında 10 değerine initalize eder. Bu değer rastgele sayı kodunun başlangıç kökenidir. int rand() ise bir fonksiyon bildirimidir. rand fonksiyonu parametre kabul etmez ve geri dönüş değeri integerdir. Bu fonksiyon hakkında detaylı bilgi daha sonra anlatılacaktır. more stuff bölümüne aşağıdaki kod yazılacak olursa /* bubble sort the array */ for (x=0; x < MAX-1; x++) for (y=0; y < MAX-x-1; y++) if (a[y] > a[y+1])

{

t=a[y];

a[y]=a[y+1];

a[y+1]=t;

}

/* print sorted array */

printf(“——————–\n”);

for (i=0; i < MAX; i++) printf("%d\n",a[i]); Yukarıdaki kod rastgele sayıları sınıflar ve belli bir sırada çıktılarını alır. Program her çalıştığında aynı değerleri alacaksınız. Eğer sıralanan sayıları değiştirmek istiyorsanız rand_seed değerini program her çalıştığında değiştirin. Yukarıdaki kodu anlamanın en iyi yolu onu elle yazıp çalıştırmaktır. Diziler Hakkında Daha Fazla Bilgi Değişken Tipleri C programlamada 3 standart değişken tipi vardır : - Integer : int - Floating point : float - Character : char int 4 byte' lık bir integer değeridir. float 4 byte' lık bir floating point değeridir. Char ise 1 byte' lık bir tekil karekterdir ( a veya 3 gibi ) Aşağıda bazı türetilmiş tipler görülmektedir : double : 8 byte uzunluğunda floating point değeri short : 2 byte uzunluğunda integer değeri unsigned short veya unsigned int : pozitif integer değeri Operatörler ve Operatör Öncelikleri C programlamda kullanılan operatörler birçok dildeki ile aynıdır + : toplama - : çıkarma / : Bölme * : Çarpma % : Mod / Operatörü eğer iki değerde integerse integer cinsinden bölüm yapmakta diğer durumlarda ise floating point bölmesi gerçekleştirmektedir. Örneğin : void main() { float a; a=10/3; printf("%f\n",a); } a float tipinde belirtildiği için floating point değeri olarak çıktı almasına rağmen bir integer bölmesi gerçekleşeceğinden sonuç 3.0 olacaktır. Operatör Öncelikleri C' de bu konuda diğer birçok programlama dilleriyle aynı özellikleri taşımaktadırlar. Çarpma ve bölme birincil önceliğe sahiptir. daha sonra toplama ve çıkarma gelmektedir. Bu yüzden 5+3*4 işleminin sonucu 32 yerine 17 olacaktır. Bu öncelik sırasını değiştirmek için parantezler kullanılabilir. Örneğin (5+3)*4 şeklinde yazılacak ifadenin sonucu 32 olacaktır. C tür dönüşümüne izin vermektedir. Bu özellikler işaretçiler kullanıldığında yapılır. Örneğin yukarıdaki örnekte integer değer otomatik olarak float' a çevrilmiştir. Tür değişimi için çevrilmek istenilen tür ismi değiştirilmek istenilen değerden önce parantez içinde yazılmalıdır. Örneğin a =10/3 ifadesi a = ( float ) 10/3 şeklinde yazıldığında işlem sonucu 3.33333 olacaktır. Typedef Yeni bir tür tanımlanacağı zaman typedef ifadesi kullanılır : #define TRUE 1 #define FALSE 0 typedef int boolean; void main() { boolean b; b=FALSE; blah blah blah } Yukarıdaki ifade C programında Boolean tipinin tanımlanmasını sağlar. Eğer gerçek sayılar için float ismini beğenmiyorsanızı bunu aşağıdaki gibi değiştirebilirsiniz : typedef float real; Struct C içindeki yapılar değişkenleri paketler halinde gruplamaya izin verir struct rec { int a,b,c; float d,e,f; }; struct rec r; Yukarıda gösterildiği gibi rec tipinin bildirilmesi için struct rec denilmelidir. Bu isimde kolay unutulabilir bir yapıdadır. Özellikle büyük bir program oluştururken sorun yaratabilir. Bu koda aşağıdaki şekle sıkıştırılabilir : struct rec { int a,b,c; float d,e,f; } r; rec için tip bildirimi ve r değişkeninin bildirimi aynı yapı içinde yapılmıştır veya bunun yerine yapı ismi için yeni bir tip tanımlanabilir. Örneğin her seferinde struct rec r denilmek istenmiyorsa ; typedef struct rec rec_type; şeklinde tanımlama yaparak bu tipin bildiriminde sadece rec_type r; kullanılabilir. Arttırma i = i+1; ( uzun yol ) / i++;( kısayol ) i = i-1;( uzun yol ) / i--;( kısayol ) i = i+3;( uzun yol ) / i +=3;( kısayol ) i = i*j;( uzun yol ) / i *= j;( kısayol )

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir