DeÄŸiÅŸkenler, girdiÄŸimiz deÄŸerleri alan veya programın çalışmasıyla bazı deÄŸerlerin atandığı, veri tutucularıdır. DeÄŸiÅŸken tanımlamaysa, gelecek veya girilecek verilerin ne olduÄŸuna baÄŸlı olarak, deÄŸiÅŸken tipinin belirlenmesidir. Yani a isimli bir deÄŸiÅŸkeniniz varsa ve buna tamsayı bir deÄŸer atamak istiyorsanız, a deÄŸiÅŸkenini tamsayı olarak tanıtmanız gerekir. Keza, a’ya girilecek deÄŸer eÄŸer bir karakter veya virgüllü sayı olsaydı, deÄŸiÅŸken tipinizin ona göre olması gerekirdi. Sanırım bir örnekle açıklamak daha iyi olacaktır.
#include<stdio.h>
int main( void )
{
int a;
a = 25;
printf("a sayısı %d",a);
return 0;
}
Åžimdi yukarıdaki programı anlamaya çalışalım. En baÅŸ satıra, int a -int, İngilizce de integer’ın kısaltmasıdır- dedik. Bunun anlamı, tamsayı tipinde, a isimli bir deÄŸiÅŸkenim var demektir. a=25 ise, a deÄŸiÅŸkenine 25 deÄŸerini ata anlamına geliyor. Yani, a artık 25 sayısını içinde taşımaktadır. Onu bir yerlerde kullandığınız zaman program, a’nın deÄŸeri olan 25′i iÅŸleme alacaktır. printf(); fonksiyonunun içersine yazdığımız %d ise, ekranda tamsayı bir deÄŸiÅŸken deÄŸeri gözükecek anlamındadır. Çift tırnaktan sonra koyacağımız a deÄŸeri ise, görüntülenecek deÄŸiÅŸkenin a olduÄŸunu belirtir. Yalnız dikkat etmeniz gereken, çift tırnaktan sonra, virgül koyup sonra deÄŸiÅŸkenin adını yazdığımızdır. Daha geliÅŸmiÅŸ bir örnek yaparsak;
#include<stdio.h>
int main( void )
{
int a;
int b;
int toplam;
a = 25;
b = 18;
toplam = a + b;
printf("a sayısı %d ve b sayısı %d, Toplamı %d.\n", a, b, toplam);
return 0;
}
Bu programın ekran çıktısı şöyle olur; a sayısı 25 ve b sayısı 18, Toplamı 43. Yazdığımız bu programda, a, sonra b, üçüncü olarakta toplam ismiyle 3 adet tamsayı deÄŸiÅŸken tanıttık. Daha sonra a’ya 25, b’ye 18 deÄŸerlerini atadık. Sonraki satırdaysa, a ile b’nin deÄŸerlerini toplayarak, toplam ismindeki deÄŸiÅŸkenimizin içersine atadık. Ekrana yazdırma kısmı ise şöyle oldu: üç tane %d koyduk ve çift tırnağı kapattıktan sonra, ekranda gözükme sırasına göre, deÄŸiÅŸkenlerimizin adını yazdık. printf(); fonksiyonu içersinde kullanılan %d’nin anlamı, bir tamsayı deÄŸiÅŸkenin ekranda görüntüleneceÄŸidir. DeÄŸiÅŸkenlerin yazılma sırasındaki olaya gelince, hangisini önce görmek istiyorsak onu baÅŸa koyar sonra virgül koyup, diÄŸer deÄŸiÅŸkenleri yazarız. Yani önce a deÄŸerinin gözükmesini istediÄŸimiz için a, sonra b deÄŸerinin gözükmesi için b, ve en sonda toplam deÄŸerinin gözükmesi için toplam yazdık.
Bu arada belirtmekte fayda var, elimizdeki 3 tamsayı değişkeni, her seferinde int yazıp, belirtmek zorunda değiliz. int a,b,toplam; yazarsakta aynı işlemi tek satırda yapabiliriz.
Şimdi, elimizdeki programı bir adım öteye taşıyalım:
#include<stdio.h>
int main( void )
{
int saat;
float ucret, toplam_ucret;
char bas_harf;
printf("Çalışanın baş harfini giriniz> ");
scanf("%c",&bas_harf);
printf("Çalışma saatini giriniz> ");
scanf("%d",&saat);
printf("Saat ücretini giriniz> ");
scanf("%f",&ucret);
toplam_ucret = saat * ucret;
printf("%c başharfli çalışanın, alacağı ücret: %f\n",bas_harf,toplam_ucret);
return 0;
}
Bu yazdığımız program basit bir çarpım iÅŸlemini yerine getirerek sonucu ekrana yazdırıyor. Yazılanların hepsini bir anda anlamaya çalışmayın, çünkü adım adım hepsinin üzerinde duracağız. Programı incelemeye baÅŸlarsak; deÄŸiÅŸken tanımını programımızın başında yapıyoruz. Gördüğünüz gibi bu sefer farklı tiplerde deÄŸiÅŸkenler kullandık. Biri int, diÄŸer ikisi float ve sonuncusunu da char. int’ın tamsayı anlamına geldiÄŸini az evvel gördük. float ise 2.54667 gibi virgüllü sayılar için kullanılır. char tipindeki deÄŸiÅŸkenler, a,H,q,… ÅŸeklinde tek bir karakter saklarlar. Konu biraz karmaşık gözükse de, deÄŸiÅŸken tanımında bütün yapmanız gereken, deÄŸiÅŸkeninizin taşıyacağı veriye göre programın başında onun tipini belirtmektir. Bunun için de tıpkı yukarıdaki programda olduÄŸu gibi, önce tipi belirtir, sonra da adını yazarsınız.
Programımıza dönersek, çalışma saati bir tamsayı olacağından, onu saat isminde bir int olarak tanıttık. Ücret virgüllü bir sayı olabilirdi. O nedenle onu float (yani virgüllü sayı) olarak bildirdik. Adını da saatucret koyduk. FarkettiÄŸiniz gibi, toplamucret isimli deÄŸiÅŸkenimiz de bir float. Çünkü bir tamsayı (int) ile virgüllü sayının (float) çarpımı virgüllü bir sayı olmaktadır. Tabii 3.5×2=7 gibi tam sayı olduÄŸu durumlarda olabilir. Ancak hatadan sakınmak için toplamucret isimli deÄŸiÅŸkenimizi bir float olarak belirtmek daha doÄŸrudur.
Üsteki programımızda olmasına karşın, şuana kadar scanf(); fonksiyonunun kullanımına değinmedik. scanf(); geçen haftaki yazımızdan da öğrendiğimiz gibi bir giriş fonksiyonudur. Peki nasıl kullanılır, tam olarak ne işe yarar? scanf(); kabaca klavyeden girdiğiniz sayıyı veya karakteri almaya yarar. Kullanımı ise şöyledir: önce scanf yazar, sonra parantez ve ardından çift tırnak açar, daha sonra alınacak değişkene göre, %d, %f veya %c yazılır. %d int, %f float, %c char tipindeki değişkenler için kullanılır. Bundan sonra çift tırnağı kapatıp, virgül koyarsınız. Hemen ardından & işareti ve atanacak değişken adını yazarsınız. Son olarak, parantezi kapatıp noktalı virgül koyarsınız. Hepsi budur.
Yukarıdaki programda da scanf(); fonksiyonu gördüğünüz gibi bu şekilde kullanılmıştır. Sanırım gereğinden çok laf oldu ve konu basit olduğu halde zor gibi gözüktü. Yukardaki sıkıntıdan kurtulmak için çok basit bir program yazalım. Bu programın amacı, klavyeden girilen bir sayıyı, ekrana aynen bastırmak olsun.
#include<stdio.h>
int main( void )
{
int sayi;
printf("DeÄŸer giriniz> ");
scanf("%d",&sayi);
printf("Girilen deÄŸer: %d\n",sayi);
return 0;
}
Gördüğünüz gibi hiçbir zor tarafı yok. Klavyeden girilecek bir tamsayınız varsa, yapmanız gereken önce deÄŸiÅŸkenin tipini ve adını belirtmek, sonra scanf(  ); fonksiyonunu kullanmak. Bu fonksiyonu kullanmaya gelince, scanf(” yazdıktan sonra deÄŸiÅŸken tipine göre %d, %c, veya %f, yazıp, ardından & iÅŸaretini kullanarak atanacak deÄŸiÅŸkenin adını belirtmekten ibaret. Fark etmiÅŸsinizdir, printf(); ve scanf(); fonksiyonlarının her ikisinde de %d koyduk. Çünkü scanf(  ); ve printf(  ); fonksiyonların deÄŸiÅŸken tipi simgeleri aynıdır. AÅŸağıdaki tablodan hangi deÄŸiÅŸken tipinin nasıl deklare edileceÄŸini, kaç byte yer kapladığını, maksimum/minimum alabileceÄŸi deÄŸerleri ve giriÅŸ/çıkış fonksiyonlarıyla nasıl kullanılabileceÄŸini bulabilirsiniz. Tanımlamalar ve fonksiyon uygulamaları, degisken isimli bir deÄŸiÅŸken için yapılmıştır.
|  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 |
Â
Verilen bu değerler; işletim sisteminden, işletim sistemine, farklılık gösterebilir. En doğru değerleri almak için sizeof(  ), fonksiyonunu kullanmak gerekir. Aşağıda yazmış olduğum bir program bulacaksınız. Kendi bilgisayarınızda derleyip, çalıştırırsanız, size değişkenlerin boyutunu ve alabileceği maksimum-minimum değerleri verecektir:
#include<stdio.h>
#include<limits.h>
#include<float.h>
int main( void )
{
printf( "\nTIP\t\t BOYUT\t\t MIN\t \tMAX\n" );
printf("==============================================================\n");
printf( "char\t\t: %d byte(s)\t%d\t\t%d\n", sizeof(char),CHAR_MIN,CHAR_MAX );
printf( "short\t\t: %d byte(s)\t%d\t\t%d\n", sizeof(short), SHRT_MIN, SHRT_MAX );
printf( "int\t\t: %d byte(s)\t%d\t%d\n", sizeof(int), INT_MIN, INT_MAX );
printf( "unsigned int\t: %d byte(s)\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%e\n", sizeof(float), FLT_MIN, FLT_MAX );
printf( "double\t\t: %d byte(s)\t%e\t%e\n\n", sizeof(double), DBL_MIN, DBL_MAX );
return 0;
}
Programı inceleyip, detaylara girmeyin. Sadece çalıştırıp, sonuçları görmeniz yeterli. Örneğin, Ubuntu yüklü x86 tabanlı bir bilgisayarda, karşınıza şöyle bir ekran gelecektir:
TIP BOYUT MIN MAX
==============================================================
char : 1 byte(s) -128 127
short : 2 byte(s) -32768 32767
int : 4 byte(s) -2147483648 2147483647
unsigned int : 4 byte(s) 4294967295
long : 4 byte(s) -2147483648 2147483647
float : 4 byte(s) 1.175494e-38 3.402823e+38
double : 8 byte(s) 2.225074e-308 1.797693e+308
Sanırım hiç istemediÄŸim bir ÅŸey yaparak, kafanızı karıştırdım. Dilerseniz, burada keselim ve bunlar ileriye dönük olarak bir kenarda dursunlar.Â
Şu ana kadar öğrendiklerimizle girilen herhangi iki sayısının ortalamasını hesaplayan bir program yazalım. Başlamadan önce, değişkenlerimizin kaç tane ve nasıl olacağını düşünelim. Şurası kesin ki, alacağımız iki sayı için 2 farklı değişkenimiz olmalı. Bir de ortalamayı hesapladığımızda bulduğumuz değeri ona atayabileceğimiz bir başka değişkene ihtiyacımız var. Peki değişkenlerimizin tipleri ne olacak? Başında belirttiğimiz gibi yazmamız gereken program herhangi iki sayı için kullanılabilmeli. Sadece tamsayı demiyoruz, yani virgüllü bir sayı da girilebilir. O halde, girilecek iki sayının değişken tipi float olmalı. Bunu double da yapabilirsiniz, fakat büyüklüğü açısından gereksiz olacaktır. Ortalamaların atanacağı üçüncü değişkene gelince, o da bir float olmalı. İki virgüllü sayının ortalamasının tamsayı çıkması düşünülemez. Oluşturduğumuz bu önbilgilerle programımızı artık yazabiliriz.
#include<stdio.h>
int main( void )
{
float sayi1,sayi2,ortalama;
printf("İki sayı giriniz> ");
scanf("%f%f",&sayi1,&sayi2);
ortalama = ( sayi1 + sayi2 ) / 2;
printf("Ortalama sonucu: %f'dir",ortalama);
return 0;
}
Yukarıda yazılı programda, bilmediğimiz hiçbir şey yok. Gayet basit şekilde izah edersek, 2 sayı alınıp, bunlar toplanıyor ve ikiye bölünüyor. Bulunan değerde ortalama isminde bir başka değişkene atanıyor. Burada yabancı olduğumuz, sadece scanf(); kullanımındaki değişiklik. scanf(); fonksiyonuna bakın. Dikkat edeceğiniz gibi, değişkenlerden ikisine de tek satırda değer atadık. Ayrı ayrı yazmamız da mümkündü, ancak kullanım açısından böyle yazmak açık şekilde daha pratiktir. Bu konuda bir başka örnek verelim. Diyelim ki, biri int, diğeri float, sonuncusuysa char tipinde 3 değişkeni birden tek scanf(); ile almak istiyorum. Değişkenlerin isimleri, d1,d2 ve d3 olsun. Nasıl yaparız?
scanf("%d%f%c",&d1,&d2,&d3);
Peki aldığımız bu değişkenleri ekrana tek printf(); ile nasıl yazdırabiliriz?
printf("%d %f %c",d1,d2,d3);
Görüldüğü gibi bu işin öyle aman aman bir tarafı yok. Fonksiyonların kullanımları zaten birbirine benziyor. Tek yapmanız gereken biraz pratik ve el alışkanlığı.
Yorumlar
Yorum Yok
Yorumunuzu Ekleyin
Yorum eklemek için giris yapmalısınız.