Arifmetik va mantiqiy operatorlar
Operator nima?
Operator — ikki yoki undan ortiq qiymat ustida
amal bajaruvchi belgi. Siz maktabda +, -, ×, ÷
ko'rgansiz. C da bular kengroq va qiziqroq.
C dagi operatorlar 4 ta guruhga bo'linadi:
1. Arifmetik → + - * / %
2. Solishtirish → == != > < >= <=
3. Mantiqiy → && || !
4. Tayinlash → = += -= *= /= %=
Birma-bir tushunamiz.
1. Arifmetik operatorlar
Asosiy 5 ta
| Operator | Nomi | Misol | Natija |
|---|---|---|---|
+ |
Qo'shish | 10 + 3 |
13 |
- |
Ayirish | 10 - 3 |
7 |
* |
Ko'paytirish | 10 * 3 |
30 |
/ |
Bo'lish | 10 / 3 |
3 |
% |
Qoldiq (modulo) | 10 % 3 |
1 |
/ — Bo'lish operatori (ehtiyot bo'ling!)
Bu operator ikki xil ishlaydi:
#include <stdio.h>
int main() {
// Ikki int bo'linsa — natija ham int (kasr tushib qoladi!)
int a = 10, b = 3;
printf("int / int = %d\n", a / b); // 3 (3.33 emas!)
// Kamida biri float bo'lsa — natija float
float c = 10.0f, d = 3.0f;
printf("float / float = %.4f\n", c / d); // 3.3333
// Yoki casting bilan
printf("cast = %.4f\n", (float)a / b); // 3.3333
return 0;
}
Natija:
int / int = 3
float / float = 3.3333
cast = 3.3333
⚠️ Eng ko'p uchraydigan xato:
7 / 2 = 3deb kutasiz3.5ni. Ikkalasiintbo'lsa — kasr tushadi. Bu integer division deyiladi.
% — Modulo (qoldiq) operatori
Bu operator ko'pchilikka yangi. Lekin dasturlashda eng ko'p ishlatiladigan operatorlardan biri.
10 % 3 = 1 (10 = 3×3 + 1, qoldiq 1)
15 % 5 = 0 (15 = 5×3 + 0, qoldiq 0)
7 % 2 = 1 ( 7 = 2×3 + 1, qoldiq 1)
8 % 2 = 0 ( 8 = 2×4 + 0, qoldiq 0)
#include <stdio.h>
int main() {
printf("10 %% 3 = %d\n", 10 % 3); // 1
printf("15 %% 4 = %d\n", 15 % 4); // 3
printf("20 %% 5 = %d\n", 20 % 5); // 0
printf(" 7 %% 2 = %d\n", 7 % 2); // 1
// Juft/toq aniqlash
int son = 17;
printf("%d — %s\n", son, son % 2 == 0 ? "juft" : "toq");
return 0;
}
Natija:
10 % 3 = 1
15 % 4 = 3
20 % 5 = 0
7 % 2 = 1
17 — toq
💡 Modulo qayerda ishlatiladi?
- Juft/toq aniqlash:
n % 2 == 0- Oxirgi raqam:
n % 10- Soatni hisoblash:
25 % 24 = 1(25-soat = 1)- Doiraviy massiv:
i % size- Raqamlar yig'indisi: har xonani ajratish
Arifmetik operatorlar — katta misol
#include <stdio.h>
int main() {
int a = 17, b = 5;
float x = 17.0f, y = 5.0f;
printf("=== Butun sonlar (%d va %d) ===\n", a, b);
printf("Qo'shish: %d + %d = %d\n", a, b, a + b);
printf("Ayirish: %d - %d = %d\n", a, b, a - b);
printf("Ko'paytirish: %d * %d = %d\n", a, b, a * b);
printf("Bo'lish: %d / %d = %d\n", a, b, a / b);
printf("Qoldiq: %d %% %d = %d\n", a, b, a % b);
printf("\n=== Kasr sonlar (%.1f va %.1f) ===\n", x, y);
printf("Bo'lish: %.1f / %.1f = %.4f\n", x, y, x / y);
return 0;
}
Natija:
=== Butun sonlar (17 va 5) ===
Qo'shish: 17 + 5 = 22
Ayirish: 17 - 5 = 12
Ko'paytirish: 17 * 5 = 85
Bo'lish: 17 / 5 = 3
Qoldiq: 17 % 5 = 2
=== Kasr sonlar (17.0 va 5.0) ===
Bo'lish: 17.0 / 5.0 = 3.4000
2. Inkrement va Dekrement
Birga oshirish va birga kamaytirish — dasturlashda shunchalik ko'p uchraydiki, maxsus operator bor.
i++ // i ni 1 ga oshir (postfix)
++i // i ni 1 ga oshir (prefix)
i-- // i ni 1 ga kamait (postfix)
--i // i ni 1 ga kamait (prefix)
Prefix va Postfix farqi
#include <stdio.h>
int main() {
int a = 5, b = 5;
int x, y;
x = a++; // avval x = a (5), keyin a oshadi (6)
y = ++b; // avval b oshadi (6), keyin y = b (6)
printf("a = %d, x = %d\n", a, x); // a=6, x=5
printf("b = %d, y = %d\n", b, y); // b=6, y=6
return 0;
}
Natija:
a = 6, x = 5
b = 6, y = 6
Vizual tushuntirish
Postfix (a++):
x = a++
┌─────────────────────────────┐
│ 1. x ga a ning qiymati │ x = 5
│ 2. a ni 1 ga oshir │ a = 6
└─────────────────────────────┘
Prefix (++b):
y = ++b
┌─────────────────────────────┐
│ 1. b ni 1 ga oshir │ b = 6
│ 2. y ga b ning qiymati │ y = 6
└─────────────────────────────┘
💡 Qoida: Agar faqat oshirish/kamaytirish kerak bo'lsa (natijani ishlatmasangiz) — ikkalasi ham bir xil.
i++va++i— loopda farqi yo'q.
3. Tayinlash operatorlari
int x = 10;
x += 5; // x = x + 5 → x = 15
x -= 3; // x = x - 3 → x = 12
x *= 2; // x = x * 2 → x = 24
x /= 4; // x = x / 4 → x = 6
x %= 4; // x = x % 4 → x = 2
#include <stdio.h>
int main() {
int ball = 0;
ball += 10; printf("Qo'shildi +10: %d\n", ball);
ball += 25; printf("Qo'shildi +25: %d\n", ball);
ball -= 5; printf("Ayirildi -5: %d\n", ball);
ball *= 2; printf("Ko'paydi ×2: %d\n", ball);
ball /= 3; printf("Bo'lindi ÷3: %d\n", ball);
ball %= 7; printf("Qoldig'i %%7: %d\n", ball);
return 0;
}
Natija:
Qo'shildi +10: 10
Qo'shildi +25: 35
Ayirildi -5: 30
Ko'paydi ×2: 60
Bo'lindi ÷3: 20
Qoldig'i %7: 6
4. Solishtirish operatorlari
Ikki qiymatni solishtiradi. Natija: 1 (to'g'ri) yoki
0 (noto'g'ri).
| Operator | Nomi | Misol | Natija |
|---|---|---|---|
== |
Teng | 5 == 5 |
1 |
!= |
Teng emas | 5 != 3 |
1 |
> |
Katta | 5 > 3 |
1 |
< |
Kichik | 5 < 3 |
0 |
>= |
Katta yoki teng | 5 >= 5 |
1 |
<= |
Kichik yoki teng | 5 <= 3 |
0 |
#include <stdio.h>
int main() {
int a = 10, b = 20;
printf("a = %d, b = %d\n\n", a, b);
printf("a == b : %d\n", a == b); // 0
printf("a != b : %d\n", a != b); // 1
printf("a > b : %d\n", a > b); // 0
printf("a < b : %d\n", a < b); // 1
printf("a >= b : %d\n", a >= b); // 0
printf("a <= b : %d\n", a <= b); // 1
return 0;
}
Natija:
a = 10, b = 20
a == b : 0
a != b : 1
a > b : 0
a < b : 1
a >= b : 0
a <= b : 1
⚠️ Eng katta xato:
=va==ni aralashtirish!if (x = 5) // ❌ tayinlash — x ga 5 yozadi, doim true if (x == 5) // ✅ solishtirish — x 5 ga tengmi?Bu xatoni kompilator ham ko'rsatmasligi mumkin — lekin dastur noto'g'ri ishlaydi.
5. Mantiqiy operatorlar
Bir nechta shartni birlashtirib tekshirish uchun.
| Operator | Nomi | Ma'nosi |
|---|---|---|
&& |
VA (AND) | Ikkalasi ham to'g'ri bo'lsa |
|| |
YOKI (OR) | Kamida biri to'g'ri bo'lsa |
! |
EMAS (NOT) | Teskarisini qaytaradi |
Haqiqat jadvali (Truth Table)
AND (&&): OR (||):
┌───┬───┬────────┐ ┌───┬───┬────────┐
│ A │ B │ A && B │ │ A │ B │ A || B │
├───┼───┼────────┤ ├───┼───┼────────┤
│ 0 │ 0 │ 0 │ │ 0 │ 0 │ 0 │
│ 0 │ 1 │ 0 │ │ 0 │ 1 │ 1 │
│ 1 │ 0 │ 0 │ │ 1 │ 0 │ 1 │
│ 1 │ 1 │ 1 │ │ 1 │ 1 │ 1 │
└───┴───┴────────┘ └───┴───┴────────┘
NOT (!):
┌───┬─────┐
│ A │ ! A │
├───┼─────┤
│ 0 │ 1 │
│ 1 │ 0 │
└───┴─────┘
Hayot misollari
#include <stdio.h>
int main() {
int yosh = 20;
int pul = 50000;
int haydovchi = 1; // guvohnoma bor
int kasalmi = 0; // kasal emas
// AND — ikkalasi to'g'ri bo'lishi kerak
printf("Avtomobil olish mumkinmi? %d\n",
yosh >= 18 && pul >= 30000); // 1 (ha)
// OR — kamida biri to'g'ri bo'lsa yetarli
printf("Yo'lga chiqish mumkinmi? %d\n",
haydovchi || yosh >= 18); // 1 (ha)
// NOT — teskarisi
printf("Sog'mi? %d\n", !kasalmi); // 1 (ha, sog')
// Kombinatsiya
printf("Mashinani haydash mumkinmi? %d\n",
haydovchi && !kasalmi && yosh >= 16); // 1
return 0;
}
Natija:
Avtomobil olish mumkinmi? 1
Yo'lga chiqish mumkinmi? 1
Sog'mi? 1
Mashinani haydash mumkinmi? 1
6. Operatorlar ustunligi (Precedence)
Matematik kabi — ba'zi operatorlar boshqalardan oldin bajariladi.
Yuqori (birinchi bajariladi)
↑ () ← qavslar
│ ++ -- ← inkrement
│ ! (unary -) ← mantiqiy NOT, manfiy
│ * / % ← ko'paytirish, bo'lish
│ + - ← qo'shish, ayirish
│ < > <= >= ← solishtirish
│ == != ← tenglik
│ && ← mantiqiy AND
│ || ← mantiqiy OR
↓ = += -= ... ← tayinlash
Quyi (oxirida bajariladi)
Misol
#include <stdio.h>
int main() {
int natija;
natija = 2 + 3 * 4;
printf("2 + 3 * 4 = %d\n", natija); // 14, (3*4=12, 12+2=14)
natija = (2 + 3) * 4;
printf("(2 + 3) * 4 = %d\n", natija); // 20
natija = 10 > 5 && 3 < 8;
printf("10>5 && 3<8 = %d\n", natija); // 1
natija = 2 + 3 == 5;
printf("2 + 3 == 5 = %d\n", natija); // 1 (+ oldin, keyin ==)
natija = !0 + 1;
printf("!0 + 1 = %d\n", natija); // 2 (! oldin: !0=1, 1+1=2)
return 0;
}
Natija:
2 + 3 * 4 = 14
(2 + 3) * 4 = 20
10>5 && 3<8 = 1
2 + 3 == 5 = 1
!0 + 1 = 2
💡 Maslahat: Ustunlikni yodlab olmang — qavslar ishlating. Kod o'qilishi osonlashadi, xato kamayadi.
7. Ternary operator ? :
Kichik if-else o'rnida ishlatiladi.
shart ? to'g'ri_qiymat : noto'g'ri_qiymat
#include <stdio.h>
int main() {
int a = 15, b = 22;
// Kattasini topish
int katta = (a > b) ? a : b;
printf("Kattasi: %d\n", katta); // 22
// Juft yoki toq
printf("%d — %s\n", a, a % 2 == 0 ? "juft" : "toq"); // toq
// Musbat, manfiy yoki nol
int son = -7;
printf("%d: %s\n", son,
son > 0 ? "musbat" :
son < 0 ? "manfiy" : "nol"); // manfiy
return 0;
}
Natija:
Kattasi: 22
15 — toq
-7: manfiy
8. Type casting — Tur o'zgartirish
Ba'zan bir turni boshqasiga aylantirishga to'g'ri keladi.
#include <stdio.h>
int main() {
int a = 7, b = 2;
float natija;
// Xato — integer division
natija = a / b;
printf("7 / 2 = %.2f\n", natija); // 3.00 (xato!)
// To'g'ri — casting bilan
natija = (float)a / b;
printf("(float)7 / 2 = %.2f\n", natija); // 3.50
// char → int
char harf = 'Z';
printf("'Z' = %d\n", (int)harf); // 90
// int → char
int kod = 65;
printf("65 = '%c'\n", (char)kod); // 'A'
// double → int (kasr tushadi)
double pi = 3.99;
printf("(int)3.99 = %d\n", (int)pi); // 3 (yumaloqlamaydi!)
return 0;
}
Natija:
7 / 2 = 3.00
(float)7 / 2 = 3.50
'Z' = 90
65 = 'A'
(int)3.99 = 3
⚠️ Diqqat:
(int)3.99 = 3— yumaloqlamaydi, faqat kasrni kesib tashlaydi.
Amaliy dastur — Raqam tahlilchisi
#include <stdio.h>
int main() {
int son;
printf("Son kiriting: ");
scanf("%d", &son);
printf("\n=== %d ning tahlili ===\n", son);
// Musbat/manfiy/nol
printf("Turi: %s\n",
son > 0 ? "musbat" : son < 0 ? "manfiy" : "nol");
// Juft/toq (nol uchun alohida)
if (son != 0)
printf("Juft/toq: %s\n", son % 2 == 0 ? "juft" : "toq");
// Oxirgi raqam
printf("Oxirgi raqam: %d\n", son % 10 < 0 ? -(son % 10) : son % 10);
// 3 ga bo'linishi
printf("3 ga bo'linadi: %s\n", son % 3 == 0 ? "ha" : "yo'q");
// 5 ga bo'linishi
printf("5 ga bo'linadi: %s\n", son % 5 == 0 ? "ha" : "yo'q");
// 15 ga bo'linishi (FizzBuzz)
printf("15 ga bo'linadi: %s\n", son % 15 == 0 ? "ha" : "yo'q");
// Absolut qiymat
printf("Absolut qiymat: %d\n", son < 0 ? -son : son);
return 0;
}
Ishlash (son = -18):
=== -18 ning tahlili ===
Turi: manfiy
Juft/toq: juft
Oxirgi raqam: 8
3 ga bo'linadi: ha
5 ga bo'linadi: yo'q
15 ga bo'linadi: yo'q
Absolut qiymat: 18
Vazifalar
✏️ Vazifa 1 — Oxirgi raqam
Foydalanuvchidan 4 xonali son oling (masalan: 2748). Faqat
%va/operatorlari bilan:
- Birlar xonasini chiqaring → 8
- O'nlar xonasini chiqaring → 4
- Yuzlar xonasini chiqaring → 7
- Minglar xonasini chiqaring → 2
- Raqamlar yig'indisini chiqaring → 21
✏️ Vazifa 2 — Soat, daqiqa, soniya
Foydalanuvchidan faqat soniyalar sonini oling. Faqat
/va%bilan soat, daqiqa, soniyaga aylantiring:Kiriting: 7384 7384 soniya = 2 soat, 3 daqiqa, 4 soniya
✏️ Vazifa 3 — Teng bo'luvchilar
Foydalanuvchidan son oling. Quyidagilarni tekshiring va ekranga chiqaring (
1yoki0emas —ha/yo'q):
- 2 ga bo'linadimi?
- 3 ga bo'linadimi?
- 5 ga bo'linadimi?
- 7 ga bo'linadimi?
- Ham 3 ga ham 5 ga bo'linadimi?
✏️ Vazifa 4 — Kvadrat va kub
Foydalanuvchidan butun son oling. Faqat
*operatori bilan (kutubxona ishlatmang):
- Kvadratini hisoblang
- Kubini hisoblang
- To'rtinchi darajasini hisoblang
Natijani chiroyli formatda chiqaring.
✏️ Vazifa 5 — Tenglamalar
Foydalanuvchidan
a,b,ckatsayilarini oling. Chiziqli tenglamaax + b = cdanxni toping:x = (c - b) / a
a = 0bo'lsa: "Tenglama hal bo'lmaydi" chiqaring.doubleishlating.
✏️ Vazifa 6 — Harfmi yoki raqammi?
Foydalanuvchidan bitta belgi (
char) oling. ASCII qiymati asosida aniqlang (faqat&&,||,>=,<=ishlating — tayyor funksiya yo'q):
- Katta harf (A-Z): 65-90
- Kichik harf (a-z): 97-122
- Raqam (0-9): 48-57
- Boshqasi
Belgi ASCII kodini ham chiqaring.
✏️ Vazifa 7 — Kasr va butun qism
Foydalanuvchidan
doubleson oling. Casting yordamida:
- Butun qismini chiqaring
- Kasr qismini chiqaring (
.4fbilan)- Yaxlitlangan qiymatini chiqaring (
(int)(son + 0.5)formulasi bilan)Kiriting: 7.83 Butun qism: 7 Kasr qism: 0.8300 Yaxlitlangan: 8
✏️ Vazifa 8 — Ikki son almashtirish
Foydalanuvchidan
avabsonlarini oling. Uchinchi o'zgaruvchi ishlatmay ularni almashtiring:a = a + b; b = a - b; a = a - b;Almashtirish oldidan va keyin chiqaring. Mantiqini tushuning va izohlang.
✏️ Vazifa 9 — Yil hisobi
Foydalanuvchidan tug'ilgan yilini oling. Quyidagilarni hisoblang (joriy yil = 2025):
- Hozirgi yoshi
- 100 yoshga necha yil qolgan
- 2050 yilgacha necha yil qolgan
- Yoshi juft yoki toqmi?
Hammasi
intva%operatorlari bilan.
✏️ Vazifa 10 — Minimal kod
Quyidagi ifodalarni qog'ozda hisoblab yozing (kodga terib tekshiring):
a = 5, b = 3, c = 2 1. a + b * c = ? 2. (a + b) * c = ? 3. a % b + c = ? 4. a > b && b > c = ? 5. a == 5 || b == 5 = ? 6. !(a > b) = ? 7. a != b && c != b = ? 8. a / b * b + a % b = ? (nima sezasiz?) 9. (float)a / b = ? 10. a++ + ++b = ? (a va b keyin?)
✏️ Vazifa 11 — To'g'ri to'rtburchak
Foydalanuvchidan eni va bo'yini oling (
float).
- Yuzasi
- Perimetri
- Diagonal uzunligi (
d = √(a² + b²))Diagonalni
math.hdansqrt()bilan hisoblang. Kompilyatsiyada:gcc vazifa.c -o vazifa -lm
✏️ Vazifa 12 — Chegirma hisobi
Foydalanuvchidan mahsulot narxini va chegirma foizini oling (
double).
- Chegirma miqdori
- Chegirmadan keyin narx
- Chegirma 50% dan ortiq bo'lsa: "Juda katta chegirma!" chiqaring (
&&,||ishlating)
✏️ Vazifa 13 — Sana hisobi
Foydalanuvchidan kun sonini oling (1 yildan boshlab). Faqat
/va%bilan:
- Necha oyda ekanligini toping (1 oy = 30 kun)
- Necha haftada ekanligini toping (1 hafta = 7 kun)
- Oy ichidagi kuni
- Hafta ichidagi kuni
Kiriting: 75 2-oy, 15-kun 10-hafta, 5-kun
✏️ Vazifa 14 — Ikki nuqta orasidagi masofa
Foydalanuvchidan ikki nuqta koordinatlarini oling:
x1, y1, x2, y2(double). Evklid masofasini hisoblang:d = √((x2-x1)² + (y2-y1)²)
math.hdansqrt()ishlating.
✏️ Vazifa 15 — Raqamlarni almashtirish (bitwise)
Foydalanuvchidan ikkita
intson oling. Ularni XOR bilan almashtiring:a = a ^ b; b = a ^ b; a = a ^ b;Vazifa 8 dagi usul bilan solishtiring. Qaysi biri ishonchliroq va nima uchun?
✏️ Vazifa 16 — Ball tizimi
Foydalanuvchidan test balli (0-100) oling. Faqat mantiqiy operatorlar bilan baho aniqlang:
90-100 → A (Mukammal) 75-89 → B (Yaxshi) 60-74 → C (Qoniqarli) 45-59 → D (Qoniqarsiz) 0-44 → F (Yiqildi)
else ifishlatmang — faqat&&,||, ternary.
✏️ Vazifa 17 — Elektr hisobi
Foydalanuvchidan oylik elektr sarfi (kVt·soat) va o'tgan oyga nisbatan farqni oling (
double).
- Jami narx hisoblang (1 kVt = 900 so'm)
- Oldingi oyga nisbatan ko'paydi yoki kamaydi?
- Farq foizda necha %?
Farq foizi = (farq / o'tgan_oy) × 100
✏️ Vazifa 18 — Sonni aylantirish
Foydalanuvchidan 3 xonali son oling (masalan: 473). Faqat
/va%bilan:
- Teskari tartibda chiqaring: 374
- Raqamlar yig'indisi: 14
- Ko'paytmasi: 84
- Eng katta raqami: 7
- Eng kichik raqami: 3
✏️ Vazifa 19 — Mantiqiy zanjir
Uchta son
a,b,cni oling. Faqat&&,||,!, solishtirish operatorlari bilan:
- Uchtalasi ham teng?
- Kamida ikkitasi teng?
- Uchtalasi ham turli?
- Eng kattasi
bmi?- Kamida biri manfiy?
- Hammasi musbat?
Har biriga
hayokiyo'qchiqaring.
✏️ Vazifa 20 — Mini kassa
Foydalanuvchidan mahsulot narxi va berilgan pulni oling (
int).
- Qaytim pulni hisoblang
- Qaytimni eng yirik kupyuralar bilan bering:
(faqat100000, 50000, 10000, 5000, 1000, 500, 100/va%bilan — loop ishlatmang)- Pul yetarli bo'lmasa: "Pul yetarli emas" chiqaring
Xulosa
| Guruh | Operatorlar | Natija |
|---|---|---|
| Arifmetik | + - * / % |
Son |
| Inkrement | ++ -- |
Son |
| Tayinlash | = += -= *= /= %= |
— |
| Solishtirish | == != > < >= <= |
0 yoki 1 |
| Mantiqiy | && || ! |
0 yoki 1 |
| Ternary | ? : |
Istalgan |
Keyingi dars
Operatorlarni bildik. Endi ular bilan qarorlar qabul qilishni o'rganamiz.
7-dars: Shartli operatorlar — if / else / else if