C'ye buradan başlayalım!

Ubuntu Türkiye Wiki sitesinden
Gezinti kısmına atla Arama kısmına atla

Öncelikle neden C?

Çünkü;

  • C verimlidir; CPU teknolojisinin avantajlarını iyi kulanır, bu yüzden hızlı çalışır.
  • C taşınabilirdir; Yani bir sistemde yazılan program hiç değiştirilmeden veya çok az bir değişiklikle diğer sistemlerde de çalışır.
  • C, güçlü ve esnek bir dildir; Unix işletim sisteminin çoğu C ile yazılmıştır. Birçok derleyici ve çevirici (Fortran, Perl, Python, Pascal, Lisp, Logo, Basic) C ile yazılmıştır.
  • C, Programcı için kullanışlı bir dildir; Donanıma müdahale etmenize olanak verir, hafıza üzerinde tam kontrol sağlar.
  • C++, Java, JavaScript, JavaApplet, PHP, C#... gibi diller C dilinden esinlenmiştir.
  • Dezavantajı yok mudur bu dilin?


Olmaz mı! Bazı programların yanlışlarını bulmak neredeyse imkânsızdır (hele de pointer ile yazılanları), bu konuda yarışmalar düzenlenmektedir. Bir diğer dezavantajı giriş çıkışlar yetersizdir.(I/Q)Dosya sistemleri için hiç bir operatör yapı yoktur ancak kütuphane fonksiyonları ile dosya işlemleri yapılabilmesidir. Bir üst başlıkta donanıma ve hafızaya müdahale edilebilir demiştik. Eğer yanlış bir müdahale olursa olumsuz durum veya durumlarla karşılaşılabilir.

  • Derleme makinalari: C taşınabilir bir dildir demiştik: Unix, Linux, Windows, Machintos. Bu sistemlerde nasıl kullanılır, bakılım:
  • UNIX Systems:Sistemin kendi derleyicisi yok. Genel amaçlı UNIX editörlerinden birini kullanıyoruz. Bunlar: Emacs, Jove, Vi veya X Windows System Text Editor. Sonra dosya uzantısı "falanca.c" (bu "falanca" 'yı da birinden çal... ımmmm alıntıladım :) ) olacak şekilde bir ad vererek kaydediyoruz.
  • Programı Compile etmek için;

cc falanca.c yazmanız yeterli(ymiş) (bunu denemedim). UNIX C compileri cc olarak adlandırılmıştır. UNIX exucutable file olarak "a.out" üretir. Programı çalıştırmak için: a.out yazmamız yeterli. Object kod ise "falanca.o" olarak üretilr.

  • LINUX Systems: LINUX'te C programı yazmak ve çalıştırmak bu işi UNIX'te yapmak gibidir, önemli farkı C Compileri olarak "gcc" kullanırız (esasında çok kolay bir iş-miş).

gcc falanca.c (sesli okusanıza :P) Bura da işi daha da basitleşrirelim.Ubuntu kullananlar için depodan Code::Blocks kurun.Gerisi isim nokta uzantı mesala dosyayı isimlendirdim kaydettim( dnm.c ) gibi.

  • WINDOWS: C Compiler standart paketlerden biri değil, biz yüklemek zorundayız. Zaten birçok firma Windows için C Compiler üretiyor (Linux için de üretiyorlar, merak etmeyin hem de bir sürü hem de Özgür hem de biliyorsunuz zaten :) ) Bu Compiler'ların en önemli özelliği kendi editörlerinin olması (C, C++ için). Bunların menüleri vardır ve bu menülerle programınızı isimlendirmek, kaydetmek, debug yapmak veya bulunduğunuz ortamı terk etmeden Compile etmek ve çalıştırmak imkânlarına sahipsiniz.

Code::Blocks bu derleyiciyi daha doğrusu İDE yi internetten indirin kurun.mantık aynı dosya ismi nokta uzantısı kaydet derle(mesala dnm1.c gibi)

Şimdi basit bir örnekle C'ye başlayalım:

#include <stdio.h>
  int main(void)
  {
  int sayi;
  sayi = 19;
  printf("Ben basit bir ");
  printf("programim.\n");
  printf("Benim favori sayim %d, o cok ozel bir sayidir.\n",sayi);
  return 0;
  }


