C Programlamaya Giriş

S
  • Kullanıcı stonecypher
  • Başlangıç tarihi Başlangıç tarihi
  • - C / C++ / C#
Program : Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak yazılmış deyimler dizisi.
Önceki bölümde bir problemin çözümü ile ilgili teknikler sunmuştuk. Bir problemi bilgisayar ile çözmek için geliştireceğimiz programın yazımında izleyeceğimiz adımlar:

i) Problemin ne olduğunu kavra. Çözüm için gereksinimleri belirle.
ii) Problemin girdilerini, çıktılarını ve diğer kısıtlama ve gereksinimleri belirle ( bilgilerin giriş ve çıkış biçimlerinin nasıl olacağına kadar).
iii) Problemin çözümünü veren algoritmayı yaz.
iv) Algoritmayı bir programla dili ile yaz.
v) Programın doğru çalışıp çalışmadığını test et. Bu testi değişik veriler (girdiler) için tekrarla.


2.1 İlk Program Örneği
#include <stdio.h> Kullanılan işlevler ile ilgili başlık dosyası
main()
{
int i ; Değişken tanımı
scanf("%d",&i); Programın gövdesi
i:=i*i;
printf("%d",i);
}

BCPL à B (1967 Ken Thompson) à C (Denis Ritchie unix i yazmak için)

az sayıda saklı sözcük
kısa ve etkin program
çok sayıda işleç
assembler e yakın kod
taşınabilir kod kullanıcıya bırakılan kontroller (dizinin boyutu gibi )
düşük okunabilirlik

source -----> compiler -----> object -----> link
kaynak derleyeci amaç bağlama
kaynak kod : C dili ile yazılmış olan program.
derleyeci : Kaynak kodu makina koduna çevirir
amaç kodu : Kaynak kodun makina dilindeki karşılığı
bağlama : Birden fazla amaç kodu dosyasının tek dosyada birleştirilmesi
2.2 Veri Tipleri

Veri tiplerini vermeden önce yazılan bir programın geçtiği aşamalara göz atalım.

2.2.1 Int Tip
Integer = Tamsayı
Tamsayıları içerir. Bellekte 2 Byte tutar.
5 , -19 , 25000 gibi
Minimum : -231 = -32768
Maksimum : 231-1 = 32767

2.2.2 Gerçel Tipler (Float, Double)
Gerçel sayıları içerirler.
float : Bellekte 4 Byte yer tutar. 3.4E-38 ile 3.4E+38 aralığında değer alır. Hassasiyet 7-8 basamaktır.
double : Bellekte 8 Byte ter tutar. 1.7E-308 ile 1.7E308 aralığında değer alır. Hassasiyet 15-16 basamaktır.

218.1 , -5.2 , 4.0

Bilimsel gösterim biçimi 2.5*103 = 2.5E3 2.5*10-3 = 2.5E-3

2.2.3 Char Tip
Char : Karakter : Alfanumerik karakterleri içerir.
'5' , '*' , 'K'

2.3 Sabitler (CONST)

