C Programlama derslerinin bir önceki dersinde değişkenlerden bahsetmiştim. Değişken parametreleri ve değişken tanımlamasına yer verdiğimiz basit bir örnek yapmıştım.
C dilinde bulunan değişken tiplerini iki bölümde inceleyebiliriz : sayısal tipler ve karakter tipi. Karakter tipi olarak sadece char bulunurken, sayısal tipler şunlardır :
- short
- int
- unsigned int
- long
- float
- double
Bu değişkenler hafızada belli bir yer kaplar. Hafızada hangi veri tipinin ne kadar yer kapladığı bilgisi, işletim sistemine göre değişiklik gösterir.
Bu bilgiye erişmek için basit bir uygulama yapalım. Böylelikle hangi verinin ne kadar yer kapladığını gördüğümüz gibi bir önceki derste kullandığımız printf fonksiyonunun kullanımı hakkında daha detaylı bilgi edinmiş oluruz.
printf() Fonksiyonu
Uygulamaya geçmeden önce printf fonksiyonundan bahsetmek istiyorum. Ekrana veri tiplerini basmak için kullandığımızdan bahsetmiştik. Ancak uygulamada bazı şeyleri bilmemiz gerekiyor.
Eğer ekrana basacağımız veri:
- int tipinde bir değişken ise %d,
- long int tipinde bir değişken ise %ld,
- Onluk tabanda işaretsiz bir tamsayı ise %u,
- long unsigned tipinde bir değişken ise %lu,
- float tipinde ondalık bir değişken ise %f,
- double tipinde bir değişken ise %lf,
- char tipinde bir karakter ise %c,
- Üstel olarak bir tamsayı ekrana basılacaksa %e,
- Hexadecimal tabanda bir tamsayı ekrana basılacaksa %x,
- Sekizlik bir tabanda bir tamsayı ekrana basılacaksa %o,
- Ondalık sayıların kısa formatı basılacaksa %g,
- Double ondalık sayıların kısa formatı basılacaksa %lg,
- Ekrana bir yazı ( karakter dizisi) basılacaksa %s,
- Ekrana bir pointer basılacaksa %p,
karakterleri kullanılır.
printf içerisindeki yazıyı düzenlemek için de şu kodlar kullanılır :
- \n , new line yani satır başı
- \f , sayfa atlama
- \b , backspace yani geriye doğru karakter silme
- \t , tab yatay da tab kadar kaydırma
- \" , çift tırnak
- \' , tek tırnak
- \0 , null karakteri
- \\ , ters bölme işareti
- \v , dikey tab
Bu kadar printf bilgisi sanırım yeterli. Gelelim değişkenlerimizin hangi değer aralıklarında değer aldıklarına.
Not : Kod içerisinde yer alan // karakterleri tek satırlık yorum için ve /* */ karakterleri de çoklu yorum satırları için kullanılır.
Veri Tipleri ve Boyutları
Veri tiplerinin hafızada kapladığı alanın işletim sistemine göre değiştiğinden bahsetmiştim. Bunun için şöyle bir uygulama yapalım :
/**********************************************************************
Online C Compiler.
Code, Compile, Run and Debug C program online.
Write your code in this editor and press "Run" button to compile and execute it.
**********************************************************************/
#include<stdio.h>
#include<limits.h>
#include<float.h>
int main( void )
{
printf("DEĞİŞKENLERİN HAFIZADA KAPLADIĞI ALAN\n");
printf( "\nTIP\t\t BOYUT\t\t MIN DEĞER\t \tMAX DEĞER\n" );
printf("==============================================================\n");
printf( "char\t\t: %d byte(s)\t%d\t\t\t%d\n", sizeof(char),CHAR_MIN,CHAR_MAX );
printf( "short\t\t: %d byte(s)\t%d\t\t\t%d\n", sizeof(short), SHRT_MIN, SHRT_MAX );
printf( "int\t\t: %d byte(s)\t%d\t\t%d\n", sizeof(int), INT_MIN, INT_MAX );
printf( "unsigned int\t: %d byte(s)\t\t\t\t%u\n",sizeof(unsigned),UINT_MAX );
printf( "long\t\t: %d byte(s)\t%ld\t%ld\n", sizeof(long), LONG_MIN, LONG_MAX );
printf( "float\t\t: %d byte(s)\t%e\t\t%e\n", sizeof(float), FLT_MIN, FLT_MAX );
printf( "double\t\t: %d byte(s)\t%e\t\t%e\n\n", sizeof(double), DBL_MIN, DBL_MAX );
return 0;
}
Uygulamanın çıktısı ise aşağıdaki gibidir :
Uygulamada herbir veri tipinin hafızada kaç byte yer kapladığı, aldığı minimum değer ve max değerler verildi. Bunun hesabı için de sizeof() fonksiyonu kullanıldı. Şimdilik bu kadarını bilmeniz yeterli diye düşünüyorum. Çok detaya inmeye gerek yok.
Son olarak
printf ("%8.4f", pi);
kodu ile 8 karakterlik ondalık sayının 4 karakterinin ondalık olmasını istediğini ifade ediyoruz.
Şimdi de printf kodlarının uygulamasını gösteren bir uygulama yapalım :
/**********************************************************************
Online C Compiler.
Code, Compile, Run and Debug C program online.
Write your code in this editor and press "Run" button to compile and execute it.
**********************************************************************/
#include <stdio.h>
void main(void)
{
float ondalikSayi1, ondalikSayi2;
ondalikSayi1 = ondalikSayi2 = 952.528749;
double uzunOndalikSayi= 52468.582369;
int tamSayi = 8574;
printf("Float hali : %f\n",ondalikSayi1);
printf("Üstel hali : %e\n",ondalikSayi1); // %E ' de olr
printf("Kısa Form hali : %g\n", ondalikSayi1); // %G de olur.
printf("Double Kısa Form hali : %lg\n\n", uzunOndalikSayi);
printf("Onluk sayi sisteminde tamSayi : %d\n", tamSayi);
printf("Sekizlik sayi sisteminde tamSayi : %o\n", tamSayi);
printf("Hex sayi sisteminde tamSayi : %x\n", tamSayi);
printf("Onluk sayi sisteminde tamSayi : %8d\n", tamSayi); //----8574 basılacak
printf("Onluk sayi sisteminde tamSayi : %-8d\n\n", tamSayi); //8574---- basılacak
printf("%s", "Sayılar\n\n");
printf ("Karakter Dizisi Yazdırma\n\n");
char cDizi[] = "String, bir karakter dizisidir.";
printf("%s\n", cDizi);
printf("%.6s\n",cDizi); // cDizi'nin ilk 6 karakteri alınacak
}
Uygulamanın çıktısı aşağıdaki gibidir :
Kodları dikkatli bir şekilde incelerseniz birçok şey anlaşılacaktır.
Değişken Kapsama Alanı
C syntax dillerde değişkenler main fonksiyonunun çalışması ile bellekte yer edinirken program sonlandığında hafızadan silinirler.
Ayrıca program içerisinde her değişkene her yerden erişemezsiniz. Değişkenlerin kendilerine ait bir yaşam (kapsama) alanları bulunur. Bu da süslü parantezlerle oluşturulan bloklarla sağlanır.(curly bracket)
Anlamak adına basit bir uygulama yapalım :
/******************************************************************************
Online C Compiler.
Code, Compile, Run and Debug C program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <stdio.h>
void main(void)
{
int a = 5;
int b = 3;
int c = 2;
printf("Dış blok değişken değerleri :\n\n");
printf("a = %d\nb = %d\nc = %d\n",a,b,c);
{
int c = 0;
printf("\nİç blok değişken değerleri :\n\n");
printf("a = %d\nb = %d\nc = %d",a,b,c);
}
}
Uygulamamızın çıktısı aşağıdaki gibidir :
Programda iki adet curly bracket bloğu bulunmaktadır. Birincisi main bloğu diğeri ise main içerisinde bulunan bloktur. main blogunda a,b ve c değişkenleri tanımlanmış ve değerleri ekrana yazdırılmıştır. Aynı şekilde iç blokta yine c isminde bir değişken tanımlanmış ve a,b ve c değişkenlerini değeri ekrana yazdırılmıştır.
İlk çıktı main bloğu içerisinde bulunduğundan a,b ve c değişkenleri sırasıyla 5,3 ve 2 değişkenlerini almıştır. İç blokta alınan çıktıda ise a,b ve c değişkenleri 5,3 ve 0 şeklinde ekrana basılmıştır. c değişkeninde meydana gelen değişikliğin sebebi farklı bloklarda bulunuyor olmalarındandır.
Normalde Java gibi bir dilde bu uygulama çalıştırılsaydı hata alır, çalışmazdı. Ancak C de dıştaki main bloğunun kapsama alanı belirlenirken içerideki bloktada aynı isimde değişken olduğundan bu blok dahil edilmiyor, en azından c değişkeni için öyle. Yoksa içteki blokta da a ve b değişkenlere erişim sağlanıyor aslında.
Şimdi de değişken isimlendirme kurallarından bahsedelim.
Değişken İsimlendirme Kuralları
Değişken isimlendirme kurallarında dikkat edilecek hususlar şöyledir :
- Bir değişkenin ismi rakam ile başlayamaz, ancak sonrasında rakam kullanılabilir. ali1, ali2 gibi.
- Değişken isimlendirmelerinde Türkçe karakterler kullanılamaz.
- Değişken isimlerinde boşluk karakteri olamayacağı gibi _(alt çizgi) dışında karakterler de bulunamaz.( _no, number_one şeklinde kullanılabilir.)
- C dili için ayrılmış olan keyword ler de kullanılamaz..
Bugünlük bu kadar, umarım faydalı bir çalışma olmuştur.
Uygulama noktasında herhangi bir sorun yaşarsanız aşağıdaki yorum panelini kullanarak iletişime geçmekten çekinmeyin lütfen. Teşekkürler.
Kaynak belirtilmeyen görseller @etasarim a aittir. / Pictures that don’t have any source belongs to @etasarim.
Posted from my blog with SteemPress : http://etasarim.cloudaccess.host/27/02/2019/printf-ve-degiskenler-2-c-programlama-dili/
Hi, @etasarim!
You just got a 1.52% upvote from SteemPlus!
To get higher upvotes, earn more SteemPlus Points (SPP). On your Steemit wallet, check your SPP balance and click on "How to earn SPP?" to find out all the ways to earn.
If you're not using SteemPlus yet, please check our last posts in here to see the many ways in which SteemPlus can improve your Steem experience on Steemit and Busy.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations! This post has been upvoted from the communal account, @minnowsupport, by etasarim from the Minnow Support Project. It's a witness project run by aggroed, ausbitbank, teamsteem, someguy123, neoxian, followbtcnews, and netuoso. The goal is to help Steemit grow by supporting Minnows. Please find us at the Peace, Abundance, and Liberty Network (PALnet) Discord Channel. It's a completely public and open space to all members of the Steemit community who voluntarily choose to be there.
If you would like to delegate to the Minnow Support Project you can do so by clicking on the following links: 50SP, 100SP, 250SP, 500SP, 1000SP, 5000SP.
Be sure to leave at least 50SP undelegated on your account.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Ellerine sağlık @etasarim 😊👍👏
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Teşekkür ederim @baycan hocam :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Bu yazı Curation Collective Discord Sunucusunda küratörlere önerilmiş ve manuel inceleme sonrasında @c-squared topluluk hesabından oy ve resteem almıştır.
This post was shared in the #turkish-curation channel in the Curation Collective Discord community for curators, and upvoted and resteemed by the @c-squared community account after manual review.
@c-squared runs a community witness. Please consider using one of your witness votes on us here
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Thanks @c-squared
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit