Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

Benzer bir sunumlar


... konulu sunumlar: "SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz"— Sunum transkripti:

1 SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Doç. Dr. Cemil Öz Algoritmalar ve Programlama I Ders 4: C programlama dilinde Sabit,değişken ve değişken bildirimleri   SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

2 ANSI C’ de var olan ön işlemci komutları;
C/C++’ da önişlemci komutları Bir C programında simgesel sabitler, makro fonksiyonlar veya programın koşullu derlenmesi istenirse, önişlemci komutları olarak adlandırılan komutlar kullanılır. C dili önişlemcisi, derleme işlemine geçmeden önce bu komutları yorumlayarak istenilenleri yerine getirir, ardından derleme işlemine başlanır. ANSI C’ de var olan ön işlemci komutları; #define #error #include #pragma #undef #endif #elif #if #else # inline #ifndef #ifdef #line

3 #include önişlemci komutu;
Başlık dosyalarında (*.h) bildirilmiş olan makro fonksiyonlar ve simgesel sabitler kullanılacak ise ilgili dosya #include önişlemci komutu kullanılarak program içine eklenmelidir. Örneğin;  #include <stdio.h> /* C de kullanılan standart giriş çıkış fonksiyonların birçoğu */ /* stdio.h adlı başlık dosyasında bildirilmiş olan bir kısım */ /* veri tiplerini ve makro fonksiyon tanımlarını kullanır */ /* Bu yüzden standart giriş fonksiyonları kullanılırken */ /* stdio.h dosyası #include <stdio.h> komutu ile dahil edilir.*/ Başlık dosyalarının önceden derlenmiş olması nedeni ile derleyici sadece program içinde yazılan kodları derler ve böylece derleme zamanından tasarruf sağlar.

4 Sabit ve değişken kavramı sabit ve değişken tipleri ve bildirimler.
Değişken, verilerin tutulduğu bellek hücrelerine verilen simgesel adlardır. Dolayısı ile program içerisinde kullanılacak veriler değişkenler üzerinde tutulur. Programların yürütülmesi süresince içerikleri değiştirilebilir. Her değişkenin bir adı ve veri tipi vardır. Veri tipi değişkende ne tip veri tutulacağını belirler. C dilinde değişken adları, ilki harf olmak üzere diğerleri harf, sayı veya alt eksi ( _ ) den oluşan bir veya birden çok karakterden oluşur. Değişken adları, dilin anahtar sözcükleri, kütüphanede var olan fonksiyon adları olmamalıdır.

5 Sabit ve değişken kavramı sabit ve değişken tipleri ve bildirimler.
Her değişkenin tuttuğu değerin nasıl bir veri olduğunu gösteren bir tipi vardır. Sabitler de bellekte verinin saklandığı hücrelere verilen sembolik adlardır. Değişkenlere benzerler, fakat bildirilirken verilen değerler programın yürütülmesi süresince değiştirilemez. Sabitler program boyunca değerleri değiştirilmeyen yani sabit kalan değişkenler olarak ta düşünülebilir. .

