1-dars: Massiv (Array) asoslari
Dars haqida
Davomiyligi: 90 daqiqa Maqsad: Talaba massiv tushunchasini bilishi, e'lon qilishi, qiymatlar bilan to'ldirishi va asosiy amallarni bajara olishi kerak.
1. Massiv nima?
Massiv (array) — bir xil turdagi qiymatlarning ketma-ket to'plami.
int ballar[5] = {85, 92, 78, 65, 90};Aslida — 5 ta int xotirada ketma-ket joylashgan.
Index: 0 1 2 3 4
┌───┬───┬───┬───┬───┐
│ 85│ 92│ 78│ 65│ 90│
└───┴───┴───┴───┴───┘2. Nima uchun massiv?
Massivsiz — 100 ta talaba uchun 100 ta o'zgaruvchi:
int ball1 = 85;
int ball2 = 92;
int ball3 = 78;
// ... 97 ta yana
int ball100 = 60;Massiv bilan:
int ballar[100];Bir qator — 100 ta qiymat saqlash mumkin.
3. Massiv e'lon qilish
Variant 1: hajmi belgilangan, qiymat yo'q
int arr[5]; // 5 ta int, qiymatlar — axlat (random)Variant 2: qiymatlar bilan
int arr[5] = {10, 20, 30, 40, 50};Variant 3: hajmi avtomatik
int arr[] = {10, 20, 30, 40, 50}; // hajmi 5Variant 4: barchani 0 ga
int arr[100] = {0}; // hammasi 0Variant 5: chala
int arr[5] = {10, 20}; // {10, 20, 0, 0, 0}4. Massiv elementiga kirish
Index — element raqami (0 dan boshlanadi).
int arr[5] = {10, 20, 30, 40, 50};
printf("%d\n", arr[0]); // 10
printf("%d\n", arr[2]); // 30
printf("%d\n", arr[4]); // 50Index 0 dan boshlanadi
Birinchi element — arr[0], oxirgi — arr[n-1].
arr[5] — XATO (5 elementli massivda yo'q).
5. Element qiymatini o'zgartirish
int arr[5] = {10, 20, 30, 40, 50};
arr[2] = 100;
// {10, 20, 100, 40, 50}6. Massivni for sikli bilan
int arr[5] = {10, 20, 30, 40, 50};
// Chiqarish
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
// 10 20 30 40 50
// Qiymat berish
for (int i = 0; i < 5; i++) {
arr[i] = i * 10;
}
// 0 10 20 30 407. Massiv hajmi — sizeof
int arr[10] = {1, 2, 3};
int size = sizeof(arr) / sizeof(arr[0]);
printf("Hajm: %d\n", size); // 10sizeof(arr) — butun massivning byte hajmi. sizeof(arr[0]) — bir elementning hajmi. Bo'linmasi — element soni.
8. To'liq misol
#include <stdio.h>
int main(void) {
int ballar[] = {85, 92, 78, 65, 90, 75, 88, 70, 95, 60};
int n = sizeof(ballar) / sizeof(ballar[0]);
// Chiqarish
printf("Ballar:\n");
for (int i = 0; i < n; i++) {
printf("Talaba %d: %d\n", i + 1, ballar[i]);
}
// Yig'indi
int sum = 0;
for (int i = 0; i < n; i++) {
sum += ballar[i];
}
printf("\nJami: %d\n", sum);
printf("O'rtacha: %.2f\n", (double)sum / n);
return 0;
}9. Eng katta va eng kichik
int arr[] = {12, 45, 7, 23, 89, 34};
int n = sizeof(arr) / sizeof(arr[0]);
int max = arr[0];
int min = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > max) max = arr[i];
if (arr[i] < min) min = arr[i];
}
printf("Max: %d, Min: %d\n", max, min);10. Massiv va funksiyalar
void print_array(int arr[], int n) {
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int sum_array(int arr[], int n) {
int sum = 0;
for (int i = 0; i < n; i++) {
sum += arr[i];
}
return sum;
}
int main(void) {
int data[] = {1, 2, 3, 4, 5};
print_array(data, 5);
printf("Sum: %d\n", sum_array(data, 5));
return 0;
}Massiv funksiyaga
C'da massiv funksiyaga pointer orqali uzatiladi (faqat manzil). Demak — hajm alohida berish kerak.
void func(int arr[], int n) { ... } // hajm — n parameterda
void func(int arr[100]) { ... } // [100] e'tiborsiz, faqat pointer11. Massivni nusxalash
int src[5] = {1, 2, 3, 4, 5};
int dest[5];
// Element-element
for (int i = 0; i < 5; i++) {
dest[i] = src[i];
}
// `dest = src;` ISHLAMAYDI! C'da massiv to'g'ridan-to'g'ri nusxa olmaydi12. Massiv chegarasi
Out of bounds
C massiv chegarasini tekshirmaydi.
int arr[5];
arr[100] = 42; // CRASH yoki tasodifiy joyga yozishBu — eng keng tarqalgan bug. Doim hajmni tekshiring.
13. Massivni teskari qilish
int arr[] = {1, 2, 3, 4, 5};
int n = 5;
for (int i = 0; i < n / 2; i++) {
int temp = arr[i];
arr[i] = arr[n - 1 - i];
arr[n - 1 - i] = temp;
}
// {5, 4, 3, 2, 1}14. Elementni topish (oddiy)
int arr[] = {3, 7, 1, 9, 4};
int n = 5;
int target = 9;
int found = -1;
for (int i = 0; i < n; i++) {
if (arr[i] == target) {
found = i;
break;
}
}
if (found != -1) {
printf("Topildi! Index: %d\n", found);
} else {
printf("Topilmadi\n");
}15. Element sanash
int arr[] = {1, 2, 3, 2, 4, 2, 5};
int n = 7;
int target = 2;
int count = 0;
for (int i = 0; i < n; i++) {
if (arr[i] == target) {
count++;
}
}
printf("%d soni: %d marta\n", target, count);
// 2 soni: 3 marta16. To'liq misol: Talabalar statistikasi
#include <stdio.h>
int main(void) {
int n;
printf("Necha talaba: ");
scanf("%d", &n);
int ballar[100];
// Ma'lumot olish
for (int i = 0; i < n; i++) {
printf("Talaba %d bali: ", i + 1);
scanf("%d", &ballar[i]);
}
// Statistika
int sum = 0, max = 0, min = 100;
int passed = 0;
for (int i = 0; i < n; i++) {
sum += ballar[i];
if (ballar[i] > max) max = ballar[i];
if (ballar[i] < min) min = ballar[i];
if (ballar[i] >= 60) passed++;
}
double avg = (double)sum / n;
double pass_rate = (double)passed / n * 100;
printf("\n=== STATISTIKA ===\n");
printf("Jami: %d\n", sum);
printf("O'rtacha: %.2f\n", avg);
printf("Max: %d\n", max);
printf("Min: %d\n", min);
printf("O'tganlar: %d (%.1f%%)\n", passed, pass_rate);
return 0;
}Darsdagi topshiriqlar
1 — Asosiy
asosiy.c:
#include <stdio.h>
int main(void) {
int arr[] = {12, 45, 7, 23, 89, 34, 56, 11, 78, 90};
int n = sizeof(arr) / sizeof(arr[0]);
// Chiqarish
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// Yig'indi
int sum = 0;
for (int i = 0; i < n; i++) sum += arr[i];
printf("Sum: %d\n", sum);
return 0;
}2 — Min va Max
min-max.c — 10 ta raqamdan min va max topish.
3 — Element sanash
count.c — foydalanuvchi raqam beradi, massivda necha marta borligini topish.
4 — Teskari
reverse.c — massivni teskari qilish.
5 — Yig'indi va o'rtacha
stats.c — talabalar ballari uchun to'liq statistika.
6 — Massiv nusxalash
copy.c — bir massivni boshqasiga nusxalash.
7 — Funksiyalar
array-fn.c:
void print_arr(int arr[], int n);
int sum_arr(int arr[], int n);
double avg_arr(int arr[], int n);
int max_arr(int arr[], int n);
int min_arr(int arr[], int n);
int find_arr(int arr[], int n, int target);
int count_arr(int arr[], int n, int target);Hammasini yozing.
8 — Talabalar statistikasi
Dars matnidagi to'liq dasturni yarating.
9 — Histogram
histogram.c:
1: ###
2: #####
3: ##
4: ########
5: ####Massivdagi qiymatlarni * yoki # bilan ko'rsatish.
10 — GitHub
$ mkdir 5-oy-dars-1
$ # fayllar
$ git add . && git commit -m "feat: dars 1 - arrays" && git pushLug'at
| Termin | Izoh |
|---|---|
| Array | Massiv |
| Element | Massivdagi bitta qiymat |
| Index | Element raqami (0 dan) |
| Length / Size | Massiv hajmi |
| Out of bounds | Chegaradan tashqari |
| Static array | Hajmi belgilangan |
| sizeof | Hajmni topish |