Program Akışının Denetimi



Benzer belgeler
Programın Akışının Denetimi. Bir arada yürütülmesi istenen deyimleri içeren bir yapıdır. Söz dizimi şöyledir:

BİLGİSAYAR MÜHENDİSLİĞİ ALGORİTMA VE PROGRAMLAMA II 2.HAFTA SWİTCH (CASE), SAYAÇLAR, DÖNGÜLER,

Bölüm 08 Program Akışının Yönlendirilmesi

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

BMT 101 Algoritma ve Programlama I 7. Hafta. Yük. Müh. Köksal Gündoğdu 1

Döngüler. 1.1 while döngüsü

Denetim Yapıları Program Akışının Yönlendirilmesi. Şekil 11.1: Akışı Koşullu Yönlendirme

BBS515 Nesneye Yönelik Programlama. Ders 3 Zümra Kavafoğlu

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Program Çözümleme. Aşağıdaki örneklerde printf() ve scanf() fonksiyonlarının işlevleri gösterilmektedir. Liste 1.1. Çözümleme:

Karşılaştırma İşlemleri ve Koşullu İfadeler

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

Internet Programming II

Metotlar. d e f metot_adı [ ( [ arg [= d e f a u l t ] ]... [, arg [, &expr ] ] ) ] deyim ( l e r ) end

KARAR YAPILARI. Acaba hangi yöne gitmeliyim? Oturduğun yerden kalkıp, kapıya varana kadar kaç kez karar verdiniz biliyor musunuz?

PROGRAMLAMA DİLLERİ I

GENEL GĐRĐŞ-ÇIKIŞ FONKSĐYONLARI. ENF102 Jeoloji 1. #include <stdio.h> printf Fonksiyonu ÖRNEK. printf

C Programlama Dilininin Basit Yapıları

Pointer Kavramı. Veri Yapıları

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Program AkıĢ Kontrol Yapıları

Akış Kontrol Mekanizmaları

BÖLÜM 6: KARŞILAŞTIRMALI KONTROL YAPILARI

Program Akış Kontrol Yapıları

8- PROGRAM YAPISAL KOMUTLARI ve. M.ilkucar MAKU MYO 1

HSancak Nesne Tabanlı Programlama I Ders Notları

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

Belirli bir iş bir çok kez tekrarlanacaksa, programda bu iş bir kez yazılır ve döngü deyimleriyle istenildiği kadar tekrar tekrar çalıştırılabilir.

HSancak Nesne Tabanlı Programlama I Ders Notları

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

M.ilkucar MAKU MYO 1

Ders 6: Karşılaştırma Deyimleri

if (ad == "Sabri") Console.WriteLine("Merhaba Sabri. Ne zamandır gözükmüyodun...");

Java da Program Denetimi ve Operatörler

İçerik. Java da İşleçler, İşleçler. Aritmetik İşleçler - 1. Aritmetik İşleçler - 2. Geçen ders: Bu ders: BS-515 Nesneye Yönelik Programlama

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

MTK467 Nesneye Yönelik Programlama. Hafta 4 - Döngüler Zümra Kavafoğlu

Java da İşleçler, Ders #3 (4 Kasım 2009)

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

HSancak Nesne Tabanlı Programlama I Ders Notları

Gereksiz Kodlar. burada if deyiminin else bölümüne gerek var mı? İfade doğruysa zaten fonksiyon geri dönüyor. Bu aşağıdakiyle tamamen eşdeğerdir:

Döngü (Loop) Deyimleri / Veri Belirleyicileri / Matematiksel Fonksiyonlar

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 8

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

KONTROL YAPILARI JAVADA UC TURLU KONTROL YAPISI VARDIR BUNLAR İF ELSE İF ELSE İF SWİTCH YAPILARIDIR. IF ELSE YAPISI if (deger) { }else {

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 5. Bölüm Karar ve Çevrim Kontrol Yapıları

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

Mantıksal İşlemler. 7.1 true, false, nil

Nesne Tabanlı Programlama

ESM-361 Mikroişlemciler. 3. Hafta Ders Öğretim Üyesi Dr.Öğr.Üyesi Ayşe DEMİRHAN

Temel Bilgisayar Bilimleri Ders Notu #4-1. kısım

Temel Bilgisayar Programlama

Bu amaçla, if ve switch gibi karar verme deyimleri, for, while, do..while gibi döngü deyimleri kullanılır.

Döngü ve Koşul Deyimleri

Koşullu Önermeler (if else)

Mikroişlemcilerde Aritmetik

Rasgele Sayılar. 1.1 Bilgisayar Rasgele Sayı Üretemez! 1.2 rand() fonksiyonu

BÖLÜM 2 C PROGRAMLAMADA AKIŞ KONTROLÜ. GOTO: C programında programın herhangi bir yerinden bir yerine şartsız olarak atlanmasını sağlayan komuttur.

Veritabanı. SQL (Structured Query Language)

Fonksiyonlar -Genel Test- A

ALGORİTMA VE PROGRAMLAMA I

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

for döngüsü for (başlangıç değeri; şart; artım) ifade; for (başlangıç değeri; şart; artım) { ifadeler; }

/ C Bilgisayar Programlama Yıliçi Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu

3.1 Pointer in Yararları

Integer Sınıfı. 9.1 Integer Sınıfına Uygulanan Başlıca Metotlar. Ruby de tamsayılar için kullanılan Fixnum ve Bignum sınıflarını üreten sınıftır.

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler

C#(Sharp) Programlama Dili

Bölüm 4 C de Program Kontrolü

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

YZM 2105 Nesneye Yönelik Programlama

BİL-142 Bilgisayar Programlama II

Hafta 9 C Dilinde Kontrol ve Döngü Yapıları

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1

JAVA DÖNGÜ DEYİMLERİ. For Döngüsü

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-2 Değişken Kavramı ve Temel Operatörler

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 9

Programlama Dilleri 3

Genel Programlama II

Sınav tarihi : Süre : 60 dak. c) En başta #include<stdio.h> yazılmamıştır. c) zt d) Pi e) X0

BİLGİSAYAR PROGRAMLAMAYA GİRİŞ

İnternet Programcılığı Dersi 2.Dönem Ders Notu

MAT213 Bilgisayar Programlama I

5. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ.

Bil Hafta Çalışma Soruları (Yanıtlar)

Algoritma ve Programlama: Karar Yapıları ve Döngüler

Fonksiyonlar (Altprogram)

ARA SINAV 07.Nisan 2015

C++ Operatörler (Operators)

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir

Temel Giriş/Çıkış Fonksiyonları

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

8. Bölüm DİZİLER. tip dizi_ismi[eleman_sayısı]; Bütün diziler 0 ile baţlar.

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

NESNEYE YÖNELİK PROGRAMLAMA

Transkript:

8 Program Akışının Denetimi Bir programın akışı komutların yazıldığı sırayı izler. Ama çoğunlukla, bu akışı yönlendirmek gerekir. Bu iş için denetim yapılarını kullanırız. Bunlar üç gruba ayrılabilir: Bloklar, Yönlendiriciler ve Döngüler. Bilgisayarın karmaşık işleri yapmasını sağlayan bu yapılar altı tanedir: 1. blok, 2. if... else... ve else if yönlendirmeleri 3. switch yönlendirmesi 4. Koşullu yönlendirme (koşullu üçlem) 5. for döngüsü 6. while... döngüsü 7. do... while... döngüsü Bu yapılardan her birisi tek bir deyimmiş gibi iş yapar, ama genellikle her birisi birden çok deyim içeren birer yapıdır. Bunların her birisini örneklerle açıklayacağız. Bu bölümde yönlendiriciler dediğimiz ilk dört yapıyı, sonraki bölümde ise döngüler dediğimiz son üç yapıyı ele alacağız. 8.1 Blok Bir arada yürütülmesi istenen ve parantezi içine yazılan deyimlerden oluşan program parçasıdır. Sözdizimi şöyledir:

76 BÖLÜM 8. PROGRAM AKIŞININ DENETIMI 1 deyimler bloku içindeki deyimler gerektiği sayıda C deyimlerinden oluşur. Hiç deyim içermeyen bloklara boş blok denir. İçiçe bloklar olabilir. Bir fonksiyonun gövdesi bir bloktur. Yönlendiriciler birer bloktur. Blok içindeki deyimler, yalın C deyimleri olabileceği gibi, yapısal deyimler de olabilir. Program akışı (akış denetimi) bir blok içine girerse, o bloktaki bütün deyimleri sırayla işler. Ancak, gerektiğinde, blok içindeki deyimler bitmeden, program akışı blok dışına alınabilir. Uyarı 8.1. gcc derleyicisinin ascii dışındaki Türkçe karakterleri metin içinde yazabilmesi için locale.h başlık fonksiyonu çağrılır ve main() fonksiyonunun gövdesine, s e t l o c a l e (LC_ALL, " " ) ; deyimi konulur. Blok Örnekleri Program 8.1, x ile y değişkenlerinin değerlerini takas eder. main() fonksiyonunun gövdesi en dış blokdur. Onun içinde takas işlemini yapan blok yer alır. Görüldüğü gibi bu örnekte iki tane içiçe blok vardır. Program 8.1. 4 i n t main ( v o i d ) s e t l o c a l e (LC_ALL, " " ) ; i n t x = 10, y = 20, z ; 9 p r i n t f ( " Takastan önce : \n " ) ; p r i n t f ( " x = %d ; y = %d \n ", x, y ) ; z = x ; x = y ; 14 y = z ; p r i n t f ( " Takastan sonra : \n " ) ; p r i n t f ( " x = %d ; y = %d \n ", x, y ) ; 2 Takastan önce :

8.2. KAPSANMA ALANI (SCOPE) 77 x = 10 ; y = 20 Takastan sonra : x = 20 ; y = 10 / Blok içinde bildirimi yapılan bir değişken, o blok için bir yerel değişkendir. Program 8.1 deki x, y, z değişkenleri main() metodunun yerel değişkenleridir. Eğer 5.satır iç bloka alınırsa; yani x, y, z değişkenleri iç blokun yerel değişkenleri yapılırsa, takas işlemi olur, ama 14.satır çalışmaz. Çünkü blok dışından blok içindeki değişkenlere erişilemez. Onlara erişmek için 15.satırın da iç blokun içine alınması gerekir. Özetlersek, yerel değişkene kendi bloku dışından erişilemez; ona ancak kendi bloku içindeki deyimler erişebilir. 8.2 Kapsanma Alanı (scope) Blokun işi bitince, blok ile birlikte yerel değişkene ana bellekte ayrılan adres yok olur. Bu nedenle, bir değişkenin kapsanma alanı (erişilebirlik bölgesi, scope) o değişkenin tanımlandığı bloktur. 8.3 Yönlendiriciler (Saptırma, Dallandırma) Aksi istenmemişse, program, komutların yazıldığı sırada işler; yani normal durumda programın akışı (deyimlerin işleniş sırası) doğrusaldır. Ama oluşan koşullara bağlı olarak, program akışını başka deyimlere yönlendirmek gerekebilir. Bu işi yapan yönlendirici yapılar vardır. Yönlendiriciler, program akışını, oluşan koşullara göre istenen yöne saptıran (dallandıran) denetim yapılarıdır. Bunlar da kendi içlerinde türlere ayrılabilir: if, if-else, else if, switch ve koşullu üçlem. Bu yapılar ard arda gelebilir ya da içiçe yuvalanabilirler. Böylece daha karmaşık yönlendiriciler oluşur. Ancak, karmaşık yönlendiriciler, çözümlenerek, her bir parçası yukarıdaki temel yönlendiricilerden birisine indirgenebilir. 8.3.1 Yalın if Yapısı Bazı deyimlerin işlemesini, ancak belirli koşulların sağlanması durumunda isteyebiliriz. Bu durumda if yönlendirmesini kullanırız. Bu yönlendirmenin sözdizimi aşağıdaki gibidir.

