İnfografik
← Ünite 3
Computer Programming 1

Ünite 3: Chapter 4: C Program Control

Deitel & Deitel C How to Program
Bu ünite içeriği, bilgisayar bilimleri eğitiminde dünya çapında standart bir başvuru kaynağı olan Paul Deitel ve Harvey Deitel'in 'C How to Program' kitabının program kontrol yapıları (Program Control) konusundan derlenmiştir. Kitap, C dilinin temellerini pratik kod örnekleri ve detaylı açıklamalarla milyonlarca öğrenciye aktarmıştır.
for Döngüsünün Bileşenleri
C dilindeki standart bir 'for' döngüsü; başlatma (initialization), döngü devam testi (loopContTest) ve artırma/azaltma (increment/decrement) olmak üzere üç temel bileşeni aralarında noktalı virgül olacak şekilde tek bir parantez altında birleştirir. Bu yapı, sayaç kontrollü döngülerin hata yapmadan yazılmasını kolaylaştırır.
Virgül Operatörünün for İçindeki Rolü
C dilinde 'for' döngülerinin başlatma ve artırma bölümlerinde virgül (,) operatörü kullanılarak birden fazla değişken aynı anda yönetilebilir. Örneğin 'for (int a=0, b=0; a*b<=20; a++, b++)' ifadesi, iki farklı sayacın eş zamanlı olarak başlatılıp artırılmasına imkan tanır.
Yanlış Başlangıç Koşulu Kuralı
C programlama dilinde bir 'for' veya 'while' döngüsünün devam koşulu başlangıçta (ilk kontrolde) yanlış (false) olarak değerlendirilirse, döngünün gövdesi asla çalıştırılmaz. Bu durum, mantıksal hataların önlenmesi açısından programcıların dikkat etmesi gereken kritik bir çalışma kuralıdır.

Anahtar Kavramlar

for Repetition StatementBelirli bir kod bloğunu önceden belirlenmiş sayıda veya bir sayaç kontrolünde tekrarlamak için kullanılan C dilindeki temel döngü yapısıdır. Başlatma, döngü devam koşulu ve artırma/azaltma ifadelerini tek bir satırda toplar. Örneğin, 1'den 10'a kadar yazdırmak için 'for(int counter = 1; counter<=10; counter++)' yapısı kullanılır.
InitializationBir döngünün veya değişkenin başlangıç değerinin atandığı ilk adımdır. 'for' döngülerinde ilk bölgede yer alır ve döngü boyunca kullanılacak sayaç değişkeninin ilk değerini belirler. Örneğin 'for(int a=0, b=0; ...)' ifadesindeki 'a=0' ve 'b=0' kısımları birer başlatma işlemidir.
Loop Continuation TestDöngü gövdesinin her bir turdan (iterasyondan) önce çalışıp çalışmayacağını belirleyen mantıksal test koşuludur. Koşul doğru olduğu sürece döngü devam eder, yanlış olduğunda döngü sonlandırılır. Örneğin 'counter <= 10' ifadesi bir döngü devam testidir.
switch Multiple-Selection StatementBir değişkenin veya ifadenin alabileceği tüm olası sabit değerleri test etmek için kullanılan çoklu seçim kontrol deyimidir. Birden fazla 'case' etiketi ve isteğe bağlı bir 'default' durumu barındırır. Menü tabanlı programlamada if-else kalabalığını önlemek için kullanılır.
Case LabelBir 'switch' bloğu içerisinde değişkenin alabileceği spesifik bir sabiti temsil eden ve 'case' anahtar kelimesiyle başlayan etiketlerdir. Eşleşme durumunda o etiketin altındaki kodlar çalıştırılır. Örneğin 'case 1:' veya 'case 2:' yapıları birer case etiketidir.
Default CaseBir 'switch' deyiminde, tanımlanan hiçbir 'case' etiketinin test edilen değerle eşleşmediği durumlarda devreye giren isteğe bağlı varsayılan durumdur. Genellikle hata yönetimi veya beklenmeyen girdileri yakalamak için kullanılır.
do-while Repetition StatementKoşulun döngü bloğunun sonunda test edildiği, bu sayede içerisindeki komutların koşula bakılmaksızın en az bir kez çalıştırılmasını garanti eden döngü yapısıdır. Yazım formatı 'do { ... } while (condition);' şeklindedir.
break Statementİçinde bulunduğu 'while', 'for', 'do-while' veya 'switch' yapısından programın aniden çıkmasını ve akışın yapıdan sonraki ilk komutla devam etmesini sağlayan atlama deyimidir. Döngüleri erken sonlandırmak için hayati önem taşır.
continue StatementDöngü gövdesinin o anki turunda kalan komutları atlayarak doğrudan döngünün bir sonraki turuna veya koşul kontrolüne geçmesini sağlayan kontrol deyimidir. Döngüyü tamamen sonlandırmadan belirli durumları pas geçmeye yarar.
Logical AND (&&)Bağlandığı her iki koşulun da doğru (true) olması durumunda true, koşullardan herhangi biri yanlış olduğunda ise false döndüren mantıksal operatördür. Örneğin (yas > 18 && ehliyetVar == 1) ifadesinde her iki şartın da sağlanması gerekir.
Logical OR (||)Bağlandığı koşullardan en az birinin doğru (true) olması durumunda true, tüm koşulların yanlış olması durumunda ise false döndüren mantıksal operatördür. Alternatifli koşulları denetlemek için kullanılır.

