C PROGRAMLAMA - Etkileşimli ÖğrenmeProgramlama dillerinde kendinize ait fonksiyonlar...

Preview:

Citation preview

C PROGRAMLAMA

Değişkenler

• Tam Sayı Tanımlama (İnteger)

• int sayi;

• int sayi = 5;

• Ondalıklı Sayı Tanımlama (Float)

• Float sayi;

• Float sayi = 2,12;

• Harf Tamınlama (Character)

• char harf;

• char harf = ‘A’;

• Kelime Tanımlama (String)

• char kelime[];

• char kelime[] = "Teknofen Koleji";

Giriş/Çıkış İşlemleri

• Ekrana yazı yazdırma

• printf

• Kullanımı

• printf("C Öğreniyorum");

• Ekrana Tam Sayı Yazdırma

• printf("Sonuç = %d",5);

• Örnek

#include<stdio.h>

main()

{

int sayi=5;

printf("Teknofen Koleji");

printf("Sayı = %d",sayi);

}

Giriş/Çıkış İşlemleri

• Klavyeden giriş işlemi

• scanf

• Kullanımı

• scanf("&d", &tamSayi);

• scanf("%f", &ondalikliSayi);

• scanf("%c",karakter);

• scanf("%s",kelime);

• Örnek

#include<stdio.h>

main()

{

int tamsayi;

printf("Bir sayı giriniz.");

scanf("%d", &tamSayi);

}

Veri Tipi Tanımlama printf(); scanf(); Minimum Değer Maksimum Değer Byte

Karakter char degisken; printf("%c",degisken); scanf("%c",&degisken); -128 127 1

Kısa Tam Sayı short degisken; printf("%d",degisken); scanf("%d",&degisken); -32768 32767 2

Tamsayı int degisken; printf("%d",degisken); scanf("%d",&degisken); -32768 32767 2

Uzun Tamsayı long int degisken; printf("%ld",degisken); scanf("%ld",&degisken); -2147483648 2147483647 4

İşaretsiz Tamsayı unsigned int

degisken; printf("%u",degisken); scanf("%u",&degisken); 0 65535 2

İşaretsiz Uzun Tamsayı

long unsigned degisken;

printf("%lu",degisken); scanf("%lu",&degisken); 0 4294967295 4

Virgüllü Sayı float degisken; printf("%f",degisken); scanf("%f",&degisken); 1,17549e-38 3,40282e+38 4

Uzun Virgüllü Sayı

double degisken; printf("%lf",degisken); scanf("%lf",&degisken); 2,22504e-308 1,79769e+308 8

Aritmetik Operatör ve İfadeleri

• ( + ) : Toplama İşlemi

• ( - ) : Çıkarma İşlemi

• ( *) : Çarpma İşlemi

• ( / ) : Bölme İşlemi

• ( % ) : Modül (Bölme İşleminde Kalan Sayı)

• Örnek

• 5+6 = 11

• 10-8 = 2

• 20 * 3 = 60

• 45 / 15 = 3

• 22 % 5 = 2

Arttırma ve Azaltma Operatörleri

• Bir değişkenin değerini 1 artırmak istiyorsak:

• a=a+1;

• a++;

• a+=1;

• kullanılır.

• Bir değişkenin değerini 1 azaltmak istiyorsak:

• a=a-1;

• a--;

• a-=1;

• kullanılır.

Arttırma ve Azaltma Operatörleri Kullanım Şekilleri

++ ve -- operatörleri bir değişkenin solunda (prefix) veya sağında (postfix) yer alabilir.

a++; ++a; a--; --a; gibi.

Örnek:

Not: \n işareti ekrana yazılan yazıları bir alt satırda yazma için kullanılır.

#include<stdio.h> main() { int a=0; int b=5; printf("\n Arttırma postfix kullanım : %d",a++); printf("\n Azaltma postfix kullanım : %d", b--); }

#include<stdio.h> main() { int a=0; int b=5; printf("\n Arttırma prefix kullanım : %d",++a); printf("\n Arttırma prefix kullanım : %d", --b); }

Arttırma ve Azaltma Operatörleri - Örnek

Not: \n işareti ekrana yazılan yazıları bir alt satırda yazma için kullanılır.

