这是我的代码而无效。
如果上一个位置的arr比后一个更大或更小,如果它对所有数组都更大,那么我应该返回值1
如果在数组的某个点上arr的prev位置更大然后跟随一个所以它应该返回值0感谢任何帮助
#include <stdio.h>
#include <stdlib.h>
int Up_array(int *arr,int Size )
{
int i;
for(i=0;i<Size;i++)
if (arr[i] > arr[i+1])
{
return 0;
}
else if(arr[i] <= arr[i+1])
{
return 1;
}
}
void main ()
{
int *arr,Size,i;
printf("please enter the size of the array\n");
scanf("%d",&Size);
arr=(int*)malloc(Size*sizeof(int));
printf("please enter the array\n");
for (i=0; i<Size ;i++)
scanf("%d",&arr[i]);
Up_array(arr,Size);
free(arr);
system("pause");
}
答案 0 :(得分:0)
您不应该在else
区块中返回。一旦找到两个正在增加的元素,它将立即返回1
,它不会检查数组的其余部分。因此,您的函数只检查数组的前两个元素。
相反,等到你通过整个阵列。如果你没有在循环中返回0
,则意味着所有元素都在升序,因此你可以返回1
。
此外,您需要避免访问数组外部,因此您需要在i
为Size - 2
时停止数组,以便arr[i+1]
仍在数组中。
int Up_array(int *arr,int Size )
{
int i;
for(i=0;i<Size-1;i++)
{
if (arr[i] > arr[i+1])
{
return 0;
}
}
return 1;
}
通常,当else if
中的条件与if
条件完全相反时,您应该只使用else
,而不是else if
。
答案 1 :(得分:-1)
几乎是正确的。这是代码:
#include <stdio.h>
#include <stdlib.h>
int up_array(int *arr,int Size )
{
// Checking corner case where Size = 1 (no index out of bound)
if(Size > 1) {
for(int i=0; i<Size-1; ++i) {
if (arr[i] > arr[i+1]) {
return 0;
}
}
}
return 1;
}
int main ()
{
int *arr,Size;
printf("Please enter the size of the array:\n");
scanf("%d",&Size);
arr=(int*)malloc(Size*sizeof(int));
printf("Please enter the array (press enter after any number)\n");
for (int i=0; i<Size ;i++) {
scanf("%d",&arr[i]);
}
printf("Result %d", Up_array(arr,Size));
free(arr);
return 1;
}