78 BÖLÜM 8. PROGRAM AKIŞININ DENETIMI i f ( mantıksal_deyim ) deyimler ; 4 Eğer if yapısı bir tek deyim içeriyorsa, blok parantezi kullanılmayabilir: 1 i f ( mantıksal_deyim ) deyim ; Ama if yapısına bağlı olarak işlenmesi gereken birden çok deyim varsa, onların hepsini bir blok içine almak gerekir. Tek deyim olduğu için bloku kullanılmasa bile, biz ona if bloku diyeceğiz. Eğer mantıksal_deyim (boolean) true değerini alıyorsa, if bloku içindeki deyimler sırasıyla işlenir; sonra program akışı if blokundan sonraki deyimi işlemeye başlar. Eğer mantıksal_deyim false değerini alıyorsa if bloku içindeki deyimler işlenmeden atlanır ve program akışı if blokundan sonraki deyime atlar. Örnekler: Program 8.2. 3 8 i n t main ( ) s e t l o c a l e (LC_ALL, " " ) ; i n t n ; p r i n t f ( " Y a ş ı n ı z k a ç t ı r? \n " ) ; s c a n f ( "%d ", &n ) ; i f ( n > 18 ) 13 p r i n t f ( " S i z b i r s e ç m e n s i n i z! \n " ) ; r e t u r n 0 ; Bu tek b i r i f y ö n l e n d i r m e s i d i r. x >= y olduğunda i f blokuna g i r i l m e z. 4 / Program 8.3, kullanıcının girdiği iki sayıyı karşılaştırıyor. Birinci sayı küçükse, öyle olduğunu yazıyor. Değilse, başka bir iş yapmıyor. Karşılaştırma için ilişkisel operatörlerden küçüktür ( < ) operatörünü kullanıyor. Program 8.3.

8.4. ARDIŞIK IF DEYIMLERI 79 1 i n t main ( ) i n t x, y ; 6 p r i n t f ( " i k i tamsayı g i r i n i z. S a y ı l a r a r s ı n d a enaz b i r boşluk b ı r a k ı n ı z. \n " ) ; s c a n f ( "%d %d ",&x,&y ) ; i f ( x < y ) p r i n t f ( "%d s a y i s i %d den kucuktur \n ", x, y ) ; Bu tek b i r i f y ö n l e n d i r m e s i d i r. x >= y olduğunda i f blokuna g i r i l m e z. / 8.4 Ardışık if deyimleri if blokları ardışık olabilir. Bu durumda her bir if bloku, ötekilerden bağımsız çalışır. Birden çok ard arda if bloku olduğunda, mantıksal ifadeye bağlı olarak, program akışı hiç birine uğramayabilir, birisine ya da birden çoğuna uğrayabilir. Örnek olarak, Program 8.3 yi biraz geliştirelim. Program 8.4, gene kullanıcının girdiği iki sayıyı karşılaştırıyor. Üç mümkün durumu tek tek denetliyor. Hangisi doğru ise onu yazıyor. Burada if deyimlerinin ard arda yazıldığına dikkat ediniz. Dolayısıyla program akışı herbiri için mantıksal deyimin doğru olup olmadığını denetliyor. Verilen iki sayı için, o üçünden yalnızca birisi doğru olabilir. Program akışı, yalnızca doğru olan if... deyimine sapıyor; ötekileri geçiyor. Buradaki üç tane if deyiminin her birisi tek başına yalın bir if deyimidir; ötekilerden bağımsız çalışır. Karşılaştırma için ilişkisel operatörler dediğimiz <, >, == operatörlerini kullanıyor. Program 8.4. 1 i n t main ( ) 6 s e t l o c a l e (LC_ALL, " " ) ; i n t x, y ; p r i n t f ( " i k i tamsayı g i r i n i z. \n " ) ; p r i n t f ( " G i r i ş t e s a y ı l a r a r a s ı n d a enaz b i r boşluk b ı r a k ı n ı z. \n " ) ; p r i n t f ( "Ya da her sayıdan sonra Entere b a s ı n ı z \n " ) ; 11 s c a n f ( "%d %d ",&x,&y ) ; i f ( x < y )

80 BÖLÜM 8. PROGRAM AKIŞININ DENETIMI p r i n t f ( "%d s a y i s i %d den kucuktur \n ", x, y ) ; i f ( x > y ) 16 p r i n t f ( "%d s a y i s i %d den buyuktur \n ", x, y ) ; i f ( x == y ) p r i n t f ( "%d s a y i s i %d ye e s i t t i r \n ", x, y ) ; r e t u r n 0 ; Bu program a r d ı ş ı k i f y ö n l e n d i r m e s i n e ö r n e k t i r. 3. ve 7. s a t ı r l a r b i r l i k t e, gcc d e r l e y i c i s i n e Türkçe k a r a k t e r l e r i y a z d ı r ı r. / Uyarı: Bir if yönlendirmesinde işlenen tek deyim ise, onu bloku içine almaya gerek yoktur. Alınsa da alınmasada da olur. Ama if yönlendirmesi birden çok deyimi içeriyorsa, o deyimlerin hepsi bloku içine alınır. Blok parantezleri kullanılsa da kullanılmasa da, bunlara if bloku diyoruz. Program 8.1 de gün numarası 1 ile 7 arasında ise yalnızca ilgili if blokunu işler. Program akışı başka if blokuna uğramaz. Girilen gün numarası 1-7 arasında değilse, program akışı hiç bir if blokuna girmez. Örnek 8.1. 1 i n t main ( ) s e t l o c a l e (LC_ALL, " " ) ; 6 i n t gun ; p r i n t f ( " Haftanın k a ç ı n c ı günündeyiz? \n " ) ; s c a n f ( "%d ", &gun ) ; 11 i f ( gun == 1 ) p r i n t f ( "Bu gün P a z a r t e s i d i r \n " ) ; 16 i f ( gun == 2 ) p r i n t f ( "Bu gün S a l ı d ı r \n " ) ; i f ( gun == 3 ) p r i n t f ( "Bu gün Çarşamba d ı r \n " ) ; i f ( gun == 4 ) 21 p r i n t f ( "Bu gün Perşembe d i r \n " ) ; i f ( gun == 5 ) p r i n t f ( "Bu gün Cuma d ı r \n " ) ; 26 i f ( gun == 6 ) p r i n t f ( "Bu gün Cumartesi d i r \n " ) ;

