C语言中如何判断给定的数组是否按降序排序

Ani*_*mar 1 c arrays sorting

我需要找出给定的数组是否按降序排序...
我得到了输出,但在门户中它显示为错误答案。

这是我的代码。

#include<stdio.h>
int main()
{
   int n,a[15],i,k=0;
   scanf("%d",&n);
   for(i=1;i<=n;i++)
   { scanf("%d",&a[i]);}
   for(i=1;i<=n;i++)
   {
      if(a[i]<a[i+1])
         k++;
   }
   if(k==0)
      printf("yes");
   else
       printf("no");
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

帮我想想办法...

Aru*_*A S 5

数组的索引从0size - 1。所以如果你有

int array[15];
Run Code Online (Sandbox Code Playgroud)

元素a[0]a[14]. 但在您的代码中,您从 开始a[1]a[15]可能尝试访问a[15],这是不安全的内存,会导致问题。

所以你应该首先改变你的 for 循环。

你应该将其更改为

   for( i = 0 ; i < n ; i++ )
   { 
     scanf("%d",&a[i]);
   }
   for( i = 0 ; i < n - 1 ; i++ )
   {
      if( a[i] < a[i+1] )
      {
         k++;
         break;
      }
   }
Run Code Online (Sandbox Code Playgroud)

在第二个 for 循环中,您应该循环直到,i < n - 1否则,在

 if(a[i]<a[i+1])
Run Code Online (Sandbox Code Playgroud)

当 时i = n,您将尝试访问n + 1带有 th 的元素a[i+1],这可能会超出范围。

一旦发现数组不是按降序排列,您也可以退出循环以节省时间。

您还必须确保a[15]足以存储所有值(即作为输入给出的值的数量不应超过 15,请检查问题陈述以确保这一点)