• Merhaba Ziyaretçi.
    "Yapay Zeka Objektif " Fotoğraf Yarışması başladı. İlgili konuya  BURADAN  ulaşabilirsiniz. Sizi de bu yarışmada görmek isteriz...

'C' Programlama Diline Giriş

merakettim

Homo Sapiens Sapiens
Özel üye
İşte beklediğimiz an.:)

GIRIS

C programlama dili, Dennis Ritchie tarafından Bell laboratuarlarında yaratılmıstır. PDP-11 ile Unix altında çalısmak için yaratılmış olmasına rağmen, ilgi üzerine MS-DOS altında çalışacak hale getirilmiştir. Basitliği, oluşan kodun küçüklüğü, ve her çeşit programlamada kullanılabilmesi, C yi popüler bir dil yapmıştır.

C, cok kestirme olması nedeni ile, yeni bilgisayarlara baslayanlar için öğrenmesi zordur. Bir programcı, C ile üst seviyelerden, assebly'ye yaklasan alt seviyelere kadar programlama yapabilir. C'nin sağladığı bu rahatlığın yanında, tehlikeleride de vardır. Örneğin, makineyi kilitleyebilecek bir program yazmak, Pascal yada BASIC de yazmaktan cok daha kolaydır. Bir Pascal derleyicisinin fark edip uyaracağı bir hatayi, C derleyicileri fark etmeyebilir. C de, kendi başınızasınız...

Bu gün IBM-PC için yazılan piyasadaki yeni programların yüzde 75'i, C ile yazılıyor. MicroSoft, Macro Assembler 4.0 ı çıkardıktan sonra, onu C ile yazdıklarını açıkladı. Herhalde içinde birkaç assembler rutin vardır ama, çoğunluğu C ile yazılmıştır.

C, bir komite değil de, bir kişi tarafından yazılmış olduğundan, çok kullanışlı bir lisandır, fakat çok iyi tanımlanmamıştır. C için bir standart yoktur, ama ANSI grubu, bu konuda çalışmaktadır. İşin ilgincliği, bir standart olmamasına rağmen, değişiklikleri çok azdır. Halbuki iyi tanımı olan Pascal dilinin, derleyicileri birbirinden cok farklıdır, ve bir Pascal programını bir bilgisayardan diğerine geçirmek zordur..

C nin Taşınabilirlik referansları iyi olmasına rağmen, derleyiciler arasında farklılıklar vardır. Bu değişiklikler genellikle BIOS fonksıyonları gibi standart olmayan şeyler kullanıldığında kendini gösterir.

TANIMLAYICI ISIMLERI

Fonksiyon ve değişken isimleri, harfler ve rakkamlardan oluşabilir. Ilk harf ya bir harf yada alt-çizgi karakteri olmak zorundadır. Geri kalanlar ise, harf, rakkam yada alt çizgi olabilir. Iki nokta önemlidir:

(1) Büyük ve küçük harfler farklıdır. Bir programda "ISIM", "iSiM" ve "isim", değişik tanımlayıcılardır.

(2) C'de, en fazla sekiz karakter önemlidir. Bir tanımlayıcı 8 karakterden uzun olabilir, fakat ilk sekizi sayılır. Bu derleyiciniz için böyle olmayabilir.

Derslerde bir çok örnek program olacak. Bunları istediğiniz herhangi bir derleyici ile derleyebilirsiniz.
 

merakettim

Homo Sapiens Sapiens
Özel üye
İLK C PROGRAMIMIZ

En basit C programı:

PHP:
main()
{
}

Bu bir C programıdır ve başka türlü yazılamaz.
main sözcüğü programımızın başlaması gereken fonksiyonu gösterir.Bütün programlarda olması gereken bu sözcüğün ilk satırda olması gerekmez.
"()" parantez işaretleri ise main'in bir fonksiyon olduğunu söyler.
Küme parantezleri ise programımızın gövdesidir.Yani asıl program burada yazılır.
Biz burada birşey yazmadık.Yani bu program hiçbir iş yapmayacak.:)

BIRSEYLER YAPAN BIR PROGRAM:

PHP:
main()
{
printf("Bu bir satirlik yazidir.");
}

Bu programda gördüğümüz yenilikleri teker teker inceleyelim.

printf komutu ekrana parantezler içinde bulunan dendenlerin içinde buunan satırı ekrana yazmasını söyler.Parantezler ise fonksiyonumuzun parametresi olduğunu belirtmek için kullanılır.
Satırın sonundaki noktalıvirgüle dikkatinizi çekerim.C dilinde bir satırın bittiğini belirtmek için noktalıvirgül kullanılır.Benim de ilk başlarken çok sık yaptığım hatalardan biri,noktalıvirgül koymayı unutmamdı.:)

DAHA COK SEY YAZAN BIR PROGRAM

PHP:
main()
{
printf("Bu bir satirlik yazidir.\n");
printf("Bu bir baska ");
printf(" satirdir.\n");
printf("Bu ucuncu satirdir.\n");
}

Burada da yaptığımız işlem yukarda yaptığımız işlemle aynı.Fazladan,ters bölü işareti ve bunun sağında "n" harfi görüyoruz("\n").Bu katarın istenilen yerine konulur.Hatta kelimenin tam ortasına bile koyabilirsiniz.Olacaklar ise ikinci satıra atlamadan ibaret.Yani, cursor, ekranın sol başına, ve bir
satır aşağıya kayar.
İlk komut 1. satıra yazar.2. komut 2. satıra yazar.3. komut 3. satıra devam eder ve 4. komut ise 3. satıra yazar.Derlediğiniz zaman göreceksiniz.

RAKAMLAR YAZALIM

PHP:
main()
{
int index;

index = 13;
printf("Indexin degeri simdi %d\n",index);
index = 27;
printf("Indexin degeri simdi %d\n",index);
index = 10;
printf("Indexin degeri simdi %d\n",index);
}

Bu programda ise, ilk defa olarak bir değişken kullanıyoruz. main() ve {
işaretlerine artık alışmış olmalısınız. Bunun altında "int index" diye bir
satir yer alıyor. Bu satır, "index" isimli bir tamsayı değişkenini
tanımlıyor. Çogu mikrobilgisayarlar için, 'int' tipi bir değişkenin
alabileceği değerler, -32768 ila 32767 arasındadır. 'index' ismi ise,
TANIMLAYICILAR da bahsettiğimiz kurallara uyan herhangi birşey olabilir.
Bu satırın sonunda da, satırın bittiğini belirten ( ; ) noktalıvirgül yer
alır.
Bu satırda birden fazla tam sayı tanımlanabilir lakin biz şimdilik ortalığı karıştırmayalım.:D
Programımızı incelemeye devam edersek eğer index değişkenimize tam sayı atandığını görürüz.
index=13(satırı bitirmeyi unutmayalım( ; )) tahmin edeceğiniz gibi index değişkenine 13 atadığımızı söylüyoruz.Programı derlersek eğer birinci satırda index'in değeri şimdi 13 yazacaktır.Sonra yine index değişkenimize sayı atıyoruz.Bu sayı 27. 2. satırda ise indexin değeri şimdi 27 diyor.Ve 3. satır da tıpkı ncekiler gibi 10 olacak.

RAKAMLARI NASIL YAZARIZ?

Tekrar printf komutuna dönelim ve nasıl
çalıştığını görelim. Gördüğünüz gibi bütün satırlar birbiri ile aynı ve
diğer örneklerden farkı, içindeki "%" isareti. Bu harf, printf'e ekrana
yazmayı durdurup, özel birsey yapmasını söyler. "%" işaretinden sonra gelen harf olan "d", bir tamsayı yazılacagını belirtir. Bundan sonra, yeni satıra geçiren tanıdık \n işaretini görüyoruz.

Dendenler arasında kalan bütün harfler, printf komutu ile ekrana
çıkacakları tanımlar. Bundan sonraki virgül ve "index" sözcüğü yer alır.
printf komutu buradan değişkenin değerlerini okur. Daha fazla %d ekleyerek ve bunları yine virgül ile birbirine ekleyerek birden fazla değişkenin de bu komut ile görüntülenmesini sağlayabiliriz. Hatirlamaniz gereken önemli bir nokta, saha tanımlayıcı "%d" ile geçirdiğiniz değişken miktarı ayni kalmalidir, yoksa bir runtime hatasi verir.

DEVAMEDECEK;)
 

merakettim

Homo Sapiens Sapiens
Özel üye
BILGI SATIRLARI NASIL EKLENIR
PHP:
/* Bu satırı derleyici kullanmaz.*/