#include <stdio.h>
main()
{
const float PI=3.14; Tanımlama kısmı
float r, Alan;
scanf("%f",r);
alan := PI*r*r;
printf(('Alan = %f', alan);
}
CONST (sabit) : Değeri programın çalışması boyunca değiştirilemez. Kullanım biçimi
const tip Belirleyici=değeri;
const float PI=3.14;
Tip belirtilmez ise tamsayı kabul edilir.

2.4 Değişkenler
Değeri programın çalışması boyunca değiştirilekir. Kullanım biçimi:
Tip Belirleyici [,Belirleyici] ;
int i;
float alan;

2.5 Belirleyiciler (Identifier)
Bileşenlere isim verme. (Sabit, değişken, altprogram, etiket, tipler (kullanıcı tanımlı)).

2.5.1 Kısıtlamalar
. İlk karakteri rakam olamaz
. Sadece harfler, rakamlar ve _ (underscore) karakterinin birleşiminden oluşabilir.
. C diline ait saklı (reserved) sözcükler kullanılamaz.
. En fazla 31 karakter olabilir.
. Küçük - büyük harf ayırımı vardır.

2.5.2 isimlerin Seçimi
. Belirleyicinin kullanım amacına uygun anlamlı isim seçin. (Hungarian notation)
. Ne fazla kısa ne de fazla uzun olsun. 3 - 10 karakter uzunluğunda olmasını alışkanlı edinin.
2.6 Matematiksel ifadeler
Matematiksel ifadeleri günlük hayattaki biçimde bilgisayarda yazamadığımız için belli bir kurallar uymamız gerekir. Kullandığımız matematiksel işlemler ve anlamları şöyledir:
+ , - , * , / toplama, çıkarma, çarpma, bölme
% tamsayı bölme sonucundaki kalanı verir (modulus)
7. / 2 ---> 3.5 (nokta sayının gerçel yorumlanmasını sağlar)
7 / 2 ---> 3 (sayılar int kabul edilip sonuçta int tipine dönüştürülür)
7 % 2 ---> 1
2 % 7 ---> 2
2 / 7 ---> 0
Matematiksel ifadeler hesaplanırken izlenen adımlar:
1. Önce parantez içindeki ifadeler hesaplanır. İçiçe parantezler var ise hesaplamaya en içteki parantezden başlanır.
2. ilk önce * , / ve % işlemleri daha sonra + ve - işlemleri yapılır.
Öncelik sırası aynı olan işlemlerde hesaplama soldan sağa doğru yapılır. 5./2*3 --> 7.5


Bir C Programının Genel Yapısı

başlık dosyaları. Kullanılan deyimler ile ilgili
main()
{
sabitler ; sabitlerin tanımlama bölümü
değişkenler; değişkenleri tanımlama bölümü
deyimler; Program gövdesi
}

2.7 Atama Deyimi (Assignment)
Bir değişkene bir değer(sabit, değişken, ifade) vermek.
DeğişkenAdı = değer;
x = 8 ;
y = x + 15 ;
y = (8 - x) / (2 - x) ;


Örnek 2.7.1: 5x2+2 fonksiyonunun x=4.8 noktasındaki değerini
main()

{
float x, y ;
x = 4.8;
y = 5 * x * x + 2;
}
Örnek 2.7.2: Vize ve final notlarınından geçme notu
main()
{
float vize, final, ort;
vize = 50;
final = 60;
ort = vize * 0.4 + final * 0.6;
}
Örnek 2.7.3: 1998 yılına kadar geçen gün sayısı
main()
{
float gun;
int yil = 1996;
gun = 365 * (yil - 1);
gun = gun + (yil -1 ) / 4;
}


2.8 printf işlevi
Program içinde istenen değerleri çıktı birimlerine göndermek için kullanılır. Normal kullanımında çıktı birimi olarak ekran kabul edilir. Kullanım biçimi:

prinf( kontrol, <parametreler>)
<kontrol> ile belirtilen bilgiye göre parametreleri yazar. Kontrol metini iki kısımdan oluşur.
o sıradan karakterler: doğrudan yazılırlar.
o dönüşüm/biçim belirleyici karakterler: Değerlerin nasıl yazılacağı bildirilir.

printf(" sonuç = %d", k);
--- integer değer yazılacaktır
--------- ekrana aynen aktarılır

Dönüşüm belirlemek için önce % karakteri ve ardından dönüşümün nasıl
olacağını belirten karakter verilir. Bu karakterlerden bazıları:

d : decimal (integer)
u : unsigned decimal
c : char (tek karakter)
s : string
e : float/double sayıyı bilimsel gösterimde yaz
f : float/double sayıyı [-] mmm.nnnnn biçiminde yaz
ld : long integer
lu : unsigned long integer
Le,Lf : long double

ESC dizileri : \n : satır başı, \a : zil , \t : tab, \b : bir karakter geri


program parçası ekranda görünen / imleçin konumu
i = 5 ;
printf("%d",i) ; 5
printf("'i=%d",i) ; i=5
printf("i=") ;
printf("%d",i) ; i=5 -

printf("i=\n") ; i=
printf("%d",i) ; 5 alt satıra geçer

printf('i=%d\n",i) ; i=5 alt satıra geçer

printf("%d - %d",i, 5*i); 5 - 25



Biçimli yazdırma
% karakteri ile dönüşüm karakteri arasına aşağıdaki karakterler de kullanılabilir.

- : sola dayalı yaz
m : yazılacak değer için ayırılan alan
n : değerin kaç karekteri yazılacağı

s = "ABCDEF"
printf("%10s ",s); . . . . A B C D E F

printf("%10.3s ",s); . . . . . . . A B C

x = 128.5 ;
printf("%7.2f",x) ; # 128.50

x = 85.47 ;
printf("%6.3f",x) ; 85.470

printf("%6.1f",x) ; ## 85.5

Örnek 2.8.1 : Yarıçapı belli dairenin alanını hesaplayan programı yazınız. (ilk yazılan program)
#include <stdio.h>
main()
{
const float PI=3.14;
float r, alan;
r = 7;
alan := PI*r*r;
printf(('Alan = %f', alan);
}

Örnek 2.8.2 : En fazla dört basamak olabilen sayının basamak değerlerini yazdır. % ve / işlemlerinin kullanımı.
#include <stdio.h>
main()
{
int i,y;

y=1985;
i= y / 1000;
printf("%d",i);
y= y-i*1000;
i= y / 100;
printf(" %d",i);
y = y-i*100;
i= y / 10;
printf(" %d",i);
y = y-i*10;
printf(" %d\n",y);
i = 1985;
printf("%d ",i / 1000);
printf("%d ",(i / 100) % 10);
printf("%d ",(i / 10) % 10);
printf("%d\n",i % 10);
}

Örnek 2.8.3: ax2+bx+c=0 tipi bir denklemin köklerini veren programı yazınız.
Girdi : a, b ve c katsayıları
Çıktı : denklemim kökleri
Algoritma :
1. a, b ve c katsayılarını oku.
2. Delta= değerini hesapla.
3. x1 ve x2 değerlerini hesapla.
4. Kökleri yaz.

Programın kodlanması:

#include <stdio.h> /* printf işlevi için */
#include <math.h> /* sqrt işlevi için */
main()
{
float a, b, c;
float x1, x2;
float d;

a = 1;
b = -3;
c = 2;
d = b * b - 4 * a * c;
x1 = (-b + sqrt(d)) / (2 * a);
x2 = (-b - sqrt(d)) / (2 * a);

printf("Kökler = %f , %f",x1, x2);
}
C dilinde karekök almak için bir deyim yoktur. Örnekte bunu yerine getiren C diline eklenmiş olan sqrt() fonksiyonu kullanılmştır. Aşağıda buna benzer artık C derleyecilerinde standart olmuş bazı fonksiyonlar verilmiştir. Bu işlevler math.h başlık dosyasında tanımlıdır.
Fonksiyon x ,y Sonuç
abs(x) int int x'in mutlak değeri
fabs(x) double double x'in mutlak değeri
pow(x, y) double double xy
sqrt(x) double double x'in karekökü
exp(x) double double ex değeri
log(x) double double ln(x) değeri
log10(x) double double log10(x) değeri
ceil(x) double double x ten büyük ilk tamsayı
floor(x) double double x ten küçük ilk tamsayı


Örnekler:
ceil(5) 5
ceil(5.2) 6
ceil(-5.2) -5
floor(5) 5
floor(5.2) 5
floor(-5.2) -6

2.9 scanf İşlevi
Klavyeden veri okumak için kullanılır. Yapı olarak printf işlevi ile hemen hemen aynıdır. Kullanım biçimi:

scanf( kontrol, <değişkenler>)

Girilen karakterler <kontrol> metininde belirtilen biçimlere göre değişkenlere aktarılır.
Değişkenler işaretçi tipinde olmalıdır. Yani parametre olarak değişkenin adresi gönderilmelidir.
Ayırıcılar boşluk, tab, enter

scanf("%f %f %f ", &a, &b, &c);

scanf işlevinin değeri
0 ise hiçbir değişkene değer atanmamış
>0 ise başarılı bir şekilde değer atanan değişken sayısı
int a,b,c;
float m,n;
scanf("%d", &a); Klavyeden tamsayı okur. Girilen değer a değişkenine aktarılır.
scanf("%d %d",&a,&b) Klavyeden girilen ilk değer a değişkenine, ikinci değer b değişkenine aktarılır.
scanf("%f %d", &m, &a); Klavyeden ilki gerçel, ikincisi tamsayı olmak üzere iki değer okur.

İkinci dereceden denklem çözümünün yapıldığı örnekte katsayıları klavyeden okutmak istersek

scanf("%f %f %f ", &a, &b, &c);

Farklı kullanıcı arayüzünde yazarsak

printf(“Katsayıları sırasıyla giriniz (a b c) :” ); scanf("%f %f %f ", &a, &b, &c);

printf(“a katsayısını giriniz : “); scanf(“%f”, &a);
printf(“b katsayısını giriniz : “); scanf(“%f”, &b);
printf(“c katsayısını giriniz : “); scanf(“%f”, &c);

Örnek 2.9.1: Vize ve final notlarınından ortalamayı hesaplayan programda değerlerin klavyeden okunmuş hali.
main()
{
float vize, final, ort;
printf(“Vize notunu giriniz “); scanf(“%f”, &vize);
printf(“Final notunu giriniz “); scanf(“%f”, &final);
ort = vize * 0.4 + final * 0.6;
printf(“Ortalaması = &f\n”, ort);
}

2.10 Mantıksal ifadeler
Sonucu Doğru veya Yanlış olan ifadelerdir. Sonuç sıfır ise yanlış aksi halde doğru kabul edilir.
İlişkisel işleçler(operatör) : iki değer arasındaki ilişkiyi test etmek için kullanılır.
işleç anlamı
> büyük
>= büyük - eşit
== eşit
< küçük
<= küçük - eşit
!= eşit değil

x=8, y=5 için
x > y Doğru
x < y Yanlış
x !=y Doğru

Mantıksal işleçler : İki mantıksal ifade arasındaki ilişki üzerindeki ilişkide kullanılır.
! DEĞİL (NOT)
&& VE (AND)
|| VEYA (OR)

(X>0) && (X>Y)
(X>0) || (Y>0)

İfadelerde işleçlerin yürütülme sırası
işleç Önceliği
( ) en yüksek (ilk yürütülür)
!
*, /, %
+, -
<, <=, >=, >
==, !=
&&, ||
= en düşük (son yürütülür)
= işleci sağdan sola, diğerleri soldan sağa doğru yürütülür.
Görüldüğü gibi ifadelerde matematiksel ve mantıksal işlemler bittikten sonra ilişki test edilir.
X=50, Y=80, Z=45 için
( ( X / 4 + Y / 4 + Z / 2 ) >= 50 ) && ( Z >= 50 )


 
Geri