C Programlama
C Programlama
Alper Bayrak
¨
Abant ˙Izzet Baysal Universitesi
Bolu
2014
C Programlama
Sunuma Genel Bakı¸s
Sunuma Genel Bakı¸s I
1 DEY˙IMLER VE KONTROL AKIS
¸I
if Deyimi ve Ko¸sullu ˙I¸sle¸c
while Deyimi
do Deyimi
for Deyimi ve Virg¨
ul ˙I¸sleci
continue Deyimi
break Deyimi
goto Deyimi ve Etiketler
switch Deyimi
¨
Bir Ornek-Sayı
Sıralama
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
˙sle¸c
if Deyimi ve Ko¸sullu I¸
if Deyimi ve Ko¸sullu ˙I¸sle¸c
if deyimi, if anahtar s¨
ozc¨
u˘
gu
¨n¨
un arkasına parantez i¸cine
yazılmı¸s bir ifade ve pe¸sinden gelen bir deyimden olu¸sur.
T¨
um bunların arkasında, iste˘
ge ba˘
glı olarak, bir else anahtar
s¨ozc¨
u˘gu
¨ ve bir deyim bulunabilir. if’in bu iki ¸sekli a¸sa˘gıdaki
g¨osterimde ¨ozetlenmektedir:
if (ifade)
deyim
ve
if (ifade)
deyim
else
deyim
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
˙sle¸c
if Deyimi ve Ko¸sullu I¸
if Deyimi ve Ko¸sullu ˙I¸sle¸c
¨
Ornek
if (yas >65)
{
yasli kisiler++;
printf(”Yasli bir kisisiniz.\n”);
}
Bu programda, e˘ger yas 65’ten b¨
uy¨
ukse, blok i¸cindeki deyimler
¸calı¸stırılır, aksi takdirde, kontrol do˘
grudan bir sonraki deyime ge¸cer
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
˙sle¸c
if Deyimi ve Ko¸sullu I¸
if Deyimi ve Ko¸sullu ˙I¸sle¸c
¨
Ornek
Bir ¨onceki ¨orne˘gi, her ya¸stan ki¸siye hitap edecek ¸sekilde
de˘gi¸stirelim:
if (yas >65)
{
yasli kisiler++;
printf(”Yasli bir kisisiniz.\n”);
}
else
printf(”Henuz yasli bir kisi degilsiniz.\n”);
S
¸ imdi, deyiminiz, e˘ger yas 65’in u
¨st¨
unde ise, az ¨
onceki deyimle
aynı ¸sekilde davranacaktır, aksi takdirde yeni mesaj g¨or¨
unt¨
ulenecektir.
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
˙sle¸c
if Deyimi ve Ko¸sullu I¸
if Deyimi ve Ko¸sullu ˙I¸sle¸c
Genelde, parantez i¸cine alınmı¸s ifadenin de˘
geri do˘gru (sıfırdan
farklı) ise, ifadeden sonra gelen deyim i¸sletilir; ifadenin de˘geri
yanlı¸s (sıfır) ise, else anahtar s¨
ozc¨
u˘
gu
¨nden sonra gelen deyim
(varsa) i¸sletilir.
¨
Orneklerimizde
de g¨
or¨
uld¨
u˘
gu
¨ gibi, bu deyimler bile¸sik deyimler
olabilir, bu da bile¸sik deyimlerin daha ¨
once belirti˘gimiz iyi
¨ozelli˘gidir: Bir¸cok deyimden tek bir deyim olu¸stururlar.
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
˙sle¸c
if Deyimi ve Ko¸sullu I¸
if Deyimi ve Ko¸sullu ˙I¸sle¸c
¨
Ornek
˙I¸c i¸ce birden fazla if deyimi yazılabilir:
if (yas >65)
{
yasli kisiler++;
printf(”Yasli bir kisisiniz.\n”);
}
else if (yas >40) {
orta yastaki kisiler++;
printf(”Orta yastasiniz.\n”);
}
else if (yas >17) {
genc kisiler++;
printf(”Gencsiniz.\n”);
}
else
{
printf(”Cocuksunuz.\n”);
}
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
˙sle¸c
if Deyimi ve Ko¸sullu I¸
if Deyimi ve Ko¸sullu ˙I¸sle¸c
¨
Ornek
Her else kendisine en yakın if’e aittir.
if (yas >65)
{
if (yas >40)
printf(”Orta yastasiniz.\n”);
else
printf(”Cok yaslisiniz.\n”);
}
Dolayısıyla yukarıdaki kodun kar¸sılı˘
gı a¸sa˘
gıdaki gibidir.
if (yas >= 65)
printf(”Cok yaslisiniz.\n”);
else if (yas >40)
printf(”Orta yastasiniz.\n”);
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
˙sle¸c
if Deyimi ve Ko¸sullu I¸
if Deyimi ve Ko¸sullu ˙I¸sle¸c
if (ifade 1)
de˘gi¸sken = ifade 2;
else
de˘gi¸sken = ifade 3;
¸seklindeki bir if deyimi, ko¸sullu i¸sle¸c kullanılarak
de˘gi¸sken = ifade 1 ? ifade 2 : ifade 3;
¸seklinde basit¸ce yazılabilir.
Genelde, C dilindeki tek u
¨¸c-i¸slenenli (¨
uc¸l¨
u) i¸sle¸c olan ”?:”
i¸sleci, ¨once ifade 1’i hesaplar ve e˘
ger ifade 1 do˘gru ise
ifade 2’nin de˘gerini, aksi takdirde ifade 3’¨
un de˘gerini verir.
Son iki ifadeden sadece biri hesaplanır.
Sonucun tipi, ¨onceki b¨
ol¨
umde anlatılan d¨
on¨
u¸su
¨m kurallarına
g¨ore ifade 2 ve ifade 3 birlikte dikkate alınarak belirlenir.
”?:” i¸slecinin sa˘gdan sola do˘
gru birle¸sme ¨
ozelli˘gi vardır.
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
˙sle¸c
if Deyimi ve Ko¸sullu I¸
if Deyimi ve Ko¸sullu ˙I¸sle¸c
¨
Ornek
”?:” i¸sleci i¸cin a¸sa˘gıdaki gibi bir ¨
ornek verilebilir:
printf(yas>65 ? ”Yasli birisiniz.\n”
: ”Henuz yasli degilsiniz.\n”);
G¨ord¨
u˘gu
¨n¨
uz gibi, hem ifade 2 hem de ifade 3 karakter dizileri ise,
sonu¸c bir karakter dizisidir. ”?:” i¸sleci de˘
gi¸smez ifadelerde de kullanılabilir.
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
while Deyimi
while Deyimi
while deyimi d¨ong¨
uler olu¸sturmak i¸cin kullanılır. S¨ozdizimi
¸s¨oyledir:
while (ifade)
deyim
¨
Once
ifade hesaplanır. E˘
ger do˘
gru ise, deyim y¨
ur¨
ut¨
ul¨
ur, sonra
da ifade tekrar hesaplanır.
˙Ifadenin hesaplanmasında yanlı¸s (0) sonucu elde edilinceye
kadar bu devam eder; bu durumda kontrol bir sonraki deyime
ge¸cer.
E˘ger ba¸slangı¸cta ifade yanlı¸ssa, tekrarlanan deyim hi¸c
¸calı¸stırılmaz.
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
while Deyimi
while Deyimi
¨
Ornek
while (yas>35)
{
genc kisiler++;
scanf(”%d”,yas);
}
E˘ger yas, bu deyimden ¨
once, 35 veya daha b¨
uy¨
uk bir sayı ise blok
hi¸c y¨
ur¨
ut¨
ulmeyecektir. Aksi takdirde, 35’ten b¨
uy¨
uk veya e¸sit bir
sayı girilinceye kadar defalarca y¨
ur¨
ut¨
ulecektir.
While deyimi kullanılarak a¸sa˘
gıdaki gibi sonsuz d¨
ong¨
u de olu¸sturulabilir.
while (1)
printf(”C’yi cok seviyorum!\n”);
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
do Deyimi
do Deyimi
do deyimi while deyiminin yakın bir akrabasıdır; o kadar ki
s¨ozdiziminde while anahtar s¨
ozc¨
u˘
gu
¨n¨
u i¸cerir:
do
deyim
while (ifade);
do’nun while’dan tek farkı ifadeyi, tekrarlanan deyimin
y¨
ur¨
ut¨
ulmesinden sonra hesaplamasıdır.
Bunun anlamı, ne olursa olsun, do deyiminde en az bir defa
d¨ong¨
uye girildi˘gidir
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
do Deyimi
do Deyimi
¨
Ornek
Birisinin ya¸sını sorup, olumlu bir sayı girilinceye kadar sormaya
devam eden, ¨ornek bir do deyimi ¸s¨
oyledir:
do
{
printf(”Lutfen yasinizi giriniz.\n”);
scanf(”%d”, &yas);
} while (yas<=0);
Normal olarak, her do deyiminde, burada da oldu˘
gu gibi, bir blok
¸seklinde yazılan i¸cteki deyim en az bir defa y¨
ur¨
ut¨
ul¨
ur.
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
do Deyimi
do Deyimi
Figure: while ve do deyimlerinin akı¸s c¸izenekleri
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
˙sleci
for Deyimi ve Virg¨
ul I¸
for Deyimi ve Virg¨ul ˙I¸sleci
for deyimi, for anahtar s¨
ozc¨
u˘
gu
¨, arkasında parantez i¸cinde iki
noktalı virg¨
ulle ayrılmı¸s u
¨c¸ ifade ve ondan sonra gelen bir deyimden
olu¸sur.
˙Ifadelerden herhangi biri var olmayabilir, ancak noktalı virg¨
uller
bulunmalıdır. for deyiminin nasıl i¸sledi˘
gini anlatmanın en iyi yolu,
e¸sde˘
ger bir while deyimi ile onu ifade etmektir.
E˘
ger
for (ifade 1opt ; ifade 2opt ; ifade 3opt )
deyim
¸seklinde bir deyimimiz varsa,
ifade 1;
while (ifade 2) {
deyim
ifade 3;
}
deyimi, for deyimi ile aynı i¸si yapacaktır.
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
˙sleci
for Deyimi ve Virg¨
ul I¸
for Deyimi ve Virg¨ul ˙I¸sleci
for (ifade 1opt ; ifade 2opt ; ifade 3opt )
deyim
E˘
ger for deyimindeki ifade 2 bo¸ssa, s¨
urekli olarak do˘gru oldu˘gu
¸seklinde yorumlanacak ve sonsuz bir d¨
ong¨
un¨
uz olacaktır.
˙Ifade 1, d¨
ong¨
uy¨
u kontrol eden de˘
gi¸skenleri ilklemek i¸cin;
ifade 2, d¨
ong¨
uy¨
u durdurmak i¸cin gereken ko¸sulları belirlemede;
ifade 3 de d¨
ong¨
u i¸cindeki bazı de˘
gi¸skenlerin de˘
gerlerini de˘gi¸stirmede
kullanılır.
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
˙sleci
for Deyimi ve Virg¨
ul I¸
for Deyimi ve Virg¨ul ˙I¸sleci
¨
Ornek
A¸sa˘gıdaki kod, ’dizi’ dizisinin ilk n elemanına sıfır atar ve n sayıda
satır g¨or¨
unt¨
uler;
for (i=0; i<n; i++)
{
dizi[i] = 0;
printf(”Dizinin %d nolu elemanina 0 atanmistir.\n”, i);
}
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
˙sleci
for Deyimi ve Virg¨
ul I¸
for Deyimi ve Virg¨ul ˙I¸sleci
¨
Ornek
for (bosluklar=0; getchar()==’ ’; bosluklar++)
;
Bu deyim girdi akı¸sındaki bo¸slukları sayar.
Bu durumda, parantez i¸cine alınmı¸s olan ifadelerin gereken
her ¸seyi yaptı˘gına ve tekrarlanan deyimin bo¸s deyim oldu˘guna
dikkat ediniz.
for’un deyiminin bo¸s oldu˘
gunu vurgulamak i¸cin, noktalı virg¨
ul
ikinci satıra yazılmı¸stır.
Sık yapılan hatalardan bir tanesi de for deyiminin sa˘g
parantezinin hemen arkasına noktalı virg¨
ul koymak, b¨oylece
deyimi tek bir seferde y¨
ur¨
ut¨
ulecek normal bir deyim haline
getirmektir.
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
˙sleci
for Deyimi ve Virg¨
ul I¸
for Deyimi ve Virg¨ul ˙I¸sleci
¨
Ornek
for ( ; sayac 1 && sayac 2; sayac 1- -, sayac 2- -) {
...
}
Bazen, for deyiminde ifade 1 ve ifade 3 adını verdi˘gimiz
yerlerde birden fazla ifadenin bulunması daha uygun olabilir.
¨ gin, iki tane sayacın bulundu˘
Orne˘
gunu ve d¨
ong¨
uden herhangi
birisinin sıfır oldu˘
gu zaman ¸cıkılması gereken bir durumu ele
alalım.
Bunu yapmanın en iyi y¨
ontemi yukarıdaki gibidir.
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
˙sleci
for Deyimi ve Virg¨
ul I¸
for Deyimi ve Virg¨ul ˙I¸sleci
¨
Ornek
for ( ; sayac 1 && sayac 2; sayac 1- -, sayac 2- -) {
...
}
Bu, virg¨
ul i¸slecinin en c¸ok kullanıldı˘
gı yerlerden biridir.
Virg¨
ul i¸sleci iki ifadeden tek bir ifade olu¸sturmaya yarar.
Her zaman ikinci i¸slenenden ¨
once ilk i¸sleneni hesaplar ve
soldan sa˘ga birle¸sir. Sonucu ise sadece ikinci ifadenin
de˘geridir. Sonucun tipi de ikinci ifadenin tipiyle aynıdır.
Virg¨
ul i¸sleci, C’nin i¸sle¸cleri arasında en d¨
u¸su
¨k ¨onceli˘ge
sahiptir.
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
continue Deyimi
continue Deyimi
continue deyimi sadece bir d¨
ong¨
un¨
un g¨
ovdesi i¸cinde, yani
while, do veya for’un tekrarlanan deyiminde, ge¸cerlidir.
Bu deyim y¨
ur¨
ut¨
uld¨
u˘
gu
¨nde, d¨
ong¨
u g¨
ovdesinin i¸cindeki geri
kalan deyimler atlanır ve hemen d¨
ong¨
un¨
un devamlılık testine
ge¸cilir.
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
continue Deyimi
continue Deyimi
¨
Ornek
A¸sa˘gıdaki kod ile (5 hari¸c) 10’dan 1’e kadar b¨
ut¨
un tamsayılar,
olumsuzları ile birlikte, yazılırlar.
for (a=10; a>0; a- -) {
b = -a;
if (b==-5)
continue;
printf(”%d sayisinin olumsuzu %d sayisidir.\n”, a, b);
}
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
continue Deyimi
continue Deyimi
¨
Ornek
A¸sa˘gıdaki kod 100’e kadar 4’¨
un katlarını g¨
or¨
unt¨
uler.
a = 0;
while (a<100) {
a++;
if (a%4)
continue;
printf(”%d\n”, a);
}
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
break Deyimi
break Deyimi
break deyimi continue ile yakından ilintilidir.
continue deyimi yeni bir yinelemenin ba¸slaması amacıyla
d¨ong¨
un¨
un sonuna atlarken, break, i¸cinde kaldı˘gı en k¨
u¸cu
¨k
d¨ong¨
un¨
un dı¸sına atlar ve d¨
ong¨
u deyiminin tamamen sona
ermesine yol a¸car.
Ba¸ska durumlar dı¸sında, break ”sonsuz” d¨
ong¨
ulerden ¸cıkı¸s i¸cin
kullanılır.
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
break Deyimi
break Deyimi
¨
Ornek
while (1) {
scanf(”%d”, &yas);
if (yas<=0)
break;
printf(”Bir sonraki kisi %d yasindadir.\n”, yas);
}
Burada, olumlu olmayan bir sayı girildi˘
ginde, break deyimi
kontrol¨
u while’dan sonraki deyime aktarır.
˙I¸cinde break bulunan bir program par¸cası break olmadan da
yazılabilece˘gine g¨
ore, break kullanmak bir tercih sorunudur.
break sadece switch, do, while ve for deyimlerinden ¸cıkı¸s i¸cin
kullanılabilir. Ba¸ska yerlerde kullanılamaz.
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
goto Deyimi ve Etiketler
goto Deyimi ve Etiketler
Her C deyimine, deyimden ¨
once bir tanıtıcı s¨
ozc¨
uk ve iki
nokta u
¨st u
¨ste koyarak bir etiket ili¸stirilebilir.
Bir deyimi etiketlemek suretiyle, gerekti˘
ginde o deyime
ula¸smak i¸cin kullanılabilecek bir ”adres” verilir.
Bir fonksiyon i¸cinde birden fazla deyime aynı isim, etiket
olarak, verilemez.
Bir etiket ve onun arkasına bir deyim yeni bir deyim olu¸sturur.
Bu t¨
ur bir deyime etiketli deyim denir:
tanıtıcı s¨ozc¨
uk : deyim
goto deyimi, kontrol¨
u do˘
grudan etiketli deyime aktarır.
S¨ozdizimi s¨oyledir:
goto tanıtıcı s¨ozc¨
uk;
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
goto Deyimi ve Etiketler
goto Deyimi ve Etiketler
Tanıtıcı s¨ozc¨
uk aynı fonksiyon i¸cinde var olan bir etiket
olmalıdır.
goto kullanarak, fonksiyon i¸cinde (dı¸sında de˘
gil) herhangi bir
yere atlanabilir; ileri veya geriye do˘
gru, istenildi˘gi kadar i¸ci¸ce
ge¸cmi¸s d¨ong¨
u veya blokların i¸cine veya dı¸sına, istedi˘giniz bir
yere gidebilirsiniz.
goto’nun sorumsuzca kullanımı, anla¸sılması ve bakımı
yapılması olanaksız programlar yaratabilir.
Kuramsal olarak, anlambilimsel hi¸cbir yitime u˘gratılmadan,
goto bir programdan ¸cıkarılıp yerine d¨
ong¨
u ve if deyimleri
konulabilir.
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
goto Deyimi ve Etiketler
switch Deyimi
switch deyimi bir¸cok ¸sıktan bir tanesini se¸cmede kullanılırve s¨oz
dizimi a¸sa˘gıdaki gibidir.
switch (ifade)
deyim
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
goto Deyimi ve Etiketler
¨
Ornek
switch ( getche()) {
case ’r’:
case ’R’:
rezervasyon yapma();
break;
case ’l’:
case ’L’:
yolcu listeleme();
break;
case ’c’:
case ’C’:
cikis();
break;
default:
printf(”Yanlis secenek... Tekrar
deneyin.\n”);
}
Bu ¨
ornek switch’in t¨
um ¨onemli
ozelliklerini g¨
¨
ostermektedir.
Parantez i¸cine yazılmı¸s tamsayı
tipindeki (bu ¨
ornekte oldu˘gu gibi,
bir karakter de olabilir) sayı ifadesi
hesaplanır, ¨
on¨
une case anahtar
s¨
ozc¨
u˘
gu
¨ getirilmi¸s olan de˘gi¸smez
ifadelerden birinin de˘geri buna
uyuyorsa kontrol bu case etiketli
deyime aktarılır ve buradan sıralı
olarak devam eder.
E˘
ger hi¸cbir case etiketindeki de˘ger
ifadenin de˘
gerine uymuyorsa, iki
olasılık vardır: Deyim i¸cinde bir
default etiketi varsa, kontrol buraya
aktarılır, aksi takdirde switch
deyiminden ¸cıkılır.
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
goto Deyimi ve Etiketler
¨
Ornek
switch ( getche()) {
case ’r’:
case ’R’:
rezervasyon yapma();
break;
case ’l’:
case ’L’:
yolcu listeleme();
break;
case ’c’:
case ’C’:
cikis();
break;
default:
printf(”Yanlis secenek... Tekrar
deneyin.\n”);
}
Hi¸cbir break konulmadı˘gı takdirde,
r veya R girildi˘
ginde, b¨
ut¨
un
fonksiyonlar (rezervasyon yapma,
yolcu listeleme vs) ¸ca˘grılacak ve
hata mesajı da basılacaktır.
Bundan dolayı hemen hemen b¨
ut¨
un
switch deyimlerinde break’ler
bulunur.
¨
Ornekte
oldu˘
gu gibi, switch’teki
parantez i¸cindeki ifadeden sonra
gelen deyim genelde bir bloktur.
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
goto Deyimi ve Etiketler
switch Deyimi
case ve default etiketleri switch deyimleri dı¸sında
kullanılamazlar.
Ayrıca, bir switch deyimi i¸cinde birden fazla default etiketi ve
aynı switch i¸cinde aynı de˘
gere sahip birden fazla case etiketi
olamaz.
¨
Ornek
switch (yas)
case 20:
case 40:
case 60:
printf(”20, 40 yada 60 yasindasiniz.\n”);
C Programlama
DEY˙IMLER VE KONTROL AKIS
¸I
goto Deyimi ve Etiketler
¨
Bir Ornek-Sayı
Sıralama
Girilen tamsayıları artan sıraya g¨
ore sıralayan, a¸sa˘
gıdaki program,
if, while, do, for ve break deyimlerini ¨
orneklemek i¸cin verilmi¸stir.
¨
Ornek
program 4
Download

C Programlama - Alper BAYRAK - Abant İzzet Baysal Üniversitesi