main() /* Ve bu satırı.*/
{
printf("Bilgi satirlarinin nasil eklenecegini ");
/* Bilgi satırları
 bir satırdan uzun
 olabilir.
*/
printf("goruyoruz.\n");
}

/* Ve programin sonu... */

Bilgi satırları,programa açıklık kazandırmak amacı ile kullanılır."/*" işareti ile başlayıp,"*/ " işareti ile biter.Bu satırları derleyici işlemez.Yazdığınız programın başkası tarafından okunabilmesi veya daha sonra unutma olasılığına karşı alınacak önlem gibi düşünün ve mümkün olduğu kadar çok bilgi satırı koymaya önem verin.

IYI SAYFA DIZIMI
Yazdığınız programın kolay anlaşılabilmesi ve hata yaptıysanız eğer,hataları daha kolay görebilmeniz için iyi bir sayfa dizimi yapmalısınız.
İki örnekği karşılaştıralım:
1. program:
PHP:
main() /* Programın başlangıcı*/
{
    printf("iyi yazis,");
    printf ("programin anlasilmasini kolaylastirir\n");
} /*Programın sonu*/

2. program:

PHP:
main() /* Programın başlangıcı*/{printf("iyi yazis,");printf 
("programin anlasilmasini kolaylastirir\n");} /*Programın sonu*/

Yukardaki iki program da aynı işi yapar.Lakin hangisi daha anlaşılır diye soracak olursanız tabiiki 1..
 

merakettim

Homo Sapiens Sapiens
Özel üye
TAM SAYI ATAMA

PHP:
main()
{
int a,b,c;

a = 12;
b = 3;

c = a+b;
c = a-b;
c = a*b;
c = a/b;
c = a%b;

c = 12*a+b/2-a*b*2/(a*c+b*2);

a = a + 1; /* arttirma islemleri */
b = b * 5;

a = b = c = 20; /* Coklu atamalar */
a = b = c = 12*13/4;
}

Bu programda a,b ve c olmak üzere üç tamsayı değişkeni tanımlıyoruz.2. ve 3. satırda a ve b değişkenlerimize tam sayılar atıyoruz.Daha sonraki 4 satırda matematik işlemleri görüyorsunuz.

Besinci satırda ise, modulo operatörünü görüyorsunuz. Modulo, iki değişken birbirine bölündüğünde, kalan değeri verir. Modulo, sadece integer ve char değişken tipleri ile kullanılabilir.

"Artırma işlemleri" bilgi satırının bulunduğu satır sizi şaşırtmasın.İlk satırın ne anlama geldiğine bakalım.

a=a+1 --> a değişkeninin değerini al,+1 ekle,a değişkenine ata.
NOT: Derleyiciler atama işlemlerini sağdan sola doğru yaparlar.

Bundan başka artırma yöntemleri de var.Lakin yavaş yavaş ilerleyelim.

Son satırda ise notumuzda da belirttiğimiz gibi 20'yi cye,c'yi (20)
b'ye ve b'yi a'ya atıyoruz.

Bu programı derlediğinizde hiçbir çıktı göremeyeceksiniz.Dilerseniz kendiniz cıktı alabilecek hale getirebilirsiniz.

Bi örnekle daha anlaşılır açıklayalım.


PHP:
main()
{
int a,b,c;

a = 12;
b = 3;

printf("a'nin degeri:%d ve b'nin degeri %d dir.\n",a,b);

c = a+b;
printf("c'nin degeri %d dir.\n",c);
c = a-b;
printf("c'nin degeri %d dir.\n",c);
c = a*b;
printf("c'nin degeri %d dir.\n",c);
c = a/b;
printf("c'nin degeri %d dir.\n",c);
a = 13;/*a'nın değerini 13 yapıyorum ki kalanın 1 olduğunu göresiniz.*/
c = a%b;
printf("c'nin degeri %d dir.\n",c);

c = 12*a+b/2-a*b*2/(a*c+b*2);

printf("c'nin degeri %d dir.\n",c);

a = a + 1; /* arttirma islemleri */

printf("a'nin degeri %d dir.\n",a);/*En son a'ya 13 demiştik*/
b = b * 5;
printf("b'nin degeri %d dir.\n",b);

a = b = c = 20; /* Coklu atamalar */
printf("a:%d\nb:%d\nc:%d\n",a,b,c);
a = b = c = 12*13/4;
printf("En son ise\na:%d\nb:%d\nc:%d\n",a,b,c);
}
 

