▃ ▅ ησ ♥ яєѕρєcт ▅ ▃
Süper Üye
if, if-else Yapısı
if(koşul)
{
...
deyimler; (küme)
...
}
puts("x ve y esit");
}
ile
if(x == y)
puts("x ve y esit");
eşdeğerdir.
if deyiminin else ile birlikte kullanımı şu şekildedir:
if(koşul){
...
deyimler; (küme1)
...
}
else{
...
deyimler; (küme2)
...
}
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
/* 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
Bir sayi girin: 3
sayi tektir.
01:
02:
03:
04:
05:
06:
07:
08:
09:
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
Bir yil girin: 1996
1996 artik yil
{
...
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)
...
}
01:
02:
03:
04:
05:
06:
07:
08:
09:
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
a, b, c degerlerini girin:
2 4 -8
Reel kokler:
x1 = 1.236068
x2 = -3.236068
ÇIKTI
a, b, c degerlerini girin:
1 1 1
Karmasik kokler:
x1 = -0.500000 + (0.866025)i
x2 = -0.500000 - (0.866025)i
6.3 switch - case Yapısı
{
case sabit1:
...
deyimler;
...
case sabit2:
...
deyimler;
...
.
.
.
case sabitn:
...
deyimler;
...
default:
...
hata deyimleri veya varsayılan deyimler;
...
}
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
/* 06prg04.c: switch - case yapısının kullanımı */
#include <stdio.h>
int main(void)
{
char kr;
printf("Lutfen bir karakter girin\n");
kr = getchar(); /* tek bir karakterin okunması */
switch (kr)
{
case 'a':
printf("a harfine bastiniz\n");
case 'b':
printf("b harfine bastiniz\n");
default:
printf("a veya b ye basmadiniz\n");
}
return 0;
}
Ç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
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
/* 06prg05.c: switch - case yapısı ve break kullanımı */
#include <stdio.h>
int main(void)
{
char kr;
printf("Lutfen bir karakter girin\n");
kr = getchar(); /* tek bir karakterin okunması */
switch (kr)
{
case 'a':
printf("a harfine bastiniz\n");
break;
case 'b':
printf("b harfine bastiniz\n");
break;
default:
printf("a veya b ye basmadiniz\n");
break;
}
return 0;
}
ÇIKTI
Lutfen bir karakter girin
a
a harfine bastiniz
ÇIKTI
Lutfen bir karakter girin
k
a veya b ye basmadiniz
01:
02:
03:
04:
05:
06:
07:
08:
09:
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:
41:
42:
43:
44:
45:
46:
/* 06prg06.c: switch-case yapısı */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int secim;
float x,y, sonuc;
printf("Iki sayi girin: ");
scanf("%f %f",&x,&y);
puts("*** Menu ***");
puts("[1] Toplama");
puts("[2] Cikarma");
puts("[3] Carpma");
puts("[4] Bolme");
printf("Seciminiz: ");
scanf("%d",&secim);
switch( secim )
{
case 1:
sonuc = x + y;
printf("Toplam = %f\n",sonuc);
break;
case 2:
sonuc = x-y;
printf("Fark = %f\n",sonuc);
break;
case 3:
sonuc = x * y;
printf("Carpim = %f\n",sonuc);
break;
case 4:
sonuc = x/y;
printf("Oran = %f\n",sonuc);
break;
default:
puts("Yanlis secim !\a");
}
return 0;
}
ÇIKTI
Iki sayi girin: 3 8
*** Menu ***
[1] Toplama
[2] Cikarma
[3] Carpma
[4] Bolme
Seciminiz: 1
Toplam = 11.000000
ÇIKTI
Iki sayi girin: 3 8
*** Menu ***
[1] Toplama
[2] Cikarma
[3] Carpma
[4] Bolme
Seciminiz: 7
Yanlis secim !
{
case 1:
sonuc = x + y;
printf("Toplam = %f\n",sonuc);
break;
case 2:
sonuc = x-y;
printf("Fark = %f\n",sonuc);
break;
case 3:
sonuc = x * y;
printf("Carpim = %f\n",sonuc);
break;
case 4:
sonuc = x/y;
printf("Oran = %f\n",sonuc);
break;
default:
puts("Yanlis secim !\a");
}
if(secim == 1){
sonuc = x + y;
printf("Toplam = %f\n",sonuc);
}
else if(secim == 2){
sonuc = x-y;
printf("Fark = %f\n",sonuc);
}
else if(secim == 3 ){
sonuc = x * y;
printf("Carpim = %f\n",sonuc);
}
else if(secim == 4){
sonuc = x/y;
printf("Oran = %f\n",sonuc);
}
else{
puts("Yanlis secim !\a");
}
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 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 deyiminin yapının genel biçimi şöyledir: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
if(x == y){puts("x ve y esit");
}
ile
if(x == y)
puts("x ve y esit");
eşdeğerdir.
if deyiminin else ile birlikte kullanımı şu şekildedir:
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.
Bağlantıları görmek için lütfen
Giriş Yap
if-else deyiminin kullanımı01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
/* 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
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.
Bağlantıları görmek için lütfen
Giriş Yap
if-else deyiminin kullanımı01:
02:
03:
04:
05:
06:
07:
08:
09:
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
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:
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.
Bağlantıları görmek için lütfen
Giriş Yap
if, else if, else yapısı01:
02:
03:
04:
05:
06:
07:
08:
09:
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
a, b, c degerlerini girin:
2 4 -8
Reel kokler:
x1 = 1.236068
x2 = -3.236068
ÇIKTI
a, b, c degerlerini girin:
1 1 1
Karmasik kokler:
x1 = -0.500000 + (0.866025)i
x2 = -0.500000 - (0.866025)i
6.3 switch - case Yapısı
Bu deyim bir değişkenin içeriğine bakarak, programın akışını bir çok seçenekten birine yönlendirir. case (durum) deyiminden sonra değişkenin durumu belirlenir ve takip eden gelen satırlar (deyimler) işleme konur. 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 sabit1:
...
deyimler;
...
case sabit2:
...
deyimler;
...
.
.
.
case sabitn:
...
deyimler;
...
default:
...
hata deyimleri veya varsayılan deyimler;
...
}
Program Program 6.4'te switch deyiminin basit bir kullanımı gösterilmiştir.
Bağlantıları görmek için lütfen
Giriş Yap
switch-case yapısının kullanımı01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
/* 06prg04.c: switch - case yapısının kullanımı */
#include <stdio.h>
int main(void)
{
char kr;
printf("Lutfen bir karakter girin\n");
kr = getchar(); /* tek bir karakterin okunması */
switch (kr)
{
case 'a':
printf("a harfine bastiniz\n");
case 'b':
printf("b harfine bastiniz\n");
default:
printf("a veya b ye basmadiniz\n");
}
return 0;
}
Ç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,
Bağlantıları görmek için lütfen
Giriş Yap
'de 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
Bağlantıları görmek için lütfen
Giriş Yap
.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.
Bağlantıları görmek için lütfen
Giriş Yap
switch-case yapısı ve break kullanımı01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
/* 06prg05.c: switch - case yapısı ve break kullanımı */
#include <stdio.h>
int main(void)
{
char kr;
printf("Lutfen bir karakter girin\n");
kr = getchar(); /* tek bir karakterin okunması */
switch (kr)
{
case 'a':
printf("a harfine bastiniz\n");
break;
case 'b':
printf("b harfine bastiniz\n");
break;
default:
printf("a veya b ye basmadiniz\n");
break;
}
return 0;
}
ÇIKTI
Lutfen bir karakter girin
a
a harfine bastiniz
ÇIKTI
Lutfen bir karakter girin
k
a veya b ye basmadiniz
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ı, farkı, çarpımı veya oranı ekrana yazdırılıyor.
Bağlantıları görmek için lütfen
Giriş Yap
switch-case yapısı ve break kullanımı01:
02:
03:
04:
05:
06:
07:
08:
09:
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:
41:
42:
43:
44:
45:
46:
/* 06prg06.c: switch-case yapısı */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int secim;
float x,y, sonuc;
printf("Iki sayi girin: ");
scanf("%f %f",&x,&y);
puts("*** Menu ***");
puts("[1] Toplama");
puts("[2] Cikarma");
puts("[3] Carpma");
puts("[4] Bolme");
printf("Seciminiz: ");
scanf("%d",&secim);
switch( secim )
{
case 1:
sonuc = x + y;
printf("Toplam = %f\n",sonuc);
break;
case 2:
sonuc = x-y;
printf("Fark = %f\n",sonuc);
break;
case 3:
sonuc = x * y;
printf("Carpim = %f\n",sonuc);
break;
case 4:
sonuc = x/y;
printf("Oran = %f\n",sonuc);
break;
default:
puts("Yanlis secim !\a");
}
return 0;
}
ÇIKTI
Iki sayi girin: 3 8
*** Menu ***
[1] Toplama
[2] Cikarma
[3] Carpma
[4] Bolme
Seciminiz: 1
Toplam = 11.000000
ÇIKTI
Iki sayi girin: 3 8
*** Menu ***
[1] Toplama
[2] Cikarma
[3] Carpma
[4] Bolme
Seciminiz: 7
Yanlis secim !
switch-case yapısı if-else yapısının bir alternatifidir. Yani, Program 6.6'daki switch-case kısmı, if-else yapısı ile de aşağıdaki gibi yazılabilirdi. İnceleyiniz.
switch( secim ){
case 1:
sonuc = x + y;
printf("Toplam = %f\n",sonuc);
break;
case 2:
sonuc = x-y;
printf("Fark = %f\n",sonuc);
break;
case 3:
sonuc = x * y;
printf("Carpim = %f\n",sonuc);
break;
case 4:
sonuc = x/y;
printf("Oran = %f\n",sonuc);
break;
default:
puts("Yanlis secim !\a");
}
if(secim == 1){
sonuc = x + y;
printf("Toplam = %f\n",sonuc);
}
else if(secim == 2){
sonuc = x-y;
printf("Fark = %f\n",sonuc);
}
else if(secim == 3 ){
sonuc = x * y;
printf("Carpim = %f\n",sonuc);
}
else if(secim == 4){
sonuc = x/y;
printf("Oran = %f\n",sonuc);
}
else{
puts("Yanlis secim !\a");
}