c - 来自更大数组的新索引数组

标签 c arrays

我正在尝试创建一个新数组,该数组将具有满足特定条件的更大数组的索引号。

例如,有一大堆 0 和 1,我想要一个列出每个索引都有 1 的数组:

  int A[] = {1,1,0,0,1,1,0,0,0,0};    
  int B[4];    
    ...      
  for(i = 0;i < 4;i++)
  {
     printf("%d \n",B[i]);
  }

结果:

0
1
4
5

在小范围内(对于上述情况),我通过使用嵌套的 for 循环和 break 命令让它工作:

//nested loop 
//reading index
#include <stdio.h>

int main()
{
    int a,b;
    int c[10] = {-1, -1, 0, 0, -1, 1, 0, 0, 0, 0};
    int d[4];

    b = 0;
    for(a = 0;a < 5;)
    {
        for(;b < 10;b++)
        {
            if(c[b] == -1)
            {
                d[a] = b;
                break;
            }

        }
        b++;
        a++;
    }

    for(a = 0;a < 4;)
    {
        printf("%d \n",d[a]);
        a++;
    }
}

当我尝试为更大的数组集大规模实现此功能时,问题就来了(其中,我不知道第二个数组需要多大)。这是我的:

 #include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define N 283

int im_index_finder(int inarray[N - 2],int min_or_max);

void main()
{
    double t[N], d[N], velocity[N], averagevelocity[N - 1], n_d[N];
    double dx[N - 1];
    int b[N - 1], d_b[N - 2];
    int i,j,k,a,c,imax_index,imin_index;
    int imax[N - 2], imin[imin_index];

    FILE *fid;

    fid = fopen("squatsedit.csv","r");

    //      Reading the data from csv file, velocity, and average velocity

    for(i = 0;i < N;)
    {
        fscanf(fid, "%lf, %lf", &t[i], &d[i]);
        //printf("%g  %g\n", t[i], d[i]);
        velocity[i] = d[i] / t[i];
        i++;
    }

    for(i = 1;i < N;)
    {
        averagevelocity[i - 1] = (d[i] - d[i-1])/(t[i] - t[i-1]);
        i++;
    }

    for(i = 0;i < N;)
    {
        n_d[i] = d[i];
        i++;
    }

    //      Filtering of the distance data

    for(i = 0;i < 2;)
    {
        for(j = 2;j < N;)
        {
            k = j - 1;
            n_d[k] = ( n_d[k - 1] + n_d[k] + n_d[k + 1] )/3;
            j++;
        }
        i++;
    }

    //      start of extrema replica

    for(i = 1;i < N;)
    {
        dx[i - 1] = (n_d[i] - n_d[i-1]);
        i++;
    }

    for(i = 0;i < N - 1;)
    {                                   //checking peaks for maxima and minima
        if(dx[i] > 0)
        {
            b[i] = 1;                   //b[i] = 1 for positive changes in slope
        }
        else
        {
            b[i] = 0;                   //b[i] = 0 for negative changes in slope
        }
        i++;
    }

    for(i = 1;i < N - 1;)
    {
        d_b[i - 1] = b[i] - b[i - 1]; 
        i++;
    }

    imax_index = im_index_finder(d_b,1);
    imin_index = im_index_finder(d_b,0);

    c = 0;
    for(a = 0;a < imax_index;)
    {
        for(;c < N - 2;c++)
        {
            if(d_b[c] == -1)
            {
                imax[a] = c + 1;
                break;
            }
        }
        c++;
        a++;
    }

    c = 0;
    for(a = 0; a < imin_index;)
    {
        for(;c < N - 2;c++)
        {
            if(d_b[c] == 1)
            {
                imin[a] = c + 1;
               break;
            }
        }
        c++;
        a++;
    }

    printf("Our squatsedit is:\n");
    for(i = 0;i < 5;)
    {
        printf("%g   %g \n",t[i],d[i]);
        i++;
    }
    printf("...\n");
    printf("Our velocities are:\n");
    for(i = 0; i < 5;)
    {
        printf("%e \n",velocity[i]);
        i++;
    }
    printf("...\n");
    printf("Our average velocities are:\n");

    for(i = 0;i < 5;)
    {
        printf("%f \n",averagevelocity[i]);
        i++;
    }
    printf("...\n");
    printf("Our filtered distances are:\n");
    for(i = 0;i < 5;)
    {
        printf("%f \n",n_d[i]);
        i++;
    }
    printf("...\n");
    printf("Then some differences are:\n");
    for(i = 0;i < 5;)
    {
        printf("%f \n",dx[i]);
        i++;
    }
    printf("...\n");
    printf("Our positve and negative detector says:\n");
    for(i = 0;i < 5;)
    {
        printf("%d \n",b[i]);
        i++;
    }
    printf("...\n");
    printf("Our xb equivalent is:\n");
    for(i = 0;i < 10;)
    {
        printf("%d \n",d_b[i]);
        i++;
    }
    printf("...\n");
    printf("our imax_index is %d \n",imax_index);
    printf("our imin_index is %d \n",imin_index);
    for(i = 0;i < imax_index;)
    {
        printf("%d \n",imax[i]);
        i++;
    }
    //printf("our imin is:\n");
    //for(i = 0;i < imin_index;)
    //{
    //    printf("%d \n",imin[i]);
    //    i++;
    //}

    fclose(fid);

}

int im_index_finder(int inarray[N - 2],int min_or_max)
{
    int a;
    int max_index = 0;
    int min_index = 0;

    for(a = 0;a < N - 2;)
    {
        if(inarray[a] == -1)
        {
            max_index++;
        }
        else if(inarray[a] == 1)
        {
            min_index++;
        }
        a++;
    }

    if(min_or_max = 1)
    {
        return max_index;
    }
    else
    {
        return min_index;
    }
}

但是显示的时候,本应是imin数组的后7个元素,却是imax数组的开头元素。

当我注释掉 imin 循环时,imax 正确呈现,但我也需要 imin,谁能帮我解决这个问题?

最佳答案

您在 imin[] 的声明中使用了 imin_index,但 imin_index 的值是多少?

int i,j,k,a,c,imax_index,imin_index;
int imax[N - 2], imin[imin_index];

那么imin[]的大小是多少?

关于c - 来自更大数组的新索引数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38679057/

相关文章:

python - axis = 0 在 Numpy 的 sum 函数中做了什么?

PHP 从数组中删除元素无法正常工作

java - 如何理解这个 Java 8 Stream collect() 方法?

java - 避免没有集合的重复?

c - sizeof(bitfield_type) 在 ANSI C 中合法吗?

c - linux 内核 list_head 与包含 list_head 的空条目

c - 如何在 C 中将浮点值限制为小数点后两位?

c++ - 如何使用具有负索引的(2d)数组?

c - 为什么 getaddrinfo 有多个结果?

Javascript-将值分配给月份数组