Giá trị in ra màn hình không giống như mong muốn

Đây là code của em:

int main() {
    int n;
    printf("Nhap N= ");
    scanf("%i", &n);
    int daySo[n], i;


    for (i=0; i<n; i++) {
        printf("daySo[%i]=", i);
        scanf("%i", &daySo[i]);
    }
    int min = daySo[0], viTriMin;
    for (i=1; i<n; i++) {
        if (daySo[i] < min) {
            min = daySo[i];
            viTriMin = i;
        }
    }
    printf("Phan tu nho nhat cua day so la: daySo[%i]= %i\n", viTriMin, min);

    int max = daySo[0], viTriMax;
    for (i=1; i<n; i++) {
        if (daySo[i] > max) {
            max = daySo[i];
            viTriMax = i;
        }
    }
    printf("Phan tu lon nhat cua day so la: daySo[%i]= %i\n", viTriMax, max);

    int tongChan = 0;
    for (i=0; i<n; i++) {
        if (daySo[i] % 2 == 0) {
            tongChan += daySo[i];
        }
    }
    printf("Tong cac phan tu chan la: %i\n", tongChan);


    int soLe = 0;
    for (i=0; i<n; i++) {
        if (daySo[i] % 2 != 0) {
            soLe ++;
        }
    }
    printf("So luong cac phan tu Le la: %i\n", soLe);
    return 0;
}

và đây là kết quả

Không hiểu tại sao dòng “Phan tu nho nhat cua day so” lại hiển thị như thế ạ?

Chỗ sai ở đây:

if (daySo[i] < min) {
            min = daySo[i];
            viTriMin = i;
}

min = daySo[0], tức là lúc này min = 1, cho chạy vòng for từ 1, daySo[1] là phần tử thứ 1 có giá trị là 2.
Theo code ở trên, nếu daySo[i] < min thì viTriMin mới được gán giá trị của i, nhưng 2 > 1 thì viTriMin không được gán giá trị của i, nên nó sẽ ra một con số tùm lum như bạn thấy.

1 Like

Cảm ơn anh nhiều, em làm được rồi nè :slight_smile:

Vitrimin là biến toàn cục thì giá trị khởi tạo mac dinh của nó là 0 mà nhỉ? Nếu ko đc gán = i thì nhẽ ra là nó phải in ra viTriMin là 0 chứ nhỉ

viTriMin là biến cục bộ mà

hehe. nãy nhìn nhầm :3

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