Thêm phần tử vào trong mảng 1 chiều

đây là code của em ạ.

#include <stdio.h>
void them(int n, int a[]) {
    int x, i, k;
    printf("\n\n- Ban muon them phan tu nao: ");
    scanf("%d", &x);
    printf("- Ban muon them vao vi tri nao: ");
    scanf("%d", &k);
    while (k > n) {
        printf("- Khong ton tai vi tri nay. Vui long nhap lai!");
        printf("\n- Ban muon them vao vi tri nao: ");
        scanf("%d", &k);
    }

    for (i = k; i < n; i++) {
        a[i] = a[i - 1];
    }
    a[k] = x;
    n++;

    printf("- Mang sau khi them phan tu %d vao vi tri %d la: ", x, k);
    for (i = 0; i < n; i++) {
        printf("%5d", a[i]);
    }
}

Mọi người giúp em xem đoạn này sai ở đâu với ạ

    for (i = k; i < n; i++) {
        a[i] = a[i - 1];
    }
    a[k] = x;
    n++;

Phải tăng size của mảng trước.

Vòng for không cần áp dụng cho trường hợp i = k.

n phải là con trỏ vì thay đổi trong hàm nhưng n bên ngoài vẫn thế. :slight_smile:

5 Likes

có cách nào không cần phải sử dụng con trỏ không ạ =))))

Trả về độ dài mới :expressionless:

4 Likes

Bạn muốn thay đổi n trong trong hàm con tác động đến n trong hàm main() thì có thể truyền n dưới dạng tham chiếu.

Hơn nữa, hàm them() thì chỉ nên thực hiện chức năng thêm thôi, việc nhập xuất hãy để hàm main() lo nhé, vì 1 hàm con tốt thì chỉ nên làm 1 nhiệm vụ.

Bạn có thể đọc thêm hướng dẫn chi tiết cho bài toán này nhé.

Hơn nữa, bạn nên bổ sung kiến thức về hàm, tham chiếu và tham trị, học được con trỏ nữa thì tốt. Khóa học của mình trên web đều có, bạn có thể tham khảo nếu cần.

5 Likes

cho em xin code được để ngẫm được không ạ. Em mới tiếp xucs nên cảm thấy khó hiểu quá :frowning:

1 Like

Code theo như ý tưởng của Rogb10 nè. :slight_smile:

#include <stdio.h>

void printArray(int a[], int size) {
    for (int i = 0; i < size; i++) printf("%d ", a[i]);
    printf("\n");
}

int add(int a[], int size, int i, int x) {
    size++;
    for (int j = size - 1; j > i; j--)
        a[j] = a[j - 1];
    a[i] = x;
    return size;
}

int main(int ag, int** av) {
    int a[10] = {1, 3, 5, 6, 3};
    int size = 5;
    printArray(a, size);
    size = add(a, size, 2, 2);
    printArray(a, size);
    return 0;
}

Trong C không có truyền bằng tham chiếu. :slight_smile:

4 Likes

Xác nhận tham chiếu là của C++ :slight_smile:

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?