Kayıtlar

Aralık, 2017 tarihine ait yayınlar gösteriliyor

26 : Fonksiyonda Birden Fazla Değişkeni Güncellemek

Resim
Bir fonksiyonun birden fazla değişken dönüşü olamayacağını söylemiştik. Birden fazla değişken bir dizi halinde ise nasıl kullanacağımızı da gördük. Peki bu değişkenler birbirinden ayrı tiplerde değişkenler ise nasıl güncelleyebiliriz? Şimdi bir örnek uyduracağım. Diyeceğim ki bir fonksiyonum olsun. Rastgele boyutlu bir matris üretsin. Matrisin boyutları en çok 5x5 en az 1x1 olsun. Değerler 0 ile 1 arasında olsun ve rastgele seçilsin yine. Fonksiyonda bu değerler yazdırılsın ve sonra main fonksiyonda biz de tekrar yazdırıp doğru mu alıyoruz matrisi kontrol edebilelim. Önce matrisi oluşturacak bir fonksiyon yazmam gerekiyor. Rastgele sayılarla nasıl çalışılır görmüş de olacağız bu sayede. Ancak boyutun da rastgele olması bizim için problem. Çünkü main fonksiyonunda yazdırmak istediğimizde sınırları nasıl belirleyeceğimizi bilmemiz gerekir. Bunun için de bu boyut değerlerini fonksiyondan öğrenmemiz gerekir. rastgele_matris.c #include <stdio.h> #include <time.h> #include...

25 : Pointer ile Dizi Elemanlarına Ulaşma

Bir dizi, bellekte aynı tip verilerden oluşan bloğu ifade eder. Önceki örnekte bir işaretçinin bellekte verinin tutulduğu bir adresi ifade ettiğini söylemiştik. Aynı şekilde dizinin ismi de bu veri bloğunun başlangıç adresini ifade eder. Bir dizi değişkeni ile bir pointer değişkeni arasında benzerlikler bulunur. Aşağıdaki örnekte bir dizi tanımlayacağız ve bunu print ettireceğiz. Daha sonra tekrar pointer kullanarak ulaşıp print ettireceğiz ki fark olmadığını görelim. dizi_pointer.c #include <stdio.h> int main() { int data[7] = {12, 2, 4, 55, 132, 1567, 43}; int i = 0; printf("-- Girilen sayilar -- \n"); printf("Dizi ile: \n"); for(i = 0; i < 7; ++i) { printf("%d ", data[i]); } printf("\nPointer ile: \n"); for(i = 0; i < 7; ++i) { printf("%d ", *(data + i)); } printf("\n"); return 0; } Burada dikkat edilmesi gereken nokta *data ifadesinin data dizisinin i...

Pointer - 24 : İşaretçilerin(pointer) Durumu

İşaretçiler C-C++ dilinde belleğe ulaşmak, belleği kullanmak, yönetmek amaçlarıyla kullanılır. Bir pointer bir değişkenin bellekte tutulduğu yeri işaret eder. int var şeklinde bir değişken tanımladığımızda bu değişken bir değer tutarken int *var şeklinde bir değişken tanımladığımızda bu değişken bir adres tutmaktadır. int var; şeklinde tanımlanmış bir değişkenin adresi &var şeklinde ifade edilir. int *var; şeklinde tanımlanmış bir adresin tuttuğu değer ise *var şeklinde ifade edilir. pointers.c #include <stdio.h> int main(){ int* adres; int val; val = 22; printf("val in adresi : %p\n", &val); printf("val in degeri : %d\n\n", val); adres=&val; printf("adres pointerinin adresi : %p\n", adres); printf("adres pointerinin icerigi : %d\n\n", *adres); val = 11; printf("adres pointerinin adresi : %p\n", adres); printf("adres pointerinin icerigi : %d\n\n", *adres); *adres=...

23 : İki Karakter Dizisini Birleştirme

Bir karakter dizisini başka bir karakter dizisinin sonuna ekleyerek yeni bir karakter dizisi oluşturmayı inceleyeceğiz. Bunun için önce birinci dizinin boyutunu bulup daha sonra ikinci dizinin elemanlarını bu dizinin devamına kopyalayacağız. birlestir.c #include <stdio.h> int main() { char yazi1[100] = "ccppornekleri"; char yazi2[] = ".blogspot.com"; int i = 0; int count = 0; int j = 0; for (i = 0; yazi1[i] != '\0'; i++) { count++; } printf("count = %d i = %d \n",count, i); for (j = 0; yazi2[j] != '\0'; j++) { yazi1[count+j] = yazi2[j]; } yazi1[count+j] = '\0'; printf("%s \n", yazi1); return 0; } İlk for döngüsü ile null karaktere kadar olan karakterleri sayıyoruz ve ilk dizinin boyutunu buluyoruz. count burada boyutu tutuyor ancak print ettirdiğimiz count ve i sayılarından anlaşılacağı üzere i değişkeni de kullanılabilirdi. Aynı sayıyı tutmuş oluyorl...

22 : Karakter Dizisi Boyutu

Bir karakter dizisini başka bir yere kopyalayacağınız zaman ya da karakter dizisi üzerinde üzerinde herhangi bir işlem yapacağınız zaman, bir karakter arama olabilir örneğin, karakter dizisinin boyutunu bilmeniz gerekebilir. Boyutu bulmak ileriki aşamalarda bizim için bir amaç değil sadece küçük bir adım olsa da karakter dizilerinde çalışırken nasıl hareket edeceğimizi görmemiz açısından şuan faydalı olacaktır. boyut.c #include <stdio.h> #include <string.h> //strlen icin eklendi int main() { char site_adi[50] = "ccppornekleri.blogspot.com"; int i = 0; int sayac = 0; for (i = 0; site_adi[i] != '\0'; i++) { sayac++; } printf("%s \n",site_adi); printf("boyut = %d \n",sayac); printf("Boyut = %ld \n", strlen(site_adi)); return 0; } Yaptığımız şey aslında c kütüphanelerinde zaten tanımlı. strlen fonksiyonu kullanılarak bir string'in boyutu bulunabilir. Bu fonksiyonu kullanmak...

21 : Matrisler

Resim
Diziler tek boyutlu olabildiği gibi birden çok boyutlu da olabilir. Her bir dizi elemanı başka bir diziyi saklıyor gibi düşünülebilir. Tek boyutlu diziler [] ile tanımlanırken iki boyutlu diziler [][] ile tanımlanır. Örnek olarak iki matrisin çarpımı örneği verilebilir. matrix.c #include <stdio.h> void carpim(int mat1[4][3], int mat2[3]); int main() { int i = 0, j = 0; int matrix1[4][3] = {{1, 1, 1}, {2, 2, 2}, {1, 1, 1}, {2, 2, 2}}; int matrix2[3] = {2, 3, 4}; printf("Matris 1 : \n"); for (i = 0; i < 4; i++) { for(j = 0; j < 3; j++) { printf("%d ", matrix1[i][j]); } printf("\n"); } printf("Matris 2 : \n"); for (i = 0; i < 3; i++) { printf("%d \n",matrix2[i]); } printf("\n"); carpim(matrix1, matrix2); } void carpim(int mat1[4...

20 : Karakter Dizileri

Dizileri karakterlerle de oluşturabiliriz. Bu konuda C ve C++ arasında farklar var. İki dil ile de örnek vereceğiz. Basit şekilde nasıl olduğunu görmek açısından sitenin ismini tanımlayıp bir fonksiyonda print ettirelim. C dilinde bu işi yapmak için bir dizi oluşturmamız gerekiyor. Daha önce gördüğümüz şekilde fonksiyonda parametre olarak kullanmak için [] şeklinde dizi olduğunu belirtmemiz gerekiyor. karakter.c #include <stdio.h> void ismiYazdir(unsigned char isim[]); int main() { unsigned char site_ismi[] = "ccppornekleri.blogspot.com"; ismiYazdir(site_ismi); } void ismiYazdir(unsigned char isim[]) { printf("site ismi : %s \n", isim); } İlk değer verirken yazacağımız karakter dizisini "" işaretleri arasında atamamız gerekiyor. Bu işaretler arasında yazılan ifade derleyici tarafından bir karakter dizisi olarak tanınıyor. Tek bir karater atarken ' ' işaretleri içinde yazdığımızı hatırlatmak isterim. cpp dilinde ise farklı...

Diziler - 19 : Bir pikselin renk kodları nasıl belirtilir.

Önceki örneklerde bir sürü değişken tanımladık, kullanıcıdan değerler atamasını istedik. Bunların hepsi tek bir sayıyla yada karakterle tanımlanmıştı. Bir resme baktığımızda üzerinde binlerce farklı renkli noktalar görürüz. Bu her bir nokta pixel ismiyle ifade edilir ve her birinin farklı uzaylarda farklı değerleri vardır. En çok bildiğimiz RGB uzayını düşünürsek bir pixelin değerini belirtmek için R(kırmızı), G(yeşil) ve B(mavi) olarak 3 ayrı değer belirtmemiz gerekir. Örneğin 8 bitlik RGB uzayında 3 ana renk şöyle tanımlanır: Kırmızı  : 255, 0 , 0 Yeşil      : 0, 255, 0 Mavi     : 0, 0, 255 Bu değerleri kullanırken her bir pixel için 3 ayrı değişken mi tutmamız gerekir. Bir resimde alt sol pixele p1 dersem ve kodumda kullanmak istersem; varsayalım değerini değiştirmek istiyorum: p1_r , p1_g ve p1_b olarak 3 ayrı değişken mi oluşturmam gerekir. Ya da bir fonksiyona parametre olarak geçireceğim. Şu şekilde mi yazarım: renk_degistir(p1_r, ...

18 : Sayi Pozitif mi? Fonksiyonda enum döndürme

Fonksiyonların bir sayı döndürdüğünü görmüştük. Ya da bir fonksiyon bir değer döndürmeyip void şeklinde de tanımlanabilir. Dönüş değeri bunların yanında yapısal tipte de olabilir. Sayısal tiplerin haricinde şuana kadarki örneklerde sadece enumeration kullandığım için yine bu şekilde örnekleyeceğim. Daha sonra struct gibi tiplerin örneklerini verdiğimizde fonksiyonlarda da nasıl kullanıldığından bahsedebiliriz. Bu örnekte bir enumeration oluşturacağız. Bu enumeration sayının pozitif, negatif ya da sıfır olduğunu gösterecek. Yine kullanıcıdan bir sayı girmesini isteyeceğiz. Bu sayıyı doğrudan fonksiyona göndereceğiz. Bu sayıyı fonksiyonda kontrol edip hangi durumda olduğunu enumeration ile döndürüp bir switch case yapısı ile yazdıracağız. kontrol.c #include <stdio.h> enum sayi_durumu { sifir = 0, negatif, pozitif }; enum sayi_durumu kontrol (int val); int main() { int val1 = 0; int val2 = 0; printf("Ilk degeri giriniz: "); scanf("%d", &val1); ...

17 : Döngüsüz Faktoriyel Hesabı - Recursive fonksiyon

Daha önce faktoriyel hesabından bahsetmiştik. Kodu yazarken belli bir nokta isteyip döngülerle 1' den o sayıya kadar olan tam sayıları çarparak faktoriyel hesabını yapmıştık. Şimdi aynı hesabı başka bir yöntemle yapacağız. Bu yöntemin adı recursion olarak geçiyor. Özyineleme anlamına geliyor ve bir fonksiyonun kendi kendini çağırmasını amaçlıyor. Kod üzerinden açıklayalım. recursion.c #include<stdio.h> long int faktoriyel_carpimi(int n); int main() { int sayi = 0; long int sonuc = 0; printf("Bir sayi giriniz: "); scanf("%d", &sayi); sonuc = faktoriyel_carpimi(sayi); printf("%d faktoriyel = %ld \n", sayi, sonuc); return 0; } long int faktoriyel_carpimi(int n) { if (n > 1) return n * faktoriyel_carpimi(n-1); else return 1; } Kullanıcıdan bir sayı istedik; n . Bu sayıyı faktoriyel_carpimi fonksiyonunda parametre olarak kullandık. faktoriyel_carpimi fonsiyonunda bu sayının 1' den...

16 : Asal Sayı Kontrolü - void fonksiyon

Bir önceki örnekte fonksiyonlar bir iş yapıp bize bir değer dönüyordu. Biz bu değerleri bir dğeişkene atayıp bu değişken ile yeni bir iş yapıyorduk. Ancak bazı durumda bi iş yaptıktan sonra bizim geri dönüşe ihtiyacımız olmayabilir. Bir örnek ile görelim. Bir sayi isteyeceğiz ve bu sayi asal mi kontrol edeceğiz. asalmi.c #include<stdio.h> void asalmi(int param); int main() { int sayi; printf("Bir sayi giriniz: "); scanf("%d", &sayi); asalmi(sayi); return 0; } void asalmi(int param) { int i, asal = 1; for(i=2; i <= param/2; ++i) { if(param % i == 0) { asal = 0; break; } } if (asal == 1) printf("%d asaldir.\n", param); else printf("%d asal degildir.\n", param); } Burada fonksiyon bir sayi alacak ve kontrol edip bize sonucu yazdıracak. Bize herhangi bir değer dönmesine gerek kalmayacak. Bu sebeple fonksiyonun dönüş değer...

Fonksiyonlar - 15 : Aritmetik işlemler

Uzun kodlar yazılmaya başlandığında bazı kod parçaları tekrar edilmeye başlar. Ayrıca çok uzun satırlar kodun okunmasını zorlaştırır. Hata çözmedeki verim bir hayli düşer. Bu sebeplerden dolayı her işi kendi fonksiyonlarında yaptırmak daha doğru olur. Yani aritmetik bir işlem yapılırken aritmetik isimli bir fonksiyonda dört işlem yaptırmak yerine her işlem için ayrı bir fonksiyon yazmak daha doğru olur. Daha önce yazdığımız dört işlem kodunu fonksiyonlarla ve birden fazla kez işlem yapabilecek şekilde genişletelim. aritmetikfonksiyonlar.c #include<stdio.h> double topla (double sayi1, double sayi2); //prototipler double cikar (double sayi1, double sayi2); double carp (double sayi1, double sayi2); double bol (double sayi1, double sayi2); int main() { char islem; double sayi1, sayi2, sonuc; int bitir = 0; while(1) { printf("Islemi seciniz (+, -, *, /) cikis icin c: "); do{ islem = getchar(); }while (isspace(islem)); if (is...

14 : Konsol Giriş Kısıtlama - Karakter harici girişleri engelleme

Kod yazarken en önemli konulardan biri yazılan kodun hataya açık olmamasıdır. Hata çözme ilk olarak kodu yazarken yapılır. Kodu yazan kişi bütün açık kapıları düşünmelidir. Daha sonra çok kez test yapılır ve tekrar gözden geçirilir. Önceki örneklerimizde bir işlem yaparken bir limit belirleyip ve bunu son kullanıcıdan istiyoruz. Örneğin aritmetik işlem yaptırırken kullanıcıdan sayı girmesini bekliyoruz. Son kullanıcı bilerek ve ya bilmeyerek sayı girmesi gerekirken her hangi bir karakter girebilir. Bu gibi durumları kontrol etmediğimiz durumlarda kodda problemler oluşacaktır. Şuan bildiğimiz konulardan bir örnekle göstermek gerekirse, kullanıcının sadece küçük harf girmesini isteyelim. kucukharf.c #include<stdio.h> int main() { char islem; printf("Kucuk harf giriniz: "); do{ scanf("%c", &islem); }while (islem < 97 || islem > 122); return 0; } Burada bahsetmek istediğim ikinci bir konu ise do while döngüsü. Do w...

13 : Faktoriyel Hesabı

Bir sayının faktoriyel hesabı 1' den o sayıya kadar olan tam sayıların çarpımı ile bulunur. Negatif sayıların faktoriyeli yoktur. 0 faktoriyel ise 1' e eşittir. Bu bilgiler ışığında kodu yazalım. faktoriyel.c #include <stdio.h> int main() { int sayi, i; unsigned long long faktoriyel = 1; printf("Bir sayi giriniz: "); scanf("%d",&sayi); if (sayi < 0) { printf("Negatif sayilarin faktoriyeli yoktur.\n"); } else { for(i=2; i<=sayi; ++i) { faktoriyel *= i; } printf("%d faktoriyel = %llu \n", sayi, faktoriyel); } return 0; } Faktoriyel sonucunu atadığımız değişkeni unsigned long long seçtik çünkü sonuç hem negatif olamaz hem de bir çok tamsayı çarpımı olabileceği için çok büyük sayılar çıkabilir. Sayıyı kullanıcının girmesini istedikten sonra ilk kontrolümü negatif mi kontrolü. Çünkü daha önce söylediğimiz gibi...

12 : Yıldızlarla Üçgen Oluşturma - içiçe döngü

Döngü kullanarak tekrarlanan işleri yapmayı önceki örneklerde görmüştük. Şimdi bu bilgilerle aşağıdaki şekli oluşturalım: * * * * * * * * * * * * * * * Burada şekil oluşturulurken yine bir döngü kurup her indisi kontrol edip yeni bir printf fonksiyonu ile çizdirebiliriz. Kodu gösterirsek:  ucgen.c #include<stdio.h> int main() { int i = 0; for (i = 0; i < 5; i++) { if (i == 0) printf("* \n"); if (i == 1) printf("* * \n"); if (i == 2) printf("* * * \n"); if (i == 3) printf("* * * * \n"); if (i == 4) printf("* * * * * \n"); } return 0; } Burada yine aynı problemi görüyoruz. Bu üçgen 5 basamaklı bir üçgen. Ancak biz bu üçgeni 15 adımlı da yapmak isteyebilirdik. Aynı kodu 15 kere yazmak zorlaştı. Peki 150 adımlı olsa yapılabilir miydi? Bu tür problemler için iç içe döngüler kurabiliriz. Bu şekilde her bir döngü farklı bir b...

11 : Fibonacci Serisi

Tekrarlanan işleri for döngüsü ile yapabildiğimizi gördük. Ancak tek yöntem bu değil. Döngüler konusunun en popüler örneklerinden biri fibonacci serileridir. Bu örneği hem for döngüsü ile yapalım hem de bir diğer döngü olan while ile yapalım. Koda geçmeden önce fibonacci serisinden bahsedelim. Bu seri 1'den başlayıp bir sonraki sayıyı kendisi ve bir önceki sayıyı toplayarak bulmasıyla oluşur. Yani 1'den başlayan fibonacci serisi şöyle değerler alır. 1-1-2-3-5-8-13-21... Bu serinin popüler olmasının nedeni ise sonsuzdaki son iki değerin birbirine bölümünün altın oranı vermesi. Bunu da belirtmeden geçmeyelim. Burada sonsuza kadar gidebildiği için ve bizim bunu gerçekleştirmemiz olası olmadığı için kendimize bir durak noktası seçeceğiz. Örneğin 10 değer yazdırabiliriz.  fibonacci.c #include<stdio.h> int main() { int N = 10; int t1 = 0; int t2 = 1; int next = 0; int i = 0; for (i = 0; i < N; i++) { printf("%d ",t2); ...

Döngüler - 10 : 1' den 100'e kadar yazdırma

   printflerle konsolda yazılar yazdırabileceğimizi gördük. Ancak ben 1' den 100' e kadar yazdırmak istersem 100 tane printf kodu mu yazdıracağım. Peki 100 yerine 1000 yada 10000 istersem bu mümkün olacak mı? Bu gibi tekrarlanan durumlar için satır satır yazmaktansa döngüler kullanmak çok daha kolaydır. Bir örnekle görelim.  hello.c #include<stdio.h> int main() { printf("1\n"); printf("2\n"); printf("3\n"); printf("4\n"); printf("5\n"); printf("6\n"); printf("7\n"); printf("8\n"); printf("9\n"); printf("10\n"); return 0; } Burada 1 ile 10 arasındaki sayıları tek tek yazmak zorunda kaldık. 10 tane olduğu için çok uzun sürmedi. 100' e kadar yazmak istesek 10 kez daha yazmamız gerekecek tabii. Şimdi aynı çıktıyı bir döngü ile alalım. #include<stdio.h> int main() { int i = 0; // dongu icin bir indis olustu...

9 : Sayi Aralık Dışında mı? - Veya işleci

Önceki örneklerde VE (&&) işlecini göstermiştik. VEYA işlecinin de bulunduğundan bahsetmiştik. VEYA işleci nasıl çalışır merak edip anlamayamayanlar için küçük bir örnek verelim. Bir sayi isteyeceğiz ve bu sayının 50 ile 500 arasında olup olmadığını kontrol edeceğiz. aralik.c #include <stdio.h> int main() { int val1 = 0; printf("Bir sayi giriniz: "); scanf("%d", &val1); if ((val1 < 50) || (val1 > 500)) { printf("Deger aralik disindadir. \n"); } else { printf("Deger beklenen araliktadir. \n"); } return 0; } Burada VEYA işlecinin yapısından dolayı val1 değerinin 50' den küçük olması yada 500' den büyük olması koşullarından herhangi biri geçerli olması durumunda ilk koşul sağlanmış olur. Bu şekilde birden çok koşul kontrol edilecekse parantezler ile gruplamak hataları önlemede önemli olacaktır. VE ile VEYA işleçleri ve diğer işleçler de birlikte kullanılabilir.

8 : Koşul İfadesi ile Büyük Sayı "? :"

if else yada switch case koşullu durumları kontrol etmede gayet yeterli olsa da çok basit işler için uzun kod satırlarına ihtiyaç duyuyorlar. Daha basit koşullar için kullanılabilecek bir ifade daha var: "? :" Örnekle görelim.  buyuksayi.c #include <stdio.h> int main() { int val1 = 0; int val2 = 0; int temp = 0; printf("Bir sayi giriniz : "); scanf("%d",&val1); printf("Bir sayi daha giriniz : "); scanf("%d",&val2); temp = (val2>val1) ? val2 : val1; printf("Buyuk olan sayi : %d \n", temp); return 0; } Burada yine önce sayıları alıyoruz. Sonra koşulu değerlendiriyoruz. Bu bölüm şurada yapılıyor: (val2>val1) Eğer bu koşul doğruysa ilk ifade, değilse ikinci ifade çalışır ve temp değerine atanır. val2 : val1

7 : Dört İşlem

    Koşullu yapılar kurmak için if else yapısı haricinde bir yapı da kullanabiliriz. Bu yapıda gelen değerlerin ne olduğunu ön görmemiz gerekiyor. Ön göremediklerimiz ile ya ilgilenmiyoruz ya da hepsi için aynı tepkiyi veriyoruz. Bu yapı switch case yapısı olarak isimlendiriliyor.  dortislem.c # include <stdio.h> int main() { char islem; double sayi1, sayi2; printf("Islemi seciniz (+, -, *, /): "); scanf("%c", &islem); printf("Ilk sayiyi giriniz: "); scanf("%lf", &sayi1); printf("Ikinci sayiyi giriniz: "); scanf("%lf", &sayi2); switch(islem) { case '+': printf("%g + %g = %g\n",sayi1, sayi2, sayi1 + sayi2); break; case '-': printf("%g - %g = %g\n",sayi1, sayi2, sayi1 - sayi2); break; case '*': printf("%g * %g = %g\n",sayi1, sa...

6 : Üç Sayı Arasında En Büyük

   Koşullu durumları kontrol etmeyi bir önceki örnekte gördük. Ancak bazı durumlarda bir kaç koşulu aynı anda kontrol etmek gerekebilir. Bu örnekte bu durumlarda nasıl hareket edeceğimizi göreceğiz.  enbuyuk.c #include<stdio.h> int main() { int val1 = 0, val2 = 0, val3 = 0; int temp = 0; printf("Ilk sayiyi giriniz: \n"); scanf("%d",&val1); printf("Ikinci sayiyi giriniz: \n"); scanf("%d",&val2); if (val2 > val1) { temp = val1; val1 = val2; val2 = temp; } printf("Ucuncu sayiyi giriniz: \n"); scanf("%d",&val3); if (val3 > val1) { temp = val1; val1 = val3; val3 = temp; temp = val2; val2 = val3; val3 = temp; } else if ((val3 > val2) && (val3 < val1)) { temp = val2; val2 = val3; val3 = temp; } printf("en buyuk : %d \n", val1); printf("orta : %d...

Koşullu durumlar - 5 : Sayı Tek mi Çift mi?

Resim
Bir program çalışırken bazı dış etkenlerin durumuna göre yön değiştirebilir. Örneğin bir fonksiyonun çıktısına göre hangi işi yapacağınıza karar verebilirsiniz. Giriş parametrelerinin durumları yine sizin için fark yaratıyor olabilir. Bu durumlarda gerekli iş yapılmadan önce bazı kontroller yapmak gerekir. Sıradaki örnek girilen bir sayının tek ya da çift olduğunu yazdıracak.  tekcift.c #include<stdio.h> int main() { int sayi = 0; printf ("Bir sayi giriniz : \n"); scanf("%d",&sayi); if (sayi % 2 == 0) { printf("Girilen sayi cifttir. \n"); } else { printf("Girilen sayi tektir.\n"); } return 0; } Burada girilen sayi if ile kontrol ediliyor. Kontrol için mod alma işlemi kullanılıyor. Mod işlemi ilk sayının ikinci sayıya bölümünden kalan demektir. Eğer çıkan sonuç 0' a eşitse girilen sayı çifttir denir. Eğer 0' a eşit değilse if bölümü değil else bölümü çalışır. Girilen sayının tek o...