30/09/2018, 20:51

Giải thích giúp e dòng code trong vòng lặp for

Tìm âm lớn nhất trong mảng.

#include <stdio.h>

void ALN(int a[], int n);


int main(int argc, char *argv[])
{
	int a[10]={-2,-1,-3,0,1,3,2};
	int n=7;
	ALN(a,n);
	
	return 0;
}


void ALN(int a[], int n)
{
	int ALN=0;
	for(int i=0; i<n; i++)
	{
		if(!ALN&&a[i]<0)     
			ALN=a[i];     // Tại sao qua vòng lặp thứ 2 trở về sau thì dòng này lại bị bỏ qua?
	 	if(a[i]<0)
		{
			if(ALN<a[i])
			ALN=a[i];
		}
	}
	
	printf("Am lon nhat = %d", ALN);
}

Cho e hỏi là tại sao trong if(!ALN&&a[i]<0) vòng lặp thứ nhất thì ALN=-2, nhưng khi qua vòng lặp 2 và các vòng lặp sau thì dòng code ALN=a[i] bị bỏ qua? Và !ALN chằng phải là khác giá trị hiện tại của ALN sao, nếu vậy thì tại sao các giá trị sau (-1,-3) đều thỏa điều kiện lại không được gán?

Do Quang Duy viết 22:55 ngày 30/09/2018

Bạn hiểu nhầm rồi, !ALN có nghĩa là ALN == 0. If( !ALN && a[i] < 0) có nghĩa là nếu ALN = 0 và a[i] < 0 thì thực hiện. Trước khi vào vòng for ALN = 0, sau vòng for đầu tiên ALN = -2 rồi cứ chạy tiếp các vòng khác thì ALN khác 0 rồi nên “từ vòng lặp thứ 2 về sau thì dòng đó không chạy nữa” là đúng thôi

Quyen viết 22:56 ngày 30/09/2018

Tks bạn!

Ngô Doãn Tuấn viết 22:52 ngày 30/09/2018

int ALN=0;

if(!ALN&&a[i]<0)

Bạn nhìn vào hai dòng này.
Đầu tiên, khai báo biến ALN
Sau đóm kiểm tra điều kiện (!ALN&&a[i]<0)
Cái này để kiểm tra coi xem ALN có = 0 không và phần tử đó có nhỏ hơn không không ?
nếu đúng thì gắn vào biến ALN.
Lặp lại điều kiện không đúng => vòng đó bị bỏ qua

Do Quang Duy viết 22:56 ngày 30/09/2018

Mình thấy code của cậu khá hay đó, nếu trong mảng mà không có phần tử âm thì ALN = 0 luôn. Xem code của cậu mình lại học được thêm ít

Quyen viết 22:51 ngày 30/09/2018

Code này tham khảo trên mạng nhưng bị rối ở dòng !ALN!!!

Do Quang Duy viết 22:58 ngày 30/09/2018

Xem cao thủ @TheSky kìa, cũng giải thích như tớ ấy :)))

Quyen viết 22:55 ngày 30/09/2018

Tks bạn!

Bé tập Code viết 22:52 ngày 30/09/2018

code này chẳng lẽ các phần tử dương hết thì kết luận số âm lớn nhất là 0 à. Kì za ^^

Quyen viết 23:07 ngày 30/09/2018

Tại chỉ thắc mắc khúc đó nên ghi tóm ngắn như vậy thôi! Nếu chỉ có phần tử dương thì kết luận không có ALN!

Bài liên quan
0