Mảng một chiều
Mảng là một cấu trúc dữ liệu cho phép lưu trữ một tập hợp các phần tử có cùng kiểu dữ liệu trong một vùng nhớ liên tiếp. Mỗi phần tử trong mảng được xác định bởi một chỉ số (index), bắt đầu từ 0.
Định nghĩa một mảng một chiều có cú pháp:
<kiểu_dữ_liệu> <tên_mảng>[<kích_thước>];
Ví dụ: int so_nguyen[10]; định nghĩa một mảng có tên so_nguyen chứa 10 phần tử kiểu int.
Các phần tử của mảng được truy cập thông qua tên mảng và chỉ số của nó, ví dụ: so_nguyen[0], so_nguyen[1], ..., so_nguyen[9].
Ví dụ: Tính tổng các phần tử trong mảng
Chương trình sau tính tổng của tất cả các phần tử trong một mảng số nguyên.
#include <stdio.h>
int main() {
int so_phan_tu = 5;
int mang_so[so_phan_tu] = {10, 20, 30, 40, 50};
int tong = 0;
for (int i = 0; i < so_phan_tu; i++) {
tong += mang_so[i];
}
printf("Tổng các phần tử trong mảng là: %d\n", tong);
return 0;
}
Ví dụ: Sắp xếp mảng bằng thuật toán chọn (Selection Sort)
Chương trình sau sắp xếp một mảng số nguyên theo thứ tự tăng dần bằng cách sử dụng thuật toán sắp xếp chọn.
#include <stdio.h>
void sap_xep_chon(int mang[], int kich_thuoc) {
for (int i = 0; i < kich_thuoc - 1; i++) {
int vi_tri_nho_nhat = i;
for (int j = i + 1; j < kich_thuoc; j++) {
if (mang[j] < mang[vi_tri_nho_nhat]) {
vi_tri_nho_nhat = j;
}
}
// Hoán đổi phần tử
int tam = mang[i];
mang[i] = mang[vi_tri_nho_nhat];
mang[vi_tri_nho_nhat] = tam;
}
}
int main() {
int kich_thuoc = 6;
int mang_so[] = {64, 25, 12, 22, 11, 90};
printf("Mảng ban đầu: ");
for (int i = 0; i < kich_thuoc; i++) {
printf("%d ", mang_so[i]);
}
printf("\n");
sap_xep_chon(mang_so, kich_thuoc);
printf("Mảng sau khi sắp xếp: ");
for (int i = 0; i < kich_thuoc; i++) {
printf("%d ", mang_so[i]);
}
printf("\n");
return 0;
}
Mảng hai chiều
Mảng hai chiều, còn được gọi là ma trận, là một mảng của các mảng. Nó được sử dụng để lưu trữ dữ liệu trong một bảng có hàng và cột.
Định nghĩa một mảng hai chiều có cú pháp:
<kiểu_dữ_liệu> <tên_mảng>[<số_hàng>][<số_cột>];
Ví dụ: int ma_tran[3][4]; định nghĩa một ma trận có 3 hàng và 4 cột.
Các phần tử được truy cập bằng hai chỉ số: ma_tran[hang][cot].
Ví dụ: Tính trung bình cộng của mỗi hàng trong ma trận
Chương trình sau tính trung bình cộng của các phần tử trong mỗi hàng của một ma trận số nguyên.
#include <stdio.h>
int main() {
int hang = 3, cot = 4;
int ma_tran[hang][cot] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
for (int i = 0; i < hang; i++) {
int tong_hang = 0;
for (int j = 0; j < cot; j++) {
tong_hang += ma_tran[i][j];
}
float trung_binh_hang = (float)tong_hang / cot;
printf("Trung bình cộng của hàng %d là: %.2f\n", i, trung_binh_hang);
}
return 0;
}
Mảng ký tự
Mảng ký tự là một mảng có kiểu dữ liệu là char. Nó thường được sử dụng để lưu trữ chuỗi ký tự. Trong C, chuỗi ký tự được kết thúc bằng ký tự null '\0'.
Định nghĩa một mảng ký tự:
char ten_chuoi[20];
Mảng ký tự có thể được khởi tạo bằng các ký tự riêng lẻ hoặc bằng một chuỗi ký tự (string literal).
// Khởi tạo bằng ký tự riêng lẻ
char chuoi1[] = {'H', 'e', 'l', 'l', 'o', '\0'};
// Khởi tạo bằng chuỗi ký tự (tự động thêm '\0')
char chuoi2[] = "Xin chào";
Ví dụ: Nhập và in chuỗi ký tự
Chương trình sau đọc chuỗi ký tự từ người dùng và in ra màn hình.
#include <stdio.h>
int main() {
char ho_ten[50];
char dia_chi[100];
printf("Nhập họ tên của bạn: ");
fgets(ho_ten, sizeof(ho_ten), stdin);
printf("Nhập địa chỉ của bạn: ");
fgets(dia_chi, sizeof(dia_chi), stdin);
printf("\n--- Thông tin của bạn ---\n");
printf("Họ tên: %s", ho_ten);
printf("Địa chỉ: %s", dia_chi);
return 0;
}