And(&) Operatörü
Tanımsal kısmına girmeden anladığım kadarıyla mantığını yazayım kısaca. Diyelim ki if parantezi açtık ve iki şart belirttik arasına da & koyduk. “Ve” anlamına gelen bu işareti koyduğumuzda, o belirttiğimiz iki şartın da yerine getirilmiş olması gerekiyor. Aşağı yazdığım if else örnekleri ile daha anlaşılır olacaktır.
& ve && arasındaki fark:
&: İlk şart sağlanmasa bile devamındaki şartlara da bakar.
&&: İlk yazılan şart sağlanmadığında devamındaki şarta bakmadan, diğer işleme geçerek devam eder.
Or( | ) Operatörü
Yazdığımız 2 şarttan sadece birinin sağlanmış olması yeterlidir.
| ve || arasındaki fark:
|: İlk şart sağlandığında ( bu yazdığımız program için yeterlidir ) diğer şartı da kontrol eder.
|| : İlk şart sağlanırsa diğerine bakmaya gerek duymadan if yapısının içindeki fonksiyonu devreye sokar.
| ve || arasındaki farkı daha iyi görebilmemiz için küçük bir örnek:
If else yapılarını 2. yazımızda görmüştük. Şimdi birkaç örnekle daha detayına inelim
Kullanıcıdan girilen 3 sayının en büyüğünü çıktı olarak verme:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <stdio.h> int main() { int a, b, c; printf("Enter 3 numbers: \n"); scanf_s("%d %d %d", &a, &b, &c); if (a - b > 0 && a - c > 0) printf("\nGreatest is a : %d ", a); else if (b - c > 0) printf("\nGreatest is b: %d", b); else printf("\nGreatest is c:%d\n", c); return 0; } |
Printf ve scanf’i ayrıntılarıyla ilk yazıda gördüğümüz için direkt 8.satırdan kodu incelemeye başlayalım. a,b,c sayılarından en büyüğünü bulmaya çalışıyoruz.
İlk if parantezinde a>b ve a>c şartları var.
Burada kullandığımız && operatörü ile a>b şartına bakılır.
Eğer a>b ise a>c şartına bakılır.( Çünkü && operatöründe ikisinin de sağlanması gerekiyor).
a>c şartı da sağlandığında; yani a hem b’den hem c’den büyükse program a’nın en büyük olduğuna karar verir ve “a sayısı en büyüktür” şeklinde çıktı verir.
Eğer a>b değilse direkt 10.satıra geçiyor ve b’nin c’den büyük olup olmadığına bakıyor. Zaten 8.satırda b’nin a’dan büyük olduğunu saptadığı için b c’den de büyükse; en büyük sayıyı b diye karar kılıyor.
Son ihtimal olarak; eğer ki b c’den büyük değilse (c b’den büyük olacağından) c > b > a şeklinde sıralanıyorlar. En büyük c’dir şeklinde de çıktı alıyoruz.
?: Operatörü Kullanımı
Önce ?: ‘nin kullanım şeklini görelim.
(koşul yazılır ? koşul sağlanırsa çıktılanacak değer : koşul sağlanmazda çıktılanacak değer);
Yani if anlamında ?; else anlamında : kullanılıyor.
1 2 3 4 5 6 7 8 9 10 |
#include <stdio.h> int main() { int a, b, c, big; printf("Enter three integers: \n"); scanf_s("%d %d %d", &a, &b, &c); big = (a > b&&a > c ? a : b > c ? b : c); printf("\nThe biggest number is %d\n", big); return 0; } |
Yukarıda ise, bir önceki yaptığımız örneğin ?: operatörü kullanılarak yazılmış hali mevcut. Burayı inceleyerek de kullanımını daha rahat anlayabiliyoruz.
Örnek:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <stdio.h> int main() { int birth, yy1, yy2; char partner; printf("Enter 'y' if you have a partner, 'n' if you don't \n "); scanf_s("%c", &partner); printf("Enter your birth year: "); scanf_s("%d", &birth); yy1 = birth / 100; yy2 = birth % 100; if (yy1 <= 19 && yy2 <= 99 || partner == 'y') { printf("You are allowed to party!! :) "); } else printf("Sorry for this time :( "); return 0; } |
Bu örnekteki amaç şu: Kişinin eğer partneri varsa 18 yaşından küçük olsa da olur. Ama partneri yoksa 18 yaşından büyük olmak zorunda.
Char’ ı da kullanmışken değişkenleri bir öğrenelim.
TİP | DEKLARASYON | printf( ); | scanf( ); | Minimum | Maksimum | Byte |
Karakter | char degisken; | printf(“%c”,degisken); | scanf(“%c”,°isken); | -128 | 127 | 1 |
Kısa Tam Sayı | short degisken; | printf(“%d”,degisken); | scanf(“%d”,°isken); | -32768 | 32767 | 2 |
Tamsayı | int degisken; | printf(“%d”,degisken); | scanf(“%d”,°isken); | -32768 | 32767 | 2 |
Uzun Tamsayı | long int degisken; | printf(“%ld”,degisken); | scanf(“%ld”,°isken); | -2147483648 | 2147483647 | 4 |
İşaretsiz Tamsayı | unsigned int degisken; | printf(“%u”,degisken); | scanf(“%u”,°isken); | 0 | 65535 | 2 |
İşaretsiz Uzun Tamsayı | long unsigned degisken; | printf(“%lu”,degisken); | scanf(“%lu”,°isken); | 0 | 4294967295 | 4 |
Virgüllü Sayı | float degisken; | printf(“%f”,degisken); | scanf(“%f”,°isken); | 1,17549e-38 | 3,40282e+38 | 4 |
Uzun Virgüllü Sayı | double degisken; | printf(“%lf”,degisken); | scanf(“%lf”,°isken); | 2,22504e-308 | 1,79769e+308 | 8 |
Tablo kaynak: http://www.cagataycebi.com/programming/c_programming/c_programming_2.html
Şunu da belirteyim. Bu yazılarla kesinlikle birine eğitim vermeyi vs amaçlamıyorum. Sadece programlama dersinden öğrendiklerimizi kendi anladığım bir şekilde sitemde depoluyorum, yani yanlış bir bilgi yazdıysam kusura bakmayın. Yorum yaparak bu hatalardan beni haberdar edebilirsiniz.