scanfile sayı okumak ve&işaretinin neden gerektiğini açıklamakif,else if,elseveswitchile dallanan programlar yazmak- Karşılaştırma ve mantıksal operatörlerle (
&&,||,!) koşul kurmak for,whilevedo-whiledöngülerini,breakvecontinue'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.
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);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ör | Anlamı | Örnek (x = 7) |
|---|---|---|
== != | eşit, eşit değil | x == 7 → 1 |
< > <= >= | küçük, büyük, küçük veya eşit, büyük veya eşit | x < 5 → 0 |
&& | VE: iki koşul da doğru | x > 0 && x < 10 → 1 |
|| | VEYA: en az biri doğru | x < 0 || x > 5 → 1 |
! | DEĞİL: doğruyu yanlışa, yanlışı doğruya çevirir | !(x == 7) → 0 |
#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;
}Good Teenager
Good yazdırılır ve kalan koşullar denetlenmez.&& 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.
#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;
}3.00
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.
#include <stdio.h>
int main(void) {
for (int i = 1; i <= 5; i++) {
printf("7 x %d = %d\n", i, 7 * i);
}
return 0;
}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.
#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;
}Sum of digits: 8 count = 10
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.
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:
#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;
}1 2 4 5 7
continue), döngü ise 8'de durdu (break).Önemli noktalar
scanf("%d", &x)klavyeden sayı okur;&değişkenin adresini verir,doubleiçin%lfyazı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 hercase'ibreakile bitir; yoksa çalışma bir sonrakicase'e geçer.forsayı bilindiğinde,whilekoşul sürdükçe,do-whileen az bir kez çalışır.continuesonraki adıma geçer,breakdöngüyü bitirir.
Kendini test et
10 soru. Her doğru cevap XP kazandırır.
int değişkeni okumak için hangi yazım doğrudur?