01/10/2018, 10:25

Nhờ mọi người sửa code vòng for()

đề bài của mình là tìm trong danh sách sinh viên nữ có điểm trung bình nhỏ nhất
vòng for thứ 2 mình k biết sửa thế nào cho hợp lý

void timnu(sinhvien ds[], int n)
{
    int i;
    int x;
    char nu[5];
    for(i=0;i<n;i++)
    {
        if(strcmp(nu,ds[i].gioitinh)==0)
        {
            int min=ds[0].diemtb;
            for(i=0;i<n;i++)
                if(ds[i].diemtb<min)
                {
                    min = ds[i].diemtb;
                    x=i;
                }
        }
    }
}
Henry viết 12:40 ngày 01/10/2018

Bạn khai báo một biến min_gì_đấy và biến vị_trí cho giá trị khởi điểm của chúng bằng -1 (Nếu bạn thắc mắc tại sao điểm trung bình có thể âm thì tí nữa ta sẽ có câu trả lời).

Kế đến bạn cho vòng for lấy giá trị của các học sinh từ học sinh thứ nhất (phần tử thứ 0.) tới học sinh cuối cùng (phần tử thứ n - 1) Trong quá trình lặp, bạn sẽ kiểm tra nếu học sinh đó có gioitinh là nữ không? Nếu có thì ta sẽ tiếp tục xử lí.

Kế đến bạn sẽ so sánh điểm trung bình với biến min_gì_đấy và xử lí với biến vị_trí. Việc này là của bạn.

Sau khi duyệt xong hết tất cả các phần tử. Nếu biến min_gì_đấy mà bằng -1 thì là rất vô lí vì không có điểm trung bình nào mà âm cả. Do đó không có học sinh nữ nào để tao có thể lấy điểm. Còn nếu ngược lại thì ta sẽ có vị_trí.

rogp10 viết 12:26 ngày 01/10/2018

Code bạn chưa khởi tạo cho nu[]. Để code gọn đẹp thì ngoài post trên ra ban đầu nên set min bằng 999, khi gặp tới đó thì min tự xuống đúng bằng số đầu. Nếu min vượt quá 10 hay dưới 0 nhưng vị trí hợp lệ tức là lỗi

Bài liên quan
0