01/10/2018, 01:10

[C]: 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
", 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
", 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
", 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
", 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ế ạ?

viết 03:14 ngày 01/10/2018

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.

Stupid viết 03:12 ngày 01/10/2018

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

Anh Tuấn Vũ viết 03:18 ngày 01/10/2018

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ỉ

Stupid viết 03:10 ngày 01/10/2018

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

Anh Tuấn Vũ viết 03:22 ngày 01/10/2018

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

Bài liên quan
0