Şimdi bu program bize ne anlatıyor, amacı nedir? İnceleyelim:

#include<stdio.h>
Bu satır compiler’a stdio.h dosyasındaki bilgileri programa ekle der. stdio.h dosyası standart C paketidir ve klavye ile monitör bilgilerini içerir. Dolayısıyla yazacağınız C Programı, klavyeyi veya monitörü kullanacaksa bu dosyayı yukarıda verilen şekilde programınıza eklemeniz gerekir.

int main(void)

C programı bir ya da daha fazla fonksiyondan oluşur. Yukarıdaki program bir fonksiyondan oluşur: main(), bu fonksiyonun da ismidir. Yukarıdaki örnekte "int" main fonksiyonun integer (tam sayı) döndürdüğünü, sonuç verdiğini belirtir. Parantez içinde kullanılan "void" ise fonksiyonun herhangi bir girişi, argümanı olmadığını belirtir. C programı çalışmaya daima main() fonksiyonu ile başlar. Diğer fonksiyonlara istediğiniz ismi verebilirsiniz, fakat C programı işlemlere daima main() fonksiyonu ile başlar. /* ……. */

C Programı /* başlayarak */ ulaşıncaya kadar yazılmış her şeyi açıklama kabul eder ve compile etmez. Ayrıca; // Bu da bir yorumdur.

{

Fonksiyonun başlangıcını ifade eder, gösterir.

int sayi;

Bu ifade bir değişken tanımladığınızı (sayi) ve bu değişkenin türünün int (tam sayı-integer) olduğunu belirtir.

sayi = 19;

sayi adlı değişkene değer atar. sayi değişkeni şimdi 19 değerini aldı.

printf("Ben basit bir");

"printf()" standart bir C kütüphane fonksiyonudur. Yukarıdaki `işlev` ekrana "Ben basit bir" ifadesini yazar ve kursörü aynı satırda bırakır. printf("programim.\n"); Önceki '''printf()''' fonsiyonunun kaldığı yerden "programim" ifadesini yazar. Sondaki "\n" ifadesi de kursörü yeni bir satıra götürür. printf("Benim favori sayim %d, o cok ozel bir sayidir.\n",sayi);

sayi değerini yazar, bu değer "19" 'dur. Burada kullanılan "%d" komutu sayi değerinin nereye ve hangi formatta yazılacağını belirtir.

return 0;

C programı işlem sonunda kullanıcıya sonucu iletir. Bu C programının standart bir rutinidir.

}

Ve fonksiyonu sonlandırdık. İyi yaptık :P Deklarasyonlar ";" ile son bulur, bu bir C kuralıdır.

İsim Seçimi: Değişkenler için en önemli özellik mantıklı isim kullanmaktır. Kullanılabilen karakterler: Küçük/büyük harfler, sayılar ve underscore (_). İlk karakter bir harf veya undescore olmalıdır. Doğru kullanım: sema_gokyuzu, SeMa19... Yanlış kullanım: %sema, 19gokyuzu, Sema-Gokyuzu. (19 yaşım değildir, gerçekten özel bir sayıdır, neyse :P )

Dakkat etmeniz gereken bir diğer nokta da ilk karakterde 1 ya da 2 underscore olmamalı, bir de C'nin büyük/küçük harf ayırımı olduğunu söylememe gerek yok (ama söyledim).

#include <stdio.h>
int main(void)
{
Durumlar;
fonksiyonlar;
işte herbir şeyler;
return 0;
}


C dilindeki derleyici hataları ve maanaları
Warning:Kod oluşumunu engelleyecek hatalardır.(dikkate alınmalıdır.)
Error:Ciddi hatalardır.Araştırılmalıdır.
Fatal Error:Bu hatalarda derleme gerçekleşmeye bilir.
Syntax Errors: C dilinin kurallarına uymazsanız syntax denilen hataları yaparsınız (konuşma dillerinde gramer hataları gibi)
Semantic Errors: Anlam, mana hatalarıdır. Bir sayının karesi yerine o sayının üçüncü kuvvetini alabilirsiniz örnek olarak. Bu tür hatalar bilgisayar tarafından bulunamazlar. Siz burada devreye giriyorsunuz.