8.5. IF-ELSE YAPISI 81 31 i f ( gun == 7 ) p r i n t f ( "Bu gün Pazar d ı r \n " ) ; r e t u r n 0 ; Buradaki gibi olası seçenekler çok olursa, switch-case yapısını kullanmak daha kolaydır (bkz. Kesim??). 8.5 if-else Yapısı Bazı durumlarda önümüze iki seçenek çıkar. Belirli bir koşulun sağlanması durumunda seçeneklerden birinin, aksi halde ötekinin işlemesi istenebilir. Başka bir deyişle, bir koşulun sağlanıp sağlanmamasına bağlı olarak, iki seçenekten birisini mutlaka yaptırmak gerekir. Bu durumda, if-else yapısını kullanırız. Bu yapının sözdizimi şöyledir: i f ( mantıksal deyim ) 2 deyim 1; e l s e deyim 2; Eğer deyim-1 ve deyim-2 yerinde işlenecek birden çok deyim varsa, onlar birer blok içine alınmalıdır: 1 i f ( mantıksal deyim ) deyimler 1 e l s e 6 deyimler 2 Eğer mantıksal-deyim true değerini alıyorsa deyim(ler)-1 işlenir ve program akışı if denetim yapısından sonraki deyimi işlemeye başlar. Eğer mantıksal-deyim false değerini alıyorsa deyim(ler)-1 işlenmeden atlanır ve deyim(ler)-2 işlenir. Sonra, program akışı if denetim yapısından sonraki deyimi işlemeye başlar. Bu yapıda program ya deyim(ler)-1 ya da deyim(ler)-2 yi işler. Bu yapı ardışık iki if... bloku ile yazılabilir görünüyor. Ama ardışık if bloklarının hiç birisi işlemeyebilir, bazısı ya da hepsi işleyebilir. if-else yapısında ise if ve else bloklarının ikisi birden işleyemez ama ikisinden birisini işlemeden geçemez. Program 8.5, kullanıcının girdiği sayının pozitif mi, yoksa negatif mi olduğunu söylüyor. Program iki seçenekten birisini ve yalnızca birisini işler. Program 8.5.

82 BÖLÜM 8. PROGRAM AKIŞININ DENETIMI 2 i n t main ( ) s e t l o c a l e (LC_ALL, " " ) ; 7 i n t a ; p r i n t f ( " Bir tamsayı g i r i n i z \n " ) ; s c a n f ( "%d ", &a ) ; i f ( a>0) 12 p r i n t f ( " G i r g i ğ i n i z %d s a y ı s ı p o z i t i f t i r. \n ", a ) ; e l s e p r i n t f ( " G i r g i ğ i n i z %d s a y ı s ı n e g a t i f t i r. \n ", a ) ; 17 r e t u r n 0 ; Uyarı 8.2. Programda, girilecek a sayının tamsayı olması isteniyor. Ama kullanıcı, tamsayı yerine klavyeden float, char ya da string girebilir. C dili kullanıcının girdiği verinin tipinin doğru olup olmadığını denetlemez. Girilen veriyi int olarak okur. Örneğin, Program 8.5, tamsayı girilmesini istediği zaman kullanıcı; 654.321 float sayısını girmiş olsun. Bir tamsayı g i r i n i z 2 654. 321 G i r d i ğ i n i z 654 s a y ı s ı p o z i t i f t i r. olur. Görüldüğü gibi, derleyici girilen sayının tam kısmını alıyor. Kesir kısmını atıyor. Aldığı sayıyı a değişkeninin değeri olarak işlemde kullanıyor. Önce M tuşuna arkasından Enter tuşuna basılmış olsun. Ama derleyici o anda &a adresinde yazılı olan binary veriyi int olarak okur ve okuduğu o sayıya göre işlem yapar. Son olarak a tamsayısı istenince bir string girelim. Gene derleyici aynı işi yapar. &a adreinde yazılı olan binary veriyi int olarak okur ve okuduğu o sayıya göre işlem yapar. Buradan çıkaracağımız sonuç şudur: Uyarı 8.3. C dili veri tipini denetlemez.

8.5. IF-ELSE YAPISI 83 Değişkene, bildirimdekinden farklı bir veri tipi atanabilir. Derleyici, o anda adresteki binary değeri istenen tipmiş gibi okur. Tip denetimi yapmaması derleyiciye hız kazandırır; ama kullanıcı dikkatli olmazsa koşma hataları (run time error) oluşabilir. Bilindiği gibi, koşma anı hataları, bilgisayar programcılığında ölümcül hatalardan sayılır. Çünkü programın hatalı iş yaptığı bilinmeyebilir. Uyarı 8.4. if... denetimi için mutlaka bir mantıksal_deyim (boolean) gereklidir. Program 8.6, kullanıcının girdiği sayının çift mi, yoksa tek mi olduğunu söylüyor. Program iki seçenekten birisini ve yalnızca birisini işler. Program 8.6. 2 i n t main ( ) s e t l o c a l e (LC_ALL, " " ) ; 7 i n t a ; p r i n t f ( " Bir tamsayı g i r i n i z \n " ) ; s c a n f ( "%d ", &a ) ; 12 i f ( a%2) p r i n t f ( " G i r g i ğ i n i z %d s a y ı s ı ç i f t t i r \n ", a ) ; 17 e l s e p r i n t f ( " G i r g i ğ i n i z %d s a y ı s ı t e k t i r \n ", a ) ; r e t u r n 0 ; Program 8.7 verilen bir yılın artık yıl olup olmadığını bulur. Program 8.7. 1 6 11 i n t main ( ) s e t l o c a l e (LC_ALL, " " ) ; i n t sene ; p r i n t f ( " Hangi y ı l? ( yyyy ) : \n " ) ; s c a n f ( "%d ", &sene ) ; i f ( ( sene % 4 == 0 && sene % 100!= 0) sene % 400 == 0) p r i n t f ( " %d y ı l ı a r t ı k y ı l d ı r. Şubat a y ı 29 ç e k e r. \n ", sene ) ;

