İçeriğe geç
Educora
Başlangıç17 dk3 / 8

Girdi, koşullar ve döngüler

scanf ile klavyeden değer oku, if ve switch ile karar ver, for, while ve do-while döngüleriyle işleri tekrarla.

Kendini test et
Bu derste öğreneceklerin
  • scanf ile sayı okumak ve & işaretinin neden gerektiğini açıklamak
  • if, else if, else ve switch ile dallanan programlar yazmak
  • Karşılaştırma ve mantıksal operatörlerle (&&, ||, !) koşul kurmak
  • for, while ve do-while döngülerini, break ve continue'yu yerinde kullanmak

Bir ATM PIN kodunu sorar; yanlış girersen yeniden sorar, üç yanlış denemeden sonra kartı bloke eder. Bu basit davranışta programlamanın üç temel fikri vardır: kullanıcıdan girdi almak, karar vermek ve işi tekrarlamak. Bu derste üçünü de C'de öğreneceksin.

scanf ile veri girişi

scanf fonksiyonu printf'in tersidir: klavyeden metin okur ve biçim belirtecine göre bir değişkene yazar. Değişkenin adının önüne & konur; bu, değişkenin bellekteki adresidir. scanf değeri nereye yazacağını bu adresten öğrenir. Adresleri işaretçiler dersinde çok daha ayrıntılı tanıyacaksın.

C
int age;
double height;
printf("Enter your age: ");
scanf("%d", &age);
printf("Enter your height in metres: ");
scanf("%lf", &height);
printf("Next year you will be %d.\n", age + 1);
Program parçası: kullanıcı 14 ve 1.62 girerse sonunda Next year you will be 15. yazdırılır. double için scanf'te %lf yazılır.

Dersin geri kalanındaki örneklerde çıktının hep aynı olması için değerleri klavyeden okumak yerine doğrudan değişkenlere yazacağız.

Koşullar: if, else if, else

if, parantez içindeki koşul doğru olduğunda bloğunu çalıştırır. C'de koşullar sayıdır: 0 yanlış, sıfırdan farklı her değer doğru kabul edilir. Karşılaştırma operatörleri doğru için 1, yanlış için 0 döndürür. Birden fazla koşul else if ile yukarıdan aşağıya denetlenir ve yalnızca ilk doğru koşulun bloğu çalışır.

OperatörAnlamıÖrnek (x = 7)
== !=eşit, eşit değilx == 7 → 1
< > <= >=küçük, büyük, küçük veya eşit, büyük veya eşitx < 5 → 0
&&VE: iki koşul da doğrux > 0 && x < 10 → 1
||VEYA: en az biri doğrux < 0 || x > 5 → 1
!DEĞİL: doğruyu yanlışa, yanlışı doğruya çevirir!(x == 7) → 0
C
#include <stdio.h>

int main(void) {
    int score = 78;
    if (score >= 90) {
        printf("Excellent\n");
    } else if (score >= 70) {
        printf("Good\n");
    } else if (score >= 50) {
        printf("Satisfactory\n");
    } else {
        printf("Try again\n");
    }
    int age = 15;
    if (age >= 13 && age <= 19) {
        printf("Teenager\n");
    }
    return 0;
}
Beklenen çıktı
Good
Teenager
78 ≥ 90 yanlış, 78 ≥ 70 ise doğrudur; bu yüzden Good yazdırılır ve kalan koşullar denetlenmez.
Etkileşimli
Simülasyon yükleniyor…
&& operatörü VE kapısı gibi çalışır: sonuç yalnızca iki giriş de 1 olduğunda 1'dir. ||'yi de denemek için OR'u seç.

Bir değişkeni birkaç sabit değerle karşılaştırman gerektiğinde switch daha okunaklıdır. Uygun case bulunur, çalışma oradan başlar ve break'e kadar sürer. Hiçbir case uymazsa default çalışır. switch yalnızca tam sayılar ve karakterlerle çalışır; karakter dizileri ve ondalıklı sayılarla çalışmaz.

C
#include <stdio.h>

int main(void) {
    double a = 12, b = 4;
    char op = '/';
    switch (op) {
        case '+': printf("%.2f\n", a + b); break;
        case '-': printf("%.2f\n", a - b); break;
        case '*': printf("%.2f\n", a * b); break;
        case '/':
            if (b != 0) printf("%.2f\n", a / b);
            else printf("Cannot divide by zero\n");
            break;
        default:
            printf("Unknown operator\n");
    }
    return 0;
}
Beklenen çıktı
3.00
Küçük bir hesap makinesi. Bir break unutulursa çalışma bir sonraki case'e “düşer” ve onu da çalıştırır.

Döngüler: for, while, do-while

for döngüsü, tekrar sayısı önceden bilindiğinde kullanışlıdır. Parantezde üç kısım vardır: başlangıç (int i = 1), koşul (i <= 5) ve her adımdan sonraki değişiklik (i++). Koşul yanlış olur olmaz döngü durur.

C
#include <stdio.h>

int main(void) {
    for (int i = 1; i <= 5; i++) {
        printf("7 x %d = %d\n", i, 7 * i);
    }
    return 0;
}
Beklenen çıktı
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35

while döngüsü koşul doğru olduğu sürece çalışır ve tekrar sayısı önceden bilinmediğinde seçilir. do-while ise koşulu bloktan sonra denetler; bu yüzden bloğu en az bir kez mutlaka çalışır. Aşağıdaki program önce bir sayının basamaklarının toplamını bulur, sonra do-while'ın koşul yanlış olsa bile bir kez çalıştığını gösterir.

C
#include <stdio.h>

int main(void) {
    int n = 2024, sum = 0;
    while (n > 0) {
        sum += n % 10;
        n /= 10;
    }
    printf("Sum of digits: %d\n", sum);

    int count = 10;
    do {
        printf("count = %d\n", count);
        count++;
    } while (count < 5);
    return 0;
}
Beklenen çıktı
Sum of digits: 8
count = 10
2024 → 4 + 2 + 0 + 2 = 8. count < 5 baştan yanlıştır ama do-while bloğu bir kez çalıştırdı.

do-while girdiyi denetlemek için idealdir: soru en az bir kez sorulmalı ve cevap geçerli olana kadar tekrarlanmalıdır.

C
int mark;
do {
    printf("Enter a mark from 1 to 5: ");
    scanf("%d", &mark);
} while (mark < 1 || mark > 5);

continue o anki adımın geri kalanını atlayıp bir sonraki adıma geçer, break ise döngüyü hemen bitirir:

C
#include <stdio.h>

int main(void) {
    for (int i = 1; i <= 10; i++) {
        if (i % 3 == 0) {
            continue;
        }
        if (i > 7) {
            break;
        }
        printf("%d\n", i);
    }
    return 0;
}
Beklenen çıktı
1
2
4
5
7
3 ve 6 atlandı (continue), döngü ise 8'de durdu (break).

Önemli noktalar

  • scanf("%d", &x) klavyeden sayı okur; & değişkenin adresini verir, double için %lf yazılır.
  • C'de 0 yanlış, sıfırdan farklı her değer doğrudur; karşılaştırmalar 1 ya da 0 döndürür.
  • switch'te her case'i break ile bitir; yoksa çalışma bir sonraki case'e geçer.
  • for sayı bilindiğinde, while koşul sürdükçe, do-while en az bir kez çalışır.
  • continue sonraki adıma geçer, break döngüyü bitirir.

Kendini test et

10 soru. Her doğru cevap XP kazandırır.

1 / 10
Bir int değişkeni okumak için hangi yazım doğrudur?