我有这个代码,我想将一个表inp[2560]
分成4个部分,每个部分我要计算一下:
MI = calcul__min(inp,640);
MA = calcul__max(inp,640);
MOY = calcul__moy(inp,640);
ectt = calcul__ect(inp,640);
我不知道如何使用for循环。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define ORDER 65
#define NP 2560
float inp[2560];
float ED1, ED2, ED3, ED4, Ap4;
float d1, d2, d3, d4, a4, total;
int i;
double calcul__max(float tab[], int N)
{
double max;
int i;
for (i = 0; i < N; i++)
{
if(tab[i]>max)
max=tab[i];
}
return max;
}
double calcul__min(float tab[], int N)
{
double min;
int i;
for (i = 0; i < N; i++)
{
if(tab[i]<min)
min=tab[i];
}
return min;
}
double calcul__moy(float tab[],int N)
{
double moyenne,somme;
int i;
for (i = 0; i < N; i++)
{
somme = somme + tab[i];
moyenne = somme /640;
}
return moyenne;
}
float calcul__ect(float tab[], int N)
{
double moyenne, TM, som, ec, ect;
moyenne = calcul__moy(inp,640);
int i;
for (i = 0; i < N; i++)
{
TM = tab[i] - moyenne;
TM *= TM;
som += TM;
}
ec = som / 639;
ect = sqrt(ec);
return ect;
}
struct Calculstat
{
float Ea;
float amplitudemin;
float ecarttype;
float Ed2;
float amplitudemax;
};
filter(int ord, float *a, float *b, int np, float *x, float *y) {
int i, j;
y[0] = b[0] * x[0];
for (i = 1; i < ord + 1; i++) {
y[i] = 0.0;
for (j = 0; j < i + 1; j++)
y[i] = y[i] + b[j] * x[i-j];
for (j = 0; j < i; j++)
y[i] = y[i] - a[j+1] * y[i-j-1];
}
for (i = ord + 1; i < np + 1; i++) {
y[i] = 0.0;
for (j = 0; j < ord + 1; j++)
y[i] = y[i] + b[j] * x[i-j];
for (j = 0; j < ord; j++)
y[i] = y[i] - a[j+1] * y[i-j-1];
}
}
main()
{
float x[NP]= { -84.786,...};
float y[NP], a[ORDER+1], b[ORDER+1];
int i, j;
b[0] = -0.005574892;
// [...]
b[65] = -0.005574892;
a[0] = 0;
// [...]
a[65] = 0;
filter(ORDER, a, b, NP, x, y);
for (i = 0; i < NP; i++)
{
x[i]=y[NP-i-1];
}
filter(ORDER,a,b,NP,x,y);
for (i=0;i<NP;i++)
{
x[i] = y[NP-i-1];
}
for (i = 0; i < NP; i++)
{
y[i] = x[i];
}
for (i = 0; i < NP; i++)
{
//printf("%f\n",y[i]);
inp[i]=y[i];
}
double MA,MI,MOY;
float ectt;
MI = calcul__min(inp,640);
MA = calcul__max(inp,640);
MOY = calcul__moy(inp,640);
ectt = calcul__ect(inp,640);
printf("Le min de tableau est ""%f\n",MI);
printf("Le max de tableau est ""%f\n",MA);
printf ("la moyenne est de ""%g\n", MOY);
printf ("ecart type est ""%g\n", ectt);
}
答案 0 :(得分:0)
众所周知,C中的数组作为指向第一个字节的指针传递。
而且正如我们所知,我们可以将指针算术应用于C中的指针(void
除外)。
以下是示例
#include <stdio.h>
void foo(float *f)
{
// Some stuff
}
int main()
{
float inp[2560];
foo(inp);
foo(inp+(640));
foo(inp+(2*640));
foo(inp+(3*640));
}
inp+X
跳过X
个数组浮点数。不要明确键入X * sizeof(float);
这是错误的。
我有这个代码,我想将一个表格[2560]分成4部分 对于每个部分,我想计算一下:
这是一个灵感:
int i = 0;
while (i < 4)
{
whatever = calcul__min(inp+(i * 640),640);
}