İnt C dilinin temel veri türüdür ve tam sayıları ifade eder. Diğerleri (long, short, unsigned, signed) int türünün farklı şekillerde temsil edilmesini sağlar. char alfabedeki harflerin, bazı işaret ve simgelerin temsil edilmesinde kullanılır. Ek olarak küçük tam sayılar için de kullanılabilir. float, double, long double türleri tam olmayan (kesirli) sayılar için kullanılır.
Burada şuna dikkat edilmesi gerekir değişken türleri C dilinde uzunluktan başka bir şey ifade etmezler.Bellekde her şey 0 vaya 1 dir.
Bu uzunlukların makineden makineye değişmekle beraber genel anlamları şunlardır;
char: bir karakter 1 bayt
short: 1 veya 2 bayt
int: 2 bayt
Gerçek sayılar küçükten büyüğe doğru sırası ile:
float: 4 bayt
double: 8 bayt
long double: 10bayt ( çok hassas hesaplamalarda kullanılır)
Bir de bunların başına unsigned (+) pozitif sayıları veya signed (+,-)poziti ve negatif sayıları belirtmek için derleyiciye bildirilir. unsigned tanımı bir kere yapılırsa hepsinin başına işaretlimi işaretsizmi olduğu belirtilmeli.Eğer hiç bertilmezse derleyici tüm değişkenleri default olarak signed kabul edecektir.
'Değişken tür bildirimleri
int a;
float gelir;
unsigned long int;
signed char;
Not:Float,double,long double başında işeret türleri belirtilmez.
Örnek:
signed double a;(yanlış bildirim başına işaret bildiren yapı gelemez)
double a;(doğru bir bildirimdir)

_Bool türü Boolen aritmetiği için kullanılır (True-False) _Complex ve _Imaginary yenidir ve complex ve imagenery sayılar (sanal ve reel kısımları olan) için kullanılır. Printf() fonksiyonu kullanılarak int değerleri yazdırılabilir. %d format ayarlayıcısı; int değerinin satırda nereye yazılacağını belirtir. Her bir %d değeri kadar değişken (veya int sabiti) printf() fonksiyonu içinde olmalıdır.

Genel kullanımı: Printf("Benim ismim %s, anlamı Gokyuzu./n", isim);

Gerekli değilse long kullanmayın, makinayı yavaşlatıyor.

Char: Harfleri ve sembolleri depolamak için kullanılır. Char aslında bir integer türü olarak depolanır (char integer depolar).

Deklerasyon:

         char sema=‘A’; // doğru kullanım
         char sema= A; // A’yı bir değişken zanneder.
         char sema="A"; // A’yı bir kelime zanneder.

%c kullanır. (%d kullanımı int içindi)

Float: Kesirli sayılar, gerçek sayılar, float ile gösterilir. Float sayıların sonuna f veya F eklerseniz bilgisayar onları float alır ve işlemlerini ona göre yapar: 0.19f
1.9F
Printf() fonksiyonu %f kullanır.

Scanf()

scanf() ve %s bir kelime bütünlüğünü okutmak için kullanılır. Klavyeden girilen değerleri değişik formatlara çevirip değişkenlere atama yapar, saklar. Değişken tanımlamaları için scanf() pointer kullanır. Pointer için & işareti kullınılır. Eğer basit C veri türlerini okutuyorsak & işaretini kullanacağız. #define ISIM deger: Sabitleri program başlamadan tanımlamanıza ve kullanmanıza olanak verir. Sabit tanımlamanın bir başka yolu da const int Ay = 12; // Ay değeri artık 12'dir ve program içerisinde değiştirilemez.

Temel işlem operatörleri:

S = 2*++a; // a değişkenini 1 artırır ve 2 ile çarpıp, sonucu S’ye atar.
S = 2*a++; //a’yı iki ile çarpıp, sonucu S’ye atar ve a değişkenini 1 artırır.
-- azaltma operatörü: --say, say--

Aritmetik işlem operatörleri:

+,Toplama,
-,çıkarma,
*,çarpma, /,bölme, %,mod alma(kalanı bulma) diye beş tane işlem operatörü vardır.

   C dilinde aritmetik operatörlerin kullanımı:

#include<stdio.h>
/*Bu işlem klevyeden alınan iki sayıyı toplar*/
{
  int a,b,d;

 printf("İlk sayınızı girin:\n);
 scanf("%d",&a);

 printf("İkinci sayıızı girin:\n);
 scanf("%d",&b);

  d = a + b;
 printf("İşlemin sonucu:%d'dir",d);

  return 0;
}

C dilinde aritmetik operatörlerin kullanımı moda(%) örnek:

#include<stdio.h>
/*Klavyeden girilen sayının çift mi tekmi olduğunu söyler*/
int main()
{
int a=0,b;

 printf("Bir sayı giriniz tekmi çiftmi olduğunu söyleyeyim:\n");
 scanf("%d",&b);

 a = b%2;
 if(a!=0)
  printf("Girdiğiniz sayı tektir:%d\n",b);
 else
  printf("Girdiğiniz sayı çifttir:%d\n",b);

 return 0;
}

Kontrol yapıları (döngü deyimleri)

Kontrol Yapıları bir ya da daha fazla işlemin tekrar edilmesini sağlayan deyimlerdir. C programlama dilinde while, for ve do-while deyimleri döngü işlevini yerine getiren deyimlerdir. İnceleyelim:

While():

Genel kullanım:


while(şartlar) yinelenecek ifadeler(işlemler); Parantez içerisindeki şartlar doğru olduğu müddetçe (yani mantıksal değer 1'se) while’dan sonra gelen "yinelenecek ifadeler(işlemler)" kısmı yinelenir. Eğer mantıksal ifade yanlışsa (mantıksal değer 0 ise) döngü durdurulur ve yürütülme sırası while'dan sonra gelen deyime geçer.

Mutlaka bir test değeri içererek while döngüsünün bir sefer yanlış olmasını sağlamalı ki döngü sona ersin. Aksi hâlde sonsuz döngüde kaybolursunuz, benden söylemesi. Meselâ:

#include<stdio.h>
int main()
{
int sayi=1;
while(sayi<19)
printf("Sayin bakalim :D, %d\n",sayi);
return 0;
}

     su@su:~$ gcc /home/su/Masaüstü/falanca.c -o falanca
    su@su:~$ ./falanca
    Sayin bakalim :D, 1
    Sayin bakalim :D, 1
    ...
    ...
    ...
    Sayin bakalim :D, 1 

Gibi sonsuza kadar devamedegelen bir durumla karşılaşabilirsiniz değil karşılaşırsınız.

Dikkat Etmemiz Gereken Noktalar:

  • 1) Döngüye giriş koşulu iyi ayarlanmalı:

#include<stdio.h>
int main()
{
int index=10;
while(index++<5)
printf("Mutlu kalmanizi diliyoruz ki mutlu kalasiniz. Mutlu musunuz!!\n");
return 0;
}


     su@su:~$ gcc /home/su/Masaüstü/falanca.c -o falanca
    su@asu:~$ ./falanca
    su@su:~$ //koşula uymuyor, mutlu olmayı beklemeyin! 
  • 2) Döngüden çıkış olmalı:

#include <stdio.h>
  int main(void)
{
  int n = 0;
            while(n<3)
              printf("n = %d\n", n);
            n++;
            printf("Bekle!\n");
  return 0;
  }

     su@su:~$ gcc /home/su/Masaüstü/falanca.c -o falanca
    su@su:~$ ./falanca
    n = 0
    n = 0
    ...
    ...
    n = 0 

Bu böyle gider! Ama;

while(n++ < 3)
         printf("n = %d\n", n);
       printf("Iste bu!\n");

gibi bir düzenleme ile

     su@su:~$ ./falanca
    n = 1
    n = 2
    n = 3
    Iste bu 

Olur ki o da güzel olur :)

Daha başka nelere dikkat edeceğiz:

  • 3) = ve == birbirinden farklı,
  • 4) Bazı döngüler sonsuz bazıları sayılı olarak tanımlıdır,
  • 5) Bir sayıcı olmalı,
  • 6) Bu sayıcı bir sınır değeri ile karşılaştırılmalı,
  • 7) Bu sayıcı döngünün her seferinde artırılmalı,

Not: Sayıcı her zaman döngü dışında tanımlanır ve değer atanır. Sayıcının değerinin artırılması


While(sayici++ < limit) 

şeklinde olabilir veya açık olarak döngü içerisinde yapılır. Bu durumları for döngüsü ortadan kaldırır (göreceğiz).

