Skip to content

4-dars: Shartli operatorlar (if, else, switch)

Dars haqida

Davomiyligi: 90 daqiqa Maqsad: Talaba C tilida shartlar yozishi, if-else-if-else, nested if va switch'dan to'g'ri foydalanishi kerak.

1. Shart nima?

Dasturda qarorlar qabul qilish:

Agar yosh 18 dan katta — kattalar
Aks holda — bola

C'da:

c
if (yosh >= 18) {
    printf("Kattalar\n");
} else {
    printf("Bola\n");
}

2. Asosiy if

c
if (shart) {
    // Shart rost (true) bo'lsa — bu kod ishlaydi
}

Misol:

c
int yosh = 25;

if (yosh >= 18) {
    printf("Kattalar\n");
}

yosh >= 18 rost — printf ishlaydi.

Qavslar

Bir statement bo'lsa, qavs majburiy emas:

c
if (yosh >= 18)
    printf("Kattalar\n");

Lekin doim qavs ishlating — kelajakda bug oldini oladi.

3. if-else

c
if (shart) {
    // shart rost
} else {
    // shart yolg'on
}

Misol:

c
int yosh = 15;

if (yosh >= 18) {
    printf("Kattalar\n");
} else {
    printf("Bola\n");
}

Natija: Bola

4. if-else if-else

Ko'p variant:

c
if (shart1) {
    // variant 1
} else if (shart2) {
    // variant 2
} else if (shart3) {
    // variant 3
} else {
    // hech qaysi
}

Misol — harf baho:

c
int ball = 75;

if (ball >= 90) {
    printf("A\n");
} else if (ball >= 80) {
    printf("B\n");
} else if (ball >= 70) {
    printf("C\n");
} else if (ball >= 60) {
    printf("D\n");
} else {
    printf("F\n");
}

Natija: C (75 >= 70, lekin 80 dan past)

5. Nested if

If ichida if:

c
if (yosh >= 18) {
    if (haydovchi_huquqi) {
        printf("Haydashga ruxsat\n");
    } else {
        printf("Yosh kattalar, lekin huquq yo'q\n");
    }
} else {
    printf("Bola, haydab bo'lmaydi\n");
}

Chuqurlikni cheklang

3-4 darajadan chuqurroq — o'qish qiyin.

Boshqa yo'l: operator && va || bilan.

c
if (yosh >= 18 && haydovchi_huquqi) {
    printf("Haydashga ruxsat\n");
}

6. Murakkab shartlar

c
int yosh = 25;
int ish_haqi = 5000000;
int tajriba = 3;

// Yoshi 18-60 VA ish_haqi 3M+ VA tajriba 2+
if (yosh >= 18 && yosh <= 60 && ish_haqi >= 3000000 && tajriba >= 2) {
    printf("Qabul qilindi\n");
}

// Yoshi 18 dan past YOKI 60 dan katta
if (yosh < 18 || yosh > 60) {
    printf("Ish yoshi emas\n");
}

// NOT
if (!(ish_haqi < 1000000)) {
    printf("Yetarli ish haqi\n");
}

7. To'liq misol: Imtihon natijasi

c
#include <stdio.h>

int main(void) {
    int ball = 75;
    
    if (ball < 0 || ball > 100) {
        printf("Xato: ball 0-100 oralig'ida bo'lishi kerak\n");
    } else if (ball >= 90) {
        printf("Ball: %d, Baho: A (Ajoyib)\n", ball);
    } else if (ball >= 80) {
        printf("Ball: %d, Baho: B (Yaxshi)\n", ball);
    } else if (ball >= 70) {
        printf("Ball: %d, Baho: C (O'rtacha)\n", ball);
    } else if (ball >= 60) {
        printf("Ball: %d, Baho: D (Qoniqarli)\n", ball);
    } else {
        printf("Ball: %d, Baho: F (Yiqildi)\n", ball);
    }
    
    return 0;
}

8. switch statement

switchif-else if ning bir nechta variant uchun qisqa shakli.