84 BÖLÜM 8. PROGRAM AKIŞININ DENETIMI e l s e 16 p r i n t f ( " %d y ı l ı a r t ı k d e ğ i l d i r. Şubat a y ı 28 ç e k e r. \n ", sene ) ; r e t u r n 0 ; 1 Hangi y ı l? ( yyyy ) : 1997 1997 y ı l ı a r t ı k y ı l d e ğ i l d i r. Şubat a y ı 28 ç e k e r. / Uyarı 8.5. Ardışık if... yapısına benzer olarak, ardışık if-else yapıları kurulabilir. Bu yapıda her bir if-else bloku ötekilerden bağımsız çalışır. Ama program saçaklanır, doğrusal akmaz. 8.5.1 Çoklu Saçaklar Bazen program akışının yönlenebileceği seçenekler çoklu saçaklara ayrılabilir. Bu durumlarda if-else ya da else-if bloklarından oluşan çoklu durum yapıları oluşur. İlk if-else yapısında ikiye ayrılan seçenekler, her adımda tekrar ya if ya da else tarafında ikiye ayrılarak bir saçak oluştururlar. Sözdizimi şöyledir: i f ( boolean 1) Deyimler 1; 5 e l s e i f ( boolean 2) Deyimler 2; e l s e i f ( boolean 3) 10 Deyimler 3;... e l s e 15 Deyimler n ; Bu yapıda g e r e k t i ğ i kadar e l s e i f deyimi k u l l a n ı l a b i l i r. Her adımda program a k ı ş ı ya i f t a r a f ı n a ya da e l s e t a r a f ı n a y ö n l e n i r. Adımlardan h i ç b i r i s i koşulu ( boolean ) sağlamıyorsa, son deyim o l a r a k e l s e bloku i ş l e r. 3 /

8.5. IF-ELSE YAPISI 85 Örnekler Program 8.8 bir üçgenin üç kenarını okuyor. Sonra "iki kenar toplamı üçüncü kenardan büyüktür" kuralını uygulayarak, girilen kenar uzunluklarının bir üçgen oluşturup oluşturmadığını denetliyor. Denetleme işini main() dışında tanımlanan ucgen() fonksiyonu yapıyor. main(), o fonksiyonu gerçek parametre değerleriyle çağırıyor. Tabii, istenirse, ucgen() fonksiyonunun gövdesi main() nin gövdesi içine yazılabilir. Ama büyük programlarda, her farklı işi bir fonksiyona yaptırmak daha iyidir. Program 8.8. 2 main ( ) s e t l o c a l e (LC_ALL, " " ) ; i n t a, b, c ; 7 p r i n t f ( " Üçgenin kenar u z u n l u k l a r ı n ı g i r i n i z : a, b, c =? " ) ; s c a n f ( "%d %d %d ",&a,&b,& c ) ; ucgen ( a, b, c ) ; 12 ucgen ( x, y, z ) i n t x, y, z ; i f ( x+y <= z ) p r i n t f ( " z k e n a r ı çok büyük. Bu b i r üçgen d e ğ i l d i r. \ n " ) ; 17 e l s e i f ( x+z < y ) p r i n t f ( " y çok büyük. Bu b i r üçgen d e ğ i l d i r. \ n " ) ; e l s e i f ( y+z < x ) p r i n t f ( " x çok büyük. Bu b i r üçgen d e ğ i l d i r. \ n " ) ; e l s e 22 p r i n t f ( "Bu b i r u c g e n d i r. \ n " ) ; Program 8.9, kullanıcının girdiği ısı derecesine göre, günün sıcak olup olmadığını söylüyor. Program 8.9. 2 7 main ( ) s e t l o c a l e (LC_ALL, " " ) ; i n t i ; p r i n t f ( " Bugün ı s ı kaç d e r e c e d i r? " ) ; s c a n f ( "%d ", &i ) ;

86 BÖLÜM 8. PROGRAM AKIŞININ DENETIMI 12 i f ( i < 10) p r i n t f ( " Bugün hava soğuktur. \n " ) ; e l s e i f ( i < 20) p r i n t f ( " Bugün hava s e r i n d i r. \n " ) ; e l s e 17 p r i n t f ( " Bugün hava s ı c a k t ı r. \n " ) ; 2 Bugün ı s ı kaç d e r e c e d i r? 5 Bugün hava soğuktur. / Program 8.10, kullanıcının girdiği sayının 3 ile bölünebildiğini, çift olduğunu, tek olduğunu ya da tek olduğu halde 3 ile bölünemediğini söylüyor. Program 8.10. main ( ) 5 s e t l o c a l e (LC_ALL, " " ) ; i n t i ; 10 p r i n t f ( " Bir tamsayı g i r i n i z \n " ) ; s c a n f ( "%d ", &i ) ; i f ( i % 3 == 0) p r i n t f ( "%d t a m s a y ı s ı 3 i l e tam bölünür. ", i ) ; 15 e l s e i f ( i % 2 == 0) p r i n t f ( "%d t a m s a y ı s ı ç i t f s a y ı d ı r. ", i ) ; e l s e p r i n t f ( "%d t a m s a y ı s ı tek s a y ı d ı r, ama 3 i l e tam bölünmez. ", i ) ; 1 Bir tamsayı g i r i n i z 27 27 t a m s a y ı s ı 3 i l e tam bölünür. / if-else ve else-if yapıları istenildiği kadar içiçe konulabilir. Program 8.11, kullanıcının girdiği puana göre karne notunu söylüyor. Program 8.11.

8.5. IF-ELSE YAPISI 87 main ( ) 5 s e t l o c a l e (LC_ALL, " " ) ; i n t i ; 10 p r i n t f ( " Not o r t a l a m a n ı z ı g i r i n i z : \n " ) ; s c a n f ( "%d ", &i ) ; i f ( i > 90) p r i n t f ( " Puanınız %d i s e notunuz A o l u r. \n ", i ) ; 15 e l s e i f ( i > 75) p r i n t f ( " Puanınız %d i s e notunuz B o l u r. \n ", i ) ; e l s e i f ( i > 60) p r i n t f ( " Puanınız %d i s e notunuz C o l u r. \n ", i ) ; e l s e i f ( i > 50) 20 p r i n t f ( " Puanınız %d i s e notunuz D o l u r. \n ", i ) ; e l s e p r i n t f ( " Puanınız %d i s e notunuz F o l u r. \n ", i ) ; 25 r e t u r n 0 ; Not o r t a l a m a n ı z ı g i r i n i z : 92 Puanınız 92 i s e notunuz A o l u r. 5 / Program 8.12, kullanıcının girdiği karakterin tipini söylüyor. Program 8.12. main ( ) 5 s e t l o c a l e (LC_ALL, " " ) ; c h a r ch ; 10 p r i n t f ( " Bir tuşa b a s ı n ı z : " ) ; s c a n f ( "%c ", &ch ) ; i f ( i s u p p e r ( ch ) ) p r i n t f ( " Büyük h a r f g i r d i n i z. " ) ; e l s e 15 i f ( i s l o w e r ( ch ) ) p r i n t f ( " Küçük h a r f g i r d i n i z. " ) ; e l s e i f ( i s d i g i t ( ch ) ) p r i n t f ( " Bir rakam g i r d i n i z. " ) ; 20 e l s e p r i n t f ( " A l f a s a y ı s a l olmayan b i r k a r e k t e r g i r d i n i z. " ) ;