merakettim

Homo Sapiens Sapiens
Özel üye
VERI TIPLERI

PHP:
main()
{
int a,b,c; /* -32767 den 32767 ye - tamsayi olarak */
char x,y,z; /* 0 dan 255 e - tamsayi olarak */
float num,toy,thing; /* 10e-38 den 10e+38 e - ondalikli olarak */

a = b = c = -27;
x = y = z = 'A';/*A karakteri*/
num = toy = thing = 3.6792;

a = y; /* a nin degeri simdi 65 (karakter A) */
x = b; /* x simdi tuhaf bir sayi olacak */
num = b; /* num simdi -27.00 olacak */
a = toy; /* a simdi 3 olacak */
}

Yukarıdaki programda 3 tip değişken tanımladık.int tipi değişkenleri öğrenmiştik.Bundan farklı olarak char ve float tipi değişkenlerimiz var.

char tipi değişkenler int tipi değişkenlerin hemen hemen aynıdır.0 ile 255 arasında bir sayı alabir.Hafızada 1 bytlik bir yerde saklanır.Bu değişken tipi genellikle kelime katarları için kullanılır.

char ve int tipi veriyi karşılaştıracak olursak,int tipi ile çalışan birçok fonksiyon char tipi ile de çalışır.Derleyicinin aklı karışmaz lakin sizin aklınız karışabilir.Bu yüzden doğru tip veriyi kullanmanızda yarar var.

float veri tipi ise kayar nokta denilen bir veri tipidir.Sınırları hayli geniştir.float veri tipleri 10e-38 den 10e+38'e kardır.
int veri tipinde .(nokta)dan sonra gelen sayılar yok kabul edilir.Lakin float veri tipi .(nokta) dan sonra gelen kısımı aynen kabul eder.

Mesela ;

int a;
float b;

a=1.123;
b=1.123;

Burada a=1 olacak,b ise 1,123 olacak.

YENI VERI TIPLERINI NASIL KULLANALIM

Bu programın ilk üç satırında, dokuz tane değişkene deger atanıyor.

* Daha önce gördüğümüz gibi, "char" tipi, aslında bir "integer" tipi
olduğundan, bir "char" ın "int" e cevrilmesinde hiçbir sorun yoktur.
* Fakat, bir integer'i "char" a cevirmek için, bir standart yoktur. Bu
nedenle, şayet tamsayı değişkeninin değeri, "char" sahasından büyükse,
çıkan sonuç çok şaşırtıcı olabilir.
* Üçüncü satırda ise, bir tamsayıyı, "float" a atıyoruz. Bu durumda,
derleyici, bu çeviriyi bizim için yapar.
* Fakat tersini yapmak ise, biraz daha karışıktır. Derleyici şayet varsa,
değişkenin ondalık değerini ne yapacağına karar vermek zorundadır.
Genellikle de, ondalık kesimi gözardı eder.
 

merakettim

Homo Sapiens Sapiens
Özel üye
COKVERI.C:
PHP:
main()
{
int a; /* basit tamsayi tipi */
long int b; /* uzun tamsayi tipi */
short int c; /* kisa tamsayi tipi */
unsigned int d; /* isaretsiz (+ - siz) tamsayi */
char e; /* karakter tipi */
float f; /* kayar nokta tipi */
double g; /* cift hassasiyet kayar nokta */

a = 1023;
b = 2222;
c = 123;
d = 1234;
e = 'X';
f = 3.14159;
g = 3.1415926535898;

printf("a = %d\n",a); /* desimal */
printf("a = %o\n",a); /* oktal */
printf("a = %x\n",a); /* heksadesimal */
printf("b = %ld\n",b); /* uzun desimal */
printf("c = %d\n",c); /* kisa desimal */
printf("d = %u\n",d); /* isaretsiz */
printf("e = %c\n",e); /* karakter */
printf("f = %f\n",f); /* kayar nokta */
printf("g = %f\n",g); /* cift hassasiyet k.n */
printf("\n");
printf("a = %d\n",a); /* basit 'int' cikti */
printf("a = %7d\n",a); /* 7 uzunlukta bir saha kullan*/
printf("a = %-7d\n",a); /* sola dayali 7 lik saha */
printf("\n");
printf("f = %f\n",f); /* basit kayan nokta */
printf("f = %12f\n",f); /* 12 lik bir saha kullan*/
printf("f = %12.3f\n",f); /* noktadan sonra 3 hane */
printf("f = %12.5f\n",f); /* noktadan sonra 5 hane */
printf("f = %-12.5f\n",f); /* sola yapisik 12 hane */
}

