GirişC dilinde if, switch ve ? olmak üzere üç tip karşılaştırma işlemi yapılır. Ancak ? bir operatördür. if karşılaştırma deyimi ile, diğer programlarda olduğu gibi if-else yapısı kurulabilir. switch deyimi, bir değişkenin içeriğine göre program akışını yönlendirme işlemini yapar
[1].
if, if-else YapısıBu deyimler koşullu işlem yapma deyimidir. 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 ve else 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(
koşul)
{
...
deyimler; (
küme)
...
}
Program 6.1'de basit olarak if deyiminin kullanımı gösterilmiştir. Programda bu deyim kullanılırken kümenin başlangıcı ve bitişini gösteren, küme parantezleri kullanılmamıştır. Eğer if deyiminden sonra icra edilecek deyimler tek satırdan oluşuyorsa, bu işaretlerin kullanılmasına gerek yoktur. Yada if deyimden sonra { ve } işaretleri kullanılmamışsa, bu deyimi takip eden sadece ilk satır işleme konur.
Program 6.1: if deyiminin kullanımı
[color=gray] 1: /* 06prg01.c: if deyiminin kullanımı */2: 3: #include
4: 5: int x, y;
/* global değişkenler */6: 7: void main()
8: {
9: printf("x degeri: ");
10: scanf("%d",&x);
11: printf("y degeri: ");
12: scanf("%d", &y);
13: 14: /* değerleri karşılaştır ve sonucu ekrena yaz */15: 16: if (x == y)
17: printf("x, y ye esit\\\\\\\\\\\\\\\\n");
18: 19: if (x > y)
20: printf("x, y den buyuk\\\\\\\\\\\\\\\\n");
21: 22: if (x < y)
23: printf("x, y den kucuk\\\\\\\\\\\\\\\\n");
[color:a713=gray:a713]24: }
5. satırında global olarak bildirilen x ve y tamsayı değişkenleri, 10. ve 12. satırlarda scanf fonksiyonu ile klavyeden okutulmuştur. 16., 19. ve 22. satırlarda kullanılan if deyimlerindeki koşul ifadeleri (Bkz Tablo 3.3) ile x, y sayıları karşılaştırılmış ve sonuç ekrana uygun bir biçimde gösterilmiştir. if deyimlerinden sonra { ve } karakterlerinin kullanılmadığına dikkat edin. Eğer bu şekilde kullanılırsa,
sadece bu deyimlerden sonra gelen ilk satır işleme konur.
ÇIKTI
x degeri: 3
y degeri: 8
x, y den kucuk
if deyiminin else ile birlikte kullanımı şu şekildedir:
if(
koşul){
...
deyimler; (
küme1)
...
}
else{
...
deyimler; (
küme2)
...
}
Bu yaoının kullanılmasına dair bir örnek. 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. Bir yılın artık yıl olup olmadığı aşağıdaki gibi bir if deyimi ile kontrol edilebilir:
if( yil%4==0 && yil%100!=0 || yil%400==0 ) ... yil
artık yıl dırDikkate edilirse koşul, birden çok koşul birlikte kullanılarak, mantıksal operatörlerle birleştirilmişitir. Program 6.2, klavyeden girilen bir yılın artık yıl olup olmadığnı sınayan basit bir programdır. Bu kontrol if-else yapısı ile yapılmıştır.
Program 6.2: if-else deyiminin kullanımı
[color=gray] 1: /* 06prg02.c: Bir yılın artık yil olup olmadığını sınar. */2: 3: #include
4: 5: void main()
6: {
7: int yil;
8: 9: printf("Bir yil girin: ");
10: scanf("%d",&yil);
11: 12: if( yil % 4 == 0 && yil % 100 != 0 || yil % 400 == 0 )
13: printf("%d artik yil\\\\\\\\\\\\\\\\n",yil);
14: 15: else
16: printf("%d artik yil degil\\\\\\\\\\\\\\\\n",yil);
17: 18: }
ÇIKTI
Bir yil girin: 1996
1996 artik yil
Eğer program içinde kullanılacak koşulların sayısı 2 den çok ise aşağıdaki yapı kullanılır:
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 ikinci dereceden bir polinomun köklerini hesaplamaktadır. Programda delta değerinin 0 dan 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 oldukça iyi ve klasik bir örnektir.
Program 6.3: if, else if, else yapısı
[color=gray] 1: /* 06prg03.c:
2: ax^2 + bx + c = 0 denkleminin (karmaşık sayılı kökler dahil) çözümü */3: 4: #include
5: #include
/* sqrt için */6: 7: 8: void main(void)
9: {
10: float a,b,c,delta,x1,x2,x,kok_delta;
11: 12: printf("a, b, c degerlerini girin:\\\\\\\\\\\\\\\\n");
13: scanf("%f %f %f",&a,&b,&c);
14: 15: delta = b*b - 4*a*c;
16: 17: if( delta > 0.0 )
18: {
19: x1 = ( -b + sqrt(delta) )/( 2*a );
20: x2 = ( -b - sqrt(delta) )/( 2*a );
21: 22: printf("\\\\\\\\\\\\\\\\nReel kokler :");
23: printf("\\\\\\\\\\\\\\\\nx1 = %f ve x2 = %f",x1,x2);
24: }
25: 26: else if( delta < 0.0 )
27: {
28: kok_delta = ( sqrt(-delta) ) / (2*a);
29: x = -0.5*b/a;
30: 31: printf("\\\\\\\\\\\\\\\\nKarmasik kokler :");
32: printf("\\\\\\\\\\\\\\\\nx1 = %f + %fi ve x2 = %f - %fi",x,kok_delta,x,kok_delta);
33: }
34: 35: else
36: {
37: x = -0.5*b/a;
38: 39: printf("\\\\\\\\\\\\\\\\nKokler eşit :");
40: printf("\\\\\\\\\\\\\\\\nx1 = x2 = %f",x);
41: }
42: 43: }
/* main */ÇIKTI
a, b, c degerlerini girin:
1. 1. 1.
Karmasik kokler :
x1 = -0.500000 + 0.866025i ve x2 = -0.500000 - 0.866025i