c
switch (qiymat) {
    case 1:
        // qiymat = 1
        break;
    case 2:
        // qiymat = 2
        break;
    case 3:
        // qiymat = 3
        break;
    default:
        // hech qaysi
        break;
}

Misol: Hafta kuni

c
#include <stdio.h>

int main(void) {
    int kun = 3;
    
    switch (kun) {
        case 1:
            printf("Dushanba\n");
            break;
        case 2:
            printf("Seshanba\n");
            break;
        case 3:
            printf("Chorshanba\n");
            break;
        case 4:
            printf("Payshanba\n");
            break;
        case 5:
            printf("Juma\n");
            break;
        case 6:
            printf("Shanba\n");
            break;
        case 7:
            printf("Yakshanba\n");
            break;
        default:
            printf("Noto'g'ri kun raqami\n");
            break;
    }
    
    return 0;
}

Natija: Chorshanba

9. break — to'xtatish

break unutmang

break — switch'dan chiqish. Yo'q bo'lsa — keyingi case'lar ham ishlaydi (fall-through).

c
switch (kun) {
    case 1:
        printf("Dushanba\n");
        // break yo'q
    case 2:
        printf("Seshanba\n");
        break;
}

kun = 1 bo'lsa, natija:

Dushanba
Seshanba

Bu — odatda xato. break ishlating!

Foydali fall-through

Ba'zan maxsus ishlatiladi:

c
int kun = 6;

switch (kun) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("Ish kuni\n");
        break;
    case 6:
    case 7:
        printf("Dam olish kuni\n");
        break;
    default:
        printf("Noto'g'ri\n");
        break;
}

kun = 6 yoki 7 — "Dam olish kuni".

10. switch cheklovlari

switch — faqat integer turlari (int, char, enum) bilan ishlaydi.

c
// ✓ To'g'ri
int x = 5;
switch (x) { ... }

char c = 'A';
switch (c) { ... }

// ✗ Yomon
float f = 3.14;
switch (f) { ... }   // XATO

char str[] = "Akmal";
switch (str) { ... }  // XATO

// Range yo'q
switch (x) {
    case 1...10:     // XATO (standart C'da)
        ...
}

Aslida switch — diskret qiymatlar uchun.

11. switch vs if-else

HolatTavsiya
Bir nechta aniq qiymatswitch
Range (1-10, 50+ va h.k.)if-else
Murakkab shartlarif-else
Faqat 2-3 ta tanlovif-else
5+ ta diskret tanlovswitch

12. Ternary (eslatma)

Eng oddiy shartlar uchun ? : ishlatish mumkin:

c
int yosh = 17;
char *kategoriya = (yosh >= 18) ? "Kattalar" : "Bola";

Lekin murakkab shartlar uchun — if-else aniqroq.

13. To'liq misol: Kalkulyator

c
#include <stdio.h>

int main(void) {
    double a = 10.0;
    double b = 3.0;
    char op = '+';
    
    switch (op) {
        case '+':
            printf("%.2f + %.2f = %.2f\n", a, b, a + b);
            break;
        case '-':
            printf("%.2f - %.2f = %.2f\n", a, b, a - b);
            break;
        case '*':
            printf("%.2f * %.2f = %.2f\n", a, b, a * b);
            break;
        case '/':
            if (b == 0) {
                printf("Xato: nolga bo'lib bo'lmaydi\n");
            } else {
                printf("%.2f / %.2f = %.2f\n", a, b, a / b);
            }
            break;
        default:
            printf("Noma'lum operator: %c\n", op);
            break;
    }
    
    return 0;
}

14. Misol: Yil — kabisa yili?

Kabisa yili (leap year) qoidasi:

  • 4 ga qoldiqsiz bo'linadi VA
  • (100 ga qoldiqsiz bo'linmaydi YOKI 400 ga qoldiqsiz bo'linadi)
c
#include <stdio.h>

int main(void) {
    int yil = 2024;
    
    if ((yil % 4 == 0 && yil % 100 != 0) || (yil % 400 == 0)) {
        printf("%d — kabisa yili\n", yil);
    } else {
        printf("%d — oddiy yil\n", yil);
    }
    
    return 0;
}

