在C中查找数组的峰值编号

len*_*any 1 c arrays algorithm loops

我是C新编码的新手.我正在尝试编写一个代码,用于查找数组中的峰值数,即大于该数字前后数字的数字.

这是我的代码.它运行没有错误但没有输出所以我知道我做错了什么.

#include <stdio.h>
int main() {
 int nums[14] = {1, 2, 3, 3, 2, 4, 1, 5, 6, 3, 1, 10, 2, 8};
  int peaks[4];

 for(int i = 0; i < nums[i]; i++){
     if(nums[i] > nums[i-1] && nums[i] > nums[i+1]){
         peaks == nums[i];
     }
     return peaks;
 }

 printf("Peak numbers are %d",peaks);
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能输出它作为结果: [4, 6, 10, 8]

gsa*_*ras 5

启用编译器的warnigs!你应该得到这样的东西:

prog.c: In function 'main':
prog.c:8:16: warning: comparison between pointer and integer
          peaks == nums[i];
                ^~
prog.c:8:16: warning: statement with no effect [-Wunused-value]
          peaks == nums[i];
          ~~~~~~^~~~~~~~~~
prog.c:10:13: warning: returning 'int *' from a function with return type 'int' makes integer from pointer without a cast [-Wint-conversion]
      return peaks;
             ^~~~~
prog.c:10:13: warning: function returns address of local variable [-Wreturn-local-addr]
prog.c:13:28: warning: format '%d' expects argument of type 'int', but argument 2 has type 'int *' [-Wformat=]
  printf("Peak numbers are %d",peaks);
                           ~^  ~~~~~
                           %ls
Run Code Online (Sandbox Code Playgroud)

所以,改变这个:

 peaks == nums[i];
Run Code Online (Sandbox Code Playgroud)

对此:

 peaks[j] = nums[i];
Run Code Online (Sandbox Code Playgroud)

j你可以使用的另一个柜台在哪里.

那你return peaks呢,为什么?它不是自定义功能,所以你不应该返回.

此外,您尝试打印如下数组:

printf("Peak numbers are %d",peaks);
Run Code Online (Sandbox Code Playgroud)

这是不可能的,你需要遍历数组的元素,如下所示:

for(i = 0; i < 4; ++i)
    printf("%d\n", peaks[i]);
Run Code Online (Sandbox Code Playgroud)

在纠正警告之后,您已准备好实际处理yuor逻辑.你的for循环不会迭代所有数组的数组.所以改变这个:

for(i = 0; i < nums[i]; i++)
Run Code Online (Sandbox Code Playgroud)

对此:

for(i = 0; i < 14; i++)
Run Code Online (Sandbox Code Playgroud)

此外,您的if语句将导致未定义的行为:

if(nums[i] > nums[i-1] && nums[i] > nums[i+1])
Run Code Online (Sandbox Code Playgroud)

when i是0,when i是13.

  • @izlin OP的期望输出是'4,6,10,8`,所以8 __是一个峰值. (3认同)