Bu program ,C dilinde bulunan bütün standart basit veri tiplerini içeriyor.Başka veri tipleri de var lakin basit veri tiplerinin bir araya gelmesi ile oluyuyor.Bunlara sonra bakacağız.

Programı incelersek,ilk önce bildiğimiz "int",ardından "long int" ve "short int" veri tiplerini görürüz."unsigned" tipi "int" veri tipi kadar bir sahada saklanır lakin "-" işareti taşımadığından sınırları 0 ve 65535 arasındadır.

NOT:Eğer "shot","long" veya "unsigned" inteğer veri tipleri kullanıyorsanız sonuna "int" yazmanıza gerek yok.

Daha önce "char" tipini ve "float" tipini görmüştük."double" tipi "float" tipi ile aynıdır lakin isminden de anlaşılacağı gibi daha büyük bir sahada saklanır ve "float" tipinden daha hassas sonuçlar verir.Bu nedenle çoğu derleyiciler "float" tipini kullanmaz."float" olarak tanımladığınız bir değişken,gizli olarak "double" tipine çevrilir.

Bu veri tipleri printf ile nasıl kullanılır görelim:

PRINTF'IN CEVIRIM KARAKTERLERI

d :Desimal
o :eek:ktal
x :heksadesimal
u :unsigned (isaretsiz)
c :karakter
s :string (karakter katari)
f :float (kayar nokta)

Bu karakterlerin önüne bir yüzde(%) işareti koyarak kullanabilirsiniz.
Yüzde ve karakterlerin arasına şunlar ilave edilebilir:

- :sahasının içinde sola dayanmış.
(n) :minimum saha uzunluğunu belirler.
. :n ile m'yi birbirinden ayırır.
(m) :float tipi için noktadan sonraki hane sayısı.
l :'long' tipi olduğunu belirtmek için.

Bu programı derleyip sonuçlarını inceleyin.Dilediğiniz gibi değiştirip,değişikliklerin ne işe yaradığını gözlemleyin.
 

merakettim

Homo Sapiens Sapiens
Özel üye
MANTIKSAL KARSILASTIRMALAR
KARSILAS.C:
PHP:
main() /* Bir suru karsilastirma */
{
int x = 11,y = 11,z = 11;
char a = 40,b = 40,c = 40;
float r = 12.987,s = 12.987,t = 12.987;

/* Birinci grup */

if (x == y) z = -13; /* z = -13 olacak */
if (x > z) a = 'A'; /* a = 65 olacak */
if (!(x > z)) a = 'B'; /* bu hicbir sey yapmayacak */
if (b <= c) r = 0.0; /* r = 0.0 olacak */
if (r != s) t = c/2; /* t = 20 olacak */

/* Ikinci grup */

if (x = (r != s)) z = 1000; /* x olumlu olacak ve
z = 1000 olacak */
if (x = y) z = 222; /* bu, x = y ve z = 222 yapar */
if (x != 0) z = 333; /* z = 333 olacak */
if (x) z = 444; /* z = 444 olacak */

/* Ucuncu grup */

x = y = z = 77;
if ((x == y) && (x == 77)) z = 33; /* z = 33 olur */
if ((x > y) || (z > 12)) z = 22; /* z = 22 olacak */
if (x && y && z) z = 11; /* z = 11 olur */
if ((x = 1) && (y = 2) && (z = 3)) r = 12.00; /* Bu ise,
x = 1, y = 2, z = 3, r = 12.00 yapar */
if ((x == 2) && (y = 3) && (z = 4)) r = 14.56; /* Birsey degistiremez */


/* Dorducu grup */

if (x == x); z = 27.345; /* z daima deger degistirir */
if (x != x) z = 27.345; /* Hicbirsey degismez */
if (x = 0) z = 27.345; /* x = 0 olur, z degismez */

}

Bu programı inceleyelim.