88 BÖLÜM 8. PROGRAM AKIŞININ DENETIMI Programın f a r k l ı koşmalarında, g i r i l e n k a r e k t e r e b a ğ l ı o l a r a k ç ı k t ı l a r şuna benzer. 3 Bir tuşa b a s ı n ı z : H Büyük h a r f g i r d i n i z. 1 1. s a t ı r y e r i n e ch = g e t c h a r ( ) ; y a z ı l a b i l i r. / Uyarı 8.6. karakter ve string fonksiyonları için bkz. Bölüm??. Program 8.13, [1,100] aralığında 10 tane rasgele sayı üretiyor. her birisinin tek mi yoksa çift mi olduğunu buluyor. Program 8.13. #i n c l u d e <s t d l i b. h> 3 i n t main ( ) s e t l o c a l e (LC_ALL, " " ) ; 8 i n t c, r ; f o r ( c = 1 ; c <= 1 0 ; c++) r = rand ( ) % 100 + 1 ; p r i n t f ( "%d ", r ) ; 13 i f ( r % 2) p r i n t f ( " Sayı ç i f t t i r. \n " ) ; 18 e l s e p r i n t f ( " Sayı t e k t i r. \n " ) ; 23 2 42 Sayı t e k t i r. 68 Sayı t e k t i r. 35 Sayı ç i f t t i r. 1 Sayı ç i f t t i r. 70 Sayı t e k t i r. 7 25 Sayı ç i f t t i r. 79 Sayı ç i f t t i r. 59 Sayı ç i f t t i r. 63 Sayı ç i f t t i r. 65 Sayı ç i f t t i r. 12 /

8.5. IF-ELSE YAPISI 89 switch-case Yapısı Program akışının yönlenebileceği olası seçenekler çoksa, ardışık if, ya da saçak yapıları yerine switch yapısı daha kolay olur. s w i t c h ( s e ç i c i ) 3 c a s e s e ç k i 1: deyim 1; c a s e s e ç k i 2: 8 deyim 2; b r e a k... [ d e f a u l t : 13 deyim b r e a k ] Bu yapıda case ifadelerinin sayısı için bir kısıt yoktur, gerektiği kadar case bloku konulabilir. Bu sözdiziminde geçen terimlerin açıklanması: switch(seçici): Seçici bir değişken ya da bir ifade olabilir. Seçici değişken olduğunda int ya da char tiplerinden herhangi birisinden bir literal (sabit değer) almalıdır. Seçici bir deyim ise bu türlerden literal bir değer veren formüldür. Burada formül, matematiksel formüllerde olduğu gibi, bir sonuç veren deyim olarak algılanmalıdır. case seçki: Seçici değişkenin ya da seçici ifadenin aldığı değerdir. O değeri, çoklu yol ayrımında program akışına yol gösteren bir bir levha, bir etiket gibi düşünebiliriz. Bu değer seçicinin alabildiği yukarıdaki veri tiplerinden herhangi birisi olabilir. Tabii, bu değer bir literal (sabit değer) olmalıdır. int ya da char değerlerin artan sırada dizilmesi önerilir; ama zorunlu değildir. case_bloku: Bir case seçeneğinde işlenecek deyimlerden oluşan bloktur. Blokta birden çok deyim olabilir. Her case_blokundaki deyimler belirli olduğundan blok parantezine gerek yoktur. break: Bir case seçeneğine giren program akışı, o seçenekteki deyimleri işleyince, sonrakilere geçmeden switch yapısının dışına çıkmalıdır. Bu çıkışı break anahtar sözcüğü sağlar. break; deyimi kullanılmazsa, program akışı, sonraki case seçeneklerinin hepsini çalıştırır. break; deyimi, program akışını switch-case yapısından çıkarır ve switch-case yapısından sonraki ilk deyime gönderir.

90 BÖLÜM 8. PROGRAM AKIŞININ DENETIMI default: İsteğe bağlı (optional) bir seçenektir. Seçicinin değeri, case ile belirlenen hiçbir seçki ile uyuşmadığı zaman yapılmasını istediğimiz işler için gerekli deyim(ler)i bu seçeneğe yazarız. case seçeneklerinden hiçbiri gerçekleşemezse default seçeneği çalışır. Seçicinin değerinin, case lerdeki seçkilerden birisine eşit olacağı kesinlikle biliniyorsa, default seçeneğini yazmanın gereği yoktur. switch yapısının nasıl kullanıldığını aşağıdaki örnekte göreceğiz. Program 8.14, switch-case yapısında seçici olarak int tipi değişken kullanıyor. case bloklarının sonunda break; deyimi olmadığı için, ilk seçkiden sonra gelen case bloklarının hepsi çalışır. Ama böyle olması genellikle istenilen iş değildir. Program 8.14. main ( ) 5 s e t l o c a l e (LC_ALL, " " ) ; i n t x ; s c a n f ( "%d ", &x ) ; s w i t c h ( x ) c a s e 1 : 10 p r i n t f ( " 1. konum. \ n " ) ; p r i n t f ( " B i r i n c i adım\n " ) ; c a s e 2 : p r i n t f ( " 2. konum. \ n " ) ; p r i n t f ( " i k i n c i adim\n " ) ; 15 c a s e 3 : p r i n t f ( " 3. konum. \ n " ) ; p r i n t f ( " Üçüncü adım\n " ) ; c a s e 4 : p r i n t f ( " 4. konum. \ n " ) ; 20 p r i n t f ( " Dördüncü adım\n " ) ; d e f a u l t : p r i n t f ( " Hiç adım t ı l m a d ı \n " ) ; 1 c a s e s e ç e n e k l e r i n d e break ; deyimi o l m a d ı ğ ı i c i n s e ç i l e n c a s e blokundan s o n r a k i bütün c a s e b l o k l a r ı ç a l ı ş ı r. s e ç k i \emph i n t t i p t e n i s e, d e ğ e r i s c a n f ( ) f o n k s i y o n u i l e o k u n a b i l i r. / Program 8.15, switch-case yapısında seçici olarak char tipi değişken kullanıyor. case seçeneklerinin sonunda break; deyimi olduğu için, program

