Bilgisayar Ve Programlamaya Giriş Dersi 8. Ünite Sorularla Öğrenelim

Fonksiyonlar

1. Soru

Fonksiyonların giriş argümanları tanımlanırken nelere dikkat edilmelidir?

Cevap

Fonksiyonun giriş argümanları olarak dışarıdan, bir diğer ifade ile main() ortamından kaç değişken alması gerektiği belirlenmelidir. Argüman sayısı fonksiyon tanımı, fonksiyonun çağrılması ve fonksiyon bloğu bölümlerinde birbirleri ile tutarlı olmalıdır. Argüman bölümüne void ifadesi yazıldığı durumda ise fonksiyonun bir giriş değeri almadığı kabul edilir. Herhangi bir giriş değeri (argüman) almayan fonksiyonlar, her yerden erişilebilen genel (global) değişkenleri kullanarak işlem yapabilecekleri gibi, açıklama içeren ekrana yazdırma işlemlerini gerçekleştirebilirler.


2. Soru

Fonksiyonların çıkış değerleri nasıl tanımlanır?

Cevap

Çıkış değerini fonksiyon_tipi bölümü belirleyecektir. Fonksiyon tipi de int, float, double, char vb. değişken türlerinden herhangi bir tanesi olabilir. Fonksiyon yaptığı işlemin ardından, main() ortamına herhangi bir değer geri döndürmüyor ise fonksiyon_tipi bölümüne void ifadesi yazılır. Geri değer döndürmeyen fonksiyonlara, main()’den fonksiyona gönderilen değerleri printf fonksiyonu kullanarak ekrana yazdıran fonksiyonlar örnek olarak gösterilebilir.


3. Soru

Dinamik bellek ayırma için hangi fonksiyonlar kullanılabilir?

Cevap

Dinamik bellek ayırma işlemleri için C’de bulunan hazır kütüphane fonksiyonlarından malloc, calloc, realloc ve free fonksiyonları kullanılabilir. Bu fonksiyonlar stdlib.h başlık dosyasını kullanırlar.


4. Soru

Fonksiyon tanımlama nasıl yapılır?

Cevap

Bir fonksiyonu kullanmadan önce, değişken tanımlamada olduğu gibi fonksiyonu tanımlamak gerekmektedir. Tanımlama aşamasında fonksiyonun giriş ve çıkış değerlerinin sayısı ve türü belirtilir. Yapılacak işlemler ise fonksiyon bloğunun içindeki kod satırları ile sağlanır. Fonksiyon tanımında genel bir kural olmamakla birlikte, fonksiyon adını amacına uygun bir şekilde belirlemek daha uygun olacaktır. 

Fonksiyon tanımı;

fonksiyon_tipi fonksiyon_adı(tip1 arguman1, tip2 arguman2);
veya
fonksiyon_tipi fonksiyon_adı(tip1, tip2);
şeklinde yapılır. Tanımlama satırında argüman değişkenlerinin adını(arguman1, ar- guman2) yazma zorunluluğu yoktur.


5. Soru

Fonksiyonlar hangi türlere ayrılabilir?

Cevap

Fonksiyonlar C kütüphanesinin içerisinde yer alan hazır fonksiyonlar(printf, scanf, pow vb.) şeklinde olabileceği gibi, programcı tarafından ihtiyaca göre sonradan oluşturulmuş fonksiyonlar da olabilirler. Fonksiyonun kullanılabilmesi için tanımlanması, fonksiyon bloğunun olması ve fonksiyonun çağrılması gereklidir.


6. Soru

Fonksiyona değer yöntemiyle nasıl argüman geçirilir?

Cevap

