İNTERNET PROGRAMCILIĞI - I

Benzer belgeler
PROGRAMLAMAYA GİRİŞ DERS 2

Döngü Komutları. Komutu. while Komutu Diğer Operatörler Bileşik Komut for Komutu. İçiçe Döngüler break ve continue Komutları

Fonksiyonlar (Altprogram)

C PROGRAMLAMA DİLİNE GİRİŞ

BÖLÜM 1b: C++ PROGRAMLAMANIN YAPISI. C++, hard diskte TC, BIN, INCLUDE, LIB gibi alt dizinlere yüklenir.

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

GENEL GĐRĐŞ-ÇIKIŞ FONKSĐYONLARI. ENF102 Jeoloji 1. #include <stdio.h> printf Fonksiyonu ÖRNEK. printf

C Konsol Giriş Çıkış Fonksiyonları

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

ESM-361 Mikroişlemciler. 3. Hafta Ders Öğretim Üyesi Dr.Öğr.Üyesi Ayşe DEMİRHAN

Algoritma ve Programlama: Karar Yapıları ve Döngüler

Temel Giriş/Çıkış Fonksiyonları

C Programlama Dilininin Basit Yapıları

Dr. Fatih AY Tel: fatihay@fatihay.net

Diziler (Arrays) Çok Boyutlu Diziler

/ C Bilgisayar Programlama Yıliçi Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

BMT 101 Algoritma ve Programlama I 6. Hafta. Yük. Müh. Köksal Gündoğdu 1

Eln 1001 Bilgisayar Programlama I

MAK 1005 Bilgisayar Programlamaya Giriş C DİLİNE GİRİŞ. Prof. Dr. Necmettin Kaya

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

BÖLÜM 6: KARŞILAŞTIRMALI KONTROL YAPILARI

PASCAL PROGRAMLAMA DİLİ YAPISI

Ders 4: Temel Giriş/Çıkış Fonksiyonları

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler

Bölüm 2 - C ile Programlamaya Giriş

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 8

2.3- OPERATÖRLER ÇALIŞMA YAPRAĞI

BÖLÜM 5: TEMEL GİRİŞ/ÇIKIŞ FONKSİYONLARI

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1

BİLGİSAYAR MÜHENDİSLİĞİ ALGORİTMA VE PROGRAMLAMA II 2.HAFTA SWİTCH (CASE), SAYAÇLAR, DÖNGÜLER,

Genel Programlama II

Programlama Dilleri 3

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-2 Değişken Kavramı ve Temel Operatörler

C PROGRAMLAMA D İ L İ

Nesne Tabanlı Programlama

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Temel Giriş/Çıkış Fonksiyonları (Devam) Örnek :

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

BÖLÜM 4: DEĞİŞKENLER, SABİTLER VE OPERATÖRLER

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

8. İŞARETCİLER (POINTERS)

ALGORİTMA VE PROGRAMLAMA I

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

Programlamaya Giriş. Program : Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak yazılmış deyimler dizisi.

B02.6 Karar Verme, Eşitlik ve Bağıntı Operatörleri

J A V A D A P R O G R A M D E N E T İ M İ V E O P E R A T Ö R L E R

Toplama işlemi için bir ikili operatör olan artı işareti aynı zamanda tekli operatör olarak da kullanılabilir.

Sınav tarihi : Süre : 60 dak. c) En başta #include<stdio.h> yazılmamıştır. c) zt d) Pi e) X0

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Adım Adım C-II. Eksik kalmış konular

Programlama Dilleri 1. Ders 4: Diziler

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Giriş. ENF102 Jeoloji

Nesne Tabanlı Programlama

PROGRAMLAMA TEMELLER. C Program Yap s

Nesne Yönelimli Programlama

C++ Operatörler (Operators)

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-11 Karakter Diziler. Yrd. Doç. Dr. Ümit ATİLA

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

STRİNG DİZİLER(KATARLAR)

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

Veri Tanımları ve Mantıksal İşlemler

EGE ÜNİVERSİTESİ EGE MYO MEKATRONİK PROGRAMI

İnternet Programcılığı Dersi 2.Dönem Ders Notu

HSancak Nesne Tabanlı Programlama I Ders Notları

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

Döngü (Loop) Deyimleri / Veri Belirleyicileri / Matematiksel Fonksiyonlar

BBS515 Nesneye Yönelik Programlama. Ders 2 Zümra Kavafoğlu

Bölüm 7. İfadeler ve atamalar ISBN

Giris {\} /\ Suhap SAHIN Onur GÖK

C PROGRAMLAMA D İ L İ

Üst düzey dillerden biri ile yazılmış olan bir programı, makine diline çeviren programa derleyici denir. C++ da böyle bir derleyicidir.

Dizgiler. C dilinde karakter m şeklinde tek tırnak içerisinde yazılan ifadelerdir. Bu karakterlerin her biri aslında bir tamsayı ile ifade edilir.

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

Günümüz bilgi toplumunda bilgisayar, her alanda kendine yer edinmiş ve insana, bir çok işlemde yardımcı olarak büyük kolaylık sağlamaktadır.

C Programlama printf() Fonksiyonu

C/C++ ile Programlamaya Giriş. Yrd.Doç.Dr.Bülent Çobanoğlu