8.5. IF-ELSE YAPISI 91 akışı bir case blokunu işleyince sonrakilere uğramadan switch-case yapısı dışına çıkar. Yapıdan sonraki ilk deyime gider. Program 8.15. main ( ) 5 s e t l o c a l e (LC_ALL, " " ) ; i n t ch ; ch = g e t c h a r ( ) ; s w i t c h ( ch ) c a s e M : 10 c a s e m : p r i n t f ( " 1. konum. \ n " ) ; p r i n t f ( " B i r i n c i adım\n " ) ; c a s e P : 15 c a s e p : p r i n t f ( " 2. konum. \ n " ) ; p r i n t f ( " i k i n c i adim\n " ) ; c a s e R : 20 c a s e r : p r i n t f ( " 3. konum. \ n " ) ; p r i n t f ( " Üçüncü adım\n " ) ; 25 c a s e B : c a s e b : p r i n t f ( " 4. konum. \ n " ) ; p r i n t f ( " Dördüncü adım\n " ) ; 30 d e f a u l t : p r i n t f ( " Hiç adım a t ı l m a d ı \n " ) ; 2 c a s e s e ç e n e k l e r i n e break deyimi konulduğu i ç i n, s e ç k i y e b a ğ l ı o l a r a k i ş l e n e n c a s e blokundan sonra program a k ı ş ı switch c a s e y a p ı s ı d ı ş ı n a ç ı k a r ; yapıdan s o n r a k i deyime g e ç e r. char t i p i n d e n olan s e ç k i d e ğ e r i n i e l d e etmek i ç i n g e t c h a r ( ) f o n k s i y o n u k u l l a n ı l ı y o r. S e ç k i olarak, k u l l a n ı c ı n ı n büyük ya da küçük h a r f g i r e b i l m e s i i ç i n, her i k i s e ç e n e k a y r ı a y r ı y a z ı l d ı. 7 / Program 8.2, switch-case yapısında seçici olarak int tipi değişken kullanılmasına örnektir. Örnek 8.2.

92 BÖLÜM 8. PROGRAM AKIŞININ DENETIMI 3 main ( ) s e t l o c a l e (LC_ALL, " " ) ; i n t ay ; 8 p r i n t f ( " Kaçıncı ay? \n " ) ; s c a n f ( "%d ", &ay ) ; s w i t c h ( ay ) 13 c a s e 1 : p r i n t f ( " Ocak " ) ; c a s e 2 : p r i n t f ( " Şubat " ) ; 18 c a s e 3 : p r i n t f ( " Mart " ) ; c a s e 4 : 23 p r i n t f ( " Nisan " ) ; c a s e 5 : p r i n t f ( " Mayıs " ) ; 28 c a s e 6 : p r i n t f ( " Haziran " ) ; c a s e 7 : p r i n t f ( "Temmuz" ) ; 33 c a s e 8 : p r i n t f ( " Ağustos " ) ; c a s e 9 : 38 p r i n t f ( " Eylül " ) ; c a s e 1 0 : p r i n t f ( " Ekim " ) ; 43 c a s e 1 1 : p r i n t f ( " Kasım " ) ; c a s e 1 2 : p r i n t f ( " A r a l ı k " ) ; 48 Kaçıncı 7 Temmuz 5 / ay

8.5. IF-ELSE YAPISI 93 Program 8.16 switch-case yapısında seçici olarak, char tipten literal değer alan bir deyim kullanılmasına örnektir. Kullanıcının girdiği harfi seçki deyimi (toupper(ch)) büyük harfe çevirmektedir. Program 8.16. main ( ) 5 s e t l o c a l e (LC_ALL, " " ) ; c h a r ch ; p r i n t f ( " Karne Notunuzu g i r i n i z \n " ) ; 10 ch = g e t c h a r ( ) ; s w i t c h ( toupper ( ch ) ) c a s e A : 15 p r i n t f ( " P e k i y i " ) ; c a s e B : p r i n t f ( " İ y i " ) ; 20 25 c a s e C : p r i n t f ( " Orta " ) ; c a s e D : p r i n t f ( "Hmmmm.... " ) ; 30 c a s e F : p r i n t f ( " Daha i y i s i n i b a ş a r a b i l i r s i n! " ) ; d e f a u l t : 35 p r i n t f ( " B a ş a r ı notunu y a n l ı ş g i r d i n i z! " ) ; 2 Karne notunuzu g i r i n i z : a P e k i y i / Program 8.17, seçici değişken yerine bir deyimin kullanılabileceğini gösteriyor. (puan / 10) deyimi kullanıcının 100 tam puan üzerinden girdiği puanı 10 tam not üzerinden değerlendirme sistemine dönüştürmektedir.

94 BÖLÜM 8. PROGRAM AKIŞININ DENETIMI Program 8.17. main ( ) 5 s e t l o c a l e (LC_ALL, " " ) ; i n t puan ; p r i n t f ( " P u a n ı n ı z ı g i r i n i z? \n " ) ; 10 s c a n f ( "%d ", &puan ) ; s w i t c h ( puan / 10) c a s e 1 0 : p r i n t f ( " Notunuz A d ı r. " ) ; 15 c a s e 9 : p r i n t f ( " Notunuz A d ı r. " ) ; c a s e 8 : 20 p r i n t f ( " Notunuz B+ d i r. " ) ; c a s e 7 : p r i n t f ( " Notunuz B d i r. " ) ; 25 c a s e 6 : p r i n t f ( " Notunuz B d i r. " ) ; c a s e 5 : p r i n t f ( " Notunuz C+ d i r. " ) ; 30 c a s e 4 : p r i n t f ( " Notunuz C d i r. " ) ; c a s e 3 : 35 p r i n t f ( " Notunuz C d i r. " ) ; c a s e 2 : p r i n t f ( " Notunuz D+ d i r. " ) ; 40 c a s e 1 : p r i n t f ( " Notunuz D d i r. " ) ; c a s e 0 : p r i n t f ( " Notunuz F d i r. " ) ; 45 d e f a u l t : p r i n t f ( " Y a n l ı ş not g i r d i n i z! " ) ; 50 Not o r t a l a m a n ı z n e d i r? 100 4 Notunuz A d ı r. /

