4

我目前正在编写一个简单的函数来计算两个向量的和。由于我是 C 的新手,我想我会为我的向量生成一些“伪随机”值,并随机化它们的长度——这超出了本练习的需要。

基本上,我刚开始编写代码,想看看我的数组的值是什么。

这是代码:

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


int vectorSum(int x[], int y[], int n, int sum[]) {
}

void display_Array(int *a, int len){
     //Declerations
     int i;
     for(i=0; i<len; i++)
     {
          printf("%d ", a[i]);
     }
     printf("\n");    
 }

//Implement a nice randomizing function...Fisher-Yates shuffle

int main(void){
    //Generate a random length for the array
    srand(time(NULL));
    int N = (rand()*rand())%100;

    //Declarations
    int *x = (int *) malloc(N * sizeof(*x)); //Because I don't know how large my array is ahead of time
    int *y = (int *) malloc(N * sizeof(*y));
    int i;

    //Fill the arrays
    for(i=0; i<10; ++i) {
         x[i] = (rand()*rand())%100000;
         y[i] = (rand()*rand())%100000;
    }

    display_Array(x, N);
    getchar();


    //Main execution...



}

请注意,此代码还远未完成 - 请随意批评。我知道它远未完善。然而,我注意到了一些奇怪的事情。我的输出通常会遵循这种模式:

w, x, y...z, 0, 0, 0, 0, 0, 0, 0, 0.

通常情况下,我的数组中的最后一个值是 0。并非总是如此,但往往不是。此外,这种模式通常以倍数出现。比如最后两个值是0、0,那么我再运行一次程序,最后四位是0、0、0、0,以此类推。

那么,为什么会发生这种情况?我有我的怀疑,但我想听听其他人的想法。

4

2 回答 2

4

C不初始化数组的值。因此,您在尚未设置的单元格中找到的只是未擦除内存的内容(当您循环遍历所有已分配的单元格并仅设置前 10 个单元格的值时,它们有很多)。如果您的记忆“清晰”,那么您很可能会看到零,但如果以前的迭代/其他程序中有一些垃圾 - 您可以获得任何类型的值。

于 2013-09-19T05:55:11.313 回答
4

更改这行代码:

 for(i=0; i<10; ++i)

for(i=0; i<N; ++i)

此外,不要使用rand() * rand(),它会造成整数溢出。而是使用rand().

于 2013-09-19T05:59:12.180 回答