这段代码为什么一执行就遇到问题需要关闭

来源:百度知道 编辑:UC知道 时间:2024/05/27 17:03:12
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define SIZE 200000
int main(){
int i;
double x=0;
double a[]={1},b[]={1},c[]={1},d[]={1};
int aMin=0,bMin=0,cMin=0,dMin=0;
printf("%s\t%6s\n","Number","result");
for(i=1;i<=SIZE;i++){
if( i%2 != 0)
x = x + (float)4 / (2*i-1);
else
x = x - (float)4 / (2*i-1);
printf("%d %f\t",i,x);
a[i] = fabs(x - 3.14);
b[i] = fabs(x - 3.141);
c[i] = fabs(x - 3.1415);
d[i] = fabs(x - 3.14159);
if(a[i] <= a[aMin])
aMin = i;
if(b[i] <= b[bMin])
bMin = i;
if(c[i] <= c[cMin])
cMin = i;
if(d[i] <= d[dMin])
dMin = i;
}
printf("When i = %d, pie=3.14",aMin);
printf("When i = %d, pie=3.141",bMin);
printf("When i = %d, pie=3.1415",cMin);

2楼的a[SIZE],应该改成a[SIZE+1],bcd也是一样,abcd四个数组可以改成指针用malloc来获得内存,比如
double*a;
...
a=(double*)malloc(sizeof(double)*(SIZE+1));
这样SIZE=200000也可以运行,只要malloc正确返回。

int i;
double x=0;
double a[]={1},b[]={1},c[]={1},d[]={1};
int aMin=0,bMin=0,cMin=0,dMin=0;
printf("%s\t%6s\n","Number","result");
for(i=1;i<=SIZE;i++){
if( i%2 != 0)

i为int,最大32767,而你的size为#define SIZE 200000

这个是溢出,我给你改了下,现在可以了,注意要是分配数组的话,那个宏不能太大,否则还是会溢出,因为系统可能没有那么大的连续空间给你用,你可以改着试试看

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

#define SIZE 20000 //要是设的太大系统无法给你分配就会造成溢出

int main(){
int i;
double x=0;
double a[SIZE]={1},b[SIZE]={1},c[SIZE]={1},d[SIZE]={1}; //用你的方法初始化就要规定数组的大小,要不因为你只初始化了一个元素,那就认为是一了
int aMin=0,bMin=0,cMin=0,dMin=0;
printf("%s\t%6s\n","Number","result");