Shartli operatorlar — if / else / else if

~15 daq · C tili · Asoslar

Hayotda qaror qabul qilish

Har kuni minglab qaror qabul qilamiz:

Agar havo yomg'irli bo'lsa → soyabon ol
Aks holda → soyabonsiz chiq

Agar pul yetarli bo'lsa → sotib ol
Aks holda → keyinroq ol

Dasturlar ham xuddi shunday ishlaydi. Shart bajarilsa — bir ish, bajarilmasa — boshqa ish. Bu shartli operatorlar — dasturlashning asosi.


1. if — Faqat shart bajarilsa

Sintaksis

if (shart) {
    // shart to'g'ri bo'lsa shu yerga kiradi
}

Qanday ishlaydi?

shart tekshiriladi
    |
  true  → blok bajariladi
  false → o'tkazib yuboriladi

Misol

#include <stdio.h>

int main() {
    int yosh = 20;

    if (yosh >= 18) {
        printf("Ovoz berish huquqiga ega\n");
    }

    printf("Dastur tugadi\n");
    return 0;
}

Natija (yosh = 20):

Ovoz berish huquqiga ega
Dastur tugadi

Natija (yosh = 15):

Dastur tugadi

💡 Diqqat: yosh >= 18 shart 0 (noto'g'ri) yoki 1 (to'g'ri) qaytaradi. if faqat 1 da ichiga kiradi.


2. if-else — Ikki yo'l

Sintaksis

if (shart) {
    // shart to'g'ri
} else {
    // shart noto'g'ri
}

Qanday ishlaydi?

shart tekshiriladi
    |
  true  → if bloki bajariladi
  false → else bloki bajariladi

Misol — Harorat ogohlantirishi

#include <stdio.h>

int main() {
    float harorat;

    printf("Haroratni kiriting: ");
    scanf("%f", &harorat);

    if (harorat <= 0) {
        printf("Muzlaydi\n");
    } else {
        printf("Muzlamaydi\n");
    }

    return 0;
}

Natija (harorat = -5):

Muzlaydi

Natija (harorat = 10):

Muzlamaydi

Misol — Juft yoki toq

#include <stdio.h>

int main() {
    int son;

    printf("Son kiriting: ");
    scanf("%d", &son);

    if (son % 2 == 0) {
        printf("Juft son\n");
    } else {
        printf("Toq son\n");
    }

    return 0;
}

Natija (son = 7):

Toq son

💡 Eslatma: son % 2 == 0 — qoldiq 0 bo'lsa juft. Bu shartni yodlab oling, juda ko'p ishlatiladi.


3. else if — Ko'p shartlar

Ikki holatdan ko'p bo'lsa — else if ishlatiladi.

Sintaksis

if (shart1) {
    // shart1 to'g'ri
} else if (shart2) {
    // shart2 to'g'ri
} else if (shart3) {
    // shart3 to'g'ri
} else {
    // hech biri to'g'ri emas
}

Qanday ishlaydi?

shart1 → true? → ha → blok1, tugadi
              |
             yo'q → shart2 → true? → ha → blok2, tugadi
                                  |
                                 yo'q → shart3 → true? → ha → blok3, tugadi
                                                       |
                                                      yo'q → else bloki

⚠️ Muhim: Birinchi to'g'ri shart bajariladi va qolganlar tekshirilmaydi. Tartib muhim!

Misol — Ball tizimi

#include <stdio.h>

int main() {
    float ball;

    printf("O'rtacha bahoni kiriting: ");
    scanf("%f", &ball);

    if (ball >= 4.5) {
        printf("Namunali\n");
    } else if (ball >= 3.8) {
        printf("Qoniqarli\n");
    } else {
        printf("Qoniqarsiz\n");
    }

    return 0;
}

Natija (ball = 4.75):

Namunali

Natija (ball = 4.0):

Qoniqarli

Natija (ball = 3.5):

Qoniqarsiz

4. if + char — Belgilar bilan ishlash

char o'zgaruvchisi aslida son (ASCII kodi). Shuning uchun uni ham shartlarda ishlatish mumkin.

char harf = 'A';

// Ikki usul — ikkalasi ham ishlaydi:
if (harf == 'A') { ... }      // belgi bilan solishtirish
if (harf == 65)  { ... }      // ASCII kodi bilan

ASCII eslatma

'A' - 'Z'  →  65  - 90    (katta harflar)
'a' - 'z'  →  97  - 122   (kichik harflar)
'0' - '9'  →  48  - 57    (raqam belgilari)

Misol — Unli yoki undosh

#include <stdio.h>

int main() {
    char harf;

    printf("Harf kiriting: ");
    scanf(" %c", &harf);

    if (harf == 'a' || harf == 'e' || harf == 'i' ||
        harf == 'o' || harf == 'u') {
        printf("Unli harf\n");
    } else {
        printf("Undosh harf\n");
    }

    return 0;
}

Natija (harf = 'a'):

Unli harf

Natija (harf = 'b'):

Undosh harf

Misol — Katta yoki kichik harf

#include <stdio.h>

int main() {
    char belgi;

    printf("Belgi kiriting: ");
    scanf(" %c", &belgi);

    if (belgi >= 'A' && belgi <= 'Z') {
        printf("Katta harf\n");
    } else if (belgi >= 'a' && belgi <= 'z') {
        printf("Kichik harf\n");
    } else {
        printf("Harf emas\n");
    }

    return 0;
}

Natija (belgi = 'Z'):

Katta harf

Natija (belgi = '5'):

Harf emas

5. Ichma-ich if — Nested if

if ichida yana if bo'lishi mumkin.

#include <stdio.h>

int main() {
    int son;

    printf("Son kiriting: ");
    scanf("%d", &son);

    if (son > 0) {
        printf("Musbat\n");

        if (son % 2 == 0) {
            printf("va juft\n");
        } else {
            printf("va toq\n");
        }

    } else if (son < 0) {
        printf("Manfiy\n");
    } else {
        printf("Nol\n");
    }

    return 0;
}

Natija (son = 8):

Musbat
va juft

Natija (son = -3):

Manfiy

⚠️ Maslahat: Ichma-ich if 3 darajadan oshmasin. Oshsa — kod o'qilmay qoladi. Bu "callback hell" deyiladi.


6. Keng tarqalgan xatolar

Xato 1 — = o'rniga ==

int x = 5;

if (x = 10) {    // ❌ tayinlash — x = 10, doim true!
    printf("teng\n");
}

if (x == 10) {   // ✅ solishtirish
    printf("teng\n");
}

Xato 2 — {} qavslarni unutish

int x = 5;

if (x > 3)
    printf("Katta\n");    // ✅ faqat shu if ga bog'liq
    printf("Salom\n");    // ❌ if ga bog'liq emas! doim chiqadi

Doim {} ishlating — hatto bitta qator bo'lsa ham.

Xato 3 — Float solishtirish

float a = 0.1f + 0.2f;

if (a == 0.3f) {          // ❌ float aniq emas!
    printf("teng\n");
}

if (a - 0.3f < 0.0001f) { // ✅ farqni tekshirish
    printf("teng\n");
}

Vazifalar

✏️ Vazifa 1 — Ovoz berish huquqi

Foydalanuvchidan yosh so'rang. Agar 18 va undan katta bo'lsa Ovoz berish huquqiga ega chiqsin, aks holda hech narsa chiqmasin.

Input Output
18 Ovoz berish huquqiga ega
15 (hech narsa)

✏️ Vazifa 2 — Chegirma

Foydalanuvchidan xarid miqdori ($) so'rang. Agar $100 dan ko'p bo'lsa — 10% chegirma qo'llang.

Input Output
200 Haridingiz 180$ bo'ldi
90 Haridingiz 90$ bo'ldi

Hint: chegirma = narx * 0.10


✏️ Vazifa 3 — Harorat ogohlantirishi

Foydalanuvchidan harorat so'rang. 0 va undan past → Muzlaydi, 0 dan yuqori → Muzlamaydi.

Input Output
0 Muzlaydi
10 Muzlamaydi
-10 Muzlaydi

✏️ Vazifa 4 — O'quvchi bahosi

Foydalanuvchidan 4 ta baho so'rang. O'rtachasini hisoblang: 4.5-5 → Namunali, 3.8-4.5 → Qoniqarli, pastroq → Qoniqarsiz.

Input Output
5 4 5 5 Namunali
3 4 3 3 Qoniqarsiz
4 5 4 4 Qoniqarli

Hint: float ortacha = (b1 + b2 + b3 + b4) / 4.0f;


✏️ Vazifa 5 — Unli yoki undosh

