27 Temmuz 2020

#7 C Dili: Kontrol Yapıları

Kontrol yapıları her programlama dilinde olduğu gibi C programlama dilinde de oldukça önemli bir yere sahiptir. Yazılan çoğu programın içerisinde programcının istediği koşulların sağlanması durumunda kodların çalışabilmesi için kullanılmaktadır.

İstenilen koşul sağlandığında istenilen kod bloğun çalışmasını sağlayan yapılara kontrol yapıları denir. Bu yapılar sayesinde program istenilen yöne evrilebilmektedir.

C programlama dilinde yazılan kodda kontrol yapıları if – else if – else yapısı ve switch – case yapısı ile sağlanabilmektedir.

if Yapısı

if yapısının içerisindeki koşul mantıksal olarak “1” değerine eşit olduğu zaman if yapısının içerisindeki kod bloğu çalışmaktadır. Eğer koşul mantıksal “0” ise if bloğunun içerisindeki kodlar bu değer mantıksal “1” olmadığı takdirde asla çalışmamaktadır.


#include<stdio.h>
#include<locale.h>

int main(){
	setlocale(LC_ALL,"Turkish");
	
	int a = 5;
	int b = 7;
	//iki adet tamsayı tanımlandı
	
	if (a < b){
		printf("%d %d den küçüktür.",a,b);
	}
	//a < b koşulu için ekrana yazı yazdırıldı
	
	if (a == b){
		printf("%d %d ye eşittir.",a,b);
	}
	//a = b koşulu için ekrana yazı yazdırıldı
		
	if (a > b){
		printf("%d %d den büyüktür.",a,b);
	}
	//a > b koşulu için ekrana yazı yazdırıldı
			
	return 0;
}

Çıktı:

5 7 den küçüktür.

Yukarıdaki kodda üç tane if bloğu olmasına rağmen sadece bir if bloğunun içerisindeki kod çalışmıştır. Bunun sebebi if bloğunun içerisindeki kod if yapısınnın koşulunun mantıksal 1’e eşit olması durumunda çalışmaktadır. 5 değerine eşit olan a tamsayısı, 7 değerine eşit olan b tamsayısından küçük olduğu için sadece (a < b) koşulunun tanımlandığı if bloğundaki kodlar çalışmaktadır.

if – else Yapısı

if deyiminin içerisinde tanımlanan koşul haricinde kalan tüm koşullar için else deyimi kullanılmaktadır. Programda else deyimi kullanıldığında if deyiminin çalışmadığı yani if koşulunun gerçekleşmediği tüm koşullarda else bloğundaki kod çalışmaktadır.

#include<stdio.h>
#include<locale.h>

int main(){
	setlocale(LC_ALL,"Turkish");
	
	int yas;
	//yas adında bir adet tamsayı tanımlandı
	
	printf("Lütfen yaşınızı giriniz: ");
	scanf("%d", &yas);
	//kullanıcıdan yaş bilgileri alındı
	
	if (yas < 18){
		printf("Yaşınız %d olduğu için henüz reşit değilsiniz.",yas);
	}
	//yas < 18 koşulu için ekrana yazı yazdırıldı
	
	else{
		printf("Yaşınız %d olduğu için reşitsiniz.",yas);
	}
	//yas >= 18 koşulu için ekrana yazı yazdırıldı
			
	return 0;
}

Çıktı:


Yukarıdaki kodda kulanıcıdan yaşının girilmesi istenmiştir. Kullanıcının girmiş olduğu yaş “yas” adlı değişkene atanmıştır. yas değişkeninin değerinin 18’den küçük olma durumunda kullanıcıya reşit olmadığını belirten bir yazı ekrana çıktı olarak verilmiştir. Bu koşul haricindeki tüm koşullar için ise kullanıcının reşit olduğu ekrana yazdırılmıştır. Bu durum else deyimi ile sağlanmıştır. Bu program için else bloğunun görevi yas >= 18 koşuluna bağlı kod bloğunu çalıştırmak olmuştur.

if – else if – else Yapısı

Bazı durumlarda yazılan kodlarda birden fazla koşul programcı tarafından programa eklenmek ister. Bu gibi durumlarda her koşul için sürekli olarak if yapısı kurmak yerine tek bir if yapısı içerisinde tüm koşulların yazılması tercih edilmektedir. İlk koşul if deyimi ile tanımlanırken diğer koşulların hepsi else if deyimiyle tanımlanmaktadır. Son olarak tüm koşulları kapsamayan koşul else deyimi ile ifade edilmektedir.


#include<stdio.h>
#include<locale.h>

int main(){
	setlocale(LC_ALL,"Turkish");
	
	float kilo, boy, vke;
	//3 adet ondalıklı sayı tanımlandı
	
	printf("Lütfen kilonuzu kilogram cinsinden giriniz: ");
	scanf("%f", &kilo);
	//kullanıcıdan yaş bilgileri alındı
	
	printf("Lütfen boyunuzu metre cinsinden giriniz: ");
	scanf("%f", &boy);
	//kullanıcıdan boy bilgileri alındı
	
	vke = kilo / (boy*boy);
	//vücut kitle indeksi hesaplandı
	
	if (vke < 18.5){
		printf("VKE: %.2f\nVücut Kitle İndeksine göre zayıf sınıfındasınız.",vke);
	}
	//vke < 18.5 koşulu için ekrana yazı yazdırıldı
	
	else if (vke >= 18.5 && vke < 25){
		printf("VKE: %.2f\nVücut Kitle İndeksine göre normal sınıfındasınız.",vke);
	}
	//vke >= 18.5 && vke <25  koşulu için ekrana yazı yazdırıldı
	
	else if (vke >= 25 && vke < 30){
		printf("VKE: %.2f\nVücut Kitle İndeksine göre kilolu sınıfındasınız.",vke);
	}
	//vke >= 25 && vke <30  koşulu için ekrana yazı yazdırıldı
	
	else if (vke >= 30 && vke <35){
		printf("VKE: %.2f\nVücut Kitle İndeksine göre obez sınıfındasınız.",vke);
	}
	//vke >= 30 && vke <35  koşulu için ekrana yazı yazdırıldı
	
	else{
		printf("VKE: %.2f\nVücut Kitle İndeksine göre morbid obez sınıfındasınız.",vke);
	}
			
	return 0;
}

Çıktı:


Yukarıda yazdığımız kodlar ile oluşturduğumuz program çalıştığında kullanıcının girmiş olduğu kilo ve boy bilgileri ile vücut kitle indeksini hesaplayarak kullanıcı için en doğru bilgilendirme mesajını ekrana yazdırmaktadır.

break ve continue İfadeleri

Kodlama yaparken bazı durumlarda programın bulunduğu akıştan çıkmasını ve farklı bir akışa girmesi istenmektedir. Bu ancak iki yol ile mümkündür. Ya mevcut akışı keserek akışın sonundan program devam etmelidir ya da mevcut akışın o adımı sonlandırılarak bir sonraki adımı çalıştırılmalıdır. Bu iki durum da break ve continue ifadeleri ile mümkündür.

Yukarıdaki kod diyagramlarındaki örneklerde de görüldüğü üzere break ifadesi kullanıldığında program break ile karşılaşır karşılaşmaz akışı keserek bloğun sonuna giderek çalışmaya devam oradan devam etmektedir.

Yukarıdaki kod diyagramı örneğinde ise continue ifadesinin kullanımı örneklenmiştir. Görüldüğü üzere program continue ifadesi ile karşılaştığında break ifadesinde olduğu gibi akışı sonlandırmak yerine akışın başına gitmiştir.

switch – case Yapısı

switch case yapısı ile if – else yapısında olduğu gibi kontrol yapısı oluşturulabilmektedir. switch case yapısında normal if – else bloklarından biraz farklı bir durum söz konusudur.

Bir durum (statement) belirlenir ve bu durumun istenilen koşullara uyulması durumunda ilgili case bloğundaki kodlar çalışır. Kodlar çalıştıktan sonra programın karşına çıkacak olan ilk break ifadesine kadar tüm case ifadeleri koşul uysun ya da uymasın aralıksız çalışır.


#include<stdio.h>

int main(){
	int i = 3;
	
	switch (i){
		case 1:
			printf("1\n");
			
		case 2:
			printf("2\n");
				
		case 3:
			printf("3\n");
			
		case 4:
			printf("4\n");
			
		case 5:
			printf("5\n");	
	}
}

Çıktı:

3
4
5

Yukarıdaki kodda herhangi bir break ifadesi kullanılmadığı için ilk girilen case ifadesinden sonra tüm case ifadelerine bağlı kodlar çalışmıştır.


#include<stdio.h>

int main(){
	int i = 3;
	
	switch (i){
		case 1:
			printf("1\n");
			break;
			
		case 2:
			printf("2\n");
			break;

		case 3:
			printf("3\n");
			break;

		case 4:
			printf("4\n");
			break;

		case 5:
			printf("5\n");
			break;
	}

}

Çıktı:

3

Yukarıdaki kodda da görüldüğü üzere break ifadeleri case ifadelerine eklendiğinde çalışan case bloğu break ifadesi ile karşılaşarak programı sonlandırmıştır.

switch – case – default Yapısı

switch case yapısı ile kurulan akış diyagramında herhangi bir case switch ifadesindeki duruma uygun değilse opsiyonel olarak default ifadesi kullanılabilmektedirç Bu ifade if – else yapısındaki else ifadesi ile aynı görevi görmektedir.


#include<stdio.h>
#include<locale.h>

int main(){
	setlocale(LC_ALL,"Turkish");
	
	int i = 3;
	
	switch (i){
		case 1:
			printf("1\n");
			break;
			
		case 2:
			printf("2\n");
			break;

		default:
			printf("i tamsayısı 1 ve 2 ye eşit değildir.\n");
			break;	
	}
}

Çıktı:

i tamsayısı 1 ve 2 ye eşit değildir.

Yukarıdaki kodda da görüldüğü üzere case yapıları programa dahil olmadığı durumlarda default yapısı dahil olarak içerisindeki kodu çalıştırmıştır.

Yorum bölümünden tüm sorularınızı bana iletebilirsiniz.

Çalışmalarınızda başarılar dilerim.

Hamit Can Dinç.

Share

Hamit Can Dinç

Yıldız Teknik Üniversitesinde Elektrik Mühendisliği öğrencisi. Araştırma ve geliştirme odaklı projelerde yer almayı sever.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir