0 k thích
778 đã xem
trong Kiến thức CNPM bởi (280 điểm)

Đây là hàm tìm giá trị dương đầu tiên trong mảng 1 chiều các số thực A, nếu trả về A[i] trước rồi break thì không sao, nhưng nếu break trước thì hàm không trả về A[i] được, cho em hỏi tại sao lại như vậy

float Duongdau(float A[], int in);
float Duongdau(float A[], int in)
{
    int i=0;
    for(;i<in;i++)
    {
        if (A[i]>0)
        {
            break;
            return(A[i]);
            
        }
        else
        {
            return -1;
        }
    }
}

bởi (1.4k điểm)
Có điều này mình khuyên bạn là nên hạn chế tối đa dùng break và continue trong vòng lặp cũng như hạn chế dùng goto. Nên để chương trình chạy trơn tru từ trên xuống dưới không nên có sự nhảy hỗn độn.

3 Trả lời

+1 thích
bởi (4.8k điểm)
"nếu trả về A[i] trước rồi break thì không sao", hàm sẽ kết thúc ngay sau lệnh return, bạn đặt thêm mớ code ngay sau return cũng chả có ý nghĩa gì chứ không riêng gì break.

Cú pháp break là để thoát khỏi vòng lặp (for, while) đó bạn. Bạn đặt break ở đó thì sau khi nó được thực hiện ct nhảy ra khỏi scope của for mất rồi, chứ không chạy được tiếp tới "return(A[i])" nữa.

P.S: hàm của bạn dù có hay không có break, đều bị sai rồi ấy, vì nếu có 1 số âm ở đầu mảng, hàm của bạn sẽ trả ngay về -1 và kết thúc chứ không xét tiếp các số tiếp theo trong mảng.
0 k thích
bởi (140 điểm)
break có tác dụng thoát vòng lặp (for hay while)

return có tác dụng trả về kết quả của hàm và thoát hàm tại đó luôn.

ở bài làm của bạn sau khi break thì vòng lặp for sẽ bị dừng đồng nghĩ với việc sẽ không thực hiện lệnh return ở dưới. sau khi thoát hàm k có giá trị trả về nên chương trình sẽ bị lỗi.

Xét mảng -2 -3 7 -5 7

khi đưa vào hàm trên xét giá trị A[0] < 0 nên nhảy xuống else và return -1 nghĩ là không có số dương trong mảng ==> hàm bạn viết không đúng
0 k thích
bởi (3.2k điểm)
là vì bạn hiểu sai ý nghĩa của break và return thôi

- break: thoát ra khỏi 1 scope nào đó ( for, foreach, while, do while, switch case)

- return: trả về kết quả của 1 hàm

nguyên tắc:

1. khi trong cùng 1 scope: bất cứ câu lệnh nào nằm sau câu lệnh break / return đều không được xử lý ( coi như là vô nghĩa)

2. khi viết 1 hàm có trả về kết quả: hàm phải được trả kết quả về trong bất cứ trường hợp nào ( trả lời cho câu hỏi "tại sao lại như vậy" của bạn: với hàm của bạn ở trên khi câu lệnh break được gọi thì sẽ thoát ra khỏi vòng for, nhưng không gặp câu lệnh return nào nên hàm không trả về được kết quả, báo lỗi), có một số trình biên dịch phát hiện được trường hợp này thì sẽ nhắc nhở mình, nhưng một số lại không có nên bạn phải cẩn thận trường hợp này (đôi khi có lỗi mà không biết tại sao :v)
Chào mừng đến với Q&A FIT. Bạn có thể đặt câu hỏi và nhận được câu trả lời từ các bộ phận hỗ trợ và những thành viên khác tại Khoa Công nghệ Thông tin, Trường Đại học Khoa học Tự nhiên, Đại học Quốc gia TP.HCM. Bạn hãy đăng nhập bằng tài khoản Google để gửi hoặc trả lời các câu hỏi.
...