Xử lý Mảng và Ma trận trong C

Bài thực hành 1

  1. Các giá trị giống nhau. Địa chỉ bộ nhớ liên tiếp.
  2. Khoảng cách bằng kích thước một hàng mảng. Kích thước này bằng số phần tử mỗi hàng nhân với kích thước kiểu dữ liệu.

Bài thực hành 2

  1. Tham số hàm: int arr[], int len. Tham số truyền vào: arr, len.
  2. Hàm input dùng để nhập dữ liệu cho mảng. Hàm compute tính trung bình các giá trị sau khi loại bỏ giá trị lớn nhất và nhỏ nhất.

Bài thực hành 3

  1. Tham số hàm: int matrix[][N], int size. Tham số truyền vào: matrix, size.
  2. Không thể truyền mảng hai chiều không xác định kích thước.
  3. Hàm output hiển thị ma trận theo dạng bảng. Hàm init sao chép giá trị từ biến value vào mảng.

Bài thực hành 4: Tính giá trị trung vị


#include <stdio.h>
#define MAX_SIZE 100

double tinhTrungVi(int arr[], int n);
void nhapMang(int arr[], int n);

int main() {
    int arr[MAX_SIZE];
    int n;
    double ketQua;

    while(printf("Nhập n: "), scanf("%d", &n) != EOF) {
        nhapMang(arr, n);
        ketQua = tinhTrungVi(arr, n);
        printf("Kết quả = %g\n\n", ketQua);
    }

    return 0;
}

void nhapMang(int arr[MAX_SIZE], int n) {
    for(int i=0; i<n; ++i)
        scanf("%d", &arr[i]);
    
    // Sắp xếp nổi bọt
    for(int i=0; i<n-1; ++i)
        for(int j=0; j<n-i-1; ++j)
            if(arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
}

double tinhTrungVi(int arr[MAX_SIZE], int n) {
    return (n % 2) ? arr[n/2] : (arr[n/2-1] + arr[n/2])/2.0;
}

Bài thực hành 5: Xoay ma trận


#include <stdio.h>
#define MAX_SIZE 100

void nhapMaTran(int matrix[][MAX_SIZE], int n);
void xuatMaTran(int matrix[][MAX_SIZE], int n);
void xoayPhai(int matrix[][MAX_SIZE], int n);

int main() {
    int matrix[MAX_SIZE][MAX_SIZE];
    int n;

    printf("Nhập kích thước ma trận: ");
    scanf("%d", &n);
    
    printf("Ma trận gốc:\n");
    nhapMaTran(matrix, n);
    xuatMaTran(matrix, n);
    
    printf("Ma trận sau khi xoay:\n");
    xoayPhai(matrix, n);
    xuatMaTran(matrix, n);

    return 0;
}

void nhapMaTran(int matrix[][MAX_SIZE], int n) {
    for(int i=0; i<n; ++i)
        for(int j=0; j<n; ++j)
            scanf("%d", &matrix[i][j]);
}

void xuatMaTran(int matrix[][MAX_SIZE], int n) {
    for(int i=0; i<n; ++i) {
        for(int j=0; j<n; ++j)
            printf("%4d", matrix[i][j]);
        printf("\n");
    }
}

void xoayPhai(int matrix[][MAX_SIZE], int n) {
    for(int i=0; i<n; ++i) {
        int temp = matrix[i][n-1];
        for(int j=n-1; j>0; --j)
            matrix[i][j] = matrix[i][j-1];
        matrix[i][0] = temp;
    }
}

Bài thực hành 6: Chuyển đổi hệ cơ số


#include <stdio.h>
#define MAX_LEN 100

void chuyenDoi(int n, int base);

int main() {
    int n;
    while(printf("Nhập số thập phân: "), scanf("%d", &n) != EOF) {
        chuyenDoi(n, 2);
        chuyenDoi(n, 8);
        chuyenDoi(n, 16);
        printf("\n");
    }
    return 0;
}

void chuyenDoi(int n, int base) {
    int stack[MAX_LEN], top = 0;
    
    if(n == 0) {
        printf("0");
        return;
    }
    
    while(n > 0) {
        int rem = n % base;
        stack[top++] = rem;
        n /= base;
    }
    
    for(int i=top-1; i>=0; --i)
        printf("%c", stack[i] < 10 ? '0'+stack[i] : 'A'+stack[i]-10);
}

Bài thực hành 7: Kiểm tra ma trận ma phương


#include <stdio.h>
#define MAX_SIZE 100

void nhap(int matrix[][MAX_SIZE], int n);
void xuat(int matrix[][MAX_SIZE], int n);
int laMaPhuong(int matrix[][MAX_SIZE], int n);

int main() {
    int matrix[MAX_SIZE][MAX_SIZE];
    int n;
    
    while(printf("Nhập kích thước: "), scanf("%d", &n) != EOF) {
        printf("Nhập ma trận:\n");
        nhap(matrix, n);
        
        printf("Kiểm tra ma phương:\n");
        xuat(matrix, n);
        
        printf("%s\n", laMaPhuong(matrix, n) ? "Là ma trận ma phương" : "Không phải ma trận ma phương");
    }
    return 0;
}

void nhap(int matrix[][MAX_SIZE], int n) {
    for(int i=0; i<n; ++i)
        for(int j=0; j<n; ++j)
            scanf("%d", &matrix[i][j]);
}

void xuat(int matrix[][MAX_SIZE], int n) {
    for(int i=0; i<n; ++i) {
        for(int j=0; j<n; ++j)
            printf("%4d", matrix[i][j]);
        printf("\n");
    }
}

int laMaPhuong(int matrix[][MAX_SIZE], int n) {
    int sum = n*(n*n + 1)/2;
    
    // Kiểm tra hàng
    for(int i=0; i<n; ++i) {
        int rowSum = 0;
        for(int j=0; j<n; ++j)
            rowSum += matrix[i][j];
        if(rowSum != sum) return 0;
    }
    
    // Kiểm tra cột
    for(int j=0; j<n; ++j) {
        int colSum = 0;
        for(int i=0; i<n; ++i)
            colSum += matrix[i][j];
        if(colSum != sum) return 0;
    }
    
    // Kiểm tra đường chéo chính
    int diag1 = 0, diag2 = 0;
    for(int i=0; i<n; ++i) {
        diag1 += matrix[i][i];
        diag2 += matrix[i][n-1-i];
    }
    
    return (diag1 == sum && diag2 == sum);
}

Thẻ: mạng mảng hai chiều hàm đệ quy Ma trận

Đăng vào ngày 2 tháng 6 lúc 16:13