BİL131 – DERS 3 // 22.10.2013

0 46
1.6 LIBRARY ( KİTAPLIK ) FONKSİYONLARI
C dilinin sık kullanılan çeşitli işlemleri veya hesaplamaları yapan library ( kitaplık ) fonksiyonları vardır. Örneğin standart giriş/çıkış işlemlerini ( karakterleri okuma ve yazma, sayıları okuma ve yazma, dosyaları açma-kapama, end-of-file’ı test etme vs. ), karakterler üzerindeki işlemleri ( küçük harften büyüğe çevirme, karakterin büyük harf olup olmadığını test etme vs. ), dizgiler üzerindeki işlemleri ( dizgi kopyalama, dizgileri karşılaştırma, birleştirme vs. ) ve çeşitli matematiksel işlemleri ( trigonometrik, logaritmik ve üstel fonksiyonları hesaplama, mutlak değerleri ve karekökleri bulma vs. ) yapabilen fonksiyonlar mevcuttur. Diğer tiplerde kitaplık fonksiyonları da bulunmaktadır.
Bazı fonksiyonlar bir veriyi döndürür, bazıları 1 veya 0 döndürerek bir durumun doğru veya yanlış olduğunu belirtirler, kalanlar ise yine özel işlemler yaparlar fakat bir değer döndürmezler.
Library fonksiyonları genellikle ayrı library file’ları içinde hedef programlar olarak gruplanmışlardır. Bu dosyalar her C uyarlayıcısında bulunur.
Tipik bir C uyarlayıcısı seti, tablo 1.1’de gösterildiği gibi, çoğu C uyarlayıcısında bulunan çok sayıda fonksiyonu içerir. Tablodaki “tip” sütunu fonksiyon tarafından döndürülen değerin veri tipini belirtmektedir. srand fonksiyonunda belirtilen void, fonksiyonun hiç bir şey döndürmediği anlamına gelmektedir.
Tablo 1.1. Sık Kullanılan Bazı Library Fonksiyonları
Fonksiyon                    Tip                                               Amaç                            
abs( i )                          int                                  i’nin mutlak değerini döndür.
ceil( d )                         double                          en yakın tam sayıya yuvarla
cos (d)                           double                          d’nin kosinüsünü döndür.
exp (d)                          double                          e’nin d’inci üssünü alır.
fabs(d)                          double                          d’nin mutlak değerini döndür.
floor(d)                         double                          en yakın tam sayıya yuvarla
getchar( )                     int                                  bir karakter girer
log ( d )                         double                          d’nin doğal logaritmasını döndür.
pow(d1, d2)                 double                          d1’in d2’nci kuvvetini döndür.
sqrt(d)                          double                          d’nin karekökünü döndür.
tan (d)                          double                          d’nin tanjantını döndür.
toascii(c)                      int                                  argüman değerini ASCII’ye çevirir
tolower(c)                    int                                  küçük harfe çevir.
toupper(c)                    int                                  büyük harfe çevir.
Yukarıdaki tabloda tip fonksiyon tarafından döndürülen değerin veri tipi anlamındadır.
c karakter tipli bir argümanın
i tam sayı bir argümanın
d çifte-kesinlikli bir argümanın
u işaretsiz tam sayı bir argümanın yerine geçmektedir.
Bir kitaplık fonksiyonuna, basit olarak, fonksiyonun adı, ardından da fonksiyona geçirilecek bilgiyi gösteren argümanlar yazılarak erişilebilir. Argümanlar parantez içine yazılmalı ve virgüllerle ayrılmalıdır. Argümanlar sabitler, değişken isimleri, veya daha karmaşık ifadeler olabilirler. Argümanı yazılmamışsa bile, parantezler konulmalıdır.
Veriler üzerinde işlem yapan fakat herhangi bir şey döndürmeyen bir fonksiyona adı yazılarak kolaylıkla erişilebilir.
Örnek 1.16. Aşağıda ikinci dereceden bir denklemin köklerini bulan bir C programı gösterilmiştir.
 



