Слайд 4FONKSIYONLAR I (ALT PROGRAMLAR)
C Programlama Dili fonksiyon olarak adlandırılan alt programların birleştirilmesi
kavramına
dayanır. Bir C programı bir yada daha çok fonksiyonun bir araya gelmesi ile oluşur. Bu özellik
bütün Yapısal Diller'in (C, Fortran, Pascal, ...) temelini oluşturur. Yapısal Diller'e hakim olmak için
fonksiyon oluşturmayı ve kullanmayı iyi öğrenmek gerekir.
Bu bölümde, C Programlama Dili'ndeki fonksiyon kavramı, sonraki bölümde esnek argümanlı
fonksiyonlar ve main() fonksiyonu irdelenecektir.
Слайд 5Fonksiyon Kavramı
Fonksiyon, belirli sayıda verileri kullanarak bunları işleyen ve bir sonuç üreten
komut grubudur.
Her fonksiyonun bir adı ve fonksiyona gelen değerleri gösteren argumanları (bağımsız
değişkenleri) vardır. Genel olarak bir fonksiyon Şekil 8.1'deki gibi bir kutu ile temsil edilir:
Слайд 6Fonksiyon Bildirimi
1. Ana programdan önce:
2. ...
3. int topla(int x,int y) /* fonksiyon
*/
4. {
5. ...
6. }
7. ...
8. main()
9. {
10. ...
11. }
12. Ana programdan sonra: Bu durumda fonksiyon örneği (function prototype) ana programdan
önce bildirilmelidir.
13. ...
14. int topla(int x, int y); /* fonksiyon örneği */
15. ...
16. main()
17. {
18. ...
19. }
20. ...
21. int topla(int x, int y) /* fonksiyon */
22. {
23. ...
24. }
Слайд 7Bir C programı içinde, yazmış olduğunuz fonksiyonlar genellikle bu iki tipte kullanılır.
İkinci
kullanımda fonksiyon prototipi mutlaka bildirilmelidir. Aksi halde bir hata mesajı ile karşılaşılır.
Fonksiyon prototipinde arguman isimlerinin yazılması zorunlu değildir. Sadece arguman tiplerini
belirtmek de yeterlidir. Yukarıdaki topla fonksiyona ait prototip:
int topla(int x, int y);
şekinde yazılabileği gibi
int topla(int, int);
şeklinde de yazılabilir.
Слайд 8Geri Dönüş Değerleri
return anahtar sözcüğünün iki önemli işlevi vardır:
1. fonksiyonun geri dönüş
değerini oluşturur
2. fonksiyonu sonlandırır
Bu deyiminden sonra bir değişken, işlem, sabit veya başka bir fonksiyon yazılabilir. Örneğin:
return (a+b/c); /* parantez kullanmak zorunlu değil */
return 10; /* değişken kullanmak mecbur değil */
return topla(a,b)/2.0; /* önce topla fonksiyonu çalışır */
Bir fonksiyonda birden çok geri dönüş değeri kullanılabilir. Fakat, ilk karşılaşılan return deyiminden sonra fonksiyon sonlananır ve çağrılan yere bu değer gönderilir. Örneğin aşağıdaki harffonksiyonunda beş tane return deyimi kullanılmıştır.
char harf(int not)
{
if( not>=0 && not<50 ) return 'F';
if( not>=50 && not<70 ) return 'D';
if( not>=70 && not<80 ) return 'C';
if( not>=80 && not<90 ) return 'B';
if( not>=90 ) return 'A';
}
Слайд 10void Fonksiyonlar
Bir fonksiyonun her zaman geri dönüş değerinin olması gerekmez. Bu durumda
return deyimi
kullanılmayabilir. Eğer bu anahtar kelime yoksa, fonksiyon ana bloğu bitince kendiliğinden
sonlanır. Böyle fonksiyonların tipi void (boş, hükümsüz) olarak belirtilmelidir. Bu tip fonksiyonlar
başka bir yerde kullanılırken, herhangi bir değişkene atanması söz konusu değildir, çünkü geri
dönüş değeri yoktur. Ancak, void fonksiyonlara parametre aktarımı yapmak mümkündür.
Program 8.3'de void fonksiyona örnek olarak bankamatik fonksiyonu ve kullanımı gösterilmiştir.
Bu fonksiyon kendisine parametre olarak gelen YTL cinsinden para miktarını 20, 10 ve 5 YTL'lik
birimler halinde hesaplar. Girilen miktar 5 YTL'nin bir katı değilse, ekrana uygun bir mesaj
gönderir. bankamatik fonksiyonu bir dizi hesap yapmasına rağmen geriye hiç bir değer göndermez.
Слайд 11Fonksiyon Parametreleri
Fonksiyon parametreleri (argümanları) klasik ve modern olmak üzere iki türlü tanımanabilir.
Örneğin
aşağıdaki fonksiyon kendisine parametre olarak gelen tamsayının faktoriyelini gönderir.
Bu fonksiyonun parametresi (n):
int faktoriyel(n) /* kalsik biçim */
int n
{
int i=1, f=1;
while(i<=n) f *= i++;
return f;
}
şeklinde yada:
int faktoriyel(int n) /* modern biçim */
{
int i=1, f=1;
while(i<=n) f *= i++;
return f;
}
şeklinde yazılabilir.
Слайд 12Yapısal Programlama
Program içinde birden çok fonksiyon tanımlayıp kullanmak mümkündür. Yani C Programlama
Dili
fonksiyonların inşası dayalı bir dildir. Bu özelliklik bütün Yapısal Programlama Dilleri'nin
(Structred Programming) temelini oluşturur. Birden çok fonksiyonun main tarafından nasıl
çağrıldığını temsil eden blok diyagram Şekil 8.2'de gösterilmiştir.
Слайд 13Makro Fonksiyon Tanımlaması
Başlık dosyalarında, bol miktarda makro fonksiyon uygulamalarına rastlanır. Makro
tanımlaması #define
önişlemci komutu kullanılarak yapılır. Örneğin aşağıdaki makro fonksiyonlar
geçerlidir.
#define kare(x) (x)*(x)
#define delta(a,b,c) ((b)*(b)-4*(a)(c))
#define yaz() puts("Devam etmek için bir tuşa basın...")
Bu şekilde tanımlanan fonksiyonların kullanımı diğerleri gibidir. Yalnızca programın başında
tanımlanır. Ancak, bu tanımlamalarla fonksiyon bellekte bir yer işgal etmez.
Basit bir makro fonksiyon uygulaması Program 8.6'da
gösterilmiştir. buyuk(a,b) makrosu a>b ise a değerini aksi halde b değerini gönderir.