ELN1001 BİLGİSAYAR PROGRAMLAMA I

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

Yrd. Doç. Dr. Caner ÖZCAN

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 3. Bölüm Veri Tipleri ve Değişkenler

EBG101 PROGRAMLAMA TEMELLERİ VE ALGORİTMA

C#(Sharp) Programlama Dili

Dr. Fatih AY Tel:

Hafta 8 C Dilinde Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

Fonksiyonlar -Genel Test- A

Yrd.Doç.Dr.Bülent Çobanoğlu

ALGORİTMA VE PROGRAMLAMA I

BİLİŞİM TEKNOLOJİLERİ 6. SINIF DERS NOTLARI 2

C PROGRAMLAMA D İ L İ

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

C Programlama Dilinde Değişkenler

Bilgisayar Programlama

Transkript:

BÖLÜM 3 TURBO C İLE PROGRAMLAMAYA GİRİŞ 3.1 PROGRAM YAPISI Bir Turbo C programı en basit haliyle değişkenlerden, Turbo C ye ait özel isimlerden (char, int, for, switch v.b) ve fonksiyonlardan meydana gelmiştir. C nin temeli fonksiyonlar üzerine kurulduğundan Turbo C ye ait özel isimler hariç, kullanılan komutların tümğ ve hatta programın kendisi de bir fonksiyondan ibarettir. Bu yüzden, programda değişkenler ve özel isimlerin kullanılması gerekmese de en az bir fonksiyonun bulunması zorunludur. Programın en önemli parçası olan bu fonksiyon main olarak isimlendirilir. main fonksiyonu, programın icranın başlangıç noktasıdır ve herhangi bir sebep veya hatadan dolayı işleyiş kırılmazsa programın icrası genellikle bu fonksiyonun sonunda son bulur. Bir main fonksiyonun yapısı basitçe aşağıdaki gibi gösterilebilir. main () -------------------------------Program başlangıcı ifade_1 ; ifade_2 ; İfade Bloğu ifade_3 ; (Programın ana gövdesi).. ifade_n ; -------------------------------Programın sonu Burada ve işaretleri bir ifade bloklarının içindeki her ifade bloklarının içindeki her ifade, (;) işareti ile son bulur. #include <stdio.h> int x,y,z; main() x=10; y=15; z=x * x +y * y; printf ( %d,z); Turbo C de program yapısı en genel haliyle aşağıdaki gibi ele anılabilir. Programlar genellikle bu sırada yazılırlar, fakat her programın bu sırayı takip etmesinin bir zorunluluğu yoktur. 25

Preprocessor direktifleri Global değişken bildirileri Fonksiyon Prototipleri Fonkisyon tanımlamaları 3.1.1 PREPROCESSOR DİREKTİFLERİ (ÖN İŞLEMCİ KOMUTLARI) Tipik olarak programı kolaylıkla değiştirmek ve farklı icra çevrelerinde kolaylıkla derlemek için kullanılırlar. Bu direktifler daima # diyez sembolü ile başlar. Burada bu direktiflerden sadece şu anda bizim için gerekli olacak olan #define ve #include direktifleri ele alınacaktır. #define Sembolik_Isim Yerini_tutacak_text #define direktifi ile programın her yerinde geçerli olmak üzere Sembolik_Isim ile belirtilen karakterle yerini_tutacak_text karakterleri yerleştirilir. #define pi 3.1415 direktifi ile programın içinde Pi nin geçtiği her yerde 3.1415 yerleştirilir. Örneğin alan = r*rpi ifadesi derleyici tarafından alan =r * r* 3.1415 olarak ele alınır. #define True 1 #define False 0 Burada Pi, True ve False isimleri, sembolik sabitlerdir ve program içinde asla değiştirilmezler. #define Pi 3.1415 float alan, r; main() alan = r*r*pi; printf (%f yaricapli dairenin alani %f dir,r,alan); #define ile sadece sabitler değil aynı zamanda komut ve işlemleride tanımlamak mümkündür. #define topla(a,b) a+b komutu ile iki sayının toplamını bulan bir komut tanımlamak mümkündür. Bundan sonra kullanılacak olan c=topla(x,5)-x*x; ifadesi derleyici tarafından c= x + 5 x*x; olarak işlenecektir. 26

Burada dikkat edilmesi gereken husus, yukarıda tanımlandığı gibi topla (a,b) ile a+b işlemi tanımlanmaktadır. Eğer aşağıdaki gibi bir ifade içinde kullanılırsa X=topla (3,10)*5; İfadesinin sonucu sanıldığ gibi 3 ile 10 toplanıp sonra çıkan sonuç 5 ile çarpılmayacaktır. Yani, X=(3+10)*5; Şeklinde olmayacaktır. #define direktifi, sadece topla(3,10) karakter dizisi görüldüğü yere 3 + 10 karakter dizisinin yerleştirilmesinin sağlayacaktır. O halde, ifade aşağıdaki gibidir. X= 3+10*5; Ve x in sonuç değeri 65 değil 53 olarak yanlış bir değer elde edilecektir. Bu durumu önlemek için tanımlamanın şu şekilde yapılması gerekir: #define topla (a,b) (a+b) buna göre ifade x= 3 + 10 * 5; şeklini alır. #define topla (a,b) (a+b) int x,y,z; main () x=12; y=3; z= topla(x,y); /* z= (12+3) */ printf ( Toplam= %d,z); diğer bir önemli direktif ise #include # include <dosya ismi> bu direktif ile belirtilen dosya içindeki makro komutların (direktifler),global tip tanımlamalarının fonksiyon tanımlamaları ve fonksiyon kütüphane dosyalarında, değişken ve sembolik sabitleri hafızaya yüklenir ve program içinde kullanılır. 27

