首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

动态数组有关问题

2012-04-15 
动态数组问题生成两个随机数组X,Y。按F10逐句调试时可以得到两个不同的随机数组,但是按F5启动调试是却出现X

动态数组问题
生成两个随机数组X,Y。按F10逐句调试时可以得到两个不同的随机数组,但是按F5启动调试是却出现X,Y数组一样,是异常情况。为什么呢?
代码:

C/C++ code
#include<stdio.h>#include<stdlib.h>#include<time.h>void main(){    void random(int *&p,int n);    printf("please enter a number!\n");    int n;    scanf("%d",&n);    int  *X=NULL; /*创建指针,指向下面创建的动态数组*/    int  *Y=NULL;    printf("array X: ");    random(X,n);    printf("array Y: ");    random(Y,n);    system("pause");}/*自动生成一个动态数组,接受n个1-99的随机数*/void random(int *&p,int n){    void BubbleSort(int R[],int n);    srand(time(NULL));    p=(int *)malloc(n*sizeof(int ));    for(int i=0;i<n;i++)    {        p[i] = rand()%100;    }    printf("\n");    BubbleSort(p,n);    for(int i=0;i<n;i++)    {        printf("%d ",p[i]);    }    printf("\n");}/*冒泡排序法,但是时间复杂度高,如果要减少时间复杂度可以选其他排序法*/void BubbleSort(int R[],int n) {    int i,j,temp;    for(i=0;i<n-1;i++)    {        for(j=n-1;j>i;j--)        {            if(R[j]<R[j-1])            {                temp=R[j];                R[j]=R[j-1];                R[j-1]=temp;            }        }    }}


[解决办法]
我试了一下,把srand(time(NULL))放在主函数里就可以了。我想原因可能是主函数每次调用函数时都是以系统时间为种子的,两次调用函数时间几乎一样,所以产生了相同的数据。
time函数返回以格林尼治时间(GMT)为标准,从1970年1月1日00:00:00到现在的此时此刻所经过的秒数。
[解决办法]
两次调用中间搞个Sleep(1500),不然太快了,time(0)以秒为单位,结果会一样的。。

热点排行