İlk başta 9 adet değişken tanımladık ve değerlerini verdik.(Biraz daha sabredin.Program çalışır haldeyken nasıl değer atanacağını pointerler konusunda göreceksiniz:))
"if" fonksiyonuna gelelim."if" eğer,şayet anlamlarını taşıyor.Bu program "if" için güzel bir örnek değil.İlerde daha güzel bi örnek bakarım.Şmdilik konumuz bu değil çünkü.
Birinci gurubun,1. satırına bakalım hemen.

if (x == y) z = -13; Bu satırın tam olarak okunuşu şu:Eğer x,y'ye eşit ise z ye -13 eşitle.

İlkdefa gördüğümüz çifteşit işaretinin(==) anlamı,x ve y'yi karşılaştır ve eşitliğini denetledir.Tek eşit olsaydı eğer anlamı şu olurdu:y'in x'e eşitle.
Anlamları farklı oluyor yani.Biri karşılaştırma,diğeri ise eşitleme.

İkinci satırda ise;
if (x > z) a = 'A'; var.Anlamı:Eğer x büyükse z'den,a'ya A karakterini eşitle.
Her bir satırı teker teker printf fonksiyonu koyarak deneyebilirsiniz.
Şimdi bi soru:Biz a'ya A karakteri eşitledik ama neden 65 oldu?
Eğer;
printf("%d",a);
yani çevrim karakteri "d" olursa,A karakteri 65 olur."d" değil de "c" kullanırsanız,a değişkeni A karakteri olur.
printf("%c",a);

Üçüncü satır,
if (!(x > z)) a = 'B';
Eğer x,z'den büyük değilse("!" olumsuzluk) a'nın değerini B karakterine eşitle.
Anlaşılabileceği "!" olumsuz işareti.
NOT:Karıştırmayın sakın.En başta x ve z 11'e eşitti.Lakin 1. satırda z -13 oldu ve ikinci satırda a 65 oldu.

Dördüncü satırda;
if (b <= c) r = 0.0;
Eğer b küçük veya eşitse c'ye,r'yi 0.0'a eşitle.

Beşinci gurup;
if (r != s) t = c/2;
Eğer r eşit değil ise s'ye,t yi c'nin yarısına eşitle.(c=40 ve yarısı 20)

==:Eşitlik kıyaslaması.
=:Eşit etmek.
!=:Eşit değil.
<:Küçük.
>:Büyük.
<=:Küçük eşit.
>=:Büyük eşit.

Gelelim 2. guruba.
Bu da hemen hemen aynı.Bir kaç nokta var üzerinde duracağımız.
if (x = (r != s)) z = 1000;
Eğer r farklıysa s'den,x'e olumlu değer ver ve z'yi 1000'e eşitle.
Eşitse x'e olumsuz değer ver.Dur.
Olumsuz değer her zaman "0"(sıfır)'ır.Olumlu değer ise sıfırdan farklı herhangi bir değerdir.Mesela "1" olur.Bu değerler char veya int tipi bir değişkene atanabilir.

2 satır;

if (x = y) z = 222;
x'i y'ye eşitle,z'yi 222'ye eşitle.

Yemek yeyip devam edelim.
 

merakettim

Homo Sapiens Sapiens
Özel üye
3. guruba bakalım;
if ((x == y) && (x == 77)) z = 33;
Eğer x eşitse y'ye ve x eşitse 77'ye,z'yi 33'e eşitle.
&& işaretinin anlamı tam olarak "ve" dir.z'nin 33'e eşit olması için iki koşul da doğru olmalıdır.Aksi halde 1. yanlışsa,2. doğruluğuna bile bakılmaz.Mantıksal karşılaştırmalarda işlemler soldan sağa doğru yapılır ve sonuçtan emin oluncaya kadar devam eder.

2. satır;
f ((x > y) || (z > 12)) z = 22;
Burada da herşey aynı.|| işaretinin anlamı "veya".
Eğer x büyükse y'den veya z büyükse 12'den,z'yi 22'ye eşitle.

OPERATORLERIN ISLEM SIRASI

Operatör dediğimiz ==,=,!= ..... yukarıda gördüğümüz karşılaştırma işaretleri diyebiliriz.
Bir de bunların işlem sıraları var.Bunlar derleyici kitaplarında anlatılır lakin kafa yormaya gerek yok.Hangi işlemin önce işlenmesini istiyorsak o işlemi parantez içine alırız olay biter.

BIR HILE