6 Name1, name2, name, Name, Personnel_name, Personnel_Surname
Date_of_Bird, Sum, sum, count1, Control10, x , y, s, XYZ, xyz, Xsum, X_sum C programlama dilinde değişken isimleri kullanımında büyük küçük harf farklı muamele görür. Sales sales SALES sALES Bir değişken ismi C programlama dilinin ve fonksiyonlarının isimleri olamaz printf , sin, cos, int Değişken isimleri sayılarla başlamaz 2001_sales Boşluk ve diğer alfa-nümerik olmayan karakterler kullanılmaz( _ alt çizgi hariç-underscore Aug2005+sales, my age , name+surname

7 C/C++ da değişken ve sabit tipleri
Bilgisayar bir makinedir ve insan gibi yorum yapamaz. Bu yüzden programda işlem gören değişken ve sabitlerin veri tipleri, bilgisayarın bu değerler ile işlem yapabilmesi için verilmelidir. Veri tipi bir değişken veya sabitin sayısal, karakter veya başka tipteki niteliğini belirler. Herhangi bir değişken veya sabitin programda yer alabilmesi için ona bir ad verilmesi ve bu adın program içinde uygun bir yerde bildirilmesi (declaration) gerekmektedir. Bir değişken veya sabit elemanın sayı veya karakter şeklinde genel olarak tiplerinin belirlenmesi tek başına yeterli değildir.

8 Bu nedenle veri tipinin bildirilmesi bellekte ayrılacağı yerin büyüklüğünü de içermelidir. Buna göre veri tipleri temel tipler ve türetilmiş tipler olarak iki guruba ayrılır. C dilinde kullanılan temel veri tipleri bool ve void hariç aşağıda verildiği gibidir; char: karakter vb.} int, short, long: tamsayı {1, 1245, vb.} float, double, long double: gerçel sayı {3.14, 104, vb.} char []: söz dizisi (string) {“Sakarya”, vb.} []: dizi, matris {[ ], vb.}

9 Type Bit width Range Char or signed_char 8 -128 to 127 character unsigned_char 0 to 255 Unsigned character Int 16 to 32767 integer Unsigned_int 0 to 65535 Unsigned integer Short int Short integer Unsigned int Long int 32 to Long integer Fload Approximately 6 digit of precision Floating point Double Approximately 12 digit of precision Double floating point

