有人可以帮我编码此aadjacentElementsProduct函数的主要功能吗? 问题是:
这是我尝试过的:
struct arr_integer
{
int size;
int arr[];
};
int adjacentElementsProduct(struct arr_integer inputArray);
int main()
{
int res,i;
struct arr_integer array;
printf("Enter size of the array: ");
scanf("%d", &array.size);
printf("Enter the elements in array: ");
for (i = 0; i < array.size; i++)
{
scanf("%d", &array.arr[i]);
}
printf("%d\n", array.arr[2]);
res = adjacentElementsProduct(array);
printf("Max is %d", res);
getch();
}
给出一个整数数组,找到具有最大乘积的相邻元素对并返回该乘积。
示例
对于inputArray = [3, 6, -2, -5, 7, 3],
,输出应为adjacentElementsProduct(inputArray) = 21
7
和3
产生最大的产品。
int adjacentElementsProduct(struct arr_integer inputArray)
{
int arrLength = inputArray.size;
int max = inputArray.arr[0] * inputArray.arr[1];
for (int i = 1; i < arrLength - 1; i++)
{
if (inputArray.arr[i] * inputArray.arr[i + 1] > max)
{
max = inputArray.arr[i] * inputArray.arr[i + 1];
}
}
return max;
}
答案 0 :(得分:1)
结构成员arr
是flexible array member。默认情况下,它没有大小,甚至没有为其分配内存,需要对其进行分配。这只能通过动态分配整个结构 (例如使用malloc
)来实现。
所以解决方案就像
struct arr_integer *array;
size_t array_size;
// Get the number of elements for the array
printf("Enter size of the array: ");
scanf("%zd", &array_size);
// Allocate memory for both the structure and the array data
array = malloc(sizeof *array + sizeof *array->arr * array_size);
array->size = array_size;
// Now you can initialize `array->arr[i]` for any `i` between `0` and `array->size - 1`
答案 1 :(得分:0)
@Muneer。您只需要按照以下步骤重新调整 for循环 :
int adjacentElementsProduct(struct arr_integer inputArray)
{
int arrLength = inputArray.size;
int max = inputArray.arr[0] * inputArray.arr[1];
for (int i = 2; i < arrLength - 1; i++)
{
if (inputArray.arr[i-1] * inputArray.arr[i] > max)
{
max = inputArray.arr[i-1] * inputArray.arr[i];
}
}
return max;
}
注意循环中 i 的第一个值( i = 2 )
答案 2 :(得分:0)
问题是您没有分配任何内存。最后使用[]
语法的结构称为“弹性数组成员”。仅当您为结构手动分配内存时才能使用它,如下所示:
#include <stdlib.h>
...
printf("Enter size of the array: ");
int size;
scanf("%d", &size);
struct arr_integer* array = malloc( sizeof(*array) + sizeof(int[size]) );
array->size = size;
printf("Enter the elements in array: ");
for (i = 0; i < array.size; i++)
{
scanf("%d", &array.arr[i]);
}
...
free(array);
答案 3 :(得分:0)
虽然有关丢失内存分配的答案是正确的,但我认为这样更改将更容易:
struct arr_integer
{
int size;
int *arr; //<<<<<<<<<<
};
int adjacentElementsProduct(struct arr_integer inputArray);
int main()
{
int res,i;
struct arr_integer array;
printf("Enter size of the array: ");
scanf("%d", &array.size);
//Of course add check for return value of scanf and to
// the validity of the size
array.arr = malloc(array.size * sizeof(*array.arr));
//and check the malloc return
//and later free the allocated memory!
.
.
.
这允许OP仍使用“常规”语法声明结构,并仅分配动态部分。我认为它更具可读性。