1. Kiểm tra cấu trúc mảng 1 chiều
#include <stdio.h>
#define KICH_THUOC 4
void kiemTraInt() {
int intArray[KICH_THUOC] = {1, 9, 8, 4};
int i;
printf("Kich thuoc intArray: %d\n", sizeof(intArray));
for(i = 0; i < KICH_THUOC; ++i)
printf("Dia chi %p - Gia tri %d\n", &intArray[i], intArray[i]);
printf("Gia tri mang: %p\n", intArray);
}
void kiemTraChar() {
char charArray[KICH_THUOC] = {'1', '9', '8', '4'};
int i;
printf("Kich thuoc charArray: %d\n", sizeof(charArray));
for(i = 0; i < KICH_THUOC; ++i)
printf("Dia chi %p - Ky tu %c\n", &charArray[i], charArray[i]);
printf("Gia tri mang: %p\n", charArray);
}
int main() {
printf("=== Kiem tra mang int ===\n");
kiemTraInt();
printf("\n=== Kiem tra mang char ===\n");
kiemTraChar();
return 0;
}
Các phần tử mảng int chiếm 4 byte liên tục, char chiếm 1 byte. Tên mảng tương ứng địa chỉ phần tử đầu tiên.
2. Mảng hai chiều và địa chỉ bộ nhớ
#define HANG 2
#define COT 4
void kiemTra2D() {
int matrix[HANG][COT] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
int i, j;
printf("Kich thuoc matrix: %d\n", sizeof(matrix));
for(i = 0; i < HANG; ++i) {
for(j = 0; j < COT; ++j)
printf("Dia chi %p - Gia tri %d\n", &matrix[i][j], matrix[i][j]);
}
printf("matrix: %p\n", matrix);
printf("matrix[0]: %p\n", matrix[0]);
printf("matrix[1]: %p\n", matrix[1]);
}
Mảng 2D lưu trữ theo hàng liên tục. Khoảng cách giữa các hàng = số cột × kích thước kiểu dữ liệu.
3. Hàm hoán vị chuỗi
void hoanViChuoi(char s1[], char s2[]) {
char tam[80];
strcpy(tam, s1);
strcpy(s1, s2);
strcpy(s2, tam);
}
Trong mảng 2D, views[0] và views[1] truy cập các hàng riêng biệt.
4. Đếm từ trong chuỗi
int demTu(char x[]) {
int dem = 0, trongTu = 0;
while(*x) {
if(*x++ == ' ') {
trongTu = 0;
} else if(trongTu == 0) {
trongTu = 1;
dem++;
}
}
return dem;
}
5. Chuyển đổi hệ số
void chuyenDoiHe(int n, int he) {
char ketQua[32];
int i = 0;
do {
int soDu = n % he;
ketQua[i++] = (soDu < 10) ? soDu + '0' : soDu - 10 + 'A';
n /= he;
} while(n);
while(i > 0)
printf("%c", ketQua[--i]);
printf("\n");
}
6. Sắp xếp tên theo từ điển
void sapXepTen(char ten[][20], int n) {
for(int i = 0; i < n-1; i++) {
for(int j = 0; j < n-1-i; j++) {
if(strcmp(ten[j], ten[j+1]) > 0) {
char tam[20];
strcpy(tam, ten[j]);
strcpy(ten[j], ten[j+1]);
strcpy(ten[j+1], tam);
}
}
}
}
7. Kiểm tra số trùng lặp
int kiemTraTrung(char s[]) {
int dem[10] = {0};
while(*s) {
int chiSo = *s++ - '0';
if(++dem[chiSo] > 1) return 1;
}
return 0;
}
8. Xoay ma trận
#define MAX 100
void xoayMaTran(int mat[][MAX], int n) {
int tam[MAX][MAX];
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
tam[j][n-1-i] = mat[i][j];
}
}
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
mat[i][j] = tam[i][j];
}