Üçüncü gurubun en son örneğinde ise, bir hile var. İlk önce, (x==2)'nin
olumsuz sonuç verdiğini görüyoruz. Ve daha önce gördüğümüz gibi, C dili
sonuçtan emin oluncaya kadar if komutunu işler. Yani hepsi (&&) ve olduğu için, vede ilk ifade olumsuz olduğu için, işlemi o noktada keser ve y,z ve r'nin değerleri değişmez.

Dördüncü guruptaki örneklerin hiçbiri çalışmaz. Bu gurup, başınızı derde
sokabilecek komutlardır.İlk örnekte, x == x komutu daima doğrudur fakat
hemen arkasından gelen noktalı virgül yüzünden, bundan sonra gelen
z=27.345 komutu ayrı bir komut olarak her zaman işlenir.

ikincisi daha kolay x daima x'e eşit olacağından, denklem daima yanlış
olacaktır. Son olarak, x'e sıfır değeri atanır ve parantezin sonucu sıfır
olduğundan z'ye atama yapılmaz.
 

merakettim

Homo Sapiens Sapiens
Özel üye
C'NIN CABUK TARAFLARI

C dilinde 3 tane,bakınca hiçbişeye benzemeyen lakin programlarken hız kazandıran 3 tane kestrme yol vardır.

KESTIRME.C:

PHP:
main()
{
int x = 0,y = 2,z = 1025;
float a = 0.0,b = 3.14159,c = -37.234;

/* Arttirma */
x = x + 1; /* Bu x i bir arttirir */
x++; /* Bu da.. */
++x; /* Bu da.. */
z = y++; /* z = 2, y = 3 */
z = ++y; /* z = 4, y = 4 */

/* Azaltma */
y = y - 1; /* Bu y nin degerini bir azaltir */
y--; /* Bu da.. */
--y; /* ve bu da.. */
y = 3;
z = y--; /* z = 3, y = 2 */
z = --y; /* z = 1, y = 1 */

/* aritmetik islemler */
a = a + 12; /* a ya 12 eklemek */
a += 12; /* 12 daha eklemek.. */
a *= 3.2; /* a yi 3.2 ile carpmak */
a -= b; /* b yi a dan cikarmak */
a /= 10.0; /* a yi ona bolmek */

/* sartli islemler */
a = (b >= 3.0 ? 2.0 : 10.5 ); /* Bu islem....... */

if (b >= 3.0) /* ve bu islemler.. */
a = 2.0; /* birbiri ile aynidir */
else /* ve ayni sonucu */
a = 10.5; /* saglarlar. */

c = (a > b?a:b); /* c, a yada b nin max ini alir */
c = (a > b?b:a); /* c, a yada b nin min ini alir. */
}

Programımızı herzamanki gibi teker teker inceleyelim.
Artırma işlemlerinde ilk üç satırı görüyorsunuz.Bu satırların her biri x'in değerini 1 artırır.

z = y++; Önce y'yinin değerini z'ye atar,sonra y'yi 1 artırır.(z=2,y=3)
z = ++y; Önce y'yi 1 artırır,sonra da z'ye atar.(y=3'ken z=4 ve y=4 oldu)

Azaltma gurubu da aynı artırma gurubu gibidir.Tek fark azaltır.:)

Aritmetik işlemler gurubuna bakalım.

a = a + 12; a'nın değerin al.12 ekle.a'ya ata.(a'yı 12 artır)

+= :Bu operatör daha önce görmediğimiz bir operatör.Bu operatörün anlamı sağdaki sayıyı soldakine ekle.Bu operatör çarpma,çıkarma ve bölme için de geçerlidir.

Gelelim şartlı işlemlereeee.

"if" fonksiyonunu küçücük anlatayım hemen."if" eğer(şayet),"else" değilse demek.

if (b >= 3.0)
a = 2.0;
else
a = 10.5;

Şayet b,3.0'dan büyük veya eşitse,a'yı 2.0 yap.Değilse a'yı 10.5 yap.
Pratik yazım şekli "a = (b >= 3.0 ? 2.0 : 10.5 );" böyledir.
Burada farklı olan sadce soru işareti(?)ve iki noktaüstüste:)).
Sonuç olumlu ise,soru işaretinin hemen önündeki sayıyı ata a'ya,olumsuz ise :)) dan sonra gelen sayıya ata a'yı.

Ödev de verelim mi?Yapmak isteyen yapsin.

5'den 20'ye kadar sayan bir program yazın.
 