Şimdi kurallara uygun basit bir örnek:

Toplama ve çıkarma kullanarak çarpma işlemini gerçekleştiren C programı:

#include<stdio.h>
int main()
{
        int a, b, c;
        printf("iki sayi alalim =\n");
        scanf("%d %d", &a,&b);
        c = 0;
       while(b>0)
{
                       c = c + a;
                       b = b - 1;
        }
       printf("\n Sonuc = %d\n",c);
       return 0;
}

      su@su:~$ gcc /home/su/Masaüstü/falanca.c -o falanca
     su@su:~$ ./falanca
     iki sayi alalim =
     5
     19

     Sonuc = 95 

Uygulama: Maaş hesaplayan basit bir program

Aşağıdaki program haftada 40 saatin üstünde bir işçi çalışırsa fazla mesaisini hesaplıyor.
Derleyiciye yazın derleyin.

#include<stdio.h>
int main()
{
   int iscino,maas,saatbirim,kacsaat,a,netmaas;
   a = 1;
while(a >= 0){
   printf("İşçi no giriniz:\n");
   scanf("%d",&iscino);

   printf("Maaş giriniz:\n");
   scanf("%d",&maas);

   printf("Saat ücreti giriniz:\n");
   scanf("%d",&saatbirim);

   printf("Kaç saat çalışmış giriniz:\n");
   scanf("%d",&kacsaat);

if(kacsaat >= 39)
   netmaas = ((kacsaat-40)*saatbirim*1/2)+(kacsaat*saatbirim)+maas;

else
   netmaas=(kacsaat*saatbirim)+maas;

   printf("\n\n%d ci işçi\n%d TL maaşı\n%d TL saat ücreti\n%d saat çalışmış\n%d TL net maaşı\n\n\n",iscino,maas,saatbirim,kacsaat,netmaas);

printf("Çıkmak için -1 devam için pozitif sayı giriniz\n");
scanf("%d",&a);

}
   return 0;
}

Soru:Bir sınıfın notlarını girdi olarak alan ve ortalamasını hesaplayan bir program yazın?

For döngüsü

For döngüsü üç parçadan oluşur. Parçaları (;) ile ayrılır. İlk parça döngü başlamadan önce ve bir kere yapılır. İkinci kesimde bu döngünün her turunda kontrol edilmesi gereken deyim yer alır. Bu deyim doğru olduğu sürece devam eder. Üçüncü kesimde ise değişken her defasında belirtilen değer kadar artar.

For() döngüsü değişik şekillerde kullanılabilir:

#include <stdio.h>
int main(void)
  {
  int saniye;
       for (saniye = 5; saniye > 0; saniye--)
        printf("%d saniye!\n", saniye);
  printf("Boooooom!\n");
  return 0;
  }

 
     su@su:~$ gcc /home/su/Masaüstü/falanca.c -o falanca
    su@su:~$ ./falanca
    5 saniye!
    4 saniye!
    3 saniye!
    2 saniye!
    1 saniye!
    Boooooom!
 

Arttırmayı bir yapmak zorunda değilsiniz. Sayılar yerine karakterleri sayabilirsiniz. For() döngüsünü test için kullanabilirsiniz (sadece saymaları yapmıyor yani). Yani:

#include <stdio.h> int main(void)
  {
 int num;
printf(" n n kupu\n");
        for (num = 1; num*num*num <= 216; num++)
       printf("%5d %5d\n", num, num*num*num);
  return 0;
  }

     su@su:~$ gcc /home/su/Masaüstü/falanca.c -o falanca
    su@su:~$ ./falanca
        n    n kupu
        1     1
        2     8
        3    27
        4    64
        5   125
        6   216 

Artırım aritmetik veya geometrik olarak seçilebilir. Artırma yerine istediğiniz legal işlemi koyabilirsiniz:

Sonsuz döngü:

for (; ;)
    printf("Biri beni durdursun\n");

İlk sayı değer ataması olmak zorunda değildir. Bu kısım sadece bir defa işlem görür. Buraya istediğiniz başka bir işlem koyabilirsiniz.

