Cevap : C dersleri
Bu program, tek bir deger dondurmenin kolay oldugunu gosteriyor. Fakat, 
birden fazla deger dondurmek icin, baska metodlara gerek oldugunu 
hatirlamanizda fayda var. 
ana programda, iki tane tamsayi degiskeni tanimliyoruz, ve 8 kere islenen 
bir "for" dongusu baslatiyoruz. Dongudeki ilk satir, "y = squ(x);", yeni 
ve tuhaf gorunuslu bir satir. Onceki programlarda gordugumuz gibi, squ(x) 
kisimi, squ isimli fonksiyonu, x parametresi ile cagirmaktadir. Fonksiyona 
baktigimizda, bu gecen degiskenin orada `in` isminde oldugunu, ve kare 
ismindeki yerel degiskene, gecirdigimiz degerin karesinin atandigini 
goruyoruz. Daha sonra, yeni "return" komutunu goruyoruz. Parantezler 
icindeki bu deger, fonksiyonun kendisine atanir, ve ana programa bu deger 
dondurulur. Yani, "squ(x)" fonksiyonu, x in karesine atanir, ve bu deger, 
ana programa atanir. Ornegin, x in degeri 4 ise, y nin degeri, "y=squ(x)" 
satirindan sonra 16 olacaktir. 
Bir baska dusunme sekli de, "squ(x)" sozcugunu, "x" in karesi degerinde bir 
degisken olarak dusunmektir. Bu yeni degisken de, degiskenlerin 
kullanildigi herhangi bir yerde kullanilabilir. Baska bir degisken olarak 
gormeye bir ornek olarak bu programda ikinci bir dongu vardir. Burada, 
y degiskenine atamak yerine, printf`in icinde, bu fonksiyonu cagiriyoruz. 
Bir fonksiyondan donecek degiskenin tipi, derleyiciye bildirilmelidir. 
Fakat, bizim yaptigimiz gibi sayet belirtmezsek, derleyici donecek degerin 
tam sayi (integer) olacagini kabul edecektir. Baska tiplerin tanimlanmasini 
ise, bundan sonraki programda gorecegiz.. 
KAYAR NOKTA FONKSIYONLARI 
KAYARKAR.C: 
================================================== = 
float z; /* Bu bir global degiskendir */ 
main() 
{ 
int index; 
float x,y,sqr(),glsqr(); 
for (index = 0;index <= 7;index++){ 
x = index; /* int`i float yapalim */ 
y = sqr(x); /* x`in karesini alalim.. */ 
printf("%d in karesi %10.4f dir.n",index,y); 
} 
for (index = 0; index <= 7;index++) { 
z = index; 
y = glsqr(); 
printf("%d in karesi %10.4f dir.n",index,y); 
} 
} 
float sqr(deger) /* float`in karesini al, float dondur. */ 
float deger; 
{ 
float karesi; 
karesi = deger * deger; 
return(karesi); 
} 
float glsqr() /* float`in karesini al, float dondur. */ 
{ 
return(z*z); 
} 
================================================== == 
KAYARKAR.C isimli programa bir bakin. Ilk once daha sonra kullanacagimiz 
bir global degisken tanimlamak ile basliyor. Programin "main" kisiminda, 
bir tamsayi degiskeni tanimlaniyor. Bunun altinda, iki tani tamsayi 
degiskeni, iki tane de tuhaf gorunuslu tanimlamalar var. "sqr()" ve 
"glsqr()" isimli iki fonksiyon gibi gorunuyorlar, ve oyleler. Bu, C 
dilinde "int" yani tamsayi dan baska birsey dondurecek bir fonksiyonun 
(float mesela) resmi sekilde tanimlanmasidir. Bu derleyiciye, bu iki 
fonksiyondan bir deger donunce, bu degerin float olacagini bildiriyor. 
Simdi programin ortasinda yer alan "sqr" fonksiyonuna bir bakin. Burada 
fonksiyonun isminin basinda bir "float" sozcugu goreceksiniz. Bu 
derleyiciye herhangi bir yerden bu fonksiyon cagirilinca, donecek degerin 
float olacagini bildiriyor. Simdi bu fonksiyon, ana programdaki cagirma 
ile uyumludur. Bunun altinda, "float deger" satirini goruyorsunuz. Bu da, 
bu fonksiyona, cagiran tarafindan gecirilecek degerin, bir "float" yani 
kayar nokta olacagini bildirir. 
Bundan sonraki fonksiyon "glsqr" da, bir kayar nokta donduruyor, fakat o, 
input icin global bir degikeni (z degiskenini) kullaniyor. Ayrica, yeni 
bir degisken tanimlamadan, karesini almayi "return" komutunun icinde 
yapiyor. 
DEGISKENLERIN ALANI 
ALAN.C: 
================================================== = 
int say; /* Bu bir global degiskendir. */ 
main() 
{ 
register int index; /* Bu degisken sadece "main" icinde kullanilabilir */ 
baslik_1(); 
baslik_2(); 
baslik_3(); 
/* bu programin ana "for" dongusu */ 
for (index = 8;index > 0;index--) 
{ 
int birsey; /* Bu degisken sadece bu kume isaretleri arasinda tanimli */ 
for (birsey = 0;birsey <= 6;birsey++) 
printf("%d ",birsey); 
printf(" index simdi: %d oldu.n",index); 
} 
} 
int sayac; /* Bu degisken bu noktadan sonra kullanilabilir. */ 
baslik_1() 
{ 
int index; /* Bu degisken sadece baslik_1 icinde tanimli */ 
index = 23; 
printf("Baslik_1 deki degeri %dn",index); 
} 
baslik_2() 
{ 
int say; /* Bu degisken sadece baslik_2 icinde gecerli */ 
/* ayni isimli global degiskenin yerini alir.. */ 
say = 53; 
printf("Baslik_2 deki degeri %dn",say); 
sayac = 77; 
} 
baslik_3() 
{ 
printf("Baslik_3 deki degeri ise %dn",sayac); 
} 
================================================== 
Ilk tanimlanan degisken "say", butun fonksiyonlardan once tanimlandigi 
icin, herhangi biri tarafindan cagirilabilir, ve daima erisilebilir. Daha 
sonra, "sayac" isimli bir degisken tanimliyoruz. Bu da global bir 
degiskendir, fakat ana programdan sonra tanimlandigi icin, ana program 
tarafindan kullanilamaz. Global bir degisken, fonksiyonlarin disinda 
tanimlanan degiskenlere denir. Bu tip degiskenlere dissal degiskenler adi 
da verilebilir. 
Ana programa geri donerek, "index" isimli degiskenin tanimina bakalim. Su 
an icin "register" sozcugunu goz onune almayin. Bu degisken "otomatik" bir 
degiskendir, yani o fonksiyon cagirildiginda olusur, ve fonksiyondan 
cikinca kaybolur. Ana program baska fonksiyonlari cagirdiginda bile daima 
calisir oldugundan, burada pek manasi yoktur. Tanimlanan diger bir 
degisken de, "birsey" degiskenidir. Bu degisken, sadece "for" dongusunun 
icinde tanimlidir, ve baska bir yerden erisilemez. Herhangi bir kume 
dongusunun basina, degisken tanimlamalari konulabilir. Kumeden cikinca, bu 
degisken tanimsiz olacaktir. 
OTOMATIK DEGISKENLER HAKKINDA... 
Baslik_1`e bir bakin. "index" isimli bir degisken kullaniyor. Bu 
degiskenin ana programdaki "index" ile arasinda, ikisinin de otomatik 
degisken olmasi disinda hicbir bag yoktur. Program, bu fonksiyonu 
islemezken, bu degisken yoktur bile. Baslik_1 cagirildiginda, bu degisken 
yaratilir, ve baslik_1 bitince de bu degisken silinir. Fakat bu, ana 
programdaki ayni isimli degiskenin degerini hic etkilemez, cunku ayri 
nesnelerdir. 
Yani otomatik degiskenler, gerektiginde yaratilirlar, ve isleri bitince de 
silinirler. Hatirlamaniz gereken bir nokta da, bir fonksiyon birden fazla 
kere cagirildiginda, otomatik degiskenlerin eski degerleri saklanmaz, yeni 
bastan deger atanmalari gerekir. 
STATIK DEGISKENLER ? 
Bir baska degisken tipi ise, statik degiskenlerdir. Degiskeni tanimlarken 
basina "static" sozcugunu koyarak, o degisken yada degiskenler, 
fonksiyonun tekrar tekrar cagirilmasinda, eski degerlerini tutarlar. 
Ayni sozcugu bir global degiskenin onune koyarak, o degiskenin sadece o 
kutuk icindeki fonksiyonlara tanimli olmasini saglayabiliriz. Bundanda 
anlayacaginiz gibi, birkac parcadan olusan kutukler arasinda global 
degiskenlerin tanimlanmasi mumkundur. Bunu 14. konuda daha iyi gorecegiz. 
AYNI ISMI TEKRAR KULLANMAK 
baslik_2 ye bir bakin. Burada "say" isimli degiskenin tekrar 
tanimlandigini ve 53 degerini aldigini goruyoruz. Global olarak 
tanimlanmasina karsin, ayni isimde bir otomatik degisken tanimlamak 
mumkundur. Bu degisken tumuyle yeni bir degiskendir, ve global olarak, 
programin basinda tanimlanan "say" ile arasinda hicbir baglanti yoktur. Bu 
sayede kafanizda "acaba global isimlerle karisirmi" sorusu olmadan 
fonksiyon yazabilirsiniz. 
REGISTER DEGISKENLERI NEDIR 
Sozumu tutarak, register degiskenine donelim. Bir bilgisayar bilgiyi 
hafizada yada registerlerde tutabilir. Register sahasina erisim, hafizaya 
erisimden cok daha hizlidir, fakat programcinin kullanabilecegi az sayida 
register vardir. Bazi degiskenlerin program tarafindan cok kullanilacagini 
dusunuyorsaniz, o degiskeni "register" olarak tanimlayabilirsiniz. 
Bilgisayar ve derleyici tipinize gore, bir yada birkac degiskeni bu 
sekilde tanimlayabilirsiniz. Cogu derleyicilerin hic register degiskenleri 
yoktur, ve "register" sozcugunu goz onune almadan derleme yaparlar. 
Register degiskenleri, sadece tamsayi ve karakter tipi degiskenler ile 
kullanilabilir. Sectiginiz derleyiciye gore, unsigned, long yada short 
tipleride register olabilir. 
DEGISKENLERI NEREDE TANIMLAYALIM 
Bir fonksiyona parametre olarak gecirilmis degiskenler varsa, bunlarin 
tanimi, fonksiyon isminden sonra, ve acik kume isaretinden once 
yapilmalidir. Fonksiyonda kullanilan diger degiskenler ise, fonksiyonun 
basinda, hemen acik kume isaretinden sonra tanimlanir. 
STANDART FONKSIYON KUTUPHANESI 
Her derleyici, icinde bircok fonksiyon olan bir kutuphane ile birlikte 
gelir. Bunlar genellikle giris/cikis islemleri, karakter ve katar isleme, 
ve matemetiksel fonksiyonlari icerir. Bunlarin cogunu sonraki konularda 
gorecegiz. 
Bunun disinda, cogu derleyicinin, standart olmayan, ve kullandiginiz 
bilgisayarin ozelliklerini kullanan, ilave fonksiyonlari vardir. Ornegin, 
IBM-PC ve uyumlular icin, BIOS servislerini kullanan fonksiyonlar 
sayesinde, isletim sistemine komutlar vermeyi, yada ekrana direk yazmayi 
saglayan fonksiyonlar olabilir. 
RECURSION NEDIR ? 
RECURS.C: 
================================================== == 
main() 
{ 
int index; 
index = 8; 
geri_say(index); 
} 
geri_say(rakam) 
int rakam; 
{ 
rakam--; 
printf("rakam degeri %d dir.n",rakam); 
if (rakam > 0) 
geri_say(rakam); 
printf("Simdi rakam %d oldu..n",rakam); 
} 
================================================== = 
Recursion, ilk karsilasildiginda cok korkutucu gorunen bir kavramdir. 
Fakat RECURS.C isimli programa bakarsaniz, recursion`un butun zorlugunu 
yenebiliriz. Aslinda fazla basit ve dolayisi ile aptal olan bu program, 
bize recursion`un kullanimini gostermesi bakimindan cok yararlidir. 
Recursion, kendini cagiran bir fonksiyondan baska birsey degildir. Yani, 
bitmek icin bir kontrol mekanizmasina ihtiyaci olan bir dongudur. 
Karsinizdaki programda "index" degiskeni 8 e atanir, ve "geri_say" 
fonksiyonunun parametresi olarak kullanilir. Bu fonksiyon da, bu 
degiskenin degerini teker teker azaltir, ve bize bu degeri gosterir. Sonra 
tekrar kendisini cagirir, degeri bir kez daha azalir, tekrar, tekrar.. 
Sonunda deger sifira ulasir, ve dongu artik kendini cagirmaz. Bunun 
yerine, daha onceki cagirmada kaldigi yere geri doner, tekrar geri doner, 
en sonunda ana programa geri doner, ve program sona erer. 
NE OLDU ? 
Fonksiyon kendisini cagirdiginda, butun degiskenlerini,ve cagirilan 
fonksiyonun islemesi bittiginde donmesi gereken yeri hafizaya sakladi. 
Bir dahaki sefere kendinin tekrar cagirdiginda, yine ayni seyi yapti, ta 
ki kendisini tekrar cagirmasi bitene kadar. Daha sonra tekrar bu 
bilgileri, ayni koyus sirasi ile geri okudu. 
Hatirlamaniz gereken nokta, recursion`un bir noktada bitmesi gerektigidir, 
sayet sonsuz bir donguye girerseniz, bilgisayarin hafizasi bitecek ve bir 
hata mesaji cikacaktir. 
ODEVLER 
1. Daha once yazdigimiz Santigrad`dan Fahrenheit`a karsilik tablosundaki 
derece hesaplamasini bir fonksiyona geciriniz. 
2. Ekrana isminizi 10 kere yazan bir program yaziniz. Yazma isini yapmak 
icin bir fonksiyon cagiriniz. Daha sonra bu fonksiyonu main() in basina 
alarak, derleyicinin bunu kabul edip etmedigini kontrol ediniz. 
c++ dersleri 5.bölüm 
C Dili - 6. Konu 
================================================== 
#define BASLA 0 /* Dongunun baslangic noktasi */ 
#define BITIR 9 /* Dongunun bitis noktasi */ 
#define MAX(A,B) ((A)>(B)?(A) B)) /* Max makro tanimlanmasi */ 
#define MIN(A,B) ((A)>(B)?(B) A)) /* Min makro tanimlanmasi */ 
main() 
{ 
int index,mn,mx; 
int sayac = 5; 
for (index = BASLA;index <= BITIR;index++) { 
mx = MAX(index,sayac); 
mn = MIN(index,sayac); 
printf("Max simdi %d ve min de %d ..n",mx,mn); 
} 
} 
================================================== 
Bu programda, ilk defa define lara ve makrolarla tanisacaksiniz. Ilk dort 
satirdaki "#define" sozcuklerine dikkat edin. Butun makrolar ve define`lar 
bu sekilde baslar. Derleme baslamadan, on-derleyici (preprocessor) bu 
tanimlari alir, ve programda bu sembolleri gercek degerleri ile 
degistirir. Ornegin, BASLA sembolunu heryerde sifir ile degistirir. 
Derleyicinin kendisi, bu BASLA yada BITIR sembollerini gormez bile. 
Boyle ufak bir programda bu sekilde semboller tanimlamak luzumsuzdur, 
fakat ikibin satirlik bir programda, yirmiyedi yerde BASLA olsa idi, 
sayede #define`i degistirmek, programdaki rakamlari degistirmekten daha 
kolay olurdu. 
Ayni sekilde on-derleyici, BITIS sembolu gordugu heryere 9 rakamini 
koyar. 
C de alisilmis bir teknik de, BASLA yada BITIR gibi sembolik sabitlerin 
buyuk harfle, ve degisken isimlerinin de kucuk harfle yazilmasidir. 
MAKRO NEDIR ? 
Makro, bir #define satirindan baska birsey degildir. Fakat icinde islemler 
yapabildigi icin, ona ozel bir isim verilmistir. Ornegin ucuncu satirda, 
iki rakamin hangisi buyukse onu donduren MAX isimli bir makro 
tanimliyoruz. Bundan sonra on-derleyici ne zaman MAX termini ve arkasindan 
parantezi gorurse, bu parantezlerin arasinda iki tane deger bulacagini 
farz eder, ve tanimda bulunan deyimi, buraya koyar. Ornegin, onikinci 
satira gelindiginde, "A" yerine "index" ve "B" yerine de "sayac" konur. 
Ayni sekilde "MIN" isimli makro da kendisine gecirilen iki rakamin 
hangisi daha kucukse, o degeri dondurur. 
Bu makrolarda bir suru fazlalik parantez goreceksiniz. Bunlarin nedeni, 
bir sonraki programda anlasilacak.. 
YALNIS BIR MAKRO 
================================================== = 
#define HATALI(A) A*A*A /* Kup icin hatali makro */ 
#define KUP(A) (A)*(A)*(A) /* Dogusu ... */ 
#define KARE(A) (A)*(A) /* Karesi icin dogru makro */ 
#define START 1 
#define STOP 9 
main() 
{ 
int i,offset; 
offset = 5; 
for (i = START;i <= STOP;i++) { 
printf("%3d in karesi %4d dir, ve kubu ise %6d dir..n", 
i+offset,KARE(i+offset),KUP(i+offset)); 
printf("%3d in HATALIsi ise %6d dir.n",i+offset,HATALI(i+offset)); 
} 
} 
================================================== = 
Ilk satira baktiginiza, HATALI isimli makronun bir rakamin kubunu 
aldigini goruyoruz. Gercektende, bu makro bazen dogru calismaktadir. 
Programin kendisinde,i+offset `in KUP unun hesaplandigi yeri 
inceleyelim. Sayet i 1 ise, offset de 5 olduguna gore, 1+5 = 6 olacaktir. 
KUP isimli makroyu kullanirken, degerler: 
(1+5)*(1+5)*(1+5) = 6*6*6 = 216 
olacaktir. Halbuki, HATALI yi kullanirsak, carpmanin onceligi, toplamadan 
fazla oldugundan, degerleri: 
1+5*1+5*1+5 = 1+5+5+5 = 16 
seklinde buluyoruz. Yani, parantezler, degiskenleri dogru bir sekilde 
birbirinden ayrimak icin gereklidir. 
Programin gerisi basittir, ve sizin incelemenize birakilmistir.. 
ODEV: 
1. 7 den -5 e dogru sayan bir program yaziniz. 
--------------------------------------------------------------------------
KELIME KATARI (STRING) NEDIR? 
Bir katar, genellikle harflerden olusan karakterler dizisidir. Ciktinizin 
guzel ve manali gorunmesi icin, icinde isimler ve adresler olabilmesi 
icin, programlarinizin katarlar kullanmasi sarttir. C dilinde tam tanimi, 
"char" tipi bilgilerin, NULL karakter (yani sifir) ile sonlandirilmasidir. 
C bir katari karsilastiracagi, kopyalayacagi yada ekrana yansitacagi 
zaman, bunlari gerceklestiren fonksiyonlar, NULL gorunene dek bu islemi 
yapmak uzere programlanmistir. 
ARRAY (dizi) NEDIR? 
dizi, ayni tip verilerin birbiri arkasina tanimlanmasidir. Kelime katari, 
bir cins dizidir. 
CHRSTRG.C: 
================================================= 
main() 
{ 
char isim[7]; /* Bir karakter dizisi tanimlayalim */ 
isim[0] = `T`; 
isim[1] = `u`; 
isim[2] = `r`; 
isim[3] = `g`; 
isim[4] = `u`; 
isim[5] = `t`; 
isim[6] = 0; /* Bos karakter - katarin sonu */ 
printf("Isim %s dur. n",isim); 
printf("Icinden bir karakter: %cn",isim[2]); 
printf("Ismin bir parcasi: %s n",&isim[3]); 
} 
================================================== 
Bu programda, ilk once, "char" tipi bir tanimlama goruyoruz. Koseli 
parantezler icinde, kac hanelik bir dizi tanimlanacagini belirtiyoruz. C 
dilinde butun diziler sifirdan basladigi icin, bu tanimlama ile 
kullanabilecegimiz en yuksek index degeri 6 dir. 
KATAR NASIL KULLANILIR 
Demek ki, "isim" degiskeni, icinde 7 tane karakter tutabilir. Fakat en son 
karakterin sifir olmasi zorunlugu oldugu icin, kullanilabilecek olan alan 
6 karakterliktir. Bu katarin icine manali birsey yuklemek icin, yedi tane 
komut veriyoruz - her biri, katara bir karakter atamaktadir. En sonunda 
da, katarin sonunu belirten sifir rakamini koyuyoruz. (Bir "#define" ile 
NULL karakteri, programin basinda sifir olarak tanimlayabiliriz.) 
printf komutundaki %s isareti, printf`e "isim" isimli katardan, sifira 
rastlayincaya kadar ekrana yazmasini belirtir. Dikkat etmeniz gereken bir 
nokta, "isim" degiskeninin indexinin yazilmasinin gerekmedigidir. 
KATARIN BIR KISMININ YAZILMASI 
Ikinci printf komutu ise %c ile, katarin icinden sadece bir karakter 
(harf) yazilmasini gosterir. Istedigimiz karakterin index numarasini da, 
"isim" degiskeninin yanina, koseli parantezler arasinda gosterebiliriz. 
Son printf komutunda ise, katarin 4. karakterinden itibaren yazmanin bir 
ornegidir. "isim" degiskeninin onundeki & (ampersand) isareti, isim[3]`un 
hafizada saklandigi adresin printf`e gecirilmesini belirtir. Adresleri 8. 
konuda gorecegiz, fakat ufak bir ornek ile size bizleri nelerin 
bekledigini gostermek istedim. 
BAZI KATAR FONKSIYONLARI 
KATAR.C 
================================================ 
main() 
{ 
char isim1[12],isim2[12],karisik[25]; 
char baslik[20]; 
strcpy(isim1,"Rosalinda"); 
strcpy(isim2,"Zeke"); 
strcpy(baslik,"Bu bir basliktir."); 
printf(" %snn",baslik); 
printf("isim 1: %s n",isim1); 
printf("isim 2: %s n",isim2); 
if(strcmp(isim1,isim2)>0) /* sayet isim1 > isim2 ise, 1 dondurur */ 
strcpy(karisik,isim1); 
else 
strcpy(karisik,isim2); 
printf("Alfabetik olarak en buyuk isim %s dir.n",karisik); 
strcpy(karisik,isim1); 
strcat(karisik," "); 
strcat(karisik,isim2); 
printf("Iki isim birden %sn",karisik); 
} 
================================================= 
Ilk once 4 tane katar tanimliyoruz. Daha sonra, "strcpy" isimli cok pratik 
bir fonksiyona geliyoruz. Yaptigi is, bir katari, bir digerine, ta ki 
sifir bulunana kadar kopyalamak. Hangi katarin hangisine kopyalancagini 
hatirlamak icin, bir atama komutunu dusunun ("x=23" gibi). Veri, 
sagdakinden, soldakine kopyalanir. Bu komutun yapilmasindan sonra, isim1 
in icinde, "Rosalinda" olacaktir - den-densiz olarak. Den-denler, 
derleyicinin sizin bir katar tanimladiginizi anlamasi icin gereklidir. 
KATARLARIN ALFABETIK OLARAK SIRAYA KONMASI 
Ilginizi cekebilecek diger bir fonksiyonda, "strcmp" dur. Sayet kendisine 
gecirilen birinci katar ikinciden daha buyukse, 1 dondurur, ayni ise 0, ve 
ikinci daha buyukse -1 dondurur. "Zeke" katarinin kazanmasi, sizi herhalde 
sasirtmaz. Burada katarin boyu onemli degildir, sadece icindeki 
karakterler. Ayrica harflerin buyuk yada kucuk harf olmasi da fark 
ettirir. C de bir katarin butun harflerini kucuk yada buyuge ceviren 
fonksiyonlar da vardir. Bunlari daha ileri kullanacagiz. 
KATARLARI BIRBIRINE EKLEMEK 
En son satirda, "strcat" isimli yeni bir fonksiyon goreceksiniz. Gorevi, 
bir katarin sonuna diger katari eklemektir. Bunu yaparken NULL karakterin 
de yerli yerinde olmasini saglar. Burada, "isim1", "karisik" `a 
kopyalanir, daha sonra "karisik" a iki bosluk ve "isim2" eklenir. 
Katarlar zor degildir, ve son derece faydalidirlar. Onlari kullanmayi 
iyice ogrenmenizde fayda vardir. 
BIR TAMSAYI DIZISI 
INTDIZIN.C: 
================================================ 
main() 
{ 
int degerler[12]; 
int index; 
for (index = 0;index < 12;index++) 
degerler[index] = 2 * (index + 4); 
for (index = 0;index < 12;index++) 
printf("Index = %2d deki degeri %3d dir..n",index,degerler[index]); 
} 
=============================================== 
Bu programda, bir tamsayi dizisi tanimliyoruz. Gordugunuz gibi, ayni katar 
tanimlama gibi.. Bu sayede, index degiskeni haric oniki tane degiskenimiz 
oluyor. Bu degiskenlerin isimleri "degerler[0]" , "degerler[1]" ,vs. dir. 
Ilk "for" dongusunde, bunlara deger atiyoruz, ikincisi ise, index 
degiskeni ve "degerler" dizisinin icindekileri ekrana yaziyor. 
BIR KAYAR NOKTA DIZINI 
BUYUKDIZ.C: 
================================================= 
char isim1[] = "Birinci Program basligi"; 
main() 
{ 
int index; 
int ivir[12]; 
float tuhaf[12]; 
static char isim2[] = "Ikinci Program Basligi"; 
for (index = 0;index < 12;index++) { 
ivir[index] = index + 10; 
tuhaf[index] = 12.0 * (index + 7); 
} 
printf("%sn",isim1); 
printf("%snn",isim2); 
for (index = 0;index < 12;index++) 
printf("%5d %5d %10.3fn",index,ivir[index],tuhaf[index]); 
} 
================================================ 
Burada, "float" olarak tanimli bir kayar nokta dizisi goruyorsunuz. 
Ayrica bu program, katarlara nasil baslangic degeri atanabilecegini 
gosteriyor. Koseli parantezlerin icini bos birakarak, derleyicinin o 
veriyi saklamak icin yeteri kadar yer ayarlamasini sagladik. Programin 
icinde, bir katar daha ilk degerini veriyoruz. Burada onune "static" 
koymak zorunlugumuz var. Baska yeni birsey yok bu programda. Degiskenler 
rastgele degerlere atanir, ve sonra da bu degerler ekrana yazdirilir. 
BIR FONKSIYONDAN DEGER DONDURME 
GERIDOND.C: 
================================================= 
main() 
{ 
int index; 
int matrix[20]; 
for (index = 0;index < 20;index++) /* veriyi uretelim */ 
matrix[index] = index + 1; 
for (index = 0;index < 5;index++) /* orjinal veriyi, ekrana. */ 
printf("Baslangic matrix[%d] = %dn",index,matrix[index]); 
yapbirsey(matrix); /* fonksiyona gidip, deger degistirme */ 
for (index = 0;index < 5;index++) /* degismis matrix i yazalim */ 
printf("Geri donen matrix[%d] = %dn",index,matrix[index]); 
} 
yapbirsey(list) /* Veri donusunu gosterir */ 
int list[]; 
{ 
int i; 
for (i = 0;i < 5;i++) /* print original matrix */ 
printf("Onceki matrix[%d] = %dn",i,list); 
for (i = 0;i < 20;i++) /* add 10 to all values */ 
list += 10; 
for (i = 0;i < 5;i++) /* print modified matrix */ 
printf("Sonraki matrix[%d] = %dn",i,list); 
} 
================================================== 
Bir fonksiyondan deger dondurmenin bir yolu da, diziler kullanmaktir. 
Buradam 20 hanelik bir dizi tanimladiktan sonra, icine degerler atiyoruz, 
bu degerlerin ilk besini ekrana yazdiktan sonra, "yapbirsey" isimli 
fonksiyona atliyoruz. Burada goreceginiz gibi, bu fonksiyon "matrix" 
isimli diziye "list" demeyi tercih ediyor. Fonksiyona, ne cins bir dizi 
gececegini bildirmek icin, "int" olarak "list"i tanimliyoruz. Fonksiyona 
kac elemanlik bir dizi gecegini soylememize luzum yok, fakat istenirse 
belirtilebilir. Bu nedenle bos koseli parantezler kullaniyoruz. 
Bu fonksiyon da, kendisine gecen degerleri gosterdikten sonra, bu 
degerlere 10 ekliyor, ve yeni degerleri gosterip, ana programa geri 
donuyor. Ana programda goruyoruz ki, fonksiyonun yaptigi degisiklikler, 
"matrix" degerlerini de degistirmis. 
Dizilerin, normal degiskenlerin aksine, fonksiyondaki degerleri degisince, 
cagiran programdaki dizinin degerlerinin degismesini garipsiyebilirsiniz. 
Pointerlar konusuna gelince butun bunlar daha manali olacaktir. 
BIRDEN FAZLA BOYUTLU DIZILER 
COKLUDIZ.C:
__________________