8.5. IF-ELSE YAPISI 95 8.5.2 Koşullu Operatör? : operatorü Bir değişkenin değeri bir mantıksal ifadenin doğru ya da yanlış olmasına bağlı olarak belirlenebiliyorsa, onu if-else deyimi ile tanımlamak yerine, daha kısa olarak koşullu deyim (üçleme, conditional operator, ternary conditional) ile tanımlayabiliriz. Örneğin, a ile b sayılarının maksimumunu if-else yapısı ile i f ( a > b ) max = a ; e l s e 5 max = b ; biçiminde bulabiliriz. Koşullu deyim kullanarak, bunu daha kısa olarak, max = ( a > b )? a : b ; biçiminde yazabiliriz. Bu deyimin sonucu, eğer (a > b) ise a, değilse b dir. Genel olarak, Tanım 8.1. e1? e2 : e3 deyimi, bir operatördür, dolayısıyla bir değer verecektir. e1 bir mantıksal deyimdir (boolean), e2 ve e3 literal değerlerdir. Eğer e1 true ise, 8.1 operatörünün değeri e2, false ise e3 olur. Bu operatöre koşullu (üçleme, conditional, ternary) operatör denilir. En genel olarak, koşullu operatörün sözdizimini (sytax) Tanım 8.2. mantıksal deyim? terim1 : terim2 ; biçimindedir. Burada mantıksal-deyim true ya da false değerini alan bir boolean deyimdir. terim1 ve terim2 literal (sabit) değerlerdir ya da literal değerler veren iki deyimdir. Örneğin, i n t c = (1 > 2)? ( c = 25) : ( c =18) ; operatörünün değeri 18 olur. Program 8.18, verilen iki sayının minimumunu buluyor. Program 8.18.

96 BÖLÜM 8. PROGRAM AKIŞININ DENETIMI 4 i n t main ( ) s e t l o c a l e (LC_ALL, " " ) ; i n t a, b, min ; 9 p r i n t f ( " İ k i tamsayı g i r i n i z \n " ) ; s c a n f ( "%d %d ", &a, &b ) ; p r i n t f ( " G i r g i ğ i n i z s a y ı l a r %d ve %d d i r. r \n ", a, b ) ; 14 min = ( ( a < b )? a : b ) ; p r i n t f ( " Küçük olan s a y ı : %d d i r \n ", min ) ; 19 r e t u r n 0 ; 1 İ k i tamsayı g i r i n i z 23 67 Küçük olan s a y ı : 23 d i r. / Program 8.19, koşullu operatörün mantıksal ifadelere de uygulanabileceğini gösteriyor. Program 8.19. i n t main ( ) 5 s e t l o c a l e (LC_ALL, " " ) ; i n t a=5, b, min ; b = (3 > 2)? (3 > a ) : (3 < a ) ; 10 p r i n t f ( "%d\n ", (3 > a ) ) ; p r i n t f ( "%d\n ", b ) ; i f (3 > 2) b = (3 > a ) ; 15 e l s e b = (3 < a ) ; p r i n t f ( "%d\n ", b ) ; 2 0 0 0 /

8.6. ALIŞTIRMALAR 97 8.6 Alıştırmalar 1. Program 8.3 else-if yapısına dönüştürünüz. Örnek 8.3. i n t main ( ) 5 s e t l o c a l e (LC_ALL, " " ) ; i n t gun ; p r i n t f ( " Haftanın k a ç ı n c ı günündeyiz? \n " ) ; s c a n f ( "%d ", &gun ) ; 10 s w i t c h ( gun ) c a s e 1 : p r i n t f ( "Bu gün P a z a r t e s i d i r \n " ) ; 15 20 c a s e 2 : p r i n t f ( "Bu gün S a l ı d ı r \n " ) ; c a s e 3 : p r i n t f ( "Bu gün Çarşamba d ı r \n " ) ; 25 c a s e 4 : p r i n t f ( "Bu gün Perşembe d i r \n " ) ; c a s e 5 : 30 p r i n t f ( "Bu gün Cuma d ı r \n " ) ; c a s e 6 : p r i n t f ( "Bu gün Cumartesi d i r \n " ) ; 35 40 45 c a s e 7 : p r i n t f ( "Bu gün Pazar d ı r \n " ) ; d e f a u l t : p r i n t f ( " Haftada ö y l e b i r gün yok! \n " ) ; r e t u r n 0 ; 2. Program 8.20 i çözümleyiniz. Program 8.20.

98 BÖLÜM 8. PROGRAM AKIŞININ DENETIMI 4 i n t g ; v o i d t a t i l _ m i ( g ) i n t gun = g ; i f ( gun> 0 & gun< 6) p r i n t f ( "Bu gün i ş günüdür. Ç a l ı ş m a l ı s ı n \n " ) ; 9 i f ( gun == 6 gun == 7) p r i n t f ( "Bu gün h a f t a sonudur. D i n l e n m e l i s i n \n " ) ; i n t main ( ) 14 s e t l o c a l e (LC_ALL, " " ) ; i n t n ; p r i n t f ( "Bu gün h a f t a n ı n k a ç ı n c ı günüdür? \n " ) ; 19 s c a n f ( "%d ", &n ) ; t a t i l _ m i ( n ) ; r e t u r n 0 ; 24 3. Yalın if-else yapısında kaç seçenek mümkündür? 4.1 i n t c = (7 > 9)? 25 : 4 5 ; operatörünün sonucu nedir? 5. Yukarıdaki koşullu operatörü if-else yapısı haline getiriniz.