#include <stdio.h>
int main(void)
{
int num = 0;
for (printf("benim istedigim sayiyi girin!\n"); num != 19; )
scanf("%d", &num);
printf("Tamamdir, oldu!\n");
return 0;
}

     su@su:~$ gcc /home/su/Masaüstü/falanca.c -o falanca
   su@su:~$ ./falanca
    benim istedigim sayiyi girin!
    4
    5
    6
    93
    19
    Tamamdir, oldu!

Döngü parametreleri döngü içerisinde döngü çalışırken değiştirilebilirler:


for (n = 1; n < 10000; n = n + degisken)

for() döngüsünü birden fazla değer için kullanabilirsiniz diyip bitirelim.

Do-While döngüsü

"do" İngilizce'de yap- demektir. "while" ın anlamlarından biri iken demektir. Yani durum bu iken yap demek istiyor. Aşağıdaki örneğimize baktığımız zaman ilk olarak "do" yu görüyor. İlk olarak bilgisayara yap denilenler yapılıyor.(İngilizce anlamlarını söylememin sebebi buydu. Yoksa diğer döngülerde do yok.) Yani koşula bakmadan yapıyor. "while" a gelince bir seçenek veya 1 kaç seçenek sunuluyor. Bu seçenek veya seçeneklere göre döngü devam ediyor veya döngüden çıkıyor. Örnekte "while" da sunulan seçenek; "Girmemiz gereken şifre ile girdiğimiz şifre eşit değilse döngü içindekileri yapmaya devam et." diyor. Ne zaman doğru şifreyi girersek şarta uymadığı için döngüden çıkıyor. Eğer girmemiz gereken şifre ile girdiğimiz şifre "while" içinde eşit gösterilseydi, tek 19 yazıldığı zaman döngü devam edekti. Eşit değil yerine büyük, küçük, küçük eşit veya büyük eşit yazsaydık program yanlış çalışıp yeni kurala göre hareket edecekti.


#include <stdio.h>
int main(void)
{
const int sifre = 19;
int girilen_sifre;
do
{
printf("Bilgisayar kulubune uye olmak icin,\n");
printf("gizli sifreyi girin: ");
scanf("%d", & girilen_sifre);
}
while (girilen_sifre != sifre);
printf("Ok.. Artik uyesin. Tebrikler :D\n");
return 0;
}

     su@su:~$ gcc /home/su/Masaüstü/falanca.c -o falanca
    su@su:~$ ./falanca
    Bilgisayar kulubune uye olmak icin,
    gizli sifreyi girin: 5
    Bilgisayar kulubune uye olmak icin,
    gizli sifreyi girin: 6
    Bilgisayar kulubune uye olmak icin,
    gizli sifreyi girin: 34
    Bilgisayar kulubune uye olmak icin,
    gizli sifreyi girin: 19
    Ok.. Artik uyesin. Tebrikler :D

Do döngüsünde koşul kontrolü döngü sonunda yapıldığı için döngü en az bir defa dönmek zorundadır.

Dizilere giriş

Aynı tip verilerin seri olarak depolandığı ünitelerdir (hafızada ayrılmış bölümler). Dizilerin kullanılmasını gerektiren iki önemli özelliği verilen tanımdan çıkarmaya çalışırsak:

  • 1) Dizi elemanları bellekte ardışıl (continuous) olarak bulunurlar (ayrı nesne tanımlamadan en belirgin farkı)‏.
  • 2) Dizi elemanları aynı türden nesnelerdir.

İnt dizi[10]; //ardışıl olarak 10 tam sayı
char dizi[10]; //ardışıl olarak 10 karekter

Diziler de bir veri türü olduğuna göre dizilerin de kullanılmadan önce tanımlanmaları gerekir. Genel kullanım:

<tür> <dizi ismi> [<eleman sayısı>];
float sema [19];
float sema[19]

Her dizinin bir adı (adresi) var. Dizinin her bir parçasına eleman diyip (aslında 'deyip' herhâlde, sanırsam), bunlara da dizi indeksi ile ulaşılır.

Yukarıdaki komut sema’nın bir dizi (array) olduğunu, 19 elemanı bulunduğunu ve bunların tiplerinin float olduğunu belirtir.

Dizinin birinci ve ikinci elemanları sırasıyla

sema[0] ve sema[1]

Dizinin son elemanı

sema[18] ('0' dan başladık demeyeceğim artık).