Değer yöntemi ile çağırma işlemi, Fonksiyona iletilen değişkenlerin(argümanların) yalnızca sayısı kadar tip bildirimi iletilmekte olup, fonksi-yon bloğu aktif olduğu anda, fonksiyonun kendi içerisinde, gönderilen argümanların birer kopyası oluşturulmaktadır. Bir diğer ifade ile, fonksiyon içerisindeki işlemlerde, main() fonksiyonunda ilk anda oluşturulan orijinal veri yerine kopyası ile işlem yapılmaktadır. Böylece fonksiyon içerisinde orijinal değerler değiştirilememektedir.


7. Soru

Fonksiyonlara argüman geçirme hangi yollarla yapılabilir?

Cevap

İçerisine argüman alan fonksiyonlarda, bu argümanların gönderilmesi için iki farklı yöntem bulunmaktadır. Bunlar değer yöntemi (call by value) ve referans yöntemi (call by reference) ile çağırmadır.


8. Soru

Referans yöntemi ile argüman geçirildiğinde neden return ifadesi çok fazla kullanılmaz?

Cevap

Referans yöntemi ile argüman geçirildiğinde, çoğunlukla fonksiyondan bir geri dönüş değerine ihtiyaç kalmamaktadır. Bu nedenle fonksiyonun son bölümünde de return ifadesi yer almamaktadır.


9. Soru

Fonksiyon tanımlarken nelere dikkat edilmelidir?

Cevap

Bir fonksiyonu kullanmadan önce, değişken tanımlamada olduğu gibi fonksiyonu tanımlamak gerekmektedir. Tanımlama aşamasında fonksiyonun giriş ve çıkış değerlerinin sayısı ve türü belirtilir. Yapılacak işlemler ise fonksiyon bloğunun içindeki kod satırları ile sağlanır. Fonksiyon tanımında genel bir kural olmamakla
birlikte, fonksiyon adını amacına uygun bir şekilde belirlemek daha uygun olacaktır. Örneğin toplama işlemi yapan fonksiyonun topla şeklinde kullanılması, program kodlarının daha sonra, farklı kişiler tarafından kontrolü veya güncellemesi esnasında fonksiyonu daha anlaşılır hâle getirecektir. Fonksiyon tanımlama satırı, main() öncesinde, “#include” ifadesini içeren önişlemci bölümünün hemen altında yapılabilir. Böylece, main() fonksiyonu içerisinde fonksiyonu kullanabilme yetkisi oluşturulmuş olur.


10. Soru

Dinamik bellek ayırma işlemi nedir?

Cevap

C programlama dilinde, değişkenlerle veya herhangi bir dosyadan okunan verileri kullanarak işlemler gerçekleştirirken, bellekte verilerin büyüklüğüne göre sürekli yeni yerler ayrılır. Ancak bu verilerin büyüklüğü veya aynı anda birden çok programın çalıştırılması gereken durumlarda, programın çalıştırıldığı bilgisayarın belleğinin kapasitesine göre yetersizlik gösterebilir. Bu nedenle verilere sürekli yeni bellek alanları tahsis eden statik değişken atama yöntemi yerine, gerektiğinde bellekte yer açıp işlem bittiğinde o bellek alanını boşa çıkaran dinamik bellek atama işlemi gerekebilir. Böylece bellek daha verimli bir şekilde kullanılabilir.


11. Soru

Fonksiyona değer yöntemi ile argüman geçirme işlemi nasıl yapılır?

Cevap

Değer yöntemi ile çağırma işlemi, daha önce soru 11’de kullanılmış olan topla(), carp() fonksiyonlarının kullanımına benzer bir yapıdadır. Fonksiyona iletilen değişkenlerin (argümanların) yalnızca sayısı kadar tip bildirimi iletilmekte olup, fonksiyon bloğu aktif olduğu anda, fonksiyonun kendi içerisinde, gönderilen argümanların birer kopyası oluşturulmaktadır. Bir diğer ifade ile fonksiyon içerisindeki işlemlerde, main() fonksiyonunda ilk anda oluşturulan orijinal veri yerine kopyası ile işlem yapılmaktadır. Böylece fonksiyon içerisinde orijinal değerler değiştirilememektedir


12. Soru