10 Bazı örnekler { int i, j; // Bu üç satır 4 adet değişken tanımlar char c; float x; // Programın geri kalanı Burada ilk satır(int i, j; ) c derleyicisine şunu söyler: Program da bir yerde iki tamsayı kullanacağım bunlar için hazır ol. Bu değişkenleri i ve j olarak isimlen diriyorum. Bu değişkenlerin içeriğinin tamsayı olmasından emin olmak istiyorum.

11 Diğer programlama dillerinde de kendine özgü gösterimleri ile benzer temel veri tipleri kullanılır.
C dilinde kullanılan türetilmiş veri tipleri aşağıda verildiği gibidir; enum: sıralamalar {pzt, sa, çar, per, …} struct: topluluk işaretçiler (pointers) class: sınıf vb.

12 C/C++ da temel veri tipleri
 Karakter C programlama dilinde “char” ile temsil edilen bu veri tipi tek bir karakterin ifade edilmesini sağlar ve bellekte 1 byte (8 bit) büyüklüğünde yer işgal eder. ‘a’,’B’,’3’, vb. şeklindeki karakterleri ifade eder. En yaygın kullanılan karakter tablosu ASCII tablosudur. Standart ASCII’ de her bir karakter 7 bittir ve 128 farklı karakter vardır. Extended (genişletilmiş) ASCII’ de her bir karakter 8 bittir ve 256 farklı karakter vardır. Uygulamada daha çok genişletilmiş ASCII tablosu kullanılmaktadır. Ayrıca unikod kodlama da yaygınlaşmaktadır ve evrensel bir kodlama şeklidir. Bu kodlamada her karakter 16 bit yer işgal eder ve (216) tane farklı karakter kodlanabilir. Örnek bildirimler; char first, middle, last; char cevap; char kr;

13 Tamsayı  C programlama dilinde “int” ile temsil edilen veri tipi normal tam sayıların ifade edilmesini sağlar ve bellekte derleyiciye bağlı olarak 2 yada 4 byte büyüklüğünde yer işgal eder. Bazı özel niteleyiciler kullanılarak (short, unsigned, long) bu temel veri tipinin türevleri elde edilir. “short int” ile temsil edilen veri tipi kısa tam sayıların ifade edilmesini sağlar ve bellekte derleyiciye bağlı olarak 2 byte‘ ı (16 bit) geçmeyecek uzunlukta ve genelde normal veri tipinin yarısı büyüklüğünde yer işgal eder. “long int” ile temsil edilen veri tipi uzun tam sayıların ifade edilmesini sağlar ve bellekte derleyiciye bağlı olarak genelde normal veri tipinin iki katı büyüklüğünde yer işgal eder. “unsigned int” ile temsil edilen veri tipi işaretsiz (pozitif) tam sayıların ifade edilmesini sağlar. Tamsayı için 16 bit kullanan bir derleyicide, tamsayı ile arasında olmalıdır (1 bit işaret biti, 215=32768). Eğer tamsayı işaretsiz bildirilir ise atanacak sayı 0 ile arasında olmalıdır (216=65536). {( )2 =(65536)10}

14 Derleyicinin kullandığı veri tipi uzunluğunu byte olarak sizeof operatörü ile öğrenebiliriz.
Örneğin;  #include <stdio.h> int n; void main(void) /* Ana fonksiyon */ { n=sizeof(int); printf("Tamsayi uzunlugu: %d",n); } Örnek bildirimler; long int sonuc; short int yas, boy; unsigned int agirlik;

15 Gerçel sayı C programlama dilinde “float” ile temsil edilen veri tipi tek duyarlı gerçel sayıların ifade edilmesini sağlar. Gerçel sayı kayan noktalı (floating point) gösterimle bellekte saklanır. Aynı zamanda standart C’ de “double” ile temsil edilen çift duyarlı ve “long double” ile temsil edilen uzun çift duyarlı kayan nokta gösterimli gerçel sayılar da mevcuttur. Program satırlarında gerçel sayılar veya E+4 (= 10+4) biçiminde yazılabilirler. Duyarlılık hesaplanırken sayıdaki nokta solunda sıfır kalacak şekilde kaydırılır ve noktadan sonraki belirli sayıdaki nokta duyarlılık olarak belirtilir. Tek duyarlı bir gerçel sayının duyarlılığı 6 hane ise sayı için duyarlılık aşağıdaki şekilde belirlenir;  E+3 {duyarlılık rakamları dır.}

16 Gerçel sayılar da bellekte derleyiciye bağlı bir büyükte yer işgal eder. Genelde tek duyarlılık için 4 byte ve çift duyarlılık için 8 byte büyüklük kullanılmaktadır. C derleyicilerinde genelde tek duyarlılık için duyarlılık 6 hane ve üs E-38 ile E+38 arasında ve çift duyarlılık için duyarlılık 15 hane ve üs E-308 ile E+308 arasındadır. Gerçel sayılar için de derleyicinin kullandığı veri tipi uzunluğunu byte olarak sizeof operatörü ile öğrenebiliriz. Örnek bildirimler; float x, y; double oran;

17 Söz dizisi (string) Bir metinin tamamını, herhangi bir cümlesini, bir sözcüğünü veya hecesini bellekte tutmak için söz dizisi (string) veri tipi kullanılır. C/C++ dilinde söz dizisi (string) karakter dizisi bildirilerek yapılır. Bir söz dizisi ilk karakterden başlar ve sonlandırma karakterine (NULL: ASCII kodu 0) kadar devam eder. Örnek bildirimler; char Ad[10]; /*en fazla 9 karakterli söz dizisi*/ char Soyad[15]; /*en fazla 14 karakterli söz dizisi*/

18 Dizi (Array)/Matris Dizi aynı tipten verilerin tek bir isim altında bellekte tutulması için kullanılan bir veri tipi yöntemidir. Bu veri tipi ileriki konularda uygulama örnekleri ile detaylı olarak ele alınacaktır. Örnek bildirimler; int N[10]; int index[100]; int xyz[10][10][20]; float graf[20][10];

19 C/C++ da değişken bildirim yerleri ve Faaliyet alaları
Faaliyet alanı, bir değişkenin ömrünü sürdürdüğü ve tanınabildiği program aralığıdır. Değişkenlerin faaliyet alanları, onların program içerisindeki tanımlama yerleri ile ilişkilidir. Bir C/C++ programında kullanılacak değişkenler önceden bildirilmelidir. Değişkenlerin nerede bildirildiği oldukça önemlidir. Daha öncede belirtildiği gibi bir C/C++ programı, bir yada daha çok fonksiyonun bir araya gelmesi ile oluşur. Faaliyet alanları üç grupta toplanır. Blok Faaliyet Alanı(Block scope): Yalnızca bir blok içerisinde tanınma aralığıdır.(Küme parantezlerinin arasındaki bölge blok’dur.) Fonksiyon Faaliyet Alanı(Function scope): Yalnızca bir fonksiyonun her yerinde tanınma aralığıdır. Dosya Faaliyet Alanı(File scope): Tüm dosya içinde, yani fonksiyonların hepsi içerisinde tanınma aralığıdır.

20 C/C++ da değişken bildirim yerleri ve Faaliyet alaları
Değişkenleri de faaliyet alanlarına göre üç bölüme ayırabiliriz. Yerel Değişkenler(Local variables) Global Değişkenler(Global variables) Parametre Değişkenler(Formal parameters) Eğer bir değişken, programdaki fonksiyonların çoğunda kullanılacaksa genel (global) olarak, yalnızca tek bir fonksiyon içinde kullanılacaksa o fonksiyon içinde yerel (local) olarak bildirilmesi uygundur.

21 Yerel(local) bildirim
Yerel (local) değişkenler kullanıldığı fonksiyon içerisinde bildirilir ve yalnızca bildirildiği fonksiyon içerisinde tanınır ve kullanılırlar. Bildirildiği fonksiyon dışında tanınmazlar. Yerel değişkenler bildirildiği fonksiyon programın işlemesi sırasında yürütüldüğü anda bellekteki veri alanında yer kaplarlar. Burada a ve b’nin her ikiside yerel değişkendir. Çünkü blok başlarında tanımlanmışlardır. Örnekte a değişkeninin faaliyet alanının b değişkeninin faaliyet alanından daha büyük olduğu görülmektedir.

22 Yerel bildirim için örnek C/C++ programı;
 #include <stdio.h> /* Önişlemci komutları */ void main(void) /* Ana fonksiyon */ { int m,n; /* Yerel bildirim */ m=7; n=kare(m); printf("%d nin karesi=%d dir.",m,n); } int kare (k) /* Fonksiyon */ int k; /* Formal bildirim */ int gecici; /* Yerel bildirim */ gecici=k*k; return gecici; main() fonksiyonunun yerel değişkenleri olan m ve n, kare fonksiyonunun içinde tanınamayacağından kullanılamazlar. Görüldüğü gibi m kare() fonksiyonuna gönderilmekte ve kare() fonksiyonunda ise gönderilen m’ in değeri k adlı değişkende tutulmaktadır. kare() fonksiyonunun yerel değişkeni ise geçici’ dir.

23 Genel(global) bildirim
Genel (global) değişken bütün fonksiyonların dışında bildirilir. Bir değişken bütün program boyunca sürekli kullanılıyor ise genel olarak bildirilmelidir. Böyle bir değişken yerel olarak bildirilirse, kullanılacağı her fonksiyona gönderilmesi gerekir. Bu da gereksiz parametre aktarımına sebep olur. # include <stdio.h> int x ; /* x global bir değişkendir */ void fonk( ) { x=200; } void main( ) x=100; printf (“x=%d\n”,x); /* x=100 */ fonk( ); printf(“x=%d\n”,x); /* x=200 */

24 Örnekte x tüm blokların dışında tanımlandığı için global bir değişkendir. X değişkeninin faaliyet alanı dosya faaliyet alanıdır; Yani x tüm fonksiyonlarda tanınır. Global değişkenler de ilk değer verilebilir. Örneğin: İnt a=500; f1 ( ) { . } Burada a değişkenine tanımlama sırasında ilk değer olarak 500 verilmiştir.

25 Bir önceki örneği genel (global) değişken kullanarak tekrar yazar isek;
#include <stdio.h> /* Önişlemci komutları */ int m,n; /* Genel bildirim */ void kare(void); /* Fonksiyon bildirimi */  void main(void) /* Ana fonksiyon */ { m=7; kare(); printf("%d nin karesi=%d dir.",m,n); }  void kare(void) /* Fonksiyon */ n=m*m; Her iki program da aynı işi yapmaktadır. Fakat ikinci yazımda değişkenler genel bildirilmiştir. Bu sebeple kare() fonksiyonuna ne parametre gelmekte ne de sonuç gönderilmektedir. Çünkü genel değişkenler bütün fonksiyonlar içinde kullanılabilirler. kare() fonksiyonunun tipi return ile bir şey gönderilmediği için main() fonksiyonu gibi hiçbir şey anlamında void’ dir.

26 Formal bildirim  C/C++ programlarında bir fonksiyonun argümanı olabilir. Bunlara formal parametreler denilmektedir. Bu argümanlar da uygun bir şekilde bildirilmelidir. Bunlar yerel değişkenlere benzerler ve sadece fonksiyon içerisinde tanınırlar. Bildirimi fonksiyon adının hemen altında veya fonksiyon parantezi içindeki argümanın önünde yapılabilir. Örneğin; int fonk(m,n) /* Fonksiyon */ int m,n; { …. } Veya;  … int fonk(int m, int n) /* Fonksiyon */ Formal parametreler fonksiyona değer aktarımı yapılacağı zaman kullanılır. 

27 Diğer bildirimler Dışsal (Extern) Bildirim: Büyük programlar uygun olarak parçalara bölünüp ayrı ayrı yazılıp derlendikten sonra birbirleri ile bağlantıları (link) kurulabilir. Ortak genel (global) değişkenler bu program parçaların birisinde normal olarak bildirilirken, diğer program parçalarında dışsal (extern) olarak bildirilir. {int x;  extern int x; /*genel*/} Statik (Static) Bildirim: Yerel değişkenler bildirildiği fonksiyon yürütüldüğü anda bellekte yer kaplar. Fonksiyon sonlandığında boş bellek alanı gibi düşünülür ve yerel değişkenin tutuğu değer kaybolur. Yerel değişkenin tutuğu eski değer korunsun istenir ise yerel değişken bildiriminin önüne static anahtar sözcüğü yazılmalıdır. {int k;  static int k; /*yerel*/} Saklayıcı tipi (Register) Bildirim: Bir değişken için bellek hücresi yerine işlemci saklayıcısı (register) kullanılmak isteniliyor ise bu değişken saklayıcı tipte bildirilmelidir. Bunun için değişken bildiriminin önüne register anahtar sözcüğü yazılmalıdır. Saklayıcı tipi değişkenlere -işlemci registerleri kullanıldığı için- erişim daha hızlı olur. Fakat kullanılabilecek saklayıcı tipi değişken sayısı sınırlıdır. {int a;  register int a;} vb..

28 . Değişkenlere başlangıç değeri atanması
Herhangi bir biçimde bildirilen bir değişkenin değeri o anda bellek hücresinde bulunan kullanılması uygun olmayan rasgele bir değerdir. Değişkenler bildirilirken istenilen bir başlangıç değeri atanabilir. Örneğin; char kr=’B’, y=41; /*41  ASCII tabloda A karakteri*/ int m=1, n=10, p; float f=10.115, x;

29 C/C++ da sabit bildirimi
Sabitler de değişkenler gibi bellekte verinin saklandığı hücrelere verilen sembolik adlardır. Değişkenden farklı olarak bildirilirken verilen değerler programın yürütülmesi süresince değiştirilemez. C dilinde sabit bildirimi, başlangıç değeri verilen değişken bildirimi gibi yapılır. Fakat veri tipinin önüne const anahtar sözcüğü koyulmalıdır. Örneğin; const float pi = ; const int c = 5; const double e = ;


"SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz" indir ppt

Benzer bir sunumlar


Google Reklamları