#include<stdio.h> main() { int a=0,b=0,c=0,d=0; ++a; b=++a; c=--b; d=c++; printf("\n a=%d, b=%d, c=%d, d=%d",a,b,c,d); }

İki kenarı girilen dikdörtgenin çevresini ve alanını hesaplayan program.

#include <stdio.h>

main()

{

int uzun;

int kisa;

int cevre;

int alan;

printf("uzun kenari giriniz :");

scanf("%d",&uzun);

printf("kisa kenari giriniz :");

scanf("%d",&kisa);

cevre= kisa+uzun+kisa+uzun;

alan = kisa*uzun;

printf("cevresi = %d",cevre);

printf("alan = %d",alan);

}

Girilen iki sayının (sınav notu) ortalamasını alan program.

#include <stdio.h>

main()

{

int birinciNot;

int ikinciNot;

float toplam;

float ortalama;

printf ("Birinci Notunuzu Giriniz = ");

scanf("%d",&birinciNot);

printf ("\nİkinci Notunuzu Giriniz = ");

scanf("%d",&ikinciNot);

toplam = birinciNot + ikinciNot;

ortalama = toplam/2;

printf("Ortalamanız = %f", ortalama);

}

Not: \n işareti ekrana yazılan yazıları bir alt satırda yazma için kullanılır.

Koşullu İfadeler

• if (Koşul)

• {

Koşul sağlanırsa buradaki kodlar işleme alınır.

• }

• else

• {

• Koşul sağlanmazsa buradaki kodlar işleme alınır.

• }

#include<stdio.h>

main()

{

int girilenSayi;

printf("Lütfen bir tam sayı giriniz = ");

scanf("%d",&girilenSayi);

if (girilenSayi > 100) // Koşul girilen sayının 100 den bük olması

printf("Girilen sayı 100'den büyüktür");

else

printf("Girilen sayı 100'den büyük değildir");

}

Not: // işaretinin olduğu satır yorum satırıdır. Derleyici bu satırı çalıştırmaz

Koşullu İfadeler

• if ( sayi >= 85)

• // Sayı 85'ten büyükse veya eşitse buraya yazılan kodlar işleme alınır.

• else if (sayi < 85 && sayi >= 70)

• // Sayı 85 ile 70 arasında veya 70' e eşitse buraya yazılan kodlar işleme alınır.

• else if (sayi < 70 && sayi >= 50)

• // Sayı 70 ile 50 arasında veya 50' ye eşitse buraya yazılan kodlar işleme alınır.

• else

• Yukarıdaki şartlardan hiçbiri sağlanmazsa buraya yazılan kodlar işleme alınır.

• Aşağıda koşullarda kullanılabilecek

operatörler verilmiştir.

< Küçüktür

> Büyüktür

== Eşittir

<= Küçük eşittir

>= Büyük eşittir

!= Eşit değildir

Koşullu İfadeler

switch (ifade) {

case sabit1: ifade – sabit1'e eşitse buradaki kodlar işleme alınır. break; case sabit2: ifade – sabit2'e eşitse buradaki kodlar işleme alınır. break; default: ifade – yukarıdaki hiçbir sabit değere eşit değilse buradaki kodlar işleme alınır. break;

}

Not: // işaretinin olduğu satır yorum satırıdır. Derleyici bu satırı çalıştırmaz

I. case anahtar sözcüklerini izleyen ifadeler tamsayı sabit türünde ifadeler olmalıdır, yani değişken içermemelidir.

II. İki case sabiti aynı değeri alamaz.

III. break; kodu programın kodları çalıştırdıktan sonra switch-case yapısını bitirir.

IV. default: kodunun altına yazılan kodlar switch-case yapısında ifadenin hiçbir sabite eşit olmadığı durumda çalıştırılır. C dilinde yazılması zorunlu değildir.

Not: \n işareti ekrana yazılan yazıları bir alt satırda yazma için kullanılır.

#include<stdio.h>

#include<locale.h>

main()

{

setlocale(LC_ALL, "Turkish");

int secimNumarasi;

printf("Yapmak istediğiniz işlemi seçiniz.\n");

printf("Toplama işlemi için 1'e basınız'\n");

printf("Çıkarma işlemi için 2'e basınız\n");

printf("Çarpma işlemi için 3'e basınız\n");

printf("Bölme işlemi için 4'e basınız\n");

scanf("%d",&seciNumarasi);

switch (secimNumarasi) // ifademiz secimNumarasi

{

case 1:

printf("Toplama işlemini seçtiniz");

break;

case 2:

printf("Çıkarma işlemini seçtiniz");

break;

case 3:

printf("Çarpma işlemini seçtiniz");

break;

case 4:

printf("Bölme işlemini seçtiniz");

break;

default:

printf("Yanlış bir seçim yaptınız.");

break;

}

switch – case kodunun özellikleri

Birleşik Operatörler

• if ( sayi >= 85)

• // Sayı 85'ten büyükse veya eşitse buraya yazılan kodlar işleme alınır.

• else if (sayi < 85 && sayi >= 70)

• // Sayı 85 ile 70 arasında veya 70' e eşitse buraya yazılan kodlar işleme alınır.

• else if (sayi < 70 && sayi >= 50)

• // Sayı 70 ile 50 arasında veya 50' ye eşitse buraya yazılan kodlar işleme alınır.

• else

• Yukarıdaki şartlardan hiçbiri sağlanmazsa buraya yazılan kodlar işleme alınır.

• Aşağıda koşullarda kullanılabilecek

birleşik operatörler verilmiştir.

&& ve

|| veya

! tersi

Döngüler

• For Döngüsü

for(int a=0; a<15; a++)

{ // a değişkeninin değeri 0'dan başlayacak ve a değeri 15'ten küçük olduğu sürece döngü devam edecektir. Döngü her döndüğünde a değişkeninin değer 1 artacaktır. (a++ ifadesi a değişkeninin değerini birer birer artırmak için kullanılır.)

}

Not: // işaretinin olduğu satır yorum satırıdır. Derleyici bu satırı çalıştırmaz

#include<stdio.h>

main()

{

for(int i = 1 ; i <= 10; i++ )

{

printf("\n%d. Sıra",i);

}

}

Soldaki programın çıktısı:

1. Sıra

2. Sıra

3. Sıra

4. Sıra

5. Sıra

6. Sıra

7. Sıra

8. Sıra

9. Sıra

10. Sıra

Not: \n işareti ekrana yazılan yazıları bir alt satırda yazma için kullanılır.

Döngüler

• While Döngüsü

while(Koşul)

{

// Bu döngü yazılan koşul doğru olduğu sürece devam edecektir. Koşul değişmediği sürece döngü sürekli döneceği için program takılı kalır. Bu yüzden döngünün durması için koşul değiştirilir.

}

Not: // işaretinin olduğu satır yorum satırıdır. Derleyici bu satırı çalıştırmaz

#include<stdio.h>

main()

{

int i = 1;

while( i <= 10 )

{

printf("\n%d. Sıra",i);

i++;

}

}

Soldaki programın çıktısı:

1. Sıra

2. Sıra

3. Sıra

4. Sıra

5. Sıra

6. Sıra

7. Sıra

8. Sıra

9. Sıra

10. Sıra

Not: \n işareti ekrana yazılan yazıları bir alt satırda yazma için kullanılır.

#include<stdio.h>

main()

{

int i = 1;

while( i <= 10 )

{

printf("\n%d. Sıra",i);

i++;

if(i==5) break;

}

}

Soldaki programın çıktısı:

1. Sıra

2. Sıra

3. Sıra

4. Sıra

Not: \n işareti ekrana yazılan yazıları bir alt satırda yazma için kullanılır.

break komutu döngüyü istenilen yerde durdurmak için kullanılır. if koşulunda i değişkeni 5'e eşit olunca break komutuyla döngüyü sonlandırdık.

goto Yapısı

isim:

// Buraya yazılmış kodlar olsun

// ……

// ……

if( kosul )

{

goto isim

}

Not: // işaretinin olduğu satır yorum satırıdır. Derleyici bu satırı çalıştırmaz

• goto yapısında bir etiket kullanılır (isim). Program çalışmaya devam ederken goto koduna gelince goto koduna yazılmış etiketin bulunduğu satıra gider.

• Soldaki örnekte if içine yazılmış bir goto kodu ve goto kodunun yanında isim etiketi var. if koşulu sağlanıp bilgisayar goto kodunu çalıştırdığında, program isim etiketini bulur ve çalışmasına oradan devam eder.

• goto bir döngü değildir fakat döngü gibi de kullanılabilir.

#include<stdio.h>

main()

{

int i = 1;

baslangicNoktasi:

printf("\n%d. Sıra",i);

i++;

if( i<=10 ) goto baslangicNoktasi;

}

Soldaki programın çıktısı:

1. Sıra

2. Sıra

3. Sıra

4. Sıra

5. Sıra

6. Sıra

7. Sıra

8. Sıra

9. Sıra

10. Sıra

Not: \n işareti ekrana yazılan yazıları bir alt satırda yazma için kullanılır.

Matematik Fonksiyonları

abs() Bu fonksiyon verilen tam sayının mutlak değerini döndürür. Çıktı

her zaman pozitiftir.

round() Verilen sayının ondalık kısmı. 1 ve 5 arasında ise bir alta yuvarlar.

Eğer 5 ve 9 arasında ise bir üste yuvarlar.

sqrt() Bu fonksiyon verilen değerin karekökünü bulur.

pow() Bu fonksiyon verilen iki sayının (kök ve üst) kabul ederek üstel

değerini bulur.

#include <stdio.h>

#include <math.h>

int main()

{

int sayi1 = -5;

float sayi2 =1.4;

float sayi3 =1.5;

float sayi4 =1.8;

int sayi5 = 64;

int sayi6 = 3;

printf("Sayının mutlak değeri %d",abs(sayi1));

printf("\nSayıyı yuvarla %f",round(sayi2));

printf("\nSayıyı yuvarla %f",round(sayi3));

printf("\nSayıyı yuvarla %f",round(sayi4));

printf("\nSayının karekök değeri %f",sqrt(sayi5));

printf("\nÜslü Sayı %f",pow(sayi6,3));

}

Soldaki programın çıktısı:

Sayının mutlak değeri 5

Sayıyı yuvarla 1.000000

Sayıyı yuvarla 2.000000

Sayıyı yuvarla 2.000000

Sayının karekök değeri 8.000000

Üslü Sayı 27.000000

Not: \n işareti ekrana yazılan yazıları bir alt satırda yazma için kullanılır.

Fonksiyonlar

Programlama dillerinde kendinize ait fonksiyonlar tanımlayıp, bu fonksiyonları kullanarak çeşitli işlemleri yapabilirsiniz. Her bir fonksiyonun kendine ait özel bir ismi vardır ve fonksiyonları kullanacağınız zaman onları bu isimlerle çağırırsınız.

Örnek:

void karesiniAl ()

void ikiyeBol ()

Not: // işaretinin olduğu satır yorum satırıdır. Derleyici bu satırı çalıştırmaz

#include<stdio.h>

void besleCarp (int gelenSayi)

{

gelenSayi = gelenSayi * 5;

printf("Çarpım= %d", gelenSayi);

}

main( )

{

int sayi = 6;

besleCarp(sayi);

}

Soldaki programda besleCarp isminde bir fonksiyon tanımlanmıştır. Bu fonksiyona baktığımızda fonksiyonun, gönderilen sayıyı 5 ile çarpıp ekrana yazdırdığını görüyoruz. main fonksiyonunda besleCarp fonksiyonunu çağırırken ismini yazıp varsa parantez içine parametresini yazıyoruz.

Programın Çıktısı:

Çarpım= 30

Not: \n işareti ekrana yazılan yazıları bir alt satırda yazma için kullanılır.

#include<stdio.h>

int besleCarp (int gelenSayi)

{

gelenSayi = gelenSayi * 5;

return gelenSayi;

}

main( )

{

int sayi = 7;

int sonuc;

sonuc = besleCarp(sayi);

printf("sonuc = %d",sonuc);

}

Soldaki programda besleCarp fonksiyonun görevi gelen sayıyı 4 ile çarpıp sonucu çağrıldığı yere göndermektir.

Return sayesinde fonksiyonlar işlemlerini yapar ve bize istediğimiz bilgileri verir.

Soldaki programda besleCarp fonksiyonu kendisine gönderilen sayıyı 5 ile çarpıp sonucu bize verir. Burada sonucu bize geri verdiği satır return gelenSayi.

Main fonksiyonunda besleCarp fonksiyonundan gelen veriyi sonuc değişkenine atayıp ekrana yazdırır.

Not: \n işareti ekrana yazılan yazıları bir alt satırda yazma için kullanılır.

Diziler

• Dizi bir kümedir. Aynı tipte verilere tek bir isimle erişmek için kullanılır.

Örnek dizi tanımlama:

• int dizi[100];

• int sayi[10];

Dizilere değer verme:

• dizi[0] = 15;

• sayi[5]=3;

Örnek dizi tanımlama:

• int kume[6] = { 4, 8, 15, 16, 23, 42 };

• float kumeler[ 5 ] = { 1.5, 1.6, 12.3, 16, 21.5};

• int kume[ ] = { 4, 8, 15, 16, 23, 42 };

• float kumeler[ ] = { 1.5, 1.6, 12.3, 16, 21.5};

• Dizi elemanlarının sayısı (index) 0 dan başlar.

#include <stdio.h>

main()

{

int dizi[10];

dizi[0] = 10;

dizi[1] = 15;

dizi[2] = 2;

printf("%d", dizi[0]);

printf("%d", dizi[1]);

printf("%d", dizi[2]);

}

#include <stdio.h>

main()

{

int kume[600] ;

for(int a = 0; a < 600; a++)

{

kume[a] =a ;

}

}

Not: \n işareti ekrana yazılan yazıları bir alt satırda yazma için kullanılır.

#include <stdio.h>

main()

{

int sayi[10];

int a;

for(a=0; a<=25;a++)

{

sayi[a] = a;

}

for(a=0; a<=25;a++)

{

printf("\n%d",sayi[a]);

}

}

#include <stdio.h>

main()

{

int kume[10];

for(int a=0; a<=5;a++)

{

printf("diziye sayi gir = ");

scanf("%d",&kume [a]);

}

for(int b=0; b<=5;b++)

{

printf("\n%d", kume[b]);

}

}

Not: \n işareti ekrana yazılan yazıları bir alt satırda yazma için kullanılır.

sizeof Fonksiyonu

• sizeof fonksiyonu veri tiplerinin bellekte ne kadar yer kapladığını gösterir

• char => 1 byte yer kaplar

• int => 4 byte yer kaplar

• float => 4 byte yer kaplar

• double => 8 byte yer kaplar

Kullanım şekli:

#include <stdio.h>

main()

{

printf("char %d byte yer kaplar\n", sizeof (char));

printf("int %d byte yer kaplar\n", sizeof (int));

printf("float %d byte yer kaplar\n", sizeof (float));

printf("double %d byte yer kaplar\n", sizeof (double));

}

sizeof Fonksiyonu ve Diziler

• sizeof fonksiyonu ile dizilerin bellekte kapladığı yer ve eleman sayıları öğrenilebilir.

• int sayilar[] = {3,6,9,2,5,8};

• sizeof(sayilar) => sayilar dizisinin bellekte kapladığı yeri gösterir

• int eleman_sayisi = sizeof(sayilar) / sizeof(int);

• Sayilar dizisinin apladığı yer / integer veri tipinin kapladığı yer

Kullanım şekli:

#include <stdio.h>

main()

{

int kumeler[] = {3,6,9,2,5,8};

int eleman_sayisi = sizeof(kumeler) / sizeof(int);

printf("sayilar dizisinin eleman sayisi = %d",eleman_sayisi);

}

Özet

Dizi tanımlama => int sayilar[100];

Dizinin bellekte kapladığı yer = sizeof(dizinin ismi) örnek : sizeof(sayilar)

Veri tipinin bellekte kapladığı yer = sizeof(veri tipi) örnek : sizeof(int)

1. Bir dizideki en küçük sayıyı bulan program.

2. Bir dizideki sayıları toplayan program.

3. Klavyeden girilen sayı kadar elamanı olan (dizi elemanları klavyeden girilecek) ve bu elemanları toplayan program.

Not: \n işareti ekrana yazılan yazıları bir alt satırda yazma için kullanılır.

#include <stdio.h>

main()

{

int dizi[9], gecici;

for(int i=0; i<10; i++)

{

printf("%d Sayi giriniz: ", i+1);

scanf("%d", &dizi[i]);

}

Not: \n işareti ekrana yazılan yazıları bir alt satırda yazma için kullanılır.

for(int i=0; i<9;i++)

{

for(int j=i+1; j<10; j++)

{

if(dizi[i] > dizi[j])

{

gecici = dizi[i];

dizi[i] = dizi[j];

dizi[j] = gecici;

}

}

}

for(int i=0; i<10; i++)

printf(" %d ", dizi[i]);

}

#include <stdio.h> main() { int dizi[9], gecici; for(int i=0; i<10; i++) { printf("%d Sayi giriniz: ", i+1); scanf("%d", &dizi[i]); } for(int i=0; i<9;i++) { for(int j=i+1; j<10; j++) { if(dizi[i] > dizi[j]) { gecici = dizi[i]; dizi[i] = dizi[j]; dizi[j] = gecici; } } } for(int i=0; i<10; i++) printf(" %d ", dizi[i]); }

Not: \n işareti ekrana yazılan yazıları bir alt satırda yazma için kullanılır.

#include <stdio.h> main() { int kumeler[] = { 60,80,55,42,13,24,26,25,26,55,45,50,50,40 }; int sayi, kontrol = 0; printf("Bir sayi giriniz :"); scanf("%d",&sayi); int eleman_sayisi = (sizeof(kumeler) / sizeof(int)); for (int i = 0; i < eleman_sayisi; i++) { if (sayi == kumeler[i]) { kontrol++; } } if (kontrol == 0) { printf("Sayi dizi icinde bulunamadi..."); } else { printf("Bu sayi dizide %d adet var", kontrol); } }

Çok Boyutlu Diziler

Örnek dizi tanımlama:

int dizi[3][4];

int dizi[3][4] = { 8, 16, 9, 52, 3, 15, 27, 6, 14, 25, 2, 10 };

int dizi[3][4] = { {8, 16, 9, 52}, {3, 15, 27, 6}, {14, 25, 2, 10} };

Diziyi tanımlarken, yukardaki gibi bir ilk değer atama yaparsanız, elemanların değeri aşağıdaki gibi olur:

Satır 0 : 8 16 9 52

Satır 1 : 3 15 27 6

Satır 2 : 14 25 2 10

Not: \n işareti ekrana yazılan yazıları bir alt satırda yazma için kullanılır.

Bir boyutlu dizi İki boyutlu dizi

Not: \n işareti ekrana yazılan yazıları bir alt satırda yazma için kullanılır.

#include<stdio.h> int main( void ) { int dizi[3][4]; int i, j; for( i = 0; i < 3; i++ ) { for( j = 0; j < 4; j++ ) { dizi[ i ][ j ] = 5; } } }

#include<stdio.h> int main( void ) { int dizi[3][4] = { 8, 16, 9, 52, 3, 15, 27, 6, 14, 25, 2, 10 }; printf("%d\n",dizi[ 0][ 0 ]); printf("%d\n",dizi[ 0][ 1 ]); printf("%d\n",dizi[ 1][ 0 ]); printf("%d\n",dizi[ 2][ 0 ]); printf("%d\n",dizi[ 2][ 1 ]); printf("%d\n",dizi[ 2][ 3 ]); }

Hata Ayıklama

• [Error] expected ';' before 'scanf‘

• [Error] 'print' was not declared in this scope

• [Error] 'say' was not declared in this scope

• [Error] expected primary-expression before ')' token

• [Error] missing terminating " character

• [Error] expected '}' at end of input

• undefined reference to `WinMain‘

• [Error] stdo.h: No such file or directory

• [Error] 'printf' was not declared in this scope

• expected

• before

• declared

• in this scope

• primary-expression

• missing terminating

• at end of input

• undefined reference

• bekleniyor

• önce

• tanımlama

• Çalışma alanı

• birincil ifade

• eksik sonlandırma

• Verinin sonunda

• tanımlanmamış referans

Recommended