Dizinin ilk elemanı sıfırıncı indisli elemandır ve sıfırıncı indisi elemanın adresini gösterir: dizi=&dizi[0];

Eğer sema dizisinin 5. elamanının 5 olmasını istiyorsak

sema[4]=5.0 deriz.

Dizi indisleri:

Dizi kullanımının getirdiği en büyük avantaj döngü deyimleri kullanarak tüm dizi elemanlarına kolay bir şekilde erişilebilmesidir.

Dizi indis ifadelerinde ++ ya da -- operatörlerinin kullanıldığı sık görülür.

int a[20];
int k = 10;
int i =5;

a[k++] = 100; /* a dizisinin 10 indisli elemanına yani 11. elemanına 100 değeri atandı. */
a[--i] = 200; /* a dizisinin 4 indisli elemanına yani 5. elemanına 200 değeri atandı. */

Dizi türü C türlerinden her hangi biri olabilir. Örnek:

 #include<stdio.h>
#define BOYUT 10
int main(void)
 {
 int index, skore[BOYUT];
 int toplam = 0;
 float ortalama;
 printf("Futbol sonuçlarını %d gir:\n", BOYUT);
 for(index = 0; index < BOYUT; index++)
 scanf("%d", &skore[index]); // 10 sonucu gir
 printf("Girdiğiniz sonuçlar aşağıdadır:\n");
for (index = 0; index < BOYUT; index++)
 printf("%5d", skore[index]); // sonuçların sağlaması
 printf("\n");
for (index = 0; index < BOYUT; index++)
toplam += skore[index]; // sonuçların toplamı
 ortalama = (float) toplam / BOYUT; // ortalama
 printf("Sonuclar toplamı = %d, ortalama = %.2f\n", toplam, ortalama);
 return 0;
} 

  su@su:~$ gcc /home/su/Masaüstü/falanca.c -o falanca
su@su:~$ ./falanca
Futbol sonuçlarını 10 gir:
4
3
7
9
7
5
4
3
2
3
Girdiğiniz sonuçlar aşağıdadır:
    4    3    7    9    7    5    4    3    2    3
Sonuclar toplamı = 47, ortalama = 4.70 

Diziler ve döngü kullanımı:

For ve While deyimleri dizilerin elemanlarına ulaşmak için sık kullanılan yöntemlerdendir. Örnek verelim:

 for(i = 0; i < 19; ++i)‏
dizi[i] = 0; //Dizi elemanlarını sıfırladık. 

 while(i < SIZE) {
     dizi[i] = 0;
     ++i;
}      /* dizinin bütün elemanları sıfırlandı*/ 

Tanımlarken İlk Değer Nasıl Verilir? Şöyle:

double sema[]={2.5, 3.5, 5.8, 6.0};
char gokyuzu[6]={'g','o','k','y','u',z'};
int dizi[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

şekillerinden herhangi biri ile verilebilir.

Dizinin tüm elemanlarını sıfırlamanın en kolay yolu

İnt a[20] = {0};

İlk değer verilmeyen tüm elemanlar '0' değerini alır.

Diziye ilk değer verme işleminde dizinin eleman sayısından fazla sayıda değer vermemiz hataya neden olur:

int a[5] = {1, 2, 3, 4, 5, 6};

Bir örnek yapıp kaçayım:

Klavyeden girilecek 11 elemanlı bir dizinin maksimum elemanını bulan C programı:

 #include <stdio.h>
int main()
{             
float  a[11],max;
int i;
printf("\nDizi elemanlarini girin\n");
for(i=0;i<=10;i++){
   scanf("%f",&a[i]);
}
max=a[0];
for(i=0;i<=10;i++){
      if(a[i]>max)
      max=a[i];
}
printf("\nMaksimum dizi elemani=%f\n\n",max);
return 0;
} 

 Dizi elemanlarini girin
5
6
3
56
23
19
23
24
54
65
7

Maksimum dizi elemani=65.000000 

Diziler matris gibi düşünülebilir:


 İnt sema[4][3]={  {1,2,3},
                  {4,5,6},
                  {7,8,9},
                  {10,11,12}
                       }; 

Dizilerde boyut sınırı yoktur: int dizi[][][][][][.......]

Kaynak

http://forum.ubuntu-tr.net/index.php/topic,15404.0.html