program aşağıdaki kök bulma formülünü kullanmaktadır:

 

 

 
(b– 4ac)1/2’nin değerini hesaplamak için de sqrt kitaplık fonksiyonundan yararlanmaktadır.
/* İkinci derece denklemin çözümü */
#include <stdio.h>
main()
{
double a, b, c, d, x1 , x2;
/*a, b ve c değerlerini oku */
d = sqrt(b* b – 4*a*c);
xl = (-b + d) / (2 * a);
x2 = (-b – d) / (2* a);
}
Library fonksiyonuyla bağlantı #include ifadesiyle sağlanır, yani
#include <dosyaadi>
dosyaadi özel bir library dosyasının isminin yerini tutmaktadır.
Bu özel dosyaların isimleri C’nin her yazılışında belirtilir ve stdio.h, stdlib.h ve math.h gibi belli başlı dosya isimleri her yazılışta kullanılır. “h” ifadesi “header” (başlık) dosyasının kısaltmasıdır ve o ismin programın başına yazılması gerektiğini belirtir.
VERİ GİRİŞİ VE ÇIKIŞI
C dili giriş/çıkış işlemleri için herhangi bir anahtar kelime tanımlamaz. Giriş ve çıkışlar library fonksiyonları aracılığıyla halledilir. Bu fonksiyonlar getchar, putchar, scanf, printf, gets ve puts’turGiriş/çıkış fonksiyonları bilgisayarla klavye ve monitör gibi standart giriş/çıkış araçları arasında bilgi transferini sağlarlar. İlk iki fonksiyon, getchar ve putchar, bilgisayara ve bilgisayardan bir tek karakterin transferini sağlarlarken, daha karmaşık olan scanf ve printf fonksiyonları, tekil karakterlerin , sayısal değerlerin ve dizgilerin transferine imkan verirler. Gets ve puts ise dizgilerin giriş ve çıkışını olanaklı kılar. Bu giriş ve çıkış fonksiyonlarını kullanacak bir program <stdio.h> başlık dosyasını içermelidir.

 