#include <stdio.h> direktifi ile STDIO.H dosyası içindeki standart giriş ve çıkışlar için ihtiyaç duyulan makro komutları fonsiyon kütüphane dosyalarında fonksiyonların kullanımı için gerekli olan fonsiyon prototipleri, değişken ve sembolik sabitleri hafızaya yüklenir. Ve program içinde kullanılabilir hale getirilir. #include <math.h> #define PI 3.1415 float radyan, derece=45.0; main() radyan = derece (PI/180); / Dereceyi radyana çevirme */ printf ( sonuc=%f, sin(radyan)); Turbo C de stdio.h gibi sonu.h ile biten 29 dosya mevcuttur. C de bu dosyalara Başlık Dosyalar denir. Bu dosyaların 14 ü standart C olarak kabul edilen ANSI C nin dosyalarıdır. 3.1.2 DEĞİŞKEN TANIMLAMALARI Main içinde kullanılacak olan değişkenlerin tip bildirimleri, main den önce veya main içinde yapılabilir. Eğer tip tanımlamaları main içerisinde yapılırsa bu tanımlanan değişkenler sadece tanımlandığı main nin içinde kullanımı sadece tanımlandığı yerden itibaren program sonuna kadar geçerlidir. Aşağıdaki örnekte tanımlanan değişkenlerden sadece f ve str, main içinde kullanılabilir. X değişkeni main içinde kullanılamaz, çünkü main den sonra tanımlanmıştır. Ör: #include <stdio.h> float f=3,1; char str [100] = Zoom ; main() int a=0; printf ( %f%s%d,f,str,a;) char x= $ ; Eğer char x= $ tanımından sonra bir fonksiyon daha tanımlandı ise, bu durumda x değişeni bu fonksiyon için geçerlidir ve kullanılabilir. Fakat main içinde kullanılmaz. 28

Ör: #include <stdio.h> float f= 3,1; void yaz () char x= $ ; printf( %c,x); main () int a=0; printf ( %f %d, f,a); yaz(); Burada tanımlanan f değişkeni programın en tepesinde tanımlandığı için main ve yaz fonksiyonları içinde kullanılabilir. Fakat x değişkeni sadece yaz fonksiyonu için geçerlidir. Fonksiyon içinde tanımlanan değişkenler sadece tanımlandıkları fonksiyonun içinde kullanılabilir. Aşağıdaki örnekte a değişkeni main dışındaki başka bir fonsiyon içerisinde kullanılmaz. Örneğin aşağıdaki örnekte c fonsiyonu içinde a ya 100 değeri atanmıştır. Burada iki hatalı durum vardır: birincisi a değişkeni main içinde tanımlandığı için, ikincisi ise c fonksiyonu içindeki a değişkeninin tanımlanmadan önce kullanılmasından dolayıdır. /* Yanlış */ /*doğru*/ c() int a=0; c() a=100; a=100; main main() int b=20, a=0; c(); int b=20; c(); printf ( %d,%d,a,b); printf( %d,%d,a,b); 3.1.3 FONKSİYON PROTOTİPLERİ Fonksiyon tanımlamaları, main den önce veya sonra yapılabilir. Veya kullanılan fonsiyonlar Turbo C nin ilgili fonksiyon kütüphane dosyalarında (*.lib dan) bulunabilir. Fonksiyon prototiplerinin program içinde verilmeleri iki durumda gereklidir: 29

1. Kullanılan fonksiyon, fonsiyon kütüphanesinden secildiyse. 2. Fonksiyon tanımlamaları main den önce yapılırsa Eğer fonksiyon tanımlamaları main den önce yapılsaydı, prototipinin verilmesine gerek yoktur. Fonksiyon prototipleri kısaca fonksiyon bildirileri de denir. Örnek olarak power() fonksiyonu ve prototipi aşağıdaki gibidir. Fonksiyon tanımlaması: Int power (int x, int y); int i; p=1; for (i=1; i<=y; ++i) p*=x return p; Fonksiyon prototipi: int power (int x, int y); Eğer fonksiyon main den sonra tanımlandıysa, prototipi fonksiyona giren ve fonksiyondan çıkan değerlerin kontrolü için main den önce verilir. Fonksiyon tanımlaması main den önce verilirse fonksiyon prototipinin kullanımı seçimliktir. #include <stdio.h> int x,y,z; oku() scanf ( %d,%d,&x,&y); topla() oku(); z = x + y; main() topla(); printf ( %d+%d=%d,x,y,z); 3.2 PRİNTF ÇIKIŞ FONKSİYONU Turbo C de bir değişkenin veya işlemin değeri ekrana yazmak için kullanılan fonksiyonların tümünün çıkış kaynağı printf fonksiyonudur, stdio.h dosyası içinde kullanılır. Bu fonksiyonun yapısı basitçe aşağıdaki gibidir: 30