Tekshirish:

  • 2024 → kabisa
  • 2023 → oddiy
  • 2000 → kabisa (400'ga)
  • 1900 → oddiy (100'ga, lekin 400'ga emas)

15. Misol: Oyning kunlari

c
#include <stdio.h>

int main(void) {
    int oy = 2;
    int yil = 2024;
    int kunlar;
    
    switch (oy) {
        case 1: case 3: case 5: case 7:
        case 8: case 10: case 12:
            kunlar = 31;
            break;
        case 4: case 6: case 9: case 11:
            kunlar = 30;
            break;
        case 2:
            // Kabisa yili
            if ((yil % 4 == 0 && yil % 100 != 0) || (yil % 400 == 0)) {
                kunlar = 29;
            } else {
                kunlar = 28;
            }
            break;
        default:
            kunlar = -1;
    }
    
    if (kunlar == -1) {
        printf("Noto'g'ri oy raqami\n");
    } else {
        printf("%d-oyda %d kun\n", oy, kunlar);
    }
    
    return 0;
}

16. Common pitfalls

1. = vs ==

c
if (x = 5) { ... }    // XATO: belgilash, doim true
if (x == 5) { ... }   // To'g'ri

2. Qavs yo'q

c
if (yosh >= 18)
    printf("Kattalar\n");
    printf("Buni ham ishlaydi\n");  // ← bu doim ishlaydi! if'ga tegishli emas

To'g'ri:

c
if (yosh >= 18) {
    printf("Kattalar\n");
    printf("Buni ham\n");
}

3. switch'da break unutmaslik

c
switch (x) {
    case 1:
        printf("Bir\n");
        // break yo'q!
    case 2:
        printf("Ikki\n");
        break;
}

x = 1 → "Bir" va "Ikki" (fall-through).

4. else if shart tartibida xato

c
if (ball >= 60) {
    printf("D\n");
} else if (ball >= 70) {
    printf("C\n");   // ← bu hech qachon ishlamaydi!
}

Birinchi shart ball >= 60 80 ball uchun ham rost — "D" chiqadi.

To'g'ri tartib — eng kattadan boshlang:

c
if (ball >= 90) { ... }
else if (ball >= 80) { ... }
else if (ball >= 70) { ... }

Darsdagi topshiriqlar

Topshiriq 1 — Oddiy if-else

even-odd.c:

c
#include <stdio.h>

int main(void) {
    int n = 7;
    
    if (n % 2 == 0) {
        printf("%d — juft\n", n);
    } else {
        printf("%d — toq\n", n);
    }
    
    return 0;
}

n ni har xil qiymatlarga o'zgartirib sinab ko'ring.

Topshiriq 2 — Harf baho

grade.c:

c
#include <stdio.h>

int main(void) {
    int ball = 75;
    
    if (ball >= 90) {
        printf("A\n");
    } else if (ball >= 80) {
        printf("B\n");
    } else if (ball >= 70) {
        printf("C\n");
    } else if (ball >= 60) {
        printf("D\n");
    } else {
        printf("F\n");
    }
    
    return 0;
}

10 ta turli ball bilan sinab ko'ring.

Topshiriq 3 — Eng katta

max-of-3.c — 3 ta raqamdan eng kattasini topish:

c
#include <stdio.h>

int main(void) {
    int a = 10, b = 25, c = 15;
    
    int max;
    if (a >= b && a >= c) {
        max = a;
    } else if (b >= a && b >= c) {
        max = b;
    } else {
        max = c;
    }
    
    printf("Eng katta: %d\n", max);
    
    return 0;
}

Yana — eng kichik uchun ham min-of-3.c.

Topshiriq 4 — Kabisa yili

leap-year.c:

c
#include <stdio.h>

int main(void) {
    int yil = 2024;
    
    if ((yil % 4 == 0 && yil % 100 != 0) || (yil % 400 == 0)) {
        printf("%d — kabisa yili\n", yil);
    } else {
        printf("%d — oddiy yil\n", yil);
    }
    
    return 0;
}

Tekshiring: 2000, 2020, 2023, 2024, 1900, 2100.

Topshiriq 5 — Switch hafta kuni

weekday.c:

c
#include <stdio.h>

int main(void) {
    int kun = 3;
    
    switch (kun) {
        case 1: printf("Dushanba\n"); break;
        case 2: printf("Seshanba\n"); break;
        case 3: printf("Chorshanba\n"); break;
        case 4: printf("Payshanba\n"); break;
        case 5: printf("Juma\n"); break;
        case 6: printf("Shanba\n"); break;
        case 7: printf("Yakshanba\n"); break;
        default: printf("Noto'g'ri\n"); break;
    }
    
    return 0;
}

Topshiriq 6 — Kalkulyator

calc.c:

c
#include <stdio.h>

int main(void) {
    double a = 15.5;
    double b = 4.0;
    char op = '*';
    
    switch (op) {
        case '+':
            printf("%.2f + %.2f = %.2f\n", a, b, a + b);
            break;
        case '-':
            printf("%.2f - %.2f = %.2f\n", a, b, a - b);
            break;
        case '*':
            printf("%.2f * %.2f = %.2f\n", a, b, a * b);
            break;
        case '/':
            if (b == 0) {
                printf("Nolga bo'lib bo'lmaydi\n");
            } else {
                printf("%.2f / %.2f = %.2f\n", a, b, a / b);
            }
            break;
        default:
            printf("Noma'lum operator: %c\n", op);
    }
    
    return 0;
}

Turli operatorlar bilan sinab ko'ring: +, -, *, /, % (xato — % yo'q).