Diğer Önemli Bilgiler

switch Yapısında Default Güvencesi

'switch' çoklu seçim yapısında, tanımlanan 'case' etiketlerinin hiçbiri uyuşmadığında çalıştırılmak üzere isteğe bağlı bir 'default' durumu konulabilir. Yazılım mühendisliğinde bu durum, hatalı veya öngörülemeyen kullanıcı girdilerini yakalamak için kritik bir güvenlik önlemi olarak kabul edilir.

do-while Garantisi

'do-while' tekrar deyimi, kontrol koşulunu döngünün sonunda (altta) test ettiği için, döngü gövdesindeki komutların koşulun durumuna bakılmaksızın mutlak surette en az bir kez yürütülmesini garanti eder. Bu özellik, özellikle menü ve arayüz döngülerinde hayat kurtarıcıdır.

break ile Erken Çıkış

'break' deyimi; 'while', 'for', 'do-while' döngülerinden veya 'switch' yapılarından anında çıkılmasını sağlar. Kod akışı, bu yapıların hemen ardındaki ilk komuttan devam eder; böylece gereksiz döngü tekrarları önlenerek CPU performansı artırılır.

Mantıksal Operatörler Matrisi

C dilinde kullanılan mantıksal operatörlerden '&&' (AND) her iki tarafın doğruluğunu, '||' (OR) en az bir tarafın doğruluğunu ararken, '!' (NOT) operatörü ise tek başına bir ifadenin doğruluk değerini tersine çevirerek program mantığının kurulmasında temel rol oynar.

Sınavda Dikkat Et

  • for döngüsünün başlatma, devam koşulu ve artırma kısımlarını ayıran noktalı virgül (;) işaretlerini unutmayın; sınavda eksik yazım soruları gelebilir.
  • do-while döngüsünün koşul kontrolünü sonda yaptığı için döngü gövdesini en az bir kez kesinlikle çalıştıracağını aklınızdan çıkarmayın.
  • switch-case yapılarında 'break' komutunun yazılmaması durumunda akışın sonraki case'lere akmaya devam edeceğini (fall-through) unutmayın.
  • Döngü devam koşulunun başlangıçta false olması durumunda for ve while döngü gövdelerinin hiç çalışmayacağını iyi kavrayın.
  • Mantıksal VE (&&) operatörünün true vermesi için tüm koşulların doğru olması gerektiğini, VEYA (||) operatöründe ise tek bir doğru yeteceğini karıştırmayın.
  • break deyiminin döngüyü tamamen sonlandırdığını, continue deyiminin ise sadece o anki turu atlayıp sonraki tura geçtiğini iyi ayırt edin.
  • for döngüsünün başlatma ve artırma bölümlerinde virgül (,) operatörü ile birden fazla değişkenin yönetilebileceğini unutmayın.