01/10/2018, 17:07

Bài tập của C về function

Em mới học C được khoảng 1 tháng, giờ học đến phần function và pointer nhưng em hơi lơ mơ. Bài tập của em là: “Viết một hàm chấp nhận một mảng các số nguyên và kích thước của nó như các tham số đầu vào sau đó trả về phần tử tối đa trong mảng đó. Kiểm tra hàm bằng cách gọi hàm main () với một số mảng.”
Mọi người kiểm tra giùm phần code của em:

#include <stdio.h>

int maxelement(int size, int *arr);

int main(int argc, char const *argv[]) {
    int arr[] = {14, 15, 50, 100, 6};
    int max = maxelement(5, &arr[5]);
    printf("Maximum element: %i
", max);
    return 0;
}

int maxelement(int size, int *arr) {
    int result = *arr;
    for (int *j = arr + 1; j < (arr + size - 1); j++) {
        if (arr[j] > result) {
            result = arr[j];
        }
    }
    return result;
}

Mong mọi người giúp đỡ!

NBQ viết 19:15 ngày 01/10/2018

int max = maxelement(5, &arr[5]);

Truyền vào arr[5] là sai, phải truyền vào arr thay vì địa chỉ của arr[5] (arr[4] là phần tử cuối cùng của mảng arr).

for (int *j = arr + 1; j < (arr + size - 1); j++) {

Vòng lặp này không đúng. Phải là for (int j = 0; j < size; j++)

Traullu viết 19:16 ngày 01/10/2018

Em có thể tham khảo đoạn code này nhé:

int findMax(int arr[]);

int main()
{
	int arr[] = {11,30,50,7,99,10};
	int maxElement = 0;
	
	maxElement = findMax(arr);
	printf("%d", maxElement);
	
	getch();
	return 0;
}

int findMax(int arr[])
{
	int i = 0;
	int numOfElement;
	int maxElement;
	
	numOfElement = sizeof(arr)/sizeof(arr[0]);
	maxElement = arr[0];
	for(i = 1; i < numOfElement; i++)
	{
		if(maxElement < arr[i])
		{
			maxElement = arr[i];
		}
	}
	return maxElement;
}

cần học kỹ hơn về mảng và con trỏ nhé.

NBQ viết 19:15 ngày 01/10/2018

Mình hiểu ý của bạn nói. Nhưng bạn ấy đã làm sai và làm theo cách đó có khi còn làm cho vòng lặp có vẻ phức tạp hơn mức cần thiết.

for (int *j = arr + 1; j < (arr + size - 1); j++) {
        if (arr[j] > result) {
            result = arr[j];
        }

Bạn có thấy cách bạn này dùng arr[j] trong vòng lặp không? Nhìn vào đây thì có vẻ như bạn ấy lại muốn dùng biến j làm chỉ số để tham chiếu tới các phần tử của mảng chứ không phải là một con trỏ như bạn ấy đã khai báo int *j.

Cách của mình là sửa vòng lặp, còn cách của bạn là sửa nội dung trong vòng lặp.

int maxelement(int size, int *arr) {
    int result = *arr;
    for (int j = 1; j < size; j++) {
        if (arr[j] > result) {
            result = arr[j];
        }
    }
    return result;
}
Bài liên quan
0