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?
Bài liên quan
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
Tks bạn!
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
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
Code này tham khảo trên mạng nhưng bị rối ở dòng !ALN!!!
Xem cao thủ @TheSky kìa, cũng giải thích như tớ ấy :)))
Tks bạn!
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 ^^
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!