printf ( Format stringi,değişken listesi); Açıklamalar Şimdi bu fonksiyonun parantezler arasında kalan kısmının yapısını sırası ile inceleyelim. 3.2.1 ÇIKIŞ FORMAT STRİNGİ Format stringi, ( ) ile başlar ve yine ( ) ile son bulan karakterler topluluğudur. Format stringi genel olarak üç kısım içerir. Açıklama kısımları Çıkış formatının belirtildiği kısımlar Escape düzeninin verildiği kısımlar Bütün bunlar ekrana neyin ne biçimde yazılacağı belirtirler. Bunlar sırasıyla Açıklama kısmı seçimliktir ve ekrana doğrudan basılırlar. Değerin ekrana basılması sırasında bunların hiçbir etkisi yoktur. Çıkış formatının belirtildiği kısım. % işaretini takiben bir veya birkaç karakterden oluşur. Bu karakterler ekrana basılacak değerin ne şekilde (tipte) yorumlanacağını saptarlar. Escape düzenin verildiği kısım ise \ işaretini takiben bir veya birkaç karakterden meydana gelir ve program içinde özel anlam içerirler. Bunların kullanılması seçimliktir ve ancak değerin basılacağı konuma bir etkisi vardır. Printf fonksiyonun kullanılması bir örnek olarak; Printf( a nin b ye oranı %f dir. \n, oran); Burada sırası ile A nın b ye oaranı : açıklama kısmı %f : çıkış formatı dir. : açıklama kısmı \n : escape düzeni karakteridir. oran : değeri basılacak değişkendir %f, oran değişkenin değerinin ekrana basılmasının gerçel sayı formunda olduğunu \n ise en son dir. Açıklama stringi ekrana basıldıktan sonra kursorün bir alt satırın başına konumlanması gerektiğini belirtir. 31

Çıkış formatı Escape düzeni karakterleri Printf ( a nın b ye oranı %f dir. \n,oran); çıkış değişken formatı oran değişkenin değeri 0.141548 ise ekrana a nın b ye oranı 0,141568 dir. Basılacaktır. Eğer değerin üstel biçiminde ekrana basılması istenirse %f yerine %e formatı kullanılabilir. Printf ( a nın b ye oranı %edir. \n,oran); Bu durumda ekrana çıkacak görüntü, A nin b ye oranı 1.41548e-01 dir. olacaktır. Yukarıdaki örneğe göre printf fonksiyonu sırası ile şunları yapar. 1. İlk önce a nin b ye oranı, stringini bir açıklama olduğu için doğrudan ekrana basar. 2. %e formatı ile karşılaştırıldığında, oran değişkenin değerini üddrl formata getirir ve ekrana basar. 3. dir. Açıklama stringini basar. 4. \n ile kursoru bir alt satırın başına konumlandırır. #include<stdio.h> float a,b,oran; main() a=22; a=7; oran=a/b; printf ( a nın b ye oranı %f dir. \n,oran); printf ( a nın b ye oranı %e dir. \n,oran); 32

3.2.2 ÇIKIŞ FORMAT KAREKTERLERİ Tüm format karakterleri % işareti ile başlar ve bunu bir veya birkaç harf takip eder. Bu harf ekrana çıkışın hangi formda olacağını veya değerin nasıl yorumlanacağını belirtir. Bu karakterlere Tip karakterleri veya Format Kontrol Karakterleri denir. Bunlardan önemli olanları aşağıda verilmiştir. Numerik Değerler: d işaretli tamsayı i işaretli tamsayı u işaretsiz tamsayı f gerçel sayılar (float) e üslü sayı ld long tamsayı lf double gerçel sayı. Çıkış Formatları Karakter için: c tek karakter s string % - % işareti 3.2.3 ESCAPE ÜZENİ KARAKTERLERİ Bir C programının yazılması normal olarak bir editörde yapılır. Editör programcını9n klavyeden bastığı tuşları arka arkaya ekleyerek programı ortaya çıkarır. Ne varki editör basılan tuşların bazılarını kendisine gösterilen bir komut olarak yorumlar; tab, backspace, enter, del gibi. Bu yüzden programın yazılmasında bazı tuşlar klavyeden yazılamaz. ayrıca C de bazı karakterler özel anlamlara içerir (?,,é v.b). Bu karakterlerin string ve karakter ifadelerinin içinde kullanılması hata hatalara sebep olur. Çünkü derleyici bunları özel anlamlarıyla yorumlar. Bu yüzden bu karakterlerden dolaylı yoldan ifade edilir. Bu karakterlere escape düzeni karakterleri denir. Escape Düzeni Karakteri: \n yeni satır \r satır başı(aynı satır) \b bir kolon geri \a bip sesi \t tab (yatay) \v printer için yeni satır başı \f printer için yeni sayfa başı \\ \ karakteri \ karakteri \ karakteri \?? karakteri \0 Null karakteri 33

3.3 SCANF GİRİŞ FONKSİYONU C de değişken alanlarına bir değer okumak için kullanılan fonksiyonların tümü scanf() fonksiyonuna benzer. Bu fonksiyonun yapısı basitçe aşağıdaki gibidir. Scanf(Format Stringi, Adres Listesi); Burada format stringinin yapısı, giriş fonksiyonu olan printf in aynısıdır. Format stringindeki % işaretini izleyen giriş format karakteri giriş yapılacak değişkenin tipine göre hafızada ayrılan alanlara uygun olarakl girişin hangi formda olacağını belirtir. Format stringinden sonra gelen adres listesi, girişi yapılacak değişkenlerin hafızasındaki adreslerini belirtir. Programcının değişkenlerin buı adreslerini önceden bilmesi mümkün olmadığından bu adreslerin saptanması Turbo C derleyicisi tarafından yapılır. Bunun için değişkenin önüne & koymak yeterlidir. Adres editörü &, sadece nümerik değişkenler için kullanılır. String değişkenler & adres opertörünün kullanılmasına gerek yoktur(kullanılırsa bir hata meydana gelmez). İnt a; main() printf( a = ) ; scanf( %d, &a); printf( girilen deger => %d \n, a); burada &a adresindeki iki baytlık lgeye %d ile girişin işaretli tamsayı biçiminde olacağı belirtilir. Scanf( %d, &a ) ; Dikkat edileceği üzere scanf in format stringi içinde n/ karakteri kullanılmamıştır. Bunun kullanılmasına gerek yoktur. Çünkü değer girişi tamamlanıp ENTER tuşuna basılınca kursor kendiliğinden bir alt satırın başına gelecektir. Ör: char ad-sayad[30]; printf ( Adınız ve Soyadınız: ); scanf ( %s,ad- soyad); printf ( Merhaba %s! \n,ad-soyad); Adınız ve Soyadınız: Mersin Meslek Merhaba Mersin Meslek 34

3.3.1 GİRİŞ FORMAT KARAKTERLERİ Format stringi içinde % işaretini izleyen karakterler bellirli bir tipe sahip değişkenine değer girişinin hangi formda olacağını belirtilir. Bu karakterlerden önemli olanları aşağıda verilmiştir. Giriş formatı karakterleri: d işaretli tamsayı D long işaretli tamsayı u işaretsiz tamsayı U long işaretsiz tamsayı e üslü gerçel sayı f float gerçel sayı lf double gerçel sayı c tek karakter s string 3.4 OPERATÖRLER Operatörler belli bir amaca yönelik olarak bir bilgiyi daha değişik bir forma sokan veya iki bilgiden yeni bir bilgiden yeni bir bilgi elde edilmesini sağlayan sembolik araçlardır. Bunların en yaygın olarak kullanılanı matematiksel operatörler olan toplama çıkarma, bölme ve çarpmadır. Turbo C de operatörler genel olarak üç ana guruba ayrılabilir. Aritmatiksel Operatörler: bu operatörler nümerik değerlerin işlenmesinde kullanılır. * / % + - ++ -- + - & ^ ~ << >> += -= *= /= %= >>= <<= &= = ^= ilişkilendirme ve mantıksal Operatörler: İlişkilendirme ve operatörleri iki değerin karşılaştırılmasında kullanılır. Karşılaştırılmanın Doğru veya yanlış olmasına göre nümerik değer üretirler. > >= < <= = = = mantıksal operatörler mantık değerleri olan Doğru ve Yanlış değerlerini işleyerek yeni mantıksal sonuçlar üretirler. &&! 35

diğer Operatörler: Yukarıdaki iki gruba ek olarak C de bazı özel operatörler vardır. Bunlar: = atama operatörü?: üçlü koşul operatörü & adres operatörü * dolaylı operatör ; ifade sonu operatörü, virgül operatörü sizeof boyut operatörü (tip) tip operatörü /**/ açıklama operatörü 3.4.1 ATAMA OPERATÖRÜ Bir değeri hafızateki bir değişkene atamak için çeşit (=) karakteri kullanılır. Bu sembol sağındaki değeri solundaki değişkene atar. Bu yüzden atama operatörünün sağındaki bir değer her zaman var olmalıdır. Bu değer bir sabit ifadesi veya mevcut bir değişkenin o anki değeri olabileceği gibi sabitleeden ve değişkenlerden oluşmuş bir işlem topluluğu da olabilir. 3.4.2 ARİTMETİK İŞLEM OPERATÖRLERİ Zengin bir operatör grubuna sahip Turbo C de nümerik değerler olan tam sayılar ve gerçel sayıların işlenmesi için gerekli olan bütün operatörler mevcuttur. Özellikle programda en yaygın olarak kullanılan operatörler aritmetik operatörlerdir. C de kullanılan 5 tane aritmetik operatör vardır. Aynı şekilde matematik değer üreten fakat bit seviyesinde işlem yapan 6 tane daha aritmetik operatörü vardır. - ikili operatörler C de beş tane ikili aritmetik operatörü vardır. Bu operatörler +, -, *, / % mod operatörler Yukarıdaki operatörlerin sonundaki % (Modulo) operatörü, iki tamsayı değerinin bölünmesi, sonucunda elde edilen kalanın hesaplanmasında kullanılır; örneğin, (10%3)ün sonucu 1 dir. Bölme operatörünün kullanılmasında dikkat edilmesi gereken bir husus vardır; bir tamsayının diğer bir tamsayıya bölünmesi sonucunda elde edilen değer daima daima bir tamsayı olacakır. Örneğin, (10/3) ün sonucunda 3 değeri elde edilir. Sonucun 3:333333 çıkması için ifadenin (10.0 / 3.0) olarak gerçel sayı formunda yazılması gereklidir. C de üs alma operatörü yoktur. Fakat bunun yerine getirilmesini sağlayan pow() olarak adlandırılan bir fonksiyon mevcuttur. 36

float x=1.89, y=4.48, x; main() z=x +y; /* z=1.89+4.48*/ z=x-y; /*z=1.89-4.48*/ z=x*y; /*z=1.89*4.48*/ z=x/y; /* z=1.89/4.48*/ z=x%y; /* yanlıştır çünkü tamsayılarda % alınır */ a=10%3 1 dir. Üs alma pow(x,y); x y - Tekli (unary) operatörleri C de aritmetik ifadelerin işlenmesinde -, +, -- ve ++ olmak üzere 4 tane unary operatör kullanılır. -: negatif +: pozitif ++: bir arttrıma --: bir azaltma Ör: b=300 a= -b burada b nin önündeki eksi unary eksi operatörüdür ve a nın değerinin 300 değeri olmasını sağlar. Eğer b=300 olursa a=-(-300)ve a=300olacaktır. Burada işlenen değişkenin tipi tamsayı veya gerçel sayı olmalıdır. Unary + operatörü ise unary operatörüne karşılık olarak yapılmıştır. Fakat kullanılmasının hiçbir etkisi olmaz. int t=10, u; float k=-1.89,i; main() u=-t; /*u=-10*/ i=k; /*i=1.89*/ unary operatörlerin en iyi bilinmesi gereken ve en kullanışlı olnaları artım ++ ve azaltım operatörleridir. Bu operatörler gerçel sayı veya tamsayı tipine sahipbir değişken değerine 1 eklemek veya bu değerden 1 çıkartmak için kullanılır. Bu operatörlerinin her birinin iki kullanım vardır. Bu kullanımlara göre işlem önceliği ve işlem yönü değişir. Bunu aşağıdaki örneklerle açıklayabiliriz. 37

Bu ifadelerde artım (+ +) ve azalım (- -) operatörleri b ve d değişkenlerinin sağ tarafında kullanılmaktadır. Bu durumda ifadelerin icrası şu şekilde olur önce b, a ya atanır. Sonra b değişkenin değeri bir artırılır. İkinci ifadede önce d değeri C ye atanır. Sonra d değişkenin değeri bir azaltılır. Yani işlemler, a = b; b = b + 1; c = d; d = d + 1; sırası ile gerçekleştirilir. a = ++b; c = --d; bu ifadelerde ise ++ ve operatörleri değişkenin sol tarafında kullanılmıştır. Bu durumda ifadelerin icrası aşağıdaki gibi olur. İlk ifadede önce b nin değeri 1 artırılır ve sonra yeni değere sahip b değeri a ya atanır. İkinci ifadede ise buna benzer olarak d nin değeri 1 azaltılır ve c ye atanır. Yani işlemler, b = b + 1; a = b; d = d 1; c = d; sırası ile gerçekleşir. Bu iki durumu daha iyi kavramak için sayısal değerlerle çalışalım; b = 3 alınırsa sırasıyla a = ++b ve a = b++ ifadelerinin icrası sonucunda a ve b değişkenlerinden sahip olacağı değerler nelerdir? a = ++b b = b + 1 b = 4 a = b a = 4 a = b++ a = b a = 3 a = b + 1 b = 4 -- ve ++ operatörlerin kullanılmasında, bu operatörlerin aynı zamanda atama işlemi de yaptıkları dikkat alınarak bu operatörlerden önce veya sonra değer atamasını yapılabileceği bir adres veya değişken bulunmasına dikkat edilmelidir. a=b++ a=b b=b+1 a=++b b=b+1 a=b a=4,b=5 için örnekler: c= a++ +b c=++a b c=a+b = 4+5=9 a=a+1=4+1=5 a=a+1 = 4+1 =5 c= a - b = 5-5 =0 38

c= --a +b-- c=++a * --a a=a-1 a=a-1 = 3 c=a+b a=a+1 = 5 b= b-1 a * a =15 c=++a + -(++a); c= a++ +b a=a+1 c=a+b = 9 a=a+1 a=a+1 = 5 c=a+(-a) =0 3.4.3 BİT SEVİYE OPERATÖRLERİ C dili dizayn edilirken amaç olarak Assembly dilinin yerini alması planlandığından Assembler da yapılabilen bit işlemleri C de bit-seviye operatörleri ile desteklenmektedir. Bit seviye operatörleri bir tamsayı tipine sahip değerin bitlerini test etmek, değiştirmek sağa veya sola kaydırmak için kullanılır. Bu işlemler gerçel sayılar için geçerli değildir. Gerçel sayıları bit seviye operatörleri ile işlemek için bu değerlerin işgal ettikleri alanların tamsayı biçiminde yorumlanması gerekir. İstenirse bu da union deyimi yardımı ile gerçekleştirilebilir. Bit seviye operatörlerin tümü aşağıda verilmiştir : & and or ^ ex-or(xor) ~ not << sola kaydırma >> sağa kaydırma - AND operatörü (&) İki değerin bitlerini karşılıklı olarak karşılaştırır. Bitlerden biri 0 ise sonuç sıfırdır. x y x&y 0 0 0 0 1 0 1 0 0 1 1 1 39

- OR Operatörü ( ) İki tamsayı bitlerinin karşılıklı olarak teker teker karşılaştırılır. Ve bitlerin herhangi biri 1 ise 1 değerini, aksi durumda 0 değerini üretir. - XOR Operatörü (^) x y x y 0 0 0 0 1 1 1 0 1 1 1 1 İki değere ait bitleri karşılıklı olarak teker teker karşılaştırır. Karşılaştırılan bitler aynı ise 0 değeri farklı ise 1 değerini alır.(^) - NOT operatörü (~) x y x^y 0 0 0 0 1 1 1 0 1 1 1 0 Bu operatör, verilen bir tamsayı değerin bitlerinin her birinin tersini alır. Yani bitin değeri 0 ise 1, 1 ise 0 değerini alır. - Sağa kaydırma >> x ~x 0 1 1 0 Sağa kaydırma operatörü (>>) bir tamsayı bitlerinin verilen değer kadar sağa kaydırılmasını sağlar. A= B>> 2 kaç bit, kaç defa kaydırma işlemi yapılacaksa buraya yazılır. A=B k 0 1 1 0 1 1 0 1 B >> 1 0 0 1 1 0 1 1 0 1 8 bitlik işaretli tamsayı (char) için sağa doğru bir defa kaydırmanın şematik göstergesi 40

- Sola kaydırma << 0 1 1 0 1 1 0 1 0 B<< 1 1 0 1 1 0 1 0 0 A= B x 2 k Sola kaydırma operatörü (<<) bir tamsayı bitlerinin verilen değer kadar sola kaydırılmasını sağlar. Sola doğru bitlerin kaydırılması ile boşalan bitlere 0 yerleştirilir. Tamsayı << k Matematiksel anlamda bitlerin bitlerin sola doğru her kaydırılışı 2 ile çarpılması demektir. Bitlerin sola doğru k kere kaydırlması o sayının k tane 2 nin çarpılması demektir. Aşağıdaki programda sayının binary karşılığı bulunmaktadır. #include <stdio.h> long sayi; int bit[33], i; main() clrscr(); printf ( bir sayı giriniz: ); scanf ( %d,&sayi); for (i=1;i<32=;++i); bit[i]=(unsigned long) (sayi <<(32-i))>>31; for (i=32;i>0;--i) printf ( %d, bit[i]); getch(); 3.4.4 BİLEŞİK ATAMA OPERATÖRLERİ: C dili birkaç operatörü içeren ifadelerin daha kısa bir biçimde yazılmalarına izin verilir. Bu durum, atama operatörü ile binary operatörlerinin birlikte kullanılması durumunda söz konusudur. Eğer bu operatörleri içeren ifade aşağıdaki biçimde ise, Değişken (1) = değişken (1) OPERATÖR ifade 41

Bu ifade aşağıdaki biçime geçirilerek daha kısa olarak kullanılabilir. Değişken (1) OPERATÖR = ifade Bu duruma göre birleşik atama operatörlerin tam listesi aşağıdaki tabloda verilmiştir. X=X+Y X+=Y X=X%Y X%= Y X=X-Y X-= Y X=X&Y X&= Y X=X>>Y X>>=Y X=X*Y X*= Y X=X Y X = Y X=X<<Y X<<=Y X=X/Y X/= Y X=X ~Y X~= Y Burada y nin 1 olması durumunda örneğin toplama için x=x+1 ifadesi yerine x+1=1 veya ++x veya x++ kullanılabilir. Bu atama operatörlerinin kullanılması sırasında dikkat edilmesi hususlar vardır.örneğin X= X*20 +1; İfadesi X * =20+1; Şeklinde yazılamaz Çünkü bu durumda operatörlerin öncelik sırasında + operatörü = operatöründen daha yüksektir. Bu itibar ile X=20+1 ifadesi x=x*(20+1) olurki x=x*20+1 den farklıdır. 3.4.5 KARŞILAŞTIRMA OPERATÖRLERİ İki büyüklüğün karşaılaştırmasında kullanılırlar. İfade doğru ise sonuç 1, yanlış ise sonuç 0 olur. > büyük >= büyük eşit < küçük <= küçük eşit = = eşit!= eşit değil 3.4.6 MANTIKSAL OPERATÖRLER Mantıksal operatörler daha ziyade ilişkilendirme operatörleri ile beraber kullanılırlar. Fakat işlenen eğerlerin 0 olması durumunda bu ifade Yanlış 0 dan farklı olmalsı durumunda ise doğru oalrak ele alınır. Mantıksal operatörler C de birden fazla ifadelerin test edilmesi için kullanılır. C de kullanılan mantıksal operatörlerin listesi aşağıda verilmiştir. && and or ör: c= a > b &&!(a>0)! not and ve or veya not değil 42

-! Not mantıksal operatörü İlişkisel bir ifadenin sonuncunda elde edilen doğru (0) veya yanlış (1) değerinin tersini almak için kullanılır.!(0) Doğru(1)!(1) Yanlış(0)!(1==1) Yanlış(0)!(1<0) Doğru(1) - && And mantıksal operatörü İki mantıksal ifadeyi birbirine bağlayan bu operatör mantıksal ifadelerden ikisinde doğru olması halinde doğru(1), diğer tüm hallerde yanlış (0) değerinin üretir. (20>1) &&(0==0) Doğru (1) ( a == b )&&(-1>-2) Yanlış(0) bu tür birleşik ifadelerde çoğu zaman her iki ifadeyi de dikkate almak gerekmez. İfade1&&ifade2 İfadelerin birinin yanlış olması tüm ifadenin yanlış olmasına sebeb olur. Birinci ifadenin yanlış olması halinde ikinci ifadenin doğru/yanlış olmasının bir önemi yoktur. Bu yüzden TurboC de birinci ifade yanlış ise ikinci ifade icra görmez. Yani karşılaştırma ifadesinde bir kısa devre meydana gelir. İfade ifade2 ifade1&&ifade2 0 [0] Yanlış 0 [1] Yanlış 1 0 Yanlış 1 1 Doğru bu tabloda [] işareti kısa devrenin meydana geldiği yeri göstermektedir. - Or mantıksal operatörü İki mantıksal ifadeyi birbirine bağlayan bu operatör, && operatörüne benzemekle beraber mantıksal ifadelerin ikisinde yanlış olması halinde yanlış (0), diğer tüm hallerde doğru(1) değerini üretir. (20>1) (0==0) Doğru(1) ( a == b ) (-1>0) yanlış(0) 43

burada birinci ifade doğru iase ikinci ifade icra görmeyecektir. && operatörüne olduğu gibi burada da kısa devre meydana gelecektir. Çünkü Or işleminde birinci ifadenin doğru olması tüm ifadenin doğru olmasına sebep olacaktır. İfade ifade2 ifade1&&ifade2 0 0 Doğru 0 1 Doğru 1 [0] Doğru 1 [1] Yanlış bu tabloda [] işaretleri kısa devrenin meydana geldiği yerleri göstermektedir. - İlişkisel ve mantıksal operatörler için işlem önceliği Hem kişisel hemde mantıksal operatörler (! Ve ~unary NOT operatörleri hariç) aritmetiksel dört işlem operatörlerinden daha düşük bir işlem önceliğine sahiptir. İfade Eş anlamı Öncelik sırası x>y+z x>(y+z) + > x&y z (x&y ) z & x=y z x= (y z) = X&&y z (x && y) z && 3.4.7 TERNARY (3 LÜ KOŞUL OPERATÖRÜ) Üçlü koşul operatörü (?:), bir ifadenin doğru veya yanlış olmasına göre farklı ifadelerin yerine getirilmesini sağlar Genelde ifade seçiminde kullanılan bu operatörler işleyişi aşağıdaki gibidir. Kullanımı: İfade1? ifade2 : : ifade 3 Ör : Z = (X>Y)? X : Y Buna göre ifade1 doğru ise ifade2 yanlış ise ifade3 icra olur. doğru ifade2 ifade1 yanlış ifade3 44

3.4.8 POİNTERLER Turbo C ye yeni başlayanlar için pointerlerin kullanılması çok karışık ve sıkıcı görünmektedir. Bunlar programcıların pointer lara deneyimlerinin olmayışı veya kullanılan bilgilerin işlenmesinde pointer deneyimlerinin olmayışı veya kullanılan bilgilerin işlenmesinde pointer ların kullanımın gereksiz olduğunun düşünülmesinden kaynaklanır. C ile çalışan kişilerde belli bir C program mantığı oluştuktan sonra profesyonel programcılığa geçişte pointer ların kullanımına büyük bir gereksinim vardır. Bu yüzden pointerların çok iyi bir şekilde bilinmesi gerekir. Tanım olarak bir pointer, değişkenin adresini içeren değişkendir. Tipik bir bilgisayar ayrı ayrı veya bitişik gruplar halinde idare edilebilen ardışık olarak sayısallaştırılmış veya adreslendirilmiş hafıza hücrelerinin bir dizinine sahiptir. Her pointer bir başka hafıza hücresini gösteren bir hafıza alanıdır. &c char c,a; char *p; p=&c; 15000 &p 15000 Burada c char tipinde bir değişken ve p ise char tipinde bir pointerdir. p pointer değişkenine c nin içeriği ( A ) değil, c nin adresi olan (15000) değeri atanmaktadır. Böylelikle p nin c yi göstermesi sağlanır. int x= 1, y=20, z[3]; int *pi; burada pi int tipindeki bir bilgiyi gösterebilen bir pointer değişkenidir. pi = &x; x=5; x değişkenin adresi pi pointerine atanır, pi şimdi x değişkeninin adresine sahiptir ve x değişkenini gösterir. y=*pi; pi ye atanan adresin belirttiği hafıza alanındaki değer y değişkenine atanır. Diğer bir deyişle pi nin gösterdiği x değişkeninin değeri y ye atanır. Şimdi y nin değeri 5 tir. x=0; Yerine *pi=0; Yazılabilir. Bu durumda pi nin gösterdiği değişkenin adresine 0 değeri yerleştirilir. (x in değeri 0 olur.) pi=&z[0]; *pi=541; 45

bu durumda z[0]=541 olur. *(pi+1)=240; bu durumda da z[1]=240 olur. 46