C PROGRAMLAMA - Etkileşimli ÖğrenmeProgramlama dillerinde kendinize ait fonksiyonlar...
Transcript of C PROGRAMLAMA - Etkileşimli ÖğrenmeProgramlama dillerinde kendinize ait fonksiyonlar...
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",°isken); -128 127 1
Kısa Tam Sayı short degisken; printf("%d",degisken); scanf("%d",°isken); -32768 32767 2
Tamsayı int degisken; printf("%d",degisken); scanf("%d",°isken); -32768 32767 2
Uzun Tamsayı long int degisken; printf("%ld",degisken); scanf("%ld",°isken); -2147483648 2147483647 4
İşaretsiz Tamsayı unsigned int
degisken; printf("%u",degisken); scanf("%u",°isken); 0 65535 2
İşaretsiz Uzun Tamsayı
long unsigned degisken;
printf("%lu",degisken); scanf("%lu",°isken); 0 4294967295 4
Virgüllü Sayı float degisken; printf("%f",degisken); scanf("%f",°isken); 1,17549e-38 3,40282e+38 4
Uzun Virgüllü Sayı
double degisken; printf("%lf",degisken); scanf("%lf",°isken); 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