【发布时间】:2018-10-06 20:03:54
【问题描述】:
我尝试制作一个程序,使用布林带按时间顺序打印股票的买入/卖出日期。布林带是一种工具,它使用股票价格的移动平均线 (MA) 和标准偏差 (SD) 来确定买卖的上限和下限。
该程序接收 N 天的 N、M 和股票价格。然后,通过使用第 (n-M+1) 天到第 n 天的股票价格的 MA&SD 获得界限。如果第n天的股票价格高于上限,则卖出股票,如果低于上限,则买入。如果是买入日,则在日期前打印“+”,卖出时打印“-”。
下面的代码报分段错误,我尝试通过核心分析进行调试,但无法成功。我想知道为什么这段代码会出现分段错误。
#include <stdio.h>
#include <math.h>
long double average(int a[], int M, int n)
{
int i;
long double sum = 0;
for(i=n-M+1; i<=n; i++)
{
sum += a[i-1];
}
return sum/(long double)M;
}
long double deviation(int a[], int M, int n, long double av)
{
int i;
long double temp, sum = 0;
for(i=n-M+1; i<=n; i++)
{
temp = a[i-1]-av;
sum += temp*temp;
}
return sqrt(sum/(long double)M);
}
int main()
{
int N, M;
scanf("%d %d", &N, &M);
int i;
int a[N];
for(i=0; i<N; i++)
{
scanf("%d", a[i]);
}
long double av, high, low;
for(i=M; i<=N; i++)
{
av = average(a, M, i);
high = av + 2*deviation(a, M, i, av);
low = av - 2*deviation(a, M, i, av);
if(a[i-1] > high)
printf("-%d", a[i-1]);
else if(a[i-1] < low)
printf("+%d", a[i-1]);
}
return 0;
}
输入:
40 10
161 250 324 330 308 356 410 449 524 489 514 569 491 447 521 535 564 641 558 539 516 580 629 656 736 670 668 691 618 618 556 611 632 561 606 607 585 560 462 500
输出:
-18-25+39
【问题讨论】:
-
请给出输入示例和预期输出。 edit您的问题直接包含在其中,请勿在评论中发布!
-
输入:40161分之10250 324 330 308 356 410 449 524 489 514 569 491 447 521 535 564 641 558 539 516 580 629 656 736 670 668 691 618 618 556 611 632 561 606 607 585 560 462 500 & 输出:-18-25+39
-
我修复了你的代码,但它没有打印出预期的输出,我让你处理数学,rextester.com/EUW52246
标签: c arrays debugging segmentation-fault