6.2 if, if-else Yapısı
6.2 if, if-else Yapısı
Bu deyimler, koşullu işlem yapan deyimlerdir. if ve else tek bir karşılaştırma deyimi olup else kullanımı isteğe bağlıdır. Eğer bu koşul olumlu ise if den sonraki bölüm yürütülür veelse den sonraki bölüm atlanır. Koşul olumsuz ise if den sonraki küme atlanır ve eğer varsa, else den sonraki kümedeki işlemler gerçekleştirilir.
if deyiminin yapının genel biçimi şöyledir:
1 2 3 4 5 6 |
if(koşul) { ... deyimler; (küme) ... } |
if deyimi kullanılırken kümenin başlangıcı ve bitişini gösteren, küme parantezleri kullanılmasında kullanıcıya bir esneklik sunulmuştur. Eğer if deyiminden sonra icra edilecek deyimler tek satırdan oluşuyorsa, bu işaretlerin kullanılması zorunlu değildir. Yani, if deyimden sonra { ve } işaretleri kullanılmamışsa, bu deyimi takip eden sadece ilk satır işleme konur. Bu durum,else if, else deyimlerinde ve daha sonra işlenecek for ve while gibi döngü deyimlerinde de geçerlidir.
Buna göre aşağıdaki kullanım
1 2 3 |
if(x == y){ puts("x ve y esit"); } |
ile
1 2 |
if(x == y) puts("x ve y esit"); |
eşdeğerdir.
if deyiminin else ile birlikte kullanımı şu şekildedir:
1 2 3 4 5 6 7 8 9 10 11 |
if(koşul){ ... deyimler; (küme1) ... } else{ ... deyimler; (küme2) ... } |
Bu yapının kullanılmasına dair bir örnek Program 6.1’de gösterilmiştir. Program, klavyeden girilen bir tamsayının çift olup olmadığını sınar. Bilindiği gibi, çift sayılar, 2 ile kalansız bölünebilen sayılardır.
Program 6.1: if-else deyiminin kullanımı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/* 06prg01.c Klavyeden girilen bir sayının çift olup olmadığını sınar. */ #include <stdio.h> int main() { int sayi; printf("Bir sayi girin: "); scanf("%d",&sayi); if (sayi % 2 == 0) printf("sayi cifttir.\n"); else printf("sayi tektir.\n"); return 0; } |
ÇIKTI
1 2 |
Bir sayi girin: 3 sayi tektir. |
Mantıksal Operatörler kullanarak birden çok karşılaştırma birleştirilebilir. Buna iyi bir örnek Program 6.2’de gösterilmiştir. Program, bir yılın artık yıl olup olmadığını sınar. Bir yıl içinde, Şubat ayı 29 gün olursa o yıl artık yıl olarak adlandırılır. Artık yıl peryodik olarak 4 yılda bir gelir. Genel kanı “bir yıl 4 ile tam bölünebirse o yıl artık yıldır” şeklindedir. Fakat 1996 artık yıl iken 1800 artık yıl değildir. Genel sorgulama söyle olmalıdır: Eğer bir yıl
- 4 ile tam bölünüyorsa VE 100’e tam bölünmüyorsa VEYA
- 400 ‘e tam bölünüryorsa
o yıl artık yıldır.
Program 6.2: if-else deyiminin kullanımı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/* 06prg02.c: Bir yılın artık yil olup olmadığını sınar. */ #include <stdio.h> void main() { int yil; printf("Bir yil girin: "); scanf("%d",&yil); if( yil % 4 == 0 && yil % 100 != 0 || yil % 400 == 0 ) printf("%d artik yil\n",yil); else printf("%d artik yil degil\n",yil); } |
ÇIKTI
1 2 |
Bir yil girin: 1996 1996 artik yil |
Eğer program içinde kullanılacak koşulların sayısı ikiden çok ise aşağıdaki yapı kullanılır:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
if(koşul_1) { ... deyimler; (küme_1) ... } else if(koşul_2) { ... deyimler; (küme_2) ... } . . . else if(koşul_n-1) { ... deyimler; (küme_n-1) ... } else { ... deyimler; (küme_n) ... } |
Program 6.3, ax2 + bx + c = 0 formundaki ikinci dereceden bir polinomun köklerini hesaplamaktadır. Programda delta değerinin sıfırdan küçük olması durumda köklerin karmaşık sayıya dönüşeceğide göz önüne alınmıştır. Bu program if, else if ve else yapısı göstermek için klasik bir örnektir.
Program 6.3: if, else if, else yapısı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
/* 06prg03.c: ax*x + bx + c = 0 denkleminin (karmaşık sayılı kökler dahil) çözümü */ #include <stdio.h> #include <math.h> int main() { float a, b, c, delta, x1, x2, x, kok_delta; printf("a, b, c degerlerini girin:\n"); scanf("%f %f %f",&a,&b,&c); delta = b*b - 4.0*a*c; if( delta > 0.0 ){ x1 = ( -b + sqrt(delta) )/( 2.0*a ); x2 = ( -b - sqrt(delta) )/( 2.0*a ); printf("\nReel kokler:"); printf("\nx1 = %f",x1); printf("\nx2 = %f",x2); } else if( delta < 0.0 ){ kok_delta = ( sqrt(-delta) ) / (2.0*a); x = -0.5*b/a; printf("\nKarmasik kokler:"); printf("\nx1 = %f + (%f)i", x, kok_delta); printf("\nx2 = %f - (%f)i", x, kok_delta); } else{ x = -0.5*b/a; printf("\nKokler eşit:"); printf("\nx1 = x2 = %f",x); } return 0; } |
ÇIKTI
1 2 3 4 5 6 |
a, b, c degerlerini girin: 2 4 -8 Reel kokler: x1 = 1.236068 x2 = -3.236068 |
ÇIKTI
1 2 3 4 5 6 |
a, b, c degerlerini girin: 1 1 1 Karmasik kokler: x1 = -0.500000 + (0.866025)i x2 = -0.500000 - (0.866025)i |