Bu Günkü Konular If yapısı ve karşılaştırma operatörleri <, <=, >, >=, ==, != 2 sayını büyük/küçük olanını bulma 3 sayıdan küçük olanını bulma Kompleks karşılaştırma ifadelerini anlama Mantıksal operatörler (!, &&, ||) Kademeli ve iç içe if yapıları Koşul Operatörü ? switch ifadesi
Generic C Program Yapısı #include <stdio.h> /* main programın başlangıcını işaret eder */ main() { /* Değişkenler programda kullanılacak verileri tutar. */ Değişken Tanımlama; /* Program basamakları: I/O, hesaplamalar (ifadeler) */ İfade1; İfade2; … İfadeN; } /* program sonu*/
Örnek C Programı Programımız programın sonuna kadar adım adım çalışacak ifadelerden oluşuyor. #include <stdio.h> /* Fahrenheit’ı santigrata dönüştür */ main() { float fahrenheit, santigrat; printf(“fahrenheit sıcaklığı gir: “); scanf(“%f”, &fahrenheit); santigrat = (fahrenheit-32)/1.8; printf(“%f fahrenheit derece %f santigrat dereceye eşittir\n”, fahrenheit, santigrat ); } Kullanıcıdan dönüştüreceğin Fahrenhayt dereceyi girmesini iste santigrat = (fahrenhayt -32)/1.8 Fahrenhayt ve Santigrat dereceleri ekrana yazdır. Başla Bitir
If yapıları ile programlar İki farklı seçenekten birini seçmesi gereken programlar hakkında ne düşünüyorsunuz? Bir karşılaştırma yaparsın ve karşılaştırma sonucuna göre iki farklı ifadeden birini çalıştırırsın. Karşılaştırma, karar verme ile ilgili verdiğimiz örnekleri hatırlayın İki sayıdan büyük ve küçük olanını nasıl çözdüğümüzü hatırlayalım.
2 sayıdan min ve max olanını bulma Kullanıcıdan sayı1 ve sayı2 yi girmelerini iste min ve max’ı ekrana yazdır sayı1 < sayı2 ? min = sayı1 E max = sayı2 min = sayı2 max = sayı1 H Başla Bitir Kullanıcıdan sayı1 ve sayı2 yi girmelerini iste if (sayı1 < sayı2) 2.1. min = sayı1; 2.2. max = sayı2; else (sayı1 >= sayı2) 3.1. min = sayı2; 3.2. max = sayı1; min ve max’ı ekrana yazdır
if-else İfadesi Bir karşılaştırma yaparak programın iki seçenekten birini çalıştırmasına izin veriyor. Syntax: karşılaştırma Y N ifade 1 ifade 2 if (karşılaştırma) ifade1; [else ifade2;] Eğer karşılaştırma sonucu doğru ise (true -1) ifade1 çalışacak, değilse ifade2 çalışacak.
if-else Örnekler int finalNotu; printf(“Final notunu girin: “); scanf(“%d”, &finalNotu); if (finalNotu >= 45) printf(“Geçti \n"); int finalNotu; printf(“Final notunu girin: “); scanf(“%d”, &finalNotu); if (finalNotu >= 45) printf(“Geçti \n"); else printf(“Kaldı!\n");
Eğer birden fazla durum işleteceksek ne yapmalıyız? int finalNotu; … if(finalNotu >= 45) { printf(“Geçti!\n"); printf(“Tebrikler!\n"); } else printf(“Kaldı!\n"); printf(“Daha iyi çalış.\n"); blok (birleşmiş durumlar)
Süslü parantezlerin yeri Süslü parantezlerin yeri bir stil sorunudur Compiler için bir sorun değildir. int finalNotu; … if(finalNotu >= 45){ printf(“Geçti!\n"); printf(“Tebrikler!\n"); } else { printf(“Kaldı!\n"); printf(“Daha iyi çalış.\n"); }
2 tam sayıdan min ve max olanını bulalım int a, b; int min, max; printf(“2 sayı girin: “); scanf(“%d%d”, &a, &b); if (a < b) { min = a; max = b; } else { min = b; max = a; } /* end-else */ printf(“%d ve %d küçüğü = %d\n”,a, b, min); printf(“%d and %d büyüğü = %d\n”,a, b, max); Kullanıcıdan sayı1 ve sayı2 girmelerini iste min ve max’ı yazdır sayı1 < sayı2 ? min = sayı1 E max = sayı2 min = sayı2 max = sayı1 H Başla Bitir
Programın Çalışması(1) int a, b; int min, max; printf(“2 sayı girin: “); scanf(“%d %d”, &a, &b); if (a < b) { min = a; max = b; } else { min = b; max = a; } /* end-else */ printf(“%d ve %d küçüğü = %d\n”,a, b, min); printf(“%d ve %d büyüğü = %d\n”,a, b, max); DATA a b 45 ? ? 56 ? min max 45 ? 56 ? 2 sayı girin: 45 ve 56 küçüğü = 45 45 ve 56 büyüğü = 56 45 56
Programın Çalışması(2) int a, b; int min, max; printf(“2 sayı girin: “); scanf(“%d%d”, &a, &b); if (a < b) { min = a; max = b; } else { min = b; max = a; } /* end-else */ printf(“%d ve %d küçüğü = %d\n”, a, b, min); printf(“%d ve %d büyüğü = %d\n”, a, b, max); DATA a b 77 ? ? 22 ? min max 22 ? 77 ? 2 sayı girin: 77 ve 22 küçüğü = 22 77 ve 22 büyüğü = 77 77 22
if ifadesinde karşılaştırma işlemleri İf ifadesinin içindeki karşılaştırma iki değeri karşılaştırır ve doğru True (1) veya yanlış False (0) değer üretir. Karşılaştırma ifadesi olarak adlandırılır Karşılaştırma operatörleri kullanılarak biçimlendirilirler. karşılaştırma Y N ifade 1 ifade 2 büyük eşit >= büyüktür > küçük eşit <= küçüktür < eşit değil != eşittir == Anlamı Operator C de boolean tipi yok! Bu yüzden onun yerine int kullanılıyor. Genel kural: “Sıfır = false, diğer sıfır olmayan değerler =true”
Karşılaştırma operatörleri Örnek Varsayalım a = 1, b = 2, ve c = 3 1 True b == 2 False c != 3 (b + c) > (a + 5) (a + b) >= c a < b Değer Karar İfade
Akış diyagramı 3 sayının küçük olanını bulma (1) Başla Kullanıcıdan sayı1, sayı2 ve sayı3 ü girmelerini iste sayı1 < sayı2 ? evet hayır sayı2 < sayı3 ? evet sayı1 < sayı3 ? evet hayır hayır min = sayı3 min = sayı2 min = sayı3 min = sayı1 min sayısını yazdır Bitir
Kod: 3 sayının küçük olanını bulma (1) Problem: 3 tam sayıdan küçük olanını bulunuz int a, b, c; int min; printf(“3 sayı giriniz: “); scanf(“%d%d%d”, &a, &b, &c); if (a < b){ if (a < c) min = a; else min = c; } else { if (b < c) min = b; } printf(“%d, %d, %d küçüğü = %d\n”, a, b, c, min);
Akış diyagramı 3 sayının küçük olanını bulma(2) Start Kullanıcıdan sayı1, sayı2 ve sayı3 ü girmelerini iste min = sayı1 sayı2 < min ? evet min = sayı2 hayır sayı3 < min ? evet min = sayı3 hayır min sayısını ekrana yazdır End
Kod: 3 sayının küçük olanını bulma (2) Problem: 3 tam sayıdan küçük olanını bulunuz /* daha basit alternatif kodlama*/ int a, b, c; int min; printf(“3 sayı girin: “); scanf(“%d%d%d”, &a, &b, &c); min = a; /* farzet; a en küçüğü*/ if (b < min) min = b; /* b daha küçük mü? */ if (c < min) min = c; /* c daha küçük mü? */ printf(“%d, %d, %d küçüğü = %d\n”, a, b, c, min);
Mantıksal Operatörler Ciddi durumlarda daha kompleks karşılaştırma işlemleri yapmak isteyebilirsiniz. (x eşittir 5 mi) VEYA (x eşittir 8 mi) (x == 5) VEYA (x == 8) (x büyüktür 5 mi) VE (x küçüktür 10 mu) (x > 5) VE (x < 10) (x küçüktür y mi) VE (y eşit değil 20 mi) (x < y) VE (y != 20) C programlama dili daha komplex karşılaştırma işlemleri yapmak için 3 mantıksal operatör sunuyor AND-VE (&&), OR-VEYA (||), NOT-DEĞİL (!)
Mantıksal Operatorler Karşılaştırma işlemlerini doğru mu True (1) veya yanlış mı False (0) diye birleştirmede kullanılır. Mantıksal operatörler kullanılarak oluşturulan kompleks karşılaştırmalar if ifadelerinin içinde kullanılabilir. NOT ! OR || AND && Anlam Sembol && (AND) (False) 1 (True) || (OR) (False) 1 (True)
Mantıksal Operatörler (1) Varsayalım a bir integer değişken ve değeri 7 ve ch de bir char değişken ve değeri ‘q’ Expression Interpretation Value (a >= 6) && ( ch == 'q') True 1 (a >= 6) || ( ch == 'A') (a >= 6) && ( ch == 'A') False
Mantıksal Operatörler (2) int sicaklik = 75; double yagmur = 0.35; /* ihtimal */ printf(“sicak? %d\n”, sicaklik > 70 && sicaklik < 85); printf(“guzel? %d\n”, sicaklik > 70 && yagmur < 0.4); printf(“cok sicak/bulutlu?%d\n”, sicaklik < 50 || sicaklik > 85); printf(“ruzgarli? %d\n”, yagmur > 0.3 && yagmur < 0.7); sicak? 1 guzel? 1 cok sicak/bulutlu? 0 ruzgarli? 1
Mantıksal Operatörler (3) /* Eğer a eşittir 4 VEYA a eşittir 10 */ if (a == 4 || a == 10){ ... } else { } /* x 2 VE 20 arasında mı*/ if (x >= 2 && x <= 20){ ... } /* y 20’den büyük VE x eşit DEĞİL 30’a */ if (y > 20 && x != 30){ ... }
Birleşme ve Öncelik Kuralları Tüm operatörler için birleştirme ve öncelik kuralları >, >=, <, <= 4 +, - 3 *, /, % 2 ++, -- 1 Operator Öncelik 5 6 7 ==, != &&, || =, +=, -=, .. Hatırlayalım, ifadeleri parantez ile ayırmak en iyi yöntemdir.
Kademeli if deyimleri Bazen birden fazla koşulu test etmek isteriz, ta ki biri sağlanana kadar. Örneğin “n” in 0 a eşit , 0 dan büyük ve 0 dan küçük olmasını test etmek istiyoruz. if (n < 0) printf(“n < 0\n”); else { if (n == 0) printf(“n == 0\n”); else printf(“n > 0\n”); } /* end-else */ İkinci if deyimini else içinde kullanmaktansa onun yerine aşağıdaki gibi kullanabiliriz. Kademeli if olarak adlandırılıyor. if (n < 0) printf(“n < 0\n”); else if (n == 0) printf(“n == 0\n”); else printf(“n > 0\n”);
kademeli if Syntax if (durum1) ifade1; [else if (durum2) ifade2; … else ifadeN;]
kademeli if Örneği int finalNotu; … if (finalNotu >= 90) printf(“Geçti: Notun A \n”); else if (finalNotu >= 85) printf(“Geçti: Notun A- \n”); else if (finalNotu >= 80) printf(“Geçti: Notun B+ \n”); else if (finalNotu >= 75) printf(“Geçti: Notun B \n”); else if (finalNotu >= 70) printf(“Geçti: Notun B- \n”); else if (finalNotu >= 55) printf(“Geçti: Notun C \n”); else printf(“Kaldı \n”);
Koşul operatörü Kodunuzun birçok yerlerinde aşağıdaki kodu bula bilirsiniz: if (ifade) durum1; else durum2; Bu ifadeyi daha kısa yazabilecek bir operatör var koşul ? ifade1 : ifade2 Örnekler: min = (a < b) ? a : b; min a ve b den minimum olanını alır a = (b >= 0) ? b : -b; a b’nin mutlak değerini alır.
switch deyimi Bazen bir karşılaştırmada bir sürü değerden hangisi olduğunu seçmek isteriz. Bu durumda kademeli if leri aşağıdaki gibi kullanabiliriz. if (not == 5) printf(“Mükemmel\n”); else if (not == 4) printf(“iyi\n”); else if (not == 3) printf(“geçer\n”); else if (not == 2) printf(“zayıf\n”); else if (not == 1) printf(“kalır\n”); else printf(“geçersiz not\n”); Bir alternatif olarak kademeli if deyimlerinin yerine C switch yapısını destekliyor.
switch deyimi- örnek Önceki kodun kademeli if yerine switch ile yeniden yazımı switch(not){ case 5: printf(“Mükemmel\n”); break; case 4: printf(“İyi); case 3: printf(“Geçer\n”); case 2: printf(“Zayıf\n”); case 1: printf(“Kalır\n”); default: printf(“Geçersiz not\n”); } /* end-switch */
switch deyimi - Syntax İfadedeki koşula göre seçeneklerden bir tanesini çalıştırır. switch(koşul) { case değer1: durum1; … [break;] case değer2: durum2; default: durumN; } /* end-switch */
Bir başka switch Örneği int main(){ char operator; int a, b; printf(“bir işlem girin: “); scanf(“%d%c%d”, &a, &operator, &b); switch(operator) { case ‘+’: printf(“%d+%d = %d\n”, a, b, a+b); break; case ‘-’: printf(“%d-%d = %d\n”, a, b, a-b); case ‘*’: printf(“%d*%d = %d\n”, a, b, a*b); case ‘/’: if(b == 0) { printf(“Error: sıfıra bölme hatası \n”); printf(“ işlem iptal edildi \n”); } else printf(“%d/%d = %d\n”, a, b, a/b); default: printf(“bilinmeyen işlem \n”); } /* end-switch */ return 0; } /* end-main */
break in switch içindeki rolü “break” bizi switch bloğunun dışına atar. Eğer break unutulur veya yazılmazsa kontrol bir sonraki case ten devam eder. switch(not){ case 5: printf(“Mükemmel\n”); case 4: printf(“İyi\n”); case 3: printf(“Geçer\n”); case 2: printf(“Zayıf\n”); case 1: printf(“Kalır\n”); default: printf(“Geçersiz not\n”); } /* end-switch */ If not == 3, aşağıdaki yazılacak Geçer Zayıf Kalır Geçersiz not
break in switch içindeki rolü Bunu kasten kendi kodunda kullanmış olabilirsin Böyle bir durumda niçin böyle yaptığına açıklama eklemelisin Örnek: switch(not){ case 5: case 4: case 3: case 2: gecen_sayisi++; /* diğerleri kalmış*/ case 1: toplam_sayi++; break; } /* end-switch */