2.1 KARAKTER GİRİŞİ VE ÇIKIŞI
2.1.1 getchar Fonksiyonu
C kitaplık fonksiyonu getchar klavyeden karakter okunmasını sağlar. getcharfonksiyonu standart C dili I/O kitaplığının bir parçasıdır. Fonksiyon hiç bir argüman gerektirmemesine rağmen, getchardan sonra bir çift boş parantez yazılmalıdır.
karakter_değişkeni = getchar();
karakter_deyişken önceden deklare edilmiş karakter değişkenini temsil etmektedir.
Örnek 2.1. Bir C programı aşağıdaki ifadeleri içermektedir.
#incude <stdio.h>
. . .
char c;
. . .
c = getchar();
. . .
İlk ifade, c’nin karakter tipi bir değişken olduğunu söylemektedir. İkinci ifade standart giriş biriminden ( genellikle klavye ) tek bir karakterin girilmesini ve c’ye atanmasını sağlar.
Getchar fonksiyonu, bir döngü içinde tek tek karakterlerin okunmasıyla bir karakter
dizgisinin alınması için de kullanılabilir.
2.1.2 putchar Fonksiyonu
Tekil karakterler C library fonksiyonu putchar kullanılarak ekranda gösterilebilir. Bu
fonksiyon karakter giriş fonksiyonu getchar’ın tümleyenidir.
Putchar fonksiyonu da standart C dili I/O library’sinin içindedir. Bu fonksiyon argüman alır.
Tekil karakteri standart bir çıkış birimine ( genelde monitör ) gönderir. Gönderilen karakter, tabii ki karakter tipli bir değişken olarak gösterilecektir. Putchar kelimesinden sonra, parantez içinde, fonksiyona bir argüman olarak yazılmalıdır. Genelde putchar fonksiyonu şöyle yazılır:
putchar(karakter_değişkeni)
character_değişken önceden deklare edilmiş karakter değişkenini temsil etmektedir.
Örnek 2.2. Bir C programı aşağıdaki ifadeleri içermektedir.
#incude <stdio.h>
. . .
char c;
. . .
putchar(c);
. . .
İlk ifade c’nin karakter tipli bir değişken olduğunu söylemektedir. İkinci ifade c’nin o anki değerinin standart bir çıkış aletine ( monitör gibi ) gönderilmesini sağlar.
Karakter giriş ve çıkışı için bütün bir program yazalım.
Örnek 2.3. bir C programı aşağıdaki ifadeleri içermektedir.
#include <stdio.h>
main()
{
char c;
c = getchar();
putchar(c);
}
putchar fonksiyonu sabit bir dizgisi, tek boyutlu karakter tipli bir dizide tuttuktan sonra, ekrana bastırmak için kullanılabilir.
2.2 VERİNİN GİRİŞ VE ÇIKIŞI
2.2.1 scanf Fonksiyonu
Giriş verisi C library fonksiyonu scanf vasıtasıyla standart bir giriş cihazından bilgisayara girilebilir. Bu fonksiyon, sayısal değerlerin, tekil karakterlerin ve dizgilerin her türlü kombinasyonu için kullanılabilir.
Genel terimlerle, scanf fonksiyonu şöyle yazılabilir:
scanf(kontrol_dizgisi, argl, arg2, …, argn)
control_string önceden belirlenmiş gerekli format bilgisini, argl, arg2, . . . , argn ise tekil giriş verilerini göstermektedir.( Aslında, argümanlar bilgisayarın hafızasındaki verilerin adreslerini gösteren işaretçilerdir. )
Kontrol dizgisi, her bir giriş verisi için bir karakter grubu olmak üzere, tekil karakter
gruplarından oluşmaktadır. Her bir karakter grubu (%) işaretiyle başlamalıdır. En basit halinde, tek bir karakter grubu karşılık geldiği verinin tipini belirten dönüştürme karakteriyle takip edilen bir yüzde işaretinden oluşur. Tablo 2.1’de, sıkça kullanılan dönüştürme karakterleri gösterilmiştir:
Tablo 2.1 Veri girişi için sıkça kullanılan dönüştürme karakterleri
Dönüştürme Karakteri             Anlamı
c                                                   veri tekil bir karakterdir
d                                                  veri onluk bir tam sayıdır
e                                                   veri ondalıklı bir değerdir
f                                                   veri ondalıklı bir değerdir
g                                                   veri ondalıklı bir değerdir
h                                                  veri bir short tam sayıdır
i                                                   veri ondalık onaltılık&sekizlik tamsayıdır
o                                                   veri sekizlik bir tam sayıdır
s                                                   veri space’le izlenen bir dizgidir
u                                                  veri işaretsiz onluk bir tam sayıdır
x                                                   veri on altılık bir tam sayıdır
[. . .]                                            veri space karakteri içeren bir dizgidir
Argümanlar, kontrol dizgisinde kendilerine karşılık gelen karakter gruplarına uygun değişkenler veya diziler olarak yazılırlar. Her değişken isminden önce ampersand (ve işareti, &) gelmelidir (argümanlar aslında bilgisayarın belleğindeki verilerin nerede olduklarını gösteren işaretçilerdir). Bu yüzden, dizi isimleri & işaretiyle başlayamaz.
Örnek 2.5. Aşağıda scanf fonksiyonunun tipik bir uygulaması gösterilmektedir.
#include <stdio.h>
main()
{
char sıra[20];
int say;
float x;
. . .
scanf(“%s %d %f”, sıra, &say, &x);
. . .
}                     
“%s%d %f” kontrol dizgisi scanf fonksiyonu içinde üç karakter grubu içermektedir. İlk karakter grubu %s, ilk argümanın ( line ) bir string gösterdiğini söylemektedir. İkinci karakter grubu, %d, ikinci argümanın ( &count ) onluk bir tam sayıyı gösterdiğini ve üçüncü karakter grubu %f de üçüncü argümanın ( &x) ondalık bir sayı olduğunu söylemektedir. Bu örnekte line bir dizi adıdır.
2.2.2 printf Fonksiyonu
printf fonksiyonu, sayısal değerlerin, tekil karakterlerin ve dizgilerin herhangi bir kombinasyonunun bilgisayardan standart bir çıkış birimine gönderilmesi için kullanılır. Amacının verinin gösterilmesi olması dışında, scanf fonksiyonuna oldukça benzemektedir. Başka bir ifadeyle, scanf fonksiyonu standart giriş biriminden veri girilmesini ve bilgisayarın hafızasına atılmasını sağlarken, printf fonksiyonu hafızadan standart çıkış birimine veri gönderir. printf fonksiyonu şu şekilde yazılır.
printf(kontrol_dizgisi, argl, arg2, …, argn)
control_string format bilgisini içeren bir dizgiyken, argl, arg2, . . . , argntekil çıkış verilerinin yerine geçerler. Argümanlar sabit, tekil değişken veya dizi adları, ya da daha karmaşık ifadeler olabilirler. Fonksiyon referansları da içerilebilir.
Her karakter grubu yüzde işareti (%) ile başlamalıdır. En basit halinde, tekil bir karakter grubu, karşılık geldiği verinin tipini gösteren bir dönüştürme karakteriyle takip edilen bir yüzde işaretinden oluşur.
Çoklu karakter grupları arka arkaya gelebilir veya space karakterini de içeren diğer karakterler tarafından ayrılabilirler.
Örnek 2.6. Aşağıdaki C programı çeşitli tiplerdeki verilerin printf fonksiyonuyla nasıl ekranda gösterileceğini anlatmaktadır.
#include <stdio.h>
main()
{
char sıra[20];
int say;
float x;
. . .
printf(“%s %d %f”, sıra, say, x);
. . .
}
İlk argüman (line) bir dizgi, ikinci (count) onluk bir tam sayı, üçüncüsü ise (x) ondalık sayıdır.
Örnek 2.7. Aşağıda printf fonksiyonunu kullanan basit bir program verilmiştir.
/* Çeşitli ondalık sayıları göster*/
#include <stdio.h>
#include <math.h>
main()
{
float a = 5.0, b = 8.0;
printf(“%f %f %f %f %f”, a, b, a + b, a/b, sqrt(a + b));
}
printf fonksiyonundaki ilk iki argüman tekil değişkenler, üçüncü ve dördüncü argümanlar aritmetik ifadeler ve de son argüman sayısal ifadeye sahip bir fonksiyona referanstır.
Program çalıştırıldığında aşağıdaki çıktıyı verir:
5.000000 8.000000 13.000000 0.625000 3.605551
Örnek 2.8. Aşağıda text’i okuyan ve yazan bir örnek verilmiştir.
#include <stdio.h>
main()
{
char metin[80];
scanf(“%[^\n]”, metin);
printf(“%s \n”,metin);
}
Örnek 2.9. Aşağıdaki program basılan çıktıya nasıl isim verilebileceğini göstermektedir.
/*Ondalık sayıların etiketlendirilmesi*/
#include <stdio.h>
22
main()
{
float a=2.2, b =-6.2, x1=.005, x2 =-12.88;
printf(“$%4.2f %7.1f%%\n”, a, b);
printf(“x1=%7.3f x2=%7.3f”, x1, x2);
}
İlk printf ifadesindeki ilk yüzde işareti bir karakter grubunun başını gösterirken, ikinci yüzde işareti bir etiket olarak yorumlanacaktır.
Ekrandaki çıktı aşağıdaki gibi olacaktır.
$2.20 -6.2%
x1= 0.005 x2=-12.880
çıktıyı – , +, #, 0 gibi bayraklar kullanarak kontrol etmek mümkündür. Aşağıdaki program, çıktıda bayrakların etkisini göstermektedir.
Örnek 2.10.
#include <stdio.h>
main()
{
int a=445;
float x=25.5, y =-12.88;
printf(“:%5d %8.2f%14.3e: \n”, a, x,y);
printf(“:%-5d %-8.2f%-14.3e: \n”, a, x,y);
printf(“:%+5d %+8.2f%+14.3e: \n”, a, x,y);
printf(“:%#5d %#8.2f%#14.3e: \n”, a, x,y);
printf(“:%05d %08.2f%014.3e: \n”, a, x,y);
getchar();
}
Program aşağıdaki çıktıyı verecektir.
: 445 25.50 -1.288e+01:
:445 25.50 -1.288e+01 :
+445 +25.50 -1.288e+01:
: 445 25.50 -1.288e+01:
:00445 00025.50-000001.288e+01:
2.3 gets VE puts FONKSİYONLARI
gets ve puts fonksiyonları bilgisayarla standart giriş/çıkış birimleri arasında dizgilerin transferini mümkün kılarlar. Bu fonksiyonların her biri tek bir argüman kabul eder.
Argümanı dizgiye karşılık gelen bir veri olmalıdır ( karakter dizisi ). Dizgide space karakterleri olabilir. gets kullanıldığında, dizgi klavyeden girilecek ve bir newline ( yeni satır ) karakteriyle sona erecektir ( yani, dizgi kullanıcı RETURN tuşuna bastığında sona erecektir).
gets ve puts fonksiyonları, dizgilerin okunması ve yazılması için scanf ve printf
fonksiyonlarının kullanımına, örneklerde gösterildiği gibi basit alternatifler sunarlar.
Örnek 2.11. Bir metinin satırını okuma ve yazma.
Bir metinin satırını bilgisayara giren ve daha sonra orijinal halinde tekrar çıkartan basit bir program aşağıdaki gibidir.
/* bir metinin satırını oku ve yaz*/
#include <stdio.h>
main()
{
char satır[80];
gets(satır);
puts(satır);
}
Bu program bir metinin satırını bilgisayara girer ve bilgisayardan alır.
Örnek 2.12. Üçgenin alan hesabını bulma.
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char*argv[])
{
int taban;
İnt yükseklik;
float alan;
printf(“Ucgenin tabani=”);
scanf(“%d”,&taban);
printf(“Ucgenin yükseklik=”);
scanf(“%d”,&yukseklik);
alan=(taban*yukseklik)/2;
printf(“\n Ucgenin Alani”,alan);
system(“PAUSE”);
return 0;
}
Örnek 2.13. Değişken deklarasyonu.
#include<stdio.h>
int main (void)
{
int a;
a=25;
printf(“a sayısı=%d”,a);
return 0;
}
Örnek 2.14. İki sayının ortalamasını bulma.
#include<stdio.h>
int main (void)
{
float sayi1, sayi2, ortalama;
printf(“İki sayı giriniz>”);
scanf(“%f%f”,&sayi1, &sayi2);
ortalama=(sayi1+sayi2)/2;
printf(“Ortalama sonucu=%f’dir”, ortalama);
return 0;
}

Senin bu konuya yorumun ne olacak?

Gerekli *

HAKKIMIZDA

facebook twitter youtube flickr ENOTLAR TV LOGOSU_Artboard 13 - ENOTLAR TV LOGO

Arşivler

KAREKOD-umuz

Lower-Third-(Enotlar)