Konu Başlıkları: C Dökümanları
Tekil Mesaj gösterimi
Alt 20 January 2009, 14:48   Mesaj No:1

CoNQueRoR_61

Papatyam Usta Üyesi
Avatar Otomotik
Durumu:CoNQueRoR_61 isimli Üye şimdilik offline konumundadır
Papatyam No : 1397
Üyelik T.: 20 January 2009
Arkadaşları:0
Cinsiyet:
Memleket:istanbul
Yaş:33
Mesaj: 131
Konular:
Beğenildi:
Beğendi:
Takdirleri:10
Takdir Et:
Konu Bu  Üyemize Aittir!
Standart C Dökümanları

C Dökümanları

Temel C dokumanları 1 (Giriş)

Evet C derslerinin ilk dokumanı. Öncelikle C programları yazabilmek için gerekli aletleri temin edelim. Bir adet notpad ve bir C compiler (yada bir linux makine, shell). Pek de bir şey gerekmiyormuş ne güzel. Compiler olarak miracle C, borland yada visual C compilerı öneririm. Compilerın nasıl kullanıldığına sonra değineceğiz.

Çok teorik girişler yapılabilir ama ben pratikten girecem biraz. Direk bir program yazıyorum ve üzerinde temel açıklamaları yapıyorum. Kod yazmaya başlamadan önce belirteyim. C de bir satırda // işaretlerinden sonra yazılanlar kod olarak kale alınmaz. Dokumanlarımızda kodları acıklama amaçlı olarak // işaretleri kullanılacaktır:

#include<stdio.h> // 1.satır
main() // 2.satır
{ // 3. satır
printf("Holey ilk programimi compile ettim" // 4. satır
return 0; // 5. satır
} // 6. satır


Bu programı compile eder çalıştırırsanız, “Holey ilk programımı compile ettim” diye bir yazı verecek ekrana. Simdi bu kodları inceleyelim mantığını öğrenelim. 1. satırda #include<stdio.h> yazıyor. Bunu her programımızın başına yazacaz. Bu komut, compiler'a programımızda kullanacağımız library (kutuphane) dosyalarını gösterir. stdio.h bir kütüphane dosyasıdır. İçinde girdi ve çıktıları yöneten fonksiyonların komut bilgisini tutar."stdio" nun acılımı "standart input output" dur standartın üc harfi, input ve outputun ilk harfleri: stdio.h

sonundaki .h da dosyanın uzantısıdır.C de kütüphane dosyaları hep .h uzantılı olur.Her compiler'la beraber lib klasoru altında hazır vardır bu kütüphane dosyaları. input girdi output da cıktı anlamına gelir. Program ekranımıza bir yazı veriyorsa bu bir outputtur. Program çalışınca durup bir girdi bekliyorsa bu bir inputtur. 4.satırda yazdığımız printf bir output komutudur. Ekrana bilgi verir.

Eğer biz programın başına #include<stdio.h> yazmazsak compiler bu output komutunu tanımaz. Çünkü printf in kullanımı stdio.h dosyasının içinde yazılıdır. ilk satırın mantığı anlaşılmıştır artık sanırım.

Gelelim 2.satıra burada yazan main() bir fonksiyondur. Programımızın ana fonksiyonu. Tüm programın yapacağı iş bu fonksiyonun içinde anlatılır compiler'a. C de fonksiyonlar ismi, yanında açılan parantezler, ve içindekileri belirten { } kısımlarından oluşur.

main()
{

}


seklinde. Burdaki { } lar fonksiyonun içeriğini ve sınırlarını belirler. main fonksiyonun ismidir.main ismi compiler tarafından ana kısım olarak tanınır. Her programda bulunması şarttır. () parantezler ise fonksiyonun bi girdi alıp almadığını gösterir. Şimdilik biz main fonksiyonunu bir girdi almadan kullanıyoruz bu yüzden parantezlerin içi boş. Fonksiyonları sonraki dokümanlarda geniş bir şekilde anlatacam.

4.satırda printf komutunun kullanımı görülmektedir.input ve output komutları sonra detaylı bir şekilde anlatılacak.

5.satırda return fonksiyonun çıktısının ne olacağını belirler. Biz ana fonksiyonumuzun bir çıktı vermesini şu an istemiyoruz.

Zaten printf komutu ile çıktımızı aldık. return 0; diyerek compiler'a main fonksiyonumun baska çıktısı yoktur diyoruz. Bu satırı yazmak da şart değildir. Ama bazı compiler'lar sorun çıkarabilir diye ekledik bu komutu da.

Dikkat edilmesi gereken bir şey de C de her komuttan sonra noktalı virgül ( kullanılmasıdır.Bu, cümlelerden sonra nokta koymak gibidir.

Gelelim compile etme işine. Programımızı bir notpad de yazdıktan sonra bunu mesela "ilkprogramim.c" seklinde uzantısı .c olacak şekilde kaydediyoruz. Sonra shell kullanıyorsak "gcc ilkprogramım.c" komutu ile compile ediyoruz. Bulunduğumuz klasörde a.out diye bir çalıştırılabilir dosya oluşacaktır. ./a.out yazarsanız program çalışır. exploit derleyenler bilirler Eğer windows'da bir compiler kullanıyorsak. Compiler'ın bulunduğu klasöre ilkprogramim.c yi atacaz ve compiler'ımızın kullanımına göre mesela benim kullandığım borland için "bcc32 ilkprogramım.c" yazacaz komut isteminde.(ama komut isteminde compilerın bulundugu klasore gelmemiz lazım once). Sonra ilkprogramım.obj diye bir dosya oluşturacak compiler. Son adım olarak "make ilkprogramım.obj" yazarsak ilkprogramım.exe diye bir çalıştırılabilir dosya oluşacak. Artık ilkprogramım.exe yazarak programı calıstırabiliriz.

İlk ders bu kadar. Her dokümandan sonra bir pratik yapma adına bir ödev veriyorum. Ödev: bir C compiler yada gcc komutu calışan bir shell bulun. Yazdığım programı compile edip çalıştırın.

Moderatöre Bildir Logged



agasarli_3461

Ziyaretçi
Ynt: C Dökümanları
« Yanıtla #1 : Eylül 09, 2007, 10:20:37 ÖS » Alıntı Değiştir Sil Konuyu böl

--------------------------------------------------------------------------------
Temel C Dokümanları 2 (Değişkenler ve Operatörler)

Bundan once degiskenleri, degisken tanıtmayı, operatorleri, if, switch, while yapılarını scanf ve printf in kullanımlarını gorduk. Buraya kadar isledigimiz seylerde komutların kullanımlarına dikkat etmenizi istiyorum. Cunku kullanım sekilleri cok onemlidir. Virguller noktalı virguller parantezler { } ler, " " ler nerelerde nasıl kullanılıyor bunları bir daha tekrar edip iyice oğrenin. Çünkü bunlar yanlış kullanılırsa kodları compile edemeyiz. Bir de compile hatalarını anlamaya çalısın. Bunlar iyice anlanırsa program yazmada fazla sorun yaşamazsınız...

Bir de gecen dersin odevinin cevabını verelim başlamadan once

3. odevin cevabı:

#include<stdio.h>
main()
{
int x,i;

scanf("%d",&x);

i=2;
while(i<x)
{
if(x%i==0)
{
printf("%d asal degil",x);
exit(-1);
}
i++;
}

printf("%d asal",x);

return 0;
}


pek uzun bir program değil aslında dimi Şimdi bu programı biraz anlatayım...

İlk once iki degisken belirliyoruz: i ve x . x girdiyi tutucak. i de while in icinde 2 den baslatılarak surekli x e bolunecek ve her seferinde bir arttırılıcak. Ta ki x den bir kucuk olana kadar. While in icinde bir if var. Bu if “x” i “i” ye boldugunde kalanın 0 a esit olup olmadıgına bakıyor. Eger herhangi bir seferde “x” “i” ye tam bolunmuşse bu sayının asal olmadıgını anlıyor ve ekrana "x asal değildir" yazıp programdan cıkıyor. Programdan cıkmak icin exit(-1) komutunu kullandım. Daha once bu komuttan bahsetmemistik. Bu komut direk programdan cıkar. Altındaki satırları isleme sokmaz... eger while ın icinde hic bi zaman x%i==0 olmamışsa program, while dan cıkar ve alt satırdaki printf("%d asal",x) komutunu isleme sokarak ekrana "x asal" yazar.( x yerine “x” in değerini yazacak)....

Gelelim daha kolay odevler isteyenlere...

ilk basit odev: 2 sayı gireceksiniz. size hangisi büyükse onu verecek...

İkinci basit odevimiz: Program iki sayı alacak. ikinci sayıyı ilkinin kuvveti olarak hesaplıycak. Yani 2 3 girerseniz. 2 üzeri 3 ü bulacak yani 8 verecek ekrana.

Bi kac tavsiye ve hatırlatmadan sonra gelelim bu dersimizde ne işleyecegimize. Bu dersimizde diğer bir dongu olan “for” u ve dizileri(array) işleyecez...

for dongusu:

for dongusu de tıpkı while gibidir. Farkı, kullanım seklidir...

kullanımı:

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

{

}

Bu ornekte goruldugu gibi for parantezlerinin icinde 3 bolum var. Bu bolumler noktalı virgul isareti ile birbirinden ayrılıyor. Bu bolumler for dongusunun kac kere tekrar edilecegini belirlemek icin kullanılıyor. Bunu belirlemek icin de bir degisken kullanıyoruz. Bu örnekte “i” diye bir degisken kullanılmıs. Bunun yerine istediginiz degisken adını kullanabilirsiniz. Birinci bolumde “i” nin ilk degerinin ne oldugu belirleniyor.Bu ornekte 0( i=0 ). Ücüncü bolumde “i” nin dongunun her isleme girdigi seferde “i” ye ne yapılacagı belirleniyor. Bu ornekte “i” her seferinde 1 artırılıyor( i++ ).İkinci bolumde ise for dongusunun devam etmesi icin gereken şart belirleniyor. Bu ornekte “i” 5 den kucuk oldugu surece dongu devam edecek. Yani dongu 5 kere isleme sokulacak.i her seferinde 1 artırılıp en sonunda 5 e eşit olunca program donguden cıkacak.

gecen odevin cevabında kullandıgım while dongusuyle aynı isi yapacak olan bir for dongusu yazayım ornek olarak:

for ( i=2; i<x ; i++ )
{
if(x%i==0)
{
printf("%d asal degil",x);
exit(-1);
}
}


While la arasındaki farka iyi bakın.Bu sefer for un icinde i++; komutunu kullanmadım. Cunku for parantezleri icinde bu islem tanımlanmıs zaten. while dan bir farkı da for dongusunu yazmadan once i=2; komutunu kullanarak i nin ilk degerini atamaya gerek yok. Bu da zaten for un parantezleri icindeki ilk bolumde belirtiliyor...

Gelelim arraylere (diziler)...

Bu diziler de bir takım degiskenlerdir. Degisken dizileridir. Matematikde x1 x2 x3 x4..... xn seklinde diziler vardır. Bilirsiniz biraz. n tane x degiskeni... Yani C de n sayıda aynı isimli segiskenler dizisi belirlemeye yarar. Bu cok kullanıslı ve gerekli biseydir. Mesela 50 tane farklı sayıyı ayrı ayrı degiskenlere atamak istiyoruz. Eger diziler olmasaydı bunun icin kodumuzun icinde 50 tane degisken belirlememiz ve 50 satırda bu degiskenlere degerlerini atamamız gerekirdi. Ama bunun yerine sadece bir degisken dizisi ve bir dongu kullanarak 50 tane sayıyı programa okutabiliriz kolaylıkla...

array(dizi) tanıtmak:

int a[50];

bu satırla a adında 50 tane tam sayı turunde degisken tasıyan bir dizi tanıttık...Matematiksel olarak a1 a2 a3 ... a50 seklinde.

Fakat arrayler de dikkat edilmesi gereken şey dizinin ilk elemanının a[0] olarak gosterilmesidir. 2. eleman a[1], 3. eleman a[2], 50. eleman a[49] seklindedir.

Simdi dizinin ilk elemanına bir deger atayalım...

a[0]=5;

bu satırla dizinin ilk elemanını 5 yaptık. Şu an diger elemanlara bir deger atanmamıs durumda...

mesela...

double B[10];

diye bir satır yazsak virgullu sayı turunde 10 tane degiskeni olan B adında bir dizi belirlemis olurduk...

Simdi array kullanılan basit bir program ornegi vereyim. Bu program 3 tane girdi alacak. Bu girdilerin degerini bir dizide depolayacak ve ekrana dizinin ikinci elemanını verecek:

#include<stdio.h>

main()

{

int x[3];

scanf("%d %d %d",&x[0],&x[1],&x[2]);

printf("%d",x[1]);

return 0;

}


bu programda goruldugu gibi scanf ve printf in icinde normal degiskenleri kullandıgımız gibi dizi degiskenlerini kullandık...

Bu program dizi kullanılmadan da 3 degisken belirlenerek kolayca yazılabilirdi. Ama diyelimki bu program 50 tane degisken alsaydı ve 45 inci degiskeni ekrana verseydi dizi kullanmadan 50 degisken i ayrı ayrı tanıtmak ve scanf in icinde 50 tane degisken yazmak cok sıkıcı olurdu Bu durumu onlemek icin dizi kullanacaz ve scanf le dizinin elemanlarına deger atamak icin bir dongu kullanacaz. Şöyle:

#include<stdio.h>

main()

{

int i;

int x[50];

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

{

scanf("%d" &x]);

}

printf("%d",x[44]);

return 0;

}


Array kullanarak bukadar kısa bir kodla, 50 tane degişkenin ustesinden geldik. for da ne yapıldıgına bakarsak. i degiskeni basta 0 a esitleniyor ve boylelikle once x[0] ın degeri scanf ile okunup atanıyor. Sonra i bir artırılıp a[1] in degeri atanıyor. Bu boyle 49 a kadar giderek en son elemanın da degeri alındıkdan sonra i 50 oluyor ve i<50 şartını saglamadıgı icin for dongusunden cıkılıyor. Sonra printf komutu ile 45. eleman ekrana veriliyor. printf in icine x[44] yazdık ama bize 45. eleman verilecek. Bunun sebebi ilk elemanın x[0] olması... Bu programı compile edip calıstırırsanız 50 kere sayı yazıp enter a basmak zorunda kalacaksınız uyarmadı demeyin

Arrayleri ve donguleri da ogrendiniz. Buraya kadar C ogrenmekte buyuk bir yol kateddiniz. Artık bir cok matematiksel program yapabilirsiniz... Bence kendi kendinize programlar uydurup yapmaya çalısın...

Ama ben gene de bir odev vereyim:

program 10 tane sayı alacak ve bu sayıları toplayıp ekrana sonucu verecek. Programı yapmak icin bir dizi ve iki dongu kullanın. ilk dongu scanf kumutu ile tek tek girdileri okusun. ikinci dongu de gecen dersde verdigim toplama islemi yapan dongu gibi tum array elemanlarını toplam diye bir degiskende toplasın. sonra tek printf komutu ile ekrana toplamın sonucunu versin. 3. dersin sonunda verilen ornek programı iyi inceleyin. Toplama yapan dongunun mantıgını iyi anlayın. Odevi yaparsınız.




__________________
Biz Bu Hallere Düşecek Adammıydık ???
Alıntı ile Cevapla