Topshiriq 7 — Oy kunlari

Dars matni'da berilgan oy kunlari dasturini yarating va sinang:

  • Yanvar (1) → 31
  • Fevral (2) — kabisa yiliga qarab 28 yoki 29
  • Aprel (4) → 30
  • Iyul (7) → 31
  • Dekabr (12) → 31

Saqlang: 7-month-days.c

Topshiriq 8 — BMI kategoriyasi

bmi-category.c:

c
#include <stdio.h>

int main(void) {
    double vazn = 70.0;
    double boy = 1.75;
    double bmi = vazn / (boy * boy);
    
    printf("BMI: %.2f\n", bmi);
    
    if (bmi < 18.5) {
        printf("Kategoriya: Vazn yetishmaydi\n");
    } else if (bmi < 25) {
        printf("Kategoriya: Normal\n");
    } else if (bmi < 30) {
        printf("Kategoriya: Ortiqcha vazn\n");
    } else {
        printf("Kategoriya: Semizlik\n");
    }
    
    return 0;
}

Topshiriq 9 — Yil fasli

season.c — oy berilgan, fasl chiqarish:

c
#include <stdio.h>

int main(void) {
    int oy = 5;
    
    if (oy >= 3 && oy <= 5) {
        printf("Bahor\n");
    } else if (oy >= 6 && oy <= 8) {
        printf("Yoz\n");
    } else if (oy >= 9 && oy <= 11) {
        printf("Kuz\n");
    } else if (oy == 12 || oy == 1 || oy == 2) {
        printf("Qish\n");
    } else {
        printf("Noto'g'ri oy\n");
    }
    
    return 0;
}

switch bilan ham yozing.

Topshiriq 10 — GitHub'ga

bash
$ cd ~/c-darslari
$ mkdir 4-oy-dars-4
$ # fayllarni shu joyga
$ git add .
$ git commit -m "feat: dars 4 - conditionals"
$ git push

Asosiy tushunchalar (lug'at)

TerminQisqacha izoh
ifShart
elseAks holda
else ifBoshqa shart
switchKo'p variant tanlov
caseSwitch ichida bitta variant
defaultHech qaysi case mos kelmasa
breakSwitch'dan chiqish
fall-throughbreak yo'q — keyingi case
Nested ifIf ichida if
Ternary? : qisqa if-else

Keyingi dars

5-dars: Sikllar — for →

Master IT o'quv markazi — o'qitish rejasi