Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

BİLGİSAYAR PROGRAMLAMA Ders 3: C ile Programlamaya Giriş

Benzer bir sunumlar


... konulu sunumlar: "BİLGİSAYAR PROGRAMLAMA Ders 3: C ile Programlamaya Giriş"— 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 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. #include <stdio.h> main() { int sayi = 5; printf("sayimiz = %d", sayi); } 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. Değişken bir hafıza bölgesine verdiğimiz isimdir. Değer ise o hafıza bölgesinin içeriğidir.

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 char 8 bit büyüklüğünde tamsayı (karakter) 1 short 16 bit büyüklüğünde tamsayı 2 int (long) 32 bit büyüklüğünde tamsayı 2, 3 long long 64 bit büyüklüğünde tamsayı 2, 3 float tek duyarlıklı (32 bit) kayan noktalı (gerçel) sayı double çift duyarlıklı (64 bit) kayan noktalı sayı long double 128 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 <stdio.h> #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)
printf Her veri tipi ile kullanılabilen ve verilerin farklı biçimlerde gösterilmesini sağlayabilen en çok kullanılan komutlardan biridir. puts Sadece karakter dizisi (string) görüntüleyebilir. putchar Sadece 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)
scanf Her veri tipi ile kullanılabilir. Kullanıcı veri girişini ENTER tuşu ile tamamlar. gets Sadece karakter dizisi alabilir. getchar Tek 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). Sonraki slaytta yer alan programı yazdıktan sonra, sonuna getchar ve getch uygulayarak farkı gösterelim. Visual Studio ve yeni DevC++ (5.4.1) içinden program çalıştırılırsa, program bittiğinde ekranı kapatmıyor. O nedenle bu komutlara gerek yok gibi, ama bu programın exe’si Windows gezgininden direkt olarak çalıştırılır ise sonucu görebilmek adına gerek var. Komut istemi penceresi açılıp ta oradan çalıştırılır ise yine gerek yok. Bunları tek tek gösterelim. 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 <stdio.h> 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 eşit değil ve veya Değişkenin değerini 1 arttırma, 1 azaltma 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.

16 Toplama Programı #include <stdio.h> 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); } 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. Başla A B C=A+B C Dur

17 Toplama Programı (2) #include <stdio.h> main() { int A, B; printf("iki sayi girin : "); scanf("%d %d", &A, &B); printf("%d + %d = %d", A, B, A+B); } FARKLAR: Toplam sonucu için C değişkeni yok İki sayı aynı scanf ile giriliyor Toplam sonucu gösteriminde daha çok parametre kullanımı var Başla A, B A+B NOTLAR: Kullanıcı sayıları girerken ilk sayıdan sonra space, tab veya enter tuşlarından birini kullanabilir. scanf ve printf format string’i içinde yer alan %d gibi belirteçlerin sayısı kadar değişken, sabit, değer, işlem, vs. parametre olarak verilmek zorundadır. Dur

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ı %c Karakter %s Karakter dizisi %o İşaretsiz sekizlik tabanda sayı %x İşaretsiz onaltılık tabanda sayı %f Kayan noktalı (float) %lf Kayan noktalı (double) printf ile kullanılan işaretler \n Alt satıra iner \b İmleci bir sola kaydırır \r Return (Enter) tuşu \t Tab (Sekme) tuşu \a Zil sesi \v Bir 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 <stdio.h> 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 <stdio.h> 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 <stdio.h> 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 <stdio.h> main() { printf("Merhaba"); printf("Dunya"); printf("\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. printf("MerhabaDunya\n");

26 Örnek 2 : Ekran çıktısı ne olur?
#include <stdio.h> 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 <stdio.h> 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): 1000 0:16:40 süreyi girin (sn): 8000 2:13:20 ÖRNEK ÇALIŞTIRMA

29 Alıştırma Sorusu 2 ÖRNEK ÇALIŞTIRMA
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,704000 Sonuç y koordinatı: -79,880800 ÖRNEK ÇALIŞTIRMA Türkçe karakterlerin düzgün görünmesi için programda: setlocale(LC_ALL, "Turkish"); kullanılabilir (programa #include <locale.h> 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ş" indir ppt

Benzer bir sunumlar


Google Reklamları