C语言 我调用了数组中的值,但得到的值有些奇怪

5cnsuln7  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(174)

我所要做的是生成一些随机数(-1〈x〈1),然后将它们保存在数组中。p[i] =(double)2*rand()/RAND_MAX-1;
到目前为止没有错误(随机数是合理生成的),但当我试图从数组中获取值时出现了问题。q += p[i]*p[j]
数组p[j]给出了奇怪的值,如0(是,可以是零,但数组连续给0看起来很奇怪)或非常大的值,例如280403100133025176199821455822674425889165972183938321172200255006450453290907333581764616022613874266224862602953806013128591375888354532283482625802 24.000000。不总是,但有时。
我想应该没有错误。我检查了索引i和j都在数组范围内。我有没有犯错误?我在下面附上了我的代码。(我的代码正在计算一个完全没有意义的东西,所以你不必关心这个。)
谢谢你!

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

int main(){

        FILE *file;
        file = fopen("result.txt","w");
        int N = 10000;
        double p[N]={0};

        for(int i=0;i<N;i++){
                p[i] = (double)2*rand()/RAND_MAX-1; //range[-1, 1]
        }
        int j;
        double x,y;
        for(int n=-100; n<=100; n++){
                double q = 0;
                for(int i=0; i<N; i++){
                        j = (i+n)%N;
                        q += p[i]*p[j];
                }
                fprintf(file,"%d\t%f\n",n,q);
        }
        fclose(file);

}
dbf7pr2w

dbf7pr2w1#

  1. p[N]={0};在C中无效。无法初始化可变大小数组
    您可以轻松地调试问题:
int main(){
        int N = 100;
        double p[N];

        for(int i=0;i<N;i++)
            p[i] = (2.0*rand())/RAND_MAX-1; //range[-1, 1]

        int j;
        double x,y;
        for(int n=-100; n<=100; n++){
                double q = 0;
                for(int i=0; i<N; i++){
                    j = (i+n)%N;
                    if(i < 0 || i >= N || j < 0 || j >= N) 
                    {
                        printf("i = %d, j = %d ERROR\n", i, j);
                    }
                    q += p[i]*p[j];
                }
        printf("n=%d\tq=%f\n",n,q);
        }
}

当你运行它的时候,你会注意到j总是负的。我不知道你想要计算什么,但是你可能想要这个指数的绝对值

int main()
{
    int N = 100;
    double p[N];

    for(int i=0;i<N;i++)
        p[i] = (2.0*rand())/RAND_MAX-1; //range[-1, 1]

    int j;
    double x,y;
    for(int n=-100; n<=100; n++){
            double q = 0;
            for(int i=0; i<N; i++){
                j = abs((i+n)%N);
                if(i < 0 || i >= N || j < 0 || j >= N) 
                {
                    printf("i = %d, j = %d ERROR\n", i, j);
                }
                q += p[i]*p[j];
            }
    printf("n=%d\tq=%f\n",n,q);
    }
}

https://godbolt.org/z/7dqM49b8a

相关问题