BLM-111 PROGRAMLAMA DİLLERİ I Ders-7 C Programlama Diline Giriş Yrd. Doç. Dr. Ümit ATİLA umitatila@karabuk.edu.tr http://web.karabuk.edu.tr/umitatilla/
C Programlama Dili Tarihçesi C programlama dili 1972 yılında Bell Laboratuarlarında Dennis Ritchie tarafından geliştirilmiştir (Dennis Ritchie daha önce Ken Thompson ile birlikte UNIX işletim sistemi ve B programlama dili üzerinde de çalışmıştır). Geliştirilme tarihi 1972 olmasına rağmen yaygınlaşması Brian W. Kernighan ve Dennis M. Ritchie tarafından 1978’de yayımlanan "C Programlama Dili" kitabından sonra olmuştur.
C Programlama Dili Tarihçesi İşletim sistemleri, gömülü sistemler, sürücü yazılımı ve hız gereken her türlü işlemde kullanılan bir dildir. 70’li ve 80’li yıllarda birçok farklı uyarlaması geliştirildikten sonra, 1989’da ANSI tarafından standart bir C dili tanımlanmıştır (ANSI C).
C Programlama Dili Tarihçesi Tam ve makineden bağımsız C tanımlaması 1989 yılında bir standart olarak kabul edildi. Bu standart 1999 yılında güncellendi. C99, C dilinin güncellenmiş bir standardıdır. Popüler C derleyicilerinin bazıları C99 desteğini sunmamaktadır.
C Standart Kütüphanesi C programları fonksiyon denilen modüllerden oluşur. Bir programcı kendi fonksiyonlarını tanımlayabilir. Avantaj: Programcının fonksiyonun nasıl çalıştığını tam olarak bilmesi. Dezavantaj: zaman kaybı Programcılar çoğunlukla C kütüphane fonksiyonlarını kullanırlar. Bu fonksiyonlar programı inşa etmek için kullanılır. Amerika’yı tekrar keşfetmeyin Eğer daha önceden oluşturulmuş hazır fonksiyonlar var ise aynı işi yapan fonksiyonu tekrar yazmak yerine var olanı kullanmak en iyisidir. Kütüphane fonksiyonları çok dikkatli bir biçimde yazılır ve ihtiyaçlarınız doğrultusunda uyumlu bir şekilde kullanılabilir.
C Programı Geliştirme Ortamı
C Programı Geliştirme Ortamı Editör : Programın kodunu barındıran dosyanın oluşturulduğu aşamadır. Microsoft Visual Studio gibi kod geliştirme ortamlarından faydalanılır. Ön İşleme: Bu adımda kodun derlenmesi için komut verilir. Derleyici de kodu makine diline çevirir. Bu çevirme işleminden önce ise Ön İşleme programı otomatik olarak devreye girer. Bu aşamada kodun yazımı sırasında kullanılan ön işleme direktiflerine bağlı olarak kodun derlenmeye hazır hale getirilmesi sağlanır. Başka bir dosyadan koda ekleme yapılacak ise veya kodun içerisindeki bir metin başka bir şeyle değiştirilecekse bu adımda gerçekleştirilir.
C Programı Geliştirme Ortamı Derleyici: Bu aşamada kod makine diline çevirilerek çalışmaya hazır hale getirilir. Bağlayıcı: C programları genellikle başka dosyalarda tanımlanan kütüphane fonksiyonlarına referanslar içerir. C derleyicisinin oluşturduğu makine kodunda bu referanslardan dolayı boşluklar meydana gelir. Bağlayıcı ise makine kodu ile referans edilen kodların bağlanarak makine kodundaki eksikliklerin giderilmesini sağlar.
C Programı Geliştirme Ortamı Yükleyici: Makine kodu çalıştırılmadan önce hafızaya yüklenmelidir. Yükleyici, makine kodunu diskten alarak hafızaya yerleştirir. Çalıştırma: Hafızaya yüklenen kod CPU kontrolünde her zaman biriminde bir komut olacak şekilde çalıştırılır.
C Programı Geliştirme Ortamı Yaşam Döngüsünün Sağlanması Program geliştirme aslında bir döngüdür. Bir programın yaşam döngüsü şu şekilde akış diyagramı ile özetlenebilir.
C Programı Geliştirme Ortamı Hata Yakalama ve Ayıklama Programın geliştirilmesi sırasında hatalar meydana gelebilir. Bu hatalar yaşam döngüsü diyagramında gösterilmiştir. Yazım Hatası (Syntax Error): Programlama dili yazım kurallarına uyulmaması durumunda karşılaşılan hatadır. Bu tür hatalar derleyici tarafından satır numarası ve bir takım ek bilgilendirmeler ile programcıya bildirilir. Düzeltilmesi basit hatalardır.
C Programı Geliştirme Ortamı Hata Yakalama ve Ayıklama Çalışma Zamanı Hatası (Run-time Error): Programcının ele almadığı bir takım aykırı durumlar olduğunda programın çalışmasının işletim sistemi tarafından kesilmesi ile ortaya çıkar. Bu tür hatalar işletim sistemi dili programcıya verilir. Programcı bu tür oluşabilecek hataları kontrol altına alarak kendi istediği mesajları verebilir ve hatayı uygun şekilde sonlandırabilir. Bu tip hatalar genellikle işletim sistemi ve donanım kaynakları ile ilgili problemlerden ortaya çıkar. Örneğin olmayan bir dosyaya erişmeye çalışmak, olmayan bir bellek kaynağından yer ayırmaya çalışmak gibi.
C Programı Geliştirme Ortamı Hata Yakalama ve Ayıklama Mantıksal Hatalar (Logical Error): Programlama mantığından bir takım şeylerin yanlış düşünülmesinden kaynaklanan en tehlikeli hatadır. Bu hatalar istenen sonuçların elde edilememesi şeklinde test aşamasında ortaya çıkar. Hatanın giderilmesi için tasarım hatta bazen çözümleme aşamasına geri dönmek gerekir.
C Programı Geliştirme Ortamı Hata Yakalama ve Ayıklama Böcek (Bug): Mantıksal hatalar zamanla ortaya çıkıyor ve nedeni net olarak anlaşılamıyorsa buna bug denir. Bir program ilk yazıldığında tamamen hatasız olmasını beklemek yanlıştır. Bu tür hatalar programa eklenen yamalar ile giderilmeye çalışılır. Debug: Mantıksal hataları giderebilmek amacıyla bugları bulmak için yapılan işlemdir. Yazılan program genellikle adım adım ilerletilerek kontrol altında çalıştırılır ve değişkenlerin durumu gözlenebilir.
İlk Programımız: C'ye Hoşgeldiniz In this chapter we introduce C programming and present several examples that illustrate many important features of C. Our first example prints a line of text. Even though this program is simple, it illustrates several important features of the C language. Lines 1 and 2 begin with /* and end with */ indicating that these two lines are a comment. We add comments to document programs and improve program readability. Comments do not cause computer to perform any action when the program is run. Line 3 is a directive to the C preprocessor. Lines beginning with # are processed by the preprocessors before the program is compiled. Line 3 tells the preprocessor to include the contents of the standart input/output header (<stdio.h>) in the program. Line 6 is a part of every C program. The parentheses after main indicate that main is a program building block called a function. Every C program must contain a main function. The keyword int left of main indicates that main return an integer value. We will explain what it means for a function to return a value in Functions chapter. The void in parentheses means that main does not receive any information. A left brace { (Line7), begins the body of every function. A corresponding right brace (Line 12)ends each funtion. This pair of braces and the portion of the program between the braces are called block. Line 8 instructs the computer to perform an action, namely to print on the screen the string of characters marked by the quotation marks. The entire line including printf, its argument within the parentheses and the semicolon (;) is called a statement. Every statement must end with semicolon. When the preceding printf statement is executed, it prints the message Welcome to C! on the screen. Notice that characters \n were not printed on the screen. The backslash ( \ ) is called an escape character. When printf encounters a backslash in a string, the compiler looks ahead at the next character and combines it with the backslash to form an escape sequence. The escape sequence \n means newline. When a newline appears in the string output by a printf, the new line causes the cursor to position to the beginning of the next line on the screen.
İlk Programımız: C'ye Hoşgeldiniz 1 ve 2. satırlar açıklama satırlarıdır. Bu satırlar çalıştırılmaz. 3. satır C ön işlemcisi için bir direktiftir ve # karakteri ile başlar. Bu direktif C ön işlemcisine standart giriş çıkış kütüphanesini (<stdio.h>) programa dahil etmesini söyler. 6. satır her C programı için başlangıç noktası olan main fonksiyonunun tanımlanmasını gösteriyor.
İlk Programımız: C'ye Hoşgeldiniz 7. ve 24 satırlar main fonksiyonunun başlangıç ve bitişini belirten kırlangıç parantezlerdir. Bu parantezler bir blok oluşturmak için kullanılır. main fonksiyonu tanımlanırken sol tarafında belirtilen int ifadesi fonksiyonlar konusunda detaylıca anlatılacağı üzere bu fonksiyonun geri döndüreceği değerin tipini belirtir. Eğer fonksiyondan değer döndürülmeyecek ise dönüş tipi olarak void kullanılmalıdır.
İlk Programımız: C'ye Hoşgeldiniz Programlarınızda aşağıdaki yazım biçimlerinden istediğinizi kullanabilirsiniz.
İlk Programımız: C'ye Hoşgeldiniz 8. satırda çift tırnak arasında belirtilen karakterleri ekrana yazdırmak için bir komut verilmiştir. Bu komut satırında yer alan printf fonksiyon ismi, parantez içinde belirtilen parametreleri ve sonda yer alan noktalı virgül (;) bir ifade oluşturmuş olur. C'de tüm ifadeler noktalı virgül ile sonlanır. Program çalıştırıldığında ekrana "Welcome to C" mesajını yazdırır.
İlk Programımız: C'ye Hoşgeldiniz Çıktıda da görüldüğü üzere ekrana \n karakterleri basılmaz. C'de \ kaçış karakteridir. Derleyici bu karaktere rastladığında bunda sonra gelen karakter ile birleştirerek bir kaçış aralığı (escape sequence) oluşturur. \n yeni satır anlamına gelir ve böylece bu kaçış aralığı printf ile birlikte kullanıldığında imleç bir sonraki satırın başına konumlandırılır.
Kaçış Aralıkları Kaçış Aralığı Tanım \n Newline. İmleci bir sonraki satırın başına konumlandırır \t Horizontal tab. İmleci bir sonraki tab durağına götürür. (8 karakter boşluk) \a Alert. Sistem zilini çalar \\ Backslash. Ters slaş karakteri yazdırır \» Double quote. Çift tırnak yazdırır Here are some common escape sequences. Last two escape sequences may seem strange. We use a double backslash (\\) to place a single backslash in a string. Printing a double quote also causes problem because double quotes mark the boundary of a string. If we want to print double quote by printf, we must use escape sequence \» in a string.
İlk Programımız: C'ye Hoşgeldiniz Eğer main fonksiyonu tanımlanırken geri dönüş tipi belirtilmiş ise return ifadesi ile bu değer döndürülür. Programın başarılı bir şekilde çalışıp sonlandığını belirtmek için 0(sıfır) döndürülür.
İlk Programımız: C'ye Hoşgeldiniz Program 2.2 produces same output as the program 2.1 beacuse each printf resumes printing where the previous printf stopped printing. The first printf (Line7) prints Welcome followed by a space and the second printf (Line8) begins printing on the same line immediately following the space.
İlk Programımız: C'ye Hoşgeldiniz One printf can print several lines by using additional newline characters as in Program 2.3. Each time newline escape sequence is encountered, output continues at the beginning of the next line.
Örnek-2: Sayı Okuma ve Yazma BAŞLA DUR Bir sayı giriniz : Girilen sayi : sayi sayi
Örnek-2: Sayı Okuma ve Yazma Bu örnekte klavyeden girilen iki tam sayı toplanarak sonuç ekrana yazdırılıyor. Klavyeden okuma yapmak için Standart Input/Output kütüphanesinin scanf fonksiyonu kullanılır. Okunan değerler değişkenlerde saklanır. Değişken aslında program tarafından erişilebilen hafızada bir konumdur. int sayi; Burada sayi değişken ismidir. int ise değişkenin tamsayı olduğunu belirten tipidir.
Örnek-2: Sayı Okuma ve Yazma C'de değişken isimleri her hangi geçerli bir tanımlayıcı olabilir. Rakam ile başlamayan, _ (alt çizgi) haricinde özel karakter içermeyen karakter dizisi geçerli tanımlayıcıdır. C derleyicisi maksimum 31 karakter uzunluğunda tanımlayıcı algılayabilir. C küçük/büyük harf duyarlılığı olan bir dildir. int ogrenci, Ogrenci; Bu iki tanımlama farklı iki değişken oluşturur.
Örnek-2: Sayı Okuma ve Yazma printf fonksiyonu ile ekrana "Bir sayı giriniz" yazdırılır ve imleç mesajın sonunda bekler. printf("Bir sayı giriniz:"); Klavyeden değer okumak için scanf fonksiyonu kullanılır. Scanf fonksiyonu iki kısımdan oluşur. Biçim kontrol ifadesi Argümanlar Biçim kontrol ifadesi, okuma şeklini belirlemek için kullanılır. Çift tırnak arasında belirtilir. Bunun için dönüşüm tanımlayıcılardan faydalanılır. %d, ifadesi dönüşüm tanımlayıcısıdır ve klavyeden okunan değerin hangi türe dönüşeceğini belirler. %d Tam sayı okur
Örnek-2: Sayı Okuma ve Yazma Scanf fonksiyonunun ikinci kısmında okunan kaç değer varsa bunların hafıza hangi adrese yerleştirileceği belirtilir. Bunun için aslında hafızada yer belirten değişken isminin adresini ifade etmek için & (adres) operatörü kullanılır. scanf("%d", &tamsayi); Scanf fonksiyonu çalıştığında kullanıcının klavyeden bir değer girerek enter tuşuna basmasını bekler. Enter tuşuna basıldığında girilen değer belirtilen hafıza konumuna yazılmış olur.
Örnek-2: Sayı Okuma ve Yazma printf fonksiyonu ekrana formatlı çıktı göndermek için kullanılır. Formatlama işlemi biçim kontrol ifadesinde çift tırnak arasında yapılır. Printf fonksiyonu da iki kısma sahiptir. İkinci kısımda argümanlar kullanılır. Ekrana bir değişkenin değeri yazdırılmak isteniyorsa ilk kısımda(biçim kontrol ifadesi) oluşturulur, ikinci kısımda ise değeri tutan değişken ismi belirtilir. printf( "Girilen sayı: %d", tamsayi);
Örnek-3: İki Tamsayıyı Toplama
Örnek-4: Üçgenin Alan Hesabı
Kaynaklar Doç. Dr. Fahri Vatansever, “Algoritma Geliştirme ve Programlamaya Giriş”, Seçkin Yayıncılık, 12. Baskı, 2015. J. G. Brookshear, “Computer Science: An Overview 10th Ed.”, Addison Wisley, 2009. Kaan Aslan, “A’dan Z’ye C Klavuzu 8. Basım”, Pusula Yayıncılık, 2002. Paul J. Deitel, “C How to Program”, Harvey Deitel. Bayram AKGÜL, C Programlama Ders notları