merakettim

Homo Sapiens Sapiens
Özel üye
FOR Döngüsü,Fonksiyon Çağırma,Global Değişkenler

PHP:
#include <stdio.h>//kütüphanemiz
int a,c,z;//global değişkenlerimiz
int main()//programın başlayacağı yer
{//Programımızın başlaması için küme işaretimiz
  printf("\thttp://www.cerezforum.com\/c-programlama-diline-giris-t11119.html\n");//reklamımız:D
  a=10;//a'ya 10 atadık
  int b;//b değişkenimizin tipini integer tanımladık
 for(b=5;b<=9;b++)//döngümüz
  {//göngümüzün döneceği fonsiyon başlangıcı
      c=cikarma(a,b);//cıkarma fonksiyonuna a ve b'nin değerlerini ver,ürünümüzü c'ye ata
      printf("Her donusde \'b\' 1 artiyo\n\nB simdi %d ve \tC simdi:%d\n\n\n",b,c);// ekran çıktımız
  }//döngü bitti
  system("PAUSE");//bir tuşa basmamızı bekle	
  return 0;//programımızı güven ile kapat
}//programın sonu

cikarma( x, y)//çıkarma fonksiyonumuz
int x,y;// fonksiyonumuza gelecek değerlerin tipini tanımla
{//çıkarma fonksiyonumuzu aç
             z=x-y;// x'in y'den farkını z global değişkenimize ata
            return z;// z'yi(ürünü) geri gönder
}// cıkarma fonksiyonumuzun sonu

Uzun bi aradan sonra tekrar devam ediyoruz.Biraz hız kazanmak için bu programda 3 kuralı birden kullandım.Bir de notum olacak.Bu yüzden program biraz karışık gibi görüne bilir.Her satırı didik didik anlatacağım için gözünüzün korkmasına gerek yok;)

FOR döngümüzden başlayalım.Kullanım kuralları şöyle:
For döngümüzün parantezleri içerisinde şartlarımızı tanımlıyoruz.
PHP:
for(b=5;b<=9;b++)
Biz burada tam olarak şunu dedik:
b değişkenimize 5 değeri ver;
koşulumuz b 9'a eşit veya 9'dan küçük;
b'yi 1'er arttır.;
Koşullarımızı sağladığımıza göre,bu koşullarda dönmesini istediğimiz fonksiyonu küme parantezleri arasına yazabiliriz.

PHP:
 c=cikarma(a,b);
Çıkarma fonksiyonumuza git.Buraya göndereceğimiz iki değişkenimiz,sırası ile a ve b'dir.Gelen değeri c değişkenimize ata.

İşte burada fonksiyon çağırma,fonksiyona değer gönderme ve fonksiyondan değer getirme durumlarını anlatacağım.

a ve b değişkenlerimiz cikarma fonksiyonumuza giderken x ve y'ye değerlerini veriyor.Fonksiyonları bir fabrika gibi düşünün.Biz hammaddeyi atıyoruz,geri bize ürünümüz geliyor.Bir genel bilgi verecek olursak,printf() de bir fonksiyondur.Biz ona bir string gönderiyoruz(yada herhangi bir değişken) o da ürünümüzü(ekran çıktımızı) geri veriyor.Neyse konumuza dönelim.Cikarma fonksiyonumuza girerken,fonksiyonun dışında x ve y'nin tipini tanımladık.Daha sonra fonksiyonumuzun içinde x'in y'den farkını z'ye atadık ve return komutumuzla z'yi geri main fonksiyonumuza gönderdik.Sonra ekran çıktımızdan gösterdik.

Global Değişkenlere değinelim.Herhangi bir değişkenin hangi fonksiyonda tipini tanımlarsanız,sadece o fonksiyonda kullanabilirsiniz.Lakin global değişken olarak tanımlarsanız,o programın bütün fonksiyonlarında tanımlamanıza gerek kalmadan kullanabilirsiniz(kullanmamaya da bilirsiniz).Böyle bir durum küçük programlarda işe yaramaz lakin büyük programlarda size hız ve açıklık kazandıracaktır.

NOT:C'nin eski sürümlerinde değişken tipi herhangi biyerde değil,main programının başında tanımlanıyordu.Lakin şimdi istediğiniz yerde tanımlayabilirsiniz.Mesela b değişkenimizi tanımladığımız gibi.
 

Top