Her Yönüyle C
Would you like to react to this message? Create an account in a few clicks or log in to continue.
Her Yönüyle C

Hepsi Burada
 
AnasayfaAnasayfa  PortalliPortalli  GaleriGaleri  AramaArama  Latest imagesLatest images  Kayıt OlKayıt Ol  Giriş yapGiriş yap  

 

 KARSILASTIRMA DEYIMLERI

Aşağa gitmek 
YazarMesaj
Admin
Admin
Admin


Erkek
Mesaj Sayısı : 804
Yaş : 35
Location : KoCaElİ
Kayıt tarihi : 29/10/07

Character sheet
Field:
KARSILASTIRMA DEYIMLERI Left_bar_bleue100/100KARSILASTIRMA DEYIMLERI Empty_bar_bleue  (100/100)

KARSILASTIRMA DEYIMLERI Empty
MesajKonu: KARSILASTIRMA DEYIMLERI   KARSILASTIRMA DEYIMLERI Icon_minitimePtsi Kas. 12, 2007 2:48 am

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ır
Dikkate 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
Sayfa başına dön Aşağa gitmek
https://cprogramlama.yetkin-forum.com
Admin
Admin
Admin


Erkek
Mesaj Sayısı : 804
Yaş : 35
Location : KoCaElİ
Kayıt tarihi : 29/10/07

Character sheet
Field:
KARSILASTIRMA DEYIMLERI Left_bar_bleue100/100KARSILASTIRMA DEYIMLERI Empty_bar_bleue  (100/100)

KARSILASTIRMA DEYIMLERI Empty
MesajKonu: Geri: KARSILASTIRMA DEYIMLERI   KARSILASTIRMA DEYIMLERI Icon_minitimePtsi Kas. 12, 2007 2:48 am

switch - case YapısıBu deyim bir değişkenin içeriğine bakarak, programın akışını bir çok seçenekten birine yönlendiren bir deyimdir. case (durum) deyiminden sonra değişkenin durumu yazılır ve takip eden gelen satırlar (deyimler) işlenir. Bütün durumların aksi söz konu olduğunda gerçekleştirilmesi istenen deyimler default deyiminden sonraki kısımda bildirilir. Genel yazım biçimi:




switch(değişken)
{
case sabit_1:
...
deyimler;
...
case sabit_2:
...
deyimler;
...
.
.
.
case sabit_n:
...
deyimler;
...
default:
...
hata deyimleri veya varsayılan deyimler;
...
}
Program Program 6.4'te switch deyiminin basit bir kullanımı gösterilmiştir.

Program 6.4: switch-case yapısının kullanımı




[color=gray] 1:
/* 06prg04.c: switch - case yapısının kullanımı */
2:
3: #include
4:
5: void main(void)
6: {
7: char kr;
8:
9: printf("Lutfen bir karakter girin\\\\\\\\\\\\\\\\n");
10:
11: kr = getchar(); /* tek bir karakterin okunması */
12:
13: switch (kr)
14: {
15: case 'a':
16: printf("a harfine bastiniz\\\\\\\\\\\\\\\\n");
17: case 'b':
18: printf("b harfine bastiniz\\\\\\\\\\\\\\\\n");
19: default:
20: printf("a veya b ye basmadiniz\\\\\\\\\\\\\\\\n");
21: }
22:
23: }

ÇIKTI


Lutfen bir karakter girin
a
a harfine bastiniz
b harfine bastiniz
a veya b ye basmadiniz

ÇIKTI




Lutfen bir karakter girin
b
b harfine bastiniz
a veya b ye basmadiniz

ÇIKTI



Lutfen bir karakter girin
k
a veya b ye basmadiniz

ÇIKTI




Lütfen bir karakter girin
c
a veya b ye basmadiniz
Programda, klavyeden okunan tek bir karakter değişkenin içeriğine bakılıp uygun dallanmalar yaptırılmıştır. 11. satırda değişken getchar() fonksiyonu ile okutulmuştur. Eğer 'a' veya 'b' karakterlerinden biri girilirse, ekrana bu harflerin girildiğine dair mesaj yazılacak, aksi takdirde bu karakterin dışında bir karakterin giriş olarak kullanıldığı gösteren bir mesaj yazılacaktır. Örneğin 'c' karakteri klavyeden girilmiş ise a veya b ye basmadiniz gibi. Fakat 'a' karakterleri girildiğinde ekrana her üç durumda yazdırılmaktadır. Bunun sebebi, case 'a': durumunda sırasıyla 16, 18 ve 20. satırların işleme konmasıdır. Bunu engellemek için 16. satırdan sonra programın başka bir yere yönlendirilmesi gerekir. Bu yönlendirme, bir sonraki derste anlatılacak olan break deyimi ile yapılır. Derleyici bu deyim ile karşılaştığında, bulunduğu yapının içinden koşulsuz olarak ayrılır ve takip eden işleme başlar[1].
Program 6.4'te case 'a': durumu için 16, 18 ve 20. satırlar da işleme konumuştu. Eğer klavyeden 'a' karakterini girip ekrana sadece a harfine bastiniz iletisi yazdırılmak isteniyorsa, 20. satıra break deyimi ilave edilmelidir. break deyiminin kullanımı Program 6.5'te gösterilmiştir.

Program 6.5: switch-case yapısı ve break kullanımı




[color=gray] 1:
/* 06prg05.c: switch - case yapısı ve break kullanımı */
2:
3: #include
4:
5: void main(void)
6: {
7: char kr;
8:
9: printf("Lutfen bir karakter girin\\\\\\\\\\\\\\\\n");
10:
11: kr = getchar(); /* tek bir karakterin okunması */
12:
13: switch (kr)
14: {
15: case 'a':
16: printf("a harfine bastiniz\\\\\\\\\\\\\\\\n");break;
17: case 'b':
18: printf("b harfine bastiniz\\\\\\\\\\\\\\\\n");break;
19: default:
20: printf("a veya b ye basmadiniz\\\\\\\\\\\\\\\\n");break;
21: }
22:
23: }

