3.
0 Karşılaştırma Deyimleri
C dilinde karşılaştıma işlemi if, switch deyimleri ve ? operatörü ile yapılmaktadır.
3.1 if, if-Else Deyimleri
3.1.1 if Deyimi
if deyimi koşullu işlem yapma deyimi olup en basit yapısı,
if (koşul) {
komutlar;
}
şeklindedir. if deyiminden sonra belirtilen koşul doğru olduğu taktirde, küme parantezleri
({ ve }) içinde kalan komutlar çalıştırılır. Eğer if deyiminden sonra çalıştırılacak deyimler tek bir
satırdan oluşuyorsa, küme parantezlerinin kullanılması mecburi değildir.
Örnek: Klavyeden girilen bir sayının tek mi çift mi olduğunu bildiren bir program yazalım.
#include <stdio.h>
main()
{
int x;
printf("Lutfen bir sayi girin: ");
scanf("%d",&x);
if (x % 2 == 0)
printf("\nCift sayi girdiniz.");
if (x % 2 == 1)
printf("\nTek sayi girdiniz.");
}
3.1.2 İf-Else Deyimi
if (koşul) {
komutlar_1;
}
else {
komutlar_2;
}
if deyiminin koşulu sağlandığı taktirde birinci, sağlanmadığı taktirde ise ikinci kümedeki
komutlar çalıştırılır.
C Ders Notları – Prof. Dr. Hasan OCAK 15
Örnek: denkleminin köklerini hesaplayan bir program yazalım.
#include <stdio.h>
#include <math.h>
main()
{
float a, b, c;
float delta, x1, x2, x_gercek, x_sanal;
printf("a, b, c: ");
scanf("%f%f%f",&a, &b, &c);
delta = b*b - 4*a*c;
if (delta >= 0) {
x1 = ( -b + sqrt(delta) )/( 2*a );
x2 = ( -b - sqrt(delta) )/( 2*a );
printf("Reel Kökler:\n");
printf("\tx1 = %f\n", x1);
printf("\tx2 = %f", x2);
}
else {
x_gercek = -b/(2*a);
x_sanal = sqrt(-delta)/(2*a);
printf("Karmasik Kökler:\n");
printf("\tx1 = %f + %fi\n", x_gercek, x_sanal);
printf("\tx2 = %f + %fi\n", x_gercek, -x_sanal);
}
}
if deyiminin en genel yapısı aşağıdaki gibidir.
if (koşul_1) {
komutlar_1;
}
else if (koşul_2) {
komutlar_2;
}
...
else if (koşul_N-1) {
komutlar_N-1;
}
else {
komutlar_N;
}
C Ders Notları – Prof. Dr. Hasan OCAK 16
Hangi koşul sağlanıyorsa, o koşuldan hemen sonraki kümedeki komutlar çalıştırılır ve diğer
koşullara bakılmaksızın if deyimini takip eden ilk komuttan itibaren programın çalıştırılmasına
devam edilir. Eğer hiçbir koşul sağlanmıyorsa, varsa else kısmından sonraki kümedeki komutlar
çalıştırılır.
Örnek: Girilen 3 sayıdan en büyüğünü bulan bir program yazalım.
#include <stdio.h>
main()
{
float x, y, z;
printf("x, y, z: ");
scanf("%f%f%f",&x, &y, &z);
if ((x > y) && (x > z))
printf("\nGirilen sayilarin en buyugu = %f", x);
else
if (y > z)
printf("\nGirilen sayilarin en buyugu = %f", y);
else
printf("\nGirilen sayilarin en buyugu = %f", z);
}
3.2 Switch Deyimi
Bir değişkenin içeriğine bağlı olarak farklı komut ya da komutların çalıştırılmasına olanak
sağlayan switch deyiminin genel yapısı,
switch (değişken) {
case sabit_1:
komutlar_1;
case sabit_2:
komutlar_1;
...
case sabit_N:
komutlar_N;
default:
komutlar_varsayılan;
}
şeklindedir. Değişkenin değerine eşit seçenek olup olmadığına bakılır. Var ise o noktadan
sonraki deyimler çalıştırılır. switch deyiminin sonuna gelindiğinde veya break ifadesi ile
C Ders Notları – Prof. Dr. Hasan OCAK 17
karşılaşıldığında switch deyiminden çıkılır ve programın çalıştırılmasına switch deyimini izleyen
ilk komuttan itibaren devam edilir.
Örnek: Kullanıcının klavyeden girdiği rakamın bir mi, iki mi yoksa bir ve ikiden farklı bir
rakam mı olduğunu bildiren bir program yazalım.
#include <stdio.h>
main()
{
int x;
printf("Bir rakam giriniz: ");
scanf("%d",&x);
switch (x) {
case 1:
printf("Bir rakamini girdiniz.\n ");
case 2:
printf("Iki rakamini girdiniz.\n ");
default:
printf("\n1 ve 2'den farkli bir rakam girdiniz.\n ");
}
}
Yukarıdaki programı inceleyelim. Kullanıcı klavyeden bir sayısını girdiğinde ekran çıktısı,
Bir rakam giriniz: 1
Bir rakamini girdiniz.
Iki rakamini girdiniz.
1 ve 2'den farkli bir rakam girdiniz.
olacaktır. Kullanıcı klavyeden iki sayısını girdiğinde ise ekran çıktısı,
Bir rakam giriniz: 2
Iki rakamini girdiniz.
1 ve 2'den farkli bir rakam girdiniz.
olacaktır. Değişkenin değerine eşit seçenek bulunduğu taktirde, break deyimi kullanılmadığı için,
doğru seçeneğin bulunduğu noktadan itibaren switch deyimi içindeki bütün komutlar
çalıştırılmaktadır. Sadece doğru seçenek altındaki komutların çalıştırılmasını sağlamak için,
seçeneklerden sonra sıralanan komutların sonuna break deyimi eklenmelidir. Yukarıdaki
programın istenilen şekilde çalışması için seçeneklerin sonlarına break deyimi ekleyelim.
#include <stdio.h>
main()
{
int x;
C Ders Notları – Prof. Dr. Hasan OCAK 18
printf("Bir rakam giriniz: ");
scanf("%d",&x);
switch (x) {
case 1:
printf("Bir rakamini girdiniz.\n ");
break;
case 2:
printf("Iki rakamini girdiniz.\n ");
break;
default:
printf("\n1 ve 2'den farkli bir rakam girdiniz.\n ");
break;
}
}
Bu değişiklikten sonra, kullanıcı klavyeden bir sayısını girdiğinde ekran çıktısı,
Bir rakam giriniz: 1
Bir rakamini girdiniz.
olacaktır.
Örnek:
#include <stdio.h>
main()
{
char islem;
float x, y, z;
printf("Islem giriniz: ");
scanf("%f %c %f", &x, &islem, &y);
switch (islem) {
case '+' : z = x + y; break;
case '-' : z = x - y; break;
case '*' : z = x * y; break;
case '/' : z = x / y; break;
default : printf("Hatali Islem");
}
printf("Islemin sonucu = %f", z);
}
Ekran çıktısı 1:
Islem giriniz: 2.25 * 6
Islemin sonucu = 13.500000
C Ders Notları – Prof. Dr. Hasan OCAK 19
Ekran çıktısı 2:
Islem giriniz: 12.5 –7.5
Islemin sonucu = 5.000000
3.3 ? Operatörü
x = (koşul) ? ifade_1 : ifade_2;
ifadesi,
if (koşul)
x = ifade_1;
else
x = ifade_2;
şeklindeki if deyiminin kısaltılmış halidir. (koşul) ? ifade_1 : ifade_2 ifadesinin değeri, koşul
doğru olduğu taktirde ifade_1, aksi halde ise ifade_2’ye eşittir. ifade_1 ve ifade_2’de atama
işlemi yapılamaz. Ancak, koşul deyiminde atama işlemi yapılabilir. ifade_1 ve ifade_2 yerine
fonksiyon da kullanılabilir.
Örnek: Girilen 2 sayının en büyüğünü bulan bir program yazalım.
#include <stdio.h>
main()
{
float x, y, z;
printf("x : "); scanf("%f",&x);
printf("y : "); scanf("%f",&y);
z = x > y ? x : y;
printf("Girilen sayilarin en buyugu = %f", z);
}
C Ders Notları – Prof. Dr. Hasan OCAK 20