BİLGİSAYAR VE PROGRAMLAMAYA GİRİŞ Dersi FONKSİYONLAR soru cevapları:

Toplam 42 Soru & Cevap
PAYLAŞ:

#1

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.


#2

SORU:

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


CEVAP:

Matematiksel ifadelerde kullanılan fonksiyonlara (örnek:


#3

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.


#4

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.


#5

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.


#6

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.


#7

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.


#8

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.


#9

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.


#10

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);


#11

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.


#12

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


#13

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.


#14

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.


#15

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.


#16

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.


#17

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.


#18

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.


#19

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


#20

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.


#21

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.


#22

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.


#23

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.


#24

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.


#25

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.


#26

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.


#27

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.


#28

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.


#29

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.


#30

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.


#31

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.


#32

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.


#33

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.


#34

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.


#35

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.


#36

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.


#37

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.


#38

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.


#39

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.


#40

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.


#41

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.


#42

SORU:

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


CEVAP:

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