ÇIKTI

Lutfen bir karakter girin
a
a harfine bastiniz
Program 6.6 switch-case yapısın farklı bir kullanımı ile ilgili bir örnektir. Programda, önce iki sayı isteniyor ardından yapılan seçimle bu sayıların toplamı yada çarpımı ekrana yazdırılıyor.

Program 6.6: switch-case yapısı ve break kullanımı




[color=gray] 1:
/* 06prg06.c: switch-case yapısı */
2:
3: #include
4: #include
5:
6: int menu(void);
7: int topla(int,int);
8: int carp(int,int);
9:
10: void main(void)
11: {
12: int x,y,sonuc,sec;
13:
14: printf("Iki tam sayi girin: ");
15: scanf("%d,%d",&x,&y);
16:
17: printf("Seciminiz: [1] topla, [2] carp, [3] cikis\\\\\\\\\\\\\\\\n");
18: scanf("%d",&sec);
19:
20: switch( sec )
21: {
22: case 1:
23: sonuc = x+y;
24: printf("Toplamlari : %d\\\\\\\\\\\\\\\\n",sonuc);
25: break;
26: case 2:
27: sonuc = x*y;
28: printf("carpimlari : %d\\\\\\\\\\\\\\\\n",sonuc);
29: break;
30: case 3:
31: printf("Program sonu...\\\\\\\\\\\\\\\\n");
32: exit(0);
33: default:
34: printf("Yanlis secim !...\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\a");
35: }
36: }

ÇIKTI




Iki tam sayi girin: 5,9
Seciminiz: [1] topla, [2] carp, [3] cikis
2
carpimlari : 45
ÇIKTI



Iki tam sayi girin: 1,8
Seciminiz: [1] topla, [2] carp, [3] cikis
7
Yanlis secim !...
? Karşılaştırma OperatörüC dilinde if-else karşılaştırma deyiminin yaptığı işi sınırlı olarak yapan bir operatördür. Genel yazım biçimi:
(koşul) ? deyim1 : deyim2;
İlk önce koşul sınanır. Eğer koşul olumluysa (1 ise) deyim1 aksi takdirde deyim2 değerlendirilir. deyim1 ve deyim2 de atama işlemi yapılamaz. Ancak koşul deyiminde atama işlemi yapılabilir. deyim1 ve deyim2 yerine fonksiyon da kullanılabilir. Aşağıda bu deyimin kullanımına ait örnekler verilmiştir.
x = ( a > b ) ? a : b;
Yukarıdaki ifadede koşul a'nın b'den büyük olmasıdır. Eğer olumluysa x adlı değişkene a, değilse b değeri atanır. Bu şekilde kullanım if-else yapısı ile kurulmak istenirse:
if( a > b ) x = a;
else x = b;
şeklinde olacaktır. Program 6.7 ? karşılaştırma operatörünün basit bir kullanımını göstermektedir.

Program 6.7: ? ve if kullanımı




[color=gray] 1:
/* 06prg07.c: ? ve if-else yapısının kullanımı */
2:
3: #include
4:
5: void main(void)
6: {
7: int x,y,z;
8:
9: printf("x : ");scanf("%d",&x); /* x okunuyor */
10: printf("y : ");scanf("%d",&y); /* y okunuyor */
11:
12: if( x ) /* x 0 dan farklı mı? */
13: z = ( y > x ) ? x*y : x+y; /* y>x ise z=x*y, değilse z=x+y */
14: else
15: z = 0;
16:
17: printf("z = %d",z);
[color:0cb6=gray:0cb6]18: }
12. satırdaki if deyimindeki koşul biraz farklıdır. Genel olarak koşul bu şekilde bildirilirse, koşulun 0 dan farklı olup olmadığı sınanır. Yani if( x ) ile if( x!=0 ) aynı anlamdadır. Bu kullanım çok yagındır. Eğer x 0 dan farklı ise koşul olumlu olarak değerlendirilecektir. 13. satırda ? ile bir sınama yapılmaktadır. Eğer y, x den büyük ise z değişkenine x*y, aksi takdirde x+y değeri atanmaktadır. Eğer x=0 ise z değişkenine 0 değeri atanmaktadır.


ÇIKTI




x : -5
y : 8
z = -40
Bu operatör birçok durumda okunabilirliği kuvvetlendirmek için tercih edilir. Örneğin:
Program 6.8: ? operatörünün kullanımı




[color=gray] 1:
/* 06prg08.c: ? operatoru */
2:
3: #include
4:
5: main()
6: {
7: int k;
8:
9: for(k=0;k<100;k++)
10: printf("%3d%c",k,(k % 10 == 9) ? '\\\\\\\\\\\\\\\\n':' ');
11: }
10. satırdaki %d formatına karşılık gelen parametre k dır. %c formatına karşılık gelen karakter ise (k % 10 == 9) ifadesinin sonucuna göre '\\\\\\\\\\\\\\\\n' ya da
' ' (boşluk) olmaktadır. Her 10 sayıda bir bu ifadenin sonucu doğru olacağına göre imleç aşağıdaki satıra geçecektir [2].
Sayfa başına dön Aşağa gitmek
https://cprogramlama.yetkin-forum.com
 
KARSILASTIRMA DEYIMLERI
Sayfa başına dön 
1 sayfadaki 1 sayfası

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
Her Yönüyle C :: C Programlama :: C Konu Anlatımları-
Buraya geçin: