Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

BİLGİSAYAR PROGRAMLAMA Ders 3: C ile Programlamaya Giriş Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.

Benzer bir sunumlar


... konulu sunumlar: "BİLGİSAYAR PROGRAMLAMA Ders 3: C ile Programlamaya Giriş Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği."— Sunum transkripti:

1 BİLGİSAYAR PROGRAMLAMA Ders 3: C ile Programlamaya Giriş Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği

2 C ile Programlama Bir C programı büyüklüğü ne olursa olsun değişkenler ve fonksiyonlardan oluşur. Bir fonksiyon, hesaplama gibi işlemlerin yapılması için gerekli olan ifadeleri ve hesaplama sırasında gereken değerleri saklamak için kullanılan değişkenleri içerir. – Genellikle fonksiyonlar hesaplamanın sonucunu return komutu ile döndürür, fakat bu detaylara sonra değineceğiz. Bütün C programları main adında bir fonksiyonu içermek zorundadır, program bu fonksiyondan başlar. main fonksiyonu içinden başka fonksiyonlar da çağırılır (bu fonksiyonlar önceden yaratılmış kütüphanelerdeki fonksiyonlar da olabilir, sizin tarafınızdan yaratılan da).

3 İlk Program #include main() { int sayi = 5; printf("sayimiz = %d", sayi); } #include komutu ile programda kullanacağımız fonksiyonların (bu programda sadece printf) ait olduğu kütüphaneyi (stdio.h : standart input/output) tanımlarız. Burada bir değişken tanımı yapılmaktadır. int değişkenin veri tipi, sayi değişkenin ismi, 5 ise değişkene atanan ilk değerdir. printf ekrana bir şey yazdırmak için kullandığımız fonksiyondur ("Merhaba Dünya" programında kullanmıştık). %d ifadesinin olduğu yerde sayı değişkeninin değeri decimal (ondalık) biçimde görünecektir. C dilinde her ifade (statement) ; ile biter. İfade bir değişken tanımı, değişkene değer atanması veya bir fonksiyon çağrılması olabilir.

4 Değişken (Variable) Programlarda kullanılan verileri saklamak ve gerektiğinde o veriler üzerinde işlem yapmak için değişkenler kullanılır. Bir değişken tanımı yapıldığında, programlama dili o değişkenin veri tipine göre istenilen büyüklükte bir hafıza bölgesini RAM’de tahsis eder. Tanımlanan değişkene bir değer atandığında, değişken için ayrılan hafıza bölgesine o değer yazılır. Eğer bir değişken herhangi bir fonksiyonun içinde değil de, örneğin main fonksiyonundan önce tanımlandıysa, o değişkene global değişken denir. Global bir değişkene programdaki tüm fonksiyonlar erişebilir.

5 Değişken Tanımlama ve Değişkene Değer Atama Değişken tanımları: int a; tamsayı türünde a adında bir değişken float b; ondalıklı sayı char c; karakter Değişkenlere değer atanması: a = 5; b = 3.75; c = 'A'; c = 65; NOT: Değişken ismi solda, atanacak değer sağda olmalıdır (5 = a; doğru değildir): a = b; a değişkenine b değişkenindeki değeri atar b = a; b değişkenine a değişkenindeki değeri atar char veri tipi aslında 8 bit tamsayı saklar. 'A' karakteri için istersek ASCII karşılığı olan 65 kullanabiliriz.

6 Değişkenlerde Kısıtlamalar Değişken isminde : ;,. / ' # [ ] ! " $ % ^ & * ( ) { } karakterleri ve boşluk karakteri kullanılamaz. Ancak _ kullanılabilir. Değişken isminin ilk karakteri harf olmalıdır. Yani değişkenler rakamla veya _ ile başlamaz (sayi2 olur 2sayi olmaz). Bir fonksiyon veya prosedürde aynı değişken ismi birçok defa tanımlanamaz (farklı fonksiyonlarda tanımlanabilir). Programlama diline ait bir komut ismi, değişken ismi olarak tanımlanamaz. Genellikle değişken isminde sınır 255 karakterdir. Faklı tipte iki değişkenin birbirlerine atanması veri kaybına neden olabileceğinden bu durumlarda tip dönüşümü fonksiyonları kullanılmalıdır. Bazı dillerde değişken isimlerinde büyük/küçük harf ayrımı yoktur (örn: VB). Abc, abc veya ABC aynı değişkeni ifade eder. C ve C# dillerinde büyük/küçük harf ayrımı vardır.

7 Sabit (Constant) Değişkenden farkı; tanımlandığı anda atanan değerinin program içinde değiştirilememesidir. Tanımlanması değişken tanımına benzer. Sadece önüne const eklenir. const float PI = ; Programda PI sabitine atanan ilk değeri sonraki satırlarda kullanabiliriz ama değiştiremeyiz. float A = PI*2; doğru PI = 3.15;hatalı

8 Veri Tipleri char8 bit büyüklüğünde tamsayı (karakter) 1 short16 bit büyüklüğünde tamsayı 2 int (long)32 bit büyüklüğünde tamsayı 2, 3 long long64 bit büyüklüğünde tamsayı 2, 3 floattek duyarlıklı (32 bit) kayan noktalı (gerçel) sayı doubleçift duyarlıklı (64 bit) kayan noktalı sayı long double128 bit (yada 80 bit) kayan noktalı sayı 1) Her karakterin aslında tamsayı olarak saklandığını belirtmiştik ('A' = 65, 'a' = 97) 2) short yerine short int, long yerine de long int yazılabilir. 3) Eskiden int 16 bit (=short) iken, yeni derleyicilerde 32 bit (=long) olmuştur.

9 İşaretsiz Tamsayılar 8 bit büyüklüğünde tamsayı değişken (char) -128 ile +127 arasındaki, 16 bit büyüklüğünde (short) ile arasındaki, 32 bit olan (int) ise ile arasındaki sayıları temsil edebilmektedir. Eğer değişkende negatif sayılar saklanmayacak, sadece pozitif sayılar saklanacak ise tamsayı veri tiplerinden önce unsigned (işaretsiz) yazarak değişkenin alabileceği en büyük değeri 2 kat arttırmış oluruz (char: 0 ile 255, short: 0 ile , int: 0 ile aralığında olur). Negatif sayıların C dilinde 2’ye göre tümleyen alma yöntemi ile saklandığını daha önce belirtmiştik. Dolayısıyla 8 bitlik dizisi char tipinde değişkende ise -1, unsigned char tipi değişkende ise 255 sayısını temsil eder.

10 #include komutu bir kütüphanenin içerdiği bilgilerin (fonksiyonlar, sabitler, …) derleme aşamasında programa dahil edilmesini sağlar. Standart Girdi/Çıktı (G/Ç) kütüphanesi (stdio.h), en çok kullanılan G/Ç (I/O: Input/Output) fonksiyonlarını içerir. Varsayılan girdi aygıtı klavye, çıktı aygıtı ise ekrandır. stdio.h içinde dosyalara bilgi yazan ve dosyalardan bilgi okuyan fonksiyonlar dosyalama dersinin konusudur. Matematiksel işlemler ile ilgili fonksiyonları içeren math.h ve karakter dizileri ile ilgili fonksiyonları içeren string.h kütüphanelerini de ilerde göreceğiz.

11 Çıktı Fonksiyonları (Ekranda Gösterim) printfHer veri tipi ile kullanılabilen ve verilerin farklı biçimlerde gösterilmesini sağlayabilen en çok kullanılan komutlardan biridir. putsSadece karakter dizisi (string) görüntüleyebilir. putcharSadece bir karakteri ekranda görüntüler. putchar(65); putchar(10); putchar(13); A karakterini ekranda görüntüler imleci alt satıra taşır (LF: line feed) satır başına taşır (CR: carriage return)

12 Girdi Fonksiyonları (Klavyeden Veri Alma) scanfHer veri tipi ile kullanılabilir. Kullanıcı veri girişini ENTER tuşu ile tamamlar. getsSadece karakter dizisi alabilir. getcharTek bir karakter değeri aldığı için ENTER’a basılmasını beklemez. Bu komut bazen değer almak amacıyla değil, kullanıcı herhangi bir tuşa basana kadar programı bekletmek amacıyla kullanılabilir (genellikle programların sonunda). NOT: Programda scanf kullanıldıysa daha alt satırlardaki ilk getchar işlevini yerine getiremez (ikincisi çalışır). Bu soruna neden olmayan conio.h kütüphanesindeki getch komutu kullanılabilir (Fakat bu kütüphane UNIX işletim sistemi ile uyumsuzdur).

13 İkinci Program #include main() { int sayi; printf("Bir sayi giriniz : "); scanf("%d", &sayi); printf("Girdiginiz sayi = %d", sayi); } İlk programımızda ilk değer olarak sayi değişkenine 5 değerini atamış ve ekrada göstermiştik. Bu programda, ilk değer atanmamış, sayi değişkenine kullanıcı scanf fonksiyonunu kullanarak değer girmiştir. İlk printf silinip, yerine puts yazılırsa ne olur? Tek fark puts ekrana string’i gösterdikten sonra imleci alt satırın başına alır (printf’te bunun için \n özel simgesi kullanılır). İkinci printf yerine puts kullanılamaz.

14 Parametre (Argüman) Nedir? Fonksiyonlar isimlerinden sonra gelen parantez içinde farklı değerler verilerek çağrılabilir. Virgül ile birbirinden ayrılan bu değerlere fonksiyonun parametreleri denir. printf fonksiyonu en az bir parametre (format string’i) almalıdır. Eğer bir değişkenin değeri ekranda gösterilecek ise ikinci parametre olarak o değişken yazılır ve ilk parametre olan string içinde %d gibi bir bildirim kullanılarak o değişkenin o konumda hangi veri tipinde gösterileceği belirtilir. scanf fonksiyonu klavyeden girilen veriyi birinci parametresi (format string’i) içindeki veri tipinde ikinci parametre olarak verilen adrese yazar. & operatörü kendisinden sonra gelen değişkenin adresini verir (& kullanılmaz ise programın çalışmayacağını deneyerek gözlemleyebilirsiniz).

15 Operatörler Aritmetik işlem operatörleri: +-*/% Karşılaştırma operatörleri: >===!= Mantıksal operatörler: &&|| Atama operatörleri: =+=-=*=/=++-- mod alma eşit değil eşit veya ve Değişkenin değerini arttırma, azaltma, vs için kullanılırlar. Örneğin: A += 5; ile A = A + 5; aynıdır. Değişkenin değerini 1 arttırma, 1 azaltma

16 Toplama Programı #include main() { int A, B, C; printf("ilk sayiyi girin : "); scanf("%d", &A); printf("ikinci sayiyi girin : "); scanf("%d", &B); C = A + B; printf("Toplami = %d", C); } Başla C Dur A B C=A+B Akış şemasında bu iki printf ile ilgili bir gösterim bulunmamaktadır. Bu iki satırın amacı kullanıcının hangi değere bilgi girdiğini fark etmesini sağlamaktır.

18 printf ve scanf ile kullanılan veri tipi belirteçleri ve özel işaretler: Veri tipi belirteçleri %dİşaretli onluk tabanda sayı %uİşaretsiz onluk tabanda sayı %cKarakter %sKarakter dizisi %oİşaretsiz sekizlik tabanda sayı %xİşaretsiz onaltılık tabanda sayı %fKayan noktalı (float) %lfKayan noktalı (double) printf ile kullanılan işaretler \nAlt satıra iner \bİmleci bir sola kaydırır \rReturn (Enter) tuşu \t Tab (Sekme) tuşu \aZil sesi \vBir sonraki satıra geçiş

19 printf ile formatlı yazdırma: Değişken tanımları: int x = ; float y = 22.0 / 7.0; printf("[%10d]\n",x); 10 hanelik yere rakamlar sağa dayalı olarak yazılır. 6 haneli rakam yazılacağından ilk 4 hane boş kalacaktır. Ekran çıktısı: [ ] printf("[%-10d]\n",x); ‘-’ işaretinden dolayı sağa değil sola dayalı yazılır. Dolayısı ile son dört hane boş kalacak: [ ]

20 printf ile formatlı yazdırma: printf("[%2d]\n",x); sayısı 6 haneli olduğu için 2 haneye sığmaz, dolayısı ile tamamı yazılır. Ekran çıktısı: [123456] printf("[%+-10d]\n",x); Rakamın başına ‘+’ işareti eklenir. Artı işaretinden dolayı sondan 3 hane boş kalacaktır: [ ] printf("[%9.3f]\n",y); 9.3f: 9 hanelik yere noktadan sonra 3 hane olacak şekilde sağa dayalı olarak yaz. Nokta işareti de bir hane yer kaplayacak, dolayısıyla ilk 4 hane boş kalacak: [ 3.143]

21 Dört İşlem Programı #include main() { int a, b; printf("ilk sayiyi girin : "); scanf("%d", &a); printf("ikinci sayiyi girin : "); scanf("%d", &b); printf("Toplam : %d\n", a + b); printf("Fark : %d\n", a - b); printf("Carpim : %d\n", a * b); printf("Bolum : %d\n", a / b); } ilk sayiyi girin : 35 ikinci sayiyi girin : 7 Toplam : 42 Fark : 28 Carpim : 245 Bolum : 5 İlk sayı ikinci sayıya tam bölünmeseydi ne olurdu? Bu durumda bölümün sonucu 4.99 bile olsa 4 gösterir. a ve b tamsayı değil de kayan noktalı sayı olarak tanımlanırsa hem ondalıklı sayı girişi yapabilir, hem de sonucu ondalıklı olarak görebiliriz.

22 Dört İşlem Programı (2) #include main() { float a, b; printf("ilk sayiyi girin : "); scanf("%f", &a); printf("ikinci sayiyi girin : "); scanf("%f", &b); printf("Toplam : %f\n", a + b); printf("Fark : %f\n", a - b); printf("Carpim : %f\n", a * b); printf("Bolum : %f\n", a / b); } ilk sayiyi girin : 5.3 ikinci sayiyi girin : 3.2 Toplam : Fark : Carpim : Bolum : Eğer ondalık kısmında 6 yerine daha az basamak görünsün istenirse printf içinde %f yerine %.2f gibi bir yazım ile 2 basamak olarak sınırlandırılabilir. Bu durumda bölüm sonucu 1.66 olarak görünür. Çarpım sonucundaki küçük hata float yerine double kullanılsaydı olmazdı ( görünürdü). Bu durumda scanf içinde %lf kullanmak gerekir.

23 Tip Dönüşümü Veritipi değişimi için özel fonksiyonlar kullanılabilir: – Örneğin atoi fonksiyonu [array to integer] bir string’i tamsayıya çevirir) Diğer bir dönüşüm cast olarak adlandırılan ve (tip adı) ifade şeklinde kullanılan dönüşümdür float sayi = 5.7; printf("%d", (int)sayi); Ekranda 5 görüntülenir (.7 için yuvarlama olmaz ondalık kısmı atılır). Eğer integer -> float dönüşümü olsaydı kayıp olmazdı. Sadece büyük veri tipi küçük olana çevrilirse (double -> float, long -> int, int -> char, …) kayıp olur.

24 Dört İşlem Programı (3) #include main() { int a, b; printf("ilk sayiyi girin : "); scanf("%d", &a); printf("ikinci sayiyi girin : "); scanf("%d", &b); printf("Toplam : %d\n", a + b); printf("Fark : %d\n", a - b); printf("Carpim : %d\n", a * b); printf("Bolum : %f\n", (float)a / (float)b); } ilk sayiyi girin : 5 ikinci sayiyi girin : 3 Toplam : 8 Fark : 2 Carpim : 15 Bolum : a ve b tamsayı olmasına rağmen tip dönüşümü sayesinde bölüm sonucu ondalıklı görüntülenir

25 Örnek 1 : Ekran çıktısı ne olur? #include main() { printf("Merhaba"); printf("Dunya"); printf("\n"); } printf("MerhabaDunya\n"); printf fonksiyonu çalıştıktan sonra satırbaşı yapmaz. Satırbaşı için \n kullanılmalıdır. Bu programdaki 3 printf 3 farklı satır olarak görüntülenmeyecektir.

26 Örnek 2 : Ekran çıktısı ne olur? #include main() { char A = 'v'; puts("deneme"); putchar('A'); putchar(13); putchar(10); putchar(66); putchar(A); }

27 Örnek 3 : Ekran çıktısı ne olur? #include main() { float sayi1 = 5.9; int sayi2 = 7; printf("%10f %10d\n", sayi1, sayi2); printf("%10.2f %10f\n", sayi1, sayi2); printf("\n%10.2f\n", sayi1 + sayi2); printf("%21s", "Edirne"); printf("\b\b\b\b\b\b\b\b\b\b\b\bTrakya"); } İlk printf’in format string’i içinde %10f ile %10d arasında bir boşluk yer aldığı için 7 sayısı ilk satırın 21. karakteridir. Örnekte görüldüğü gibi tamsayı %f ile gösterilirse sıfır görünür ve \b (backspace) geri giderken silme yapmaz (Edirne silinmiyor).

28 Alıştırma Sorusu 1 Saniye olarak verilen değeri saat:dakika:saniye olarak gösteren programı yazın (ve akış diyagramını çizin) süreyi girin (sn): 100 0:1:40 süreyi girin (sn): :16:40 süreyi girin (sn): :13:20 ÖRNEK ÇALIŞTIRMA

29 Alıştırma Sorusu 2 Başlangıç koordinatı, fırlatma hızı ve geçen süre verildiğinde bir nesnenin son koordinatını hesaplayan programı yazın ve akış diyagramını çizin (g=9.81). Başlangıç x koordinatı: -1,4 Başlangıç y koordinatı: 4,5 Fırlatma x hızı: 2,34 Fırlatma y hızı: 12,4 Geçen süre (sn): 5,6 Sonuç x koodinatı: 11, Sonuç y koordinatı: -79, ÖRNEK ÇALIŞTIRMA Türkçe karakterlerin düzgün görünmesi için programda: setlocale(LC_ALL, "Turkish"); kullanılabilir (programa #include eklenmelidir). Fakat bu durumda değerler girilirken 5.6 değil 5,6 gibi virgül ile girilmelidir.


"BİLGİSAYAR PROGRAMLAMA Ders 3: C ile Programlamaya Giriş Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği." indir ppt

Benzer bir sunumlar


Google Reklamları