strcpy() fonksiyonu ne amaçla ve nasıl kullanılır?

Cevap

Zaman zaman farklı karakter dizgilerini bir arada kullanarak işlem yapmak gerekebilir. Bu durumdaki fonksiyonlara örnek olarak strcpy verilebilir. strcpy(birinci, ikinci) fonksiyonu, parantezler arasında iki parametre(veri-değişken) alır. Bunlardan ikincisini birinciye kopyalar.


13. Soru

Fonksiyon nedir?

Cevap

C Programlama dilinde, fonksiyonlar önemli bir yapıya sahip alt program kodlarıdır. Fonksiyonlar, yazılan program kodlarının daha modüler bir şekilde yapılandırılmasını sağlarlar. Fonksiyonların kullanımı sayesinde program kodları daha küçük alt bölümlere ayrılabilmektedir.


14. Soru

main() fonksiyonu ile diğer fonksiyonlar arasındaki ilişki nedir?

Cevap

Matematiksel ifadelerde kullanılan fonksiyonlara (örnek:


15. Soru

Kütüphane fonksiyonlarından en çok kullanılanları hangileridir?

Cevap

Kütüphane fonksiyonlarından en çok kullanılanları math.h, string.h, ctype.h, ve stdlib.h fonksiyonlarıdır.


16. Soru

strcat() fonksiyonu nedir?

Cevap

Sıklıkla kullanılan bir diğer dizgi fonksiyonu ise, strcat( birinci, ikinci) fonksiyonudur. Bu fonksiyon aldığı iki adet giriş dizgilerinden ikincisini birincisinin sonuna boşluk bırakmadan ekler.


17. Soru

Programın alt bölümler halinde çalıştırılmasının ne gibi avantajları vardır?

Cevap

Programın alt bölümler hâlinde çalıştırılması, yapılması gerekli işlemlerin farklı fonksiyonlar hâlinde gerçekleştirilmesini sağlayarak kodlamada bir hata oluştuğunda hata tespitini kolaylaştıracaktır. Olası olumsuzluklar durumunda, hatayı tüm ana kod içerisinde aramak yerine, alt programcıklar anlamına gelen, ilgili fonksiyonlar içerisinde, ilgisi olabilecekler arasından kontrol edebilme imkânı sağlayacaktır.


18. Soru

Karakterleri veya dizgileri kullanarak işlem yapan hazır kütüphane fonksiyonları hangi başlık dosyaları tarafından içebilirler?

Cevap

Karakterleri veya dizgileri kullanarak işlem yapan hazır kütüphane fonksiyonları string.h ve ctype.h başlık dosyaları tarafından içerilirler.


19. Soru

Fonksiyon tanımı nasıl yapılır?

Cevap

Tanımlama fonksiyon_tipi fonksiyon_adı(tip1 arguman1, tip2 arguman2); veya fonksiyon_tipi fonksiyon_adı(tip1, tip2); şeklinde yapılır. Tanımlama satırında argüman değişkenlerinin adını(arguman1, arguman2) yazma zorunluluğu yoktur. İkinci ifadede olduğu gibi, yalnızca tiplerini (int, float, double, char vb.) yazmak yeterlidir. Ancak parantez içerisindeki toplam argüman sayısı önemlidir.


21. Soru

strcat( birinci, ikinci) fonksiyonunun işlevi nedir?

Cevap

strcat( birinci, ikinci) fonksiyonu, aldığı iki adet giriş dizgilerinden ikincisini birincisinin sonuna boşluk bırakmadan ekler.


22. Soru

Fonksiyonun görevi olan işlemi gerçekleştiren fonksiyon bloğu nasıl tanımlanır?

Cevap

Fonksiyonun görevi olan işlemi gerçekleştiren fonksiyon bloğu aşağıdaki gibi oluşturulur. fonksiyon_tipi fonksiyon_adı(arguman1,arguman2) { yerel değişkenler ; fonksiyon kod satirlari; return (geri_donus_degeri) ; } Fonksiyon bloğunda, işlem sonucunda, hangi değişken, fonksiyonun çağrıldığı yere geri döndürülecek ise, o değişken fonksiyon bloğunun sonundaki return ifadesinin yanına yazılacaktır. fonksiyon_tipi ise dönüş değerinin tipini belirler. Fonksiyon tanımında herhangi bir tip türü yazılmaz ise geri dönüş değeri varsayılan değer olarak, int (tam sayı) kabul edilir.


23. Soru

Kütüphane fonksiyonları nedir, ne gibi bir avantaj sağlarlar?

Cevap

C programlama dilinde, ihtiyaca göre programcı tarafından yazılan fonksiyonların yanı sıra hazır olarak bulunan kütüphane fonksiyonları da bulunmaktadır. Şu ana kadar bazı program kodlarında ekrana yazdırma veya klavyeden girişler için kullanılan printf ve scanf kelimeleri de gerçekte hazır kütüphane fonksiyonlarıdır. Belli kurallara göre argüman almakta ve yapacağı işlemi gerçekleştirmektedir. C programlama dilinde birçok hazır kütüphane bulunmaktadır. Bu kütüphane fonksiyonlarını kullanıp, gereksiz yere zaman harcayarak, yeniden fonksiyon oluşturmaya gerek kalmamaktadır. Yalnızca önişlemci bölümüne ilgili fonksiyonun içerildiği “*.h” uzantılı kütüphane dosyalarını dâhil etmek yeterlidir.


24. Soru

Fonksiyon tanımlarken hangi durumlarda void ifadesi kullanılır?

Cevap

Fonksiyon yaptığı işlemin ardından, main() ortamına herhangi bir değer geri döndürmüyor ise fonksiyon_tipi bölümüne void ifadesi yazılır. Geri değer döndürmeyen fonksiyonlara, main()’den fonksiyona gönderilen değerleri printf fonksiyonu kullanarak ekrana yazdıran fonksiyonlar örnek olarak gösterilebilir.


25. Soru

#include <math.h> adlı başlık fonksiyonunun görevi nedir?

Cevap

Hazır matematiksel fonksiyonları kullanabilmek için önişlemci tanımları bölümüne #include <math.h> adlı başlık dosyası eklenmelidir.


26. Soru

strcmp() fonksiyonu nedir?

Cevap

Bir diğer dizgi fonksiyonu, strcmp() fonksiyonudur. strcmp() ile karakter dizilerinin sayısal olarak karşılaştırılması sağlanmaktadır. Karakterlerin her birinin ASCII olarak sayısal bir karşılığı bulunmaktadır. strcmp() ile bu harflerin sayısal karşılıkları kullanılarak dizilim sırası karşılaştırılmaktadır


27. Soru

C programlama dilinde, hazır kütüphane fonksiyonları nasıl çağrılır?

Cevap

C programlama dilinde birçok hazır kütüphane bulunmaktadır. Bu kütüphane fonksiyonlarını kullanıp, gereksiz yere zaman harcayarak, yeniden fonksiyon oluşturmaya gerek kalmamaktadır. Yalnızca önişlemci bölümüne ilgili fonksiyonun içerildiği “*.h” uzantılı kütüphane dosyalarını dâhil etmek yeterlidir.


28. Soru

Fonksiyona referans yöntemi ile argüman geçirme nedir?

Cevap

Değer yöntemi ile fonksiyonlara argüman geçirildiğinde fonksiyondaki değişiklikler orijinal değeri değiştirmemesine rağmen, fonksiyona referans yöntemi ile argüman geçirildiğinde orijinal değer değişebilmektedir. Çünkü referans yöntemi, orijinal değişkenin adres değerini kullanmaktadır. Bellekteki adreslerle işlem yapılabilmesi için gösterici (pointer) yapıları kullanılmaktadır. Fonksiyona geçirilen argüman bir gösterici-değişken olarak kullanılmaktadır.


29. Soru

strcpy fonksiyonunun işlevi nedir?

Cevap

Zaman zaman farklı karakter dizgilerini bir arada kullanarak işlem yapmak gereke- bilir. Bu durumdaki fonksiyonlara örnek olarak strcpy verilebilir. strcpy(birinci, ikinci) fonksiyonu, parantezler arasında iki parametre(veri-değişken) alır. Bunlardan ikincisini birinciye kopyalar.


30. Soru

main() fonksiyonunun diğer fonksiyonlardan farkı nedir?

Cevap

İçerisine ana program kodlarının yazıldığı main() fonksiyonu da bir fonksiyondur. Ancak main() fonksiyonu mutlaka olması gerekli ana fonksiyondur. Kodlar çok uzun satırlar hâlinde, yalnızca main fonksiyonunun içerisine yazılabildikleri gibi modüler bir tasarımla fonksiyonlar hâlinde yazılıp main() fonksiyonunun içinden çağrılabilmektedirler. main() fonksiyonun içerisinde yalnızca fonksiyonun çağrılma işlemi gerçekleştirilecek, gerçekte o fonksiyonun yapması gerekli işlem, main() dışında yer alan ilgili fonksiyon bloğu içerisinde gerçekleştirilecektir. Böylece main()’in kontrolü dâhilinde diğer fonksiyonlara görev paylaşımı yaptırılmaktadır.


31. Soru

C programlama dilinde fonksiyon hangi satırda tanımlanmalıdır?

Cevap

Fonksiyon tanımlama satırı, main() öncesinde, “#include” ifadesini içeren önişlemci bölümünün hemen altında yapılabilir. Böylece, main() fonksiyonu içerisinde fonksiyonu kullanabilme yetkisi oluşturulmuş olur. Çağrılacak fonksiyon main()’den önce tanımlanmaz ise derleme hatası verecektir.


32. Soru

Fonksiyonun çağrılması aşaması nasıl gerçekleşir?

Cevap

Fonksiyonun çağrılması aşaması main() içerisinde, aşağıdaki şekilde gerçekleştirilir. fonksiyon_tipi fonksiyon_adı(arguman1,arguman2);


33. Soru

int isdigit(int c) fonksiyonunu görevi nedir?

Cevap

c bir rakam ise 0’dan farklı, diğer durumda 0 gönderir. int isalpha(int c); c bir harf ise 0’dan farklı, diğer durumda 0 gönderir.


34. Soru

Hazır matematik fonksiyonları nasıl kullanılır?

Cevap

Hazır matematiksel fonksiyonları kullanabilmek için önişlemci tanımları bölümüne #include <math.h> adlı başlık dosyası eklenmelidir. Matematiksel fonksiyonların kullandığı sayılar double tipindedir. Başlıca matematiksel fonksiyonlar acos(), asin(), atan(), ceil(), cos(), cosh(), exp(), flo¬or(), log(), log10(), pow(), sin(), sqrt(), tan(), tanh(), ceil() olarak sıralanabilir.


35. Soru

strcmp() fonksiyonunun işlevi nedir?

Cevap

strcmp() fonksiyonu ile karakter dizilerinin sayısal olarak karşılaştırılması sağlanmaktadır. Karakterlerin her birinin ASCII olarak sayısal bir karşılığı bulunmaktadır. strcmp() ile bu harflerin sayısal karşılıkları kullanılarak dizilim sırası karşılaştırılmaktadır.


36. Soru

Bellek ayırma için hangi kütüphane fonksiyonları kullanılabilir?

Cevap

Bellek ayırma için;
void *malloc(n);
void *calloc(n, tip_uzunluğu);
fonksiyonları kullanılabilir. malloc ve calloc fonksiyonlarının kullanımları farklı olsa
da yaptıkları işlem aynıdır. malloc argüman olarak doğrudan verinin byte türünden bü- yüklüğünü alırken, calloc fonksiyonu iki argüman alır. Bunlardan ilki kaç adet veri oldu- ğu, ikincisi ise bu verinin veri tipinin byte olarak değerini gösterir. pinin byte olarak değerini gösterir.,
malloc veya calloc ile tahsis edilen bellek alanının kullanımı bittiğinde, free fonksiyonu ile ilgili bellek alanı serbest bırakılır. Bellek ayırma işlemlerinde bir diğer fonksiyon ise realloc fonksiyonudur. Bu fonksi- yon ise malloc veya calloc ile ayrılan bellek alanı programın ilerleyen satırlarında, yetersiz kalma veya azaltılması gereken durumlarda mevcut ayrılan alana ilave bellek alanı ekleme veya çıkarma amacıyla kullanılır. realloc fonksiyonunun kullanılabilmesi için daha önceden malloc veya calloc fonksiyonu ile bellek tahsis edilmiş olmalıdır.


37. Soru

Dizileri fonksiyona argüman olarak geçirme işlemi nasıl yapılır?

Cevap

Diziler, göstericilerle karşılıklı olarak birbirleri yerine kullanılabilen değişken küme yapılarıdır. Bir dizinin elemanları fonksiyona argüman olarak geçirilmek istendiğinde her bir elemanın ayrı ayrı gönderilmesi gerekir. Ancak bu şekildeki kullanım çok pratik değildir. Bu nedenle dizinin tüm elemanlarını geçirebilmek için dizinin ilk elemanının adresi yani başlangıç adresini geçirmek daha uygun olacaktır. Dizinin başlangıç adresinin geçirilmesi aslında diziyi gösterici olarak kullanmak anlamına da gelir.


38. Soru

Diziler fonksiyona argüman olarak nasıl geçirilir?

Cevap

Diziler, göstericilerle karşılıklı olarak birbirleri yerine kullanılabilen değişken küme yapılarıdır. Bir dizinin elemanları fonksiyona argüman olarak geçirilmek istendiğinde her bir elemanın ayrı ayrı gönderilmesi gerekir. Ancak bu şekildeki kullanım çok pratik değildir. Bu nedenle dizinin tüm elemanlarını geçirebilmek için dizinin ilk elemanının adresi yani başlangıç adresini geçirmek daha uygun olacaktır. Dizinin başlangıç adresinin geçirilmesi aslında diziyi gösterici olarak kullanmak anlamına da gelir.


39. Soru

int tolower(int c) fonksiyonunun işlevi nedir?

Cevap

Giriş argümanını küçük harfe çevirir.


40. Soru

Fonksiyon tanımlanmasından sonra “;” (noktalı virgül) kullanılmazsa ne olur?

Cevap

Fonksiyon tanımlamasından sonra “;” (noktalı virgül) işaretinin unutulması derleme hatası verecektir.


41. Soru

Fonksiyona referans yöntemi ile argüman geçirme nasıl yapılır?

Cevap

Değer yöntemi ile fonksiyonlara argüman geçirildiğinde fonksiyondaki değişiklikler orijinal değeri değiştirmemesine rağmen, fonksiyona referans yöntemi ile argüman geçirildiğinde orijinal değer değişebilmektedir. Çünkü referans yöntemi, orijinal değişkenin adres değerini kullanmaktadır. Bellekteki adreslerle işlem yapılabilmesi için önceki ünitede anlatılan gösterici (pointer) yapıları kullanılmaktadır. Fonksiyona geçirilen argüman bir gösterici-değişken olarak kullanılmaktadır.


42. Soru

Başlıca matematiksel kütüphane fonksiyonları nelerdir?

Cevap

Başlıca matematiksel fonksiyonlar acos(), asin(), atan(), ceil(), cos(), cosh(), exp(), flo- or(), log(), log10(), pow(), sin(), sqrt(), tan(), tanh(), ceil() olarak sıralanabilir.


Güz Dönemi Ara Sınavı
7 Aralık 2024 Cumartesi
v