Foydalanuvchidan bitta harf so'rang. a, e, i, o, u bo'lsa → Unli harf, aks holda → Undosh harf.

Input Output
a Unli harf
b Undosh harf
o Unli harf

Hint: || operatori bilan bir nechta shart birlashtiring.


✏️ Vazifa 6 — Harf turi

Foydalanuvchidan bitta belgi so'rang. A-Z → Katta harf, a-z → Kichik harf, boshqa → Harf emas.

Input Output
A Katta harf
z Kichik harf
1 Harf emas

Hint: belgi >= 'A' && belgi <= 'Z'


✏️ Vazifa 7 — Uch sondan kattasi

Foydalanuvchidan 3 ta son so'rang. Eng kattasini toping.

Input Output
13 4 5 13
4 17 5 17

Hint: Avval a > b tekshiring, keyin g'olibni c bilan solishtiring.


✏️ Vazifa 8 — Kalkulyator

Foydalanuvchidan ikki son va amal (+, -, *, /) so'rang. / da nolga bo'lishni tekshiring.

Input Output
6 34 + 40
2 3 * 6
6 3 / 2
3 4 - -1

Hint: char amal; scanf(" %c", &amal);


✏️ Vazifa 9 — Musbat va manfiy

Foydalanuvchidan 3 ta son so'rang. Nechta musbat, nechta manfiy ekanligini chiqaring (0 hisoblanmaydi).

Input Output
12 -43 45 2 ta musbat, 1 ta manfiy
-11 0 24 1 ta musbat, 1 ta manfiy

Hint: int musbat = 0, manfiy = 0; — hisoblagich o'zgaruvchilar.


✏️ Vazifa 10 — Kabisa yili

Foydalanuvchidan yil so'rang. 400 ga bo'linsa yoki (4 ga bo'linsa VA 100 ga bo'linmasa) → kabisa.

Input Output
1997 Kabisa yili emas
1992 Kabisa yili
2100 Kabisa yili emas
2400 Kabisa yili

Hint: if (yil % 400 == 0 || (yil % 4 == 0 && yil % 100 != 0))


⭐ Qo'shimcha vazifalar

✏️ Vazifa 11 — Uchburchak tekshiruvi

Foydalanuvchidan uch tomonni oling (a, b, c). Uchburchak hosil qila oladimi?

Qoida: har bir tomon qolgan ikki tomonning
yig'indisidan kichik bo'lishi kerak.

a < b + c
b < a + c
c < a + b
Input Output
3 4 5 Uchburchak bo'ladi
1 2 10 Uchburchak bo'lmaydi

✏️ Vazifa 12 — Yil fasli

Foydalanuvchidan oy raqamini oling (1-12). Qaysi fasl ekanligini chiqaring.

12, 1, 2  → Qish
3, 4, 5   → Bahor
6, 7, 8   → Yoz
9, 10, 11 → Kuz
Input Output
3 Bahor
7 Yoz
11 Kuz
1 Qish

✏️ Vazifa 13 — Sonni tasniflash

Foydalanuvchidan son oling. Bir vaqtda bir nechta xususiyatini chiqaring:

Kiriting: 12
Musbat: ha
Juft:   ha
3 ga bo'linadi: ha
4 ga bo'linadi: ha
Input Musbat Juft 3 ga 4 ga
12 ha ha ha ha
-9 yo'q yo'q ha yo'q
7 ha yo'q yo'q yo'q

✏️ Vazifa 14 — Parol tekshiruvi

Foydalanuvchidan parol uzunligini (int) oling. Quyidagi qoidalarni tekshiring:

8 dan qisqa       → "Juda qisqa"
8 dan 12 gacha    → "Qabul qilindi"
12 dan uzun       → "Juda uzun"
Input Output
5 Juda qisqa
10 Qabul qilindi
20 Juda uzun

✏️ Vazifa 15 — Uch son tartibda

Foydalanuvchidan 3 ta son oling. Ular o'sish tartibida (a < b < c) joylashganmi?

Input Output
1 5 9 Tartibda
3 1 7 Tartibda emas
5 5 9 Tartibda emas

Hint: a < b && b < c


Keyingi dars

if-else bilan ko'p shartni yozdik. Lekin bir o'zgaruvchining ko'p qiymatini tekshirishda yanada qulay yo'l bor.

8-dars: switch–case