用c语言随机产生50个100到900之间的整数找出其中的素数并将这些素数按从小到大的顺序排列

为什么我做出来的总是将原来的50个数排序而不是将产生的素数排序



#include<stdio.h>
#include<math.h>
int num1[800];  //定义随机抽取50个数据数组
int num2[100];  //定义素数素组

randomx(int m,int min,int max) //产生m个不重复随机数
{
    int i,w,t;
    int total;
    srand(time(0));   //设定随机种子,防止重复数据出现
    for(i=min;i<max;i++)
    {
        num1[i]=i+1;
    }
    for(i=0;i<m;i++)
    {
        num1[i] =rand()%(max-min)+min; //随机函数rand引用
    }

    printf("随机从100到900中选取以下50个数值:");
    for(i=0;i<m;i++)
    {
        printf("%d ",num1[i]);
    }
    printf("\n");

}

prime() //判断是否为素数,并且进行排序
{
    int i,k,t,n=0;
    int a,b,c;
    for(i=0;i<50;i++)   //判断是否为素数
    {
        k = sqrt(num1[i]);
        for(t=2;t<k;t++)
        {
            if(k%t==0)
            {
                break;
            }
        }
        if(t>=k)
        {
            num2[n]= num1[i];
            printf("%d ",num2[n]);
            n++;
        }

    }
    for(a=0;a<n;a++)   //从大到小排列数据
    {
        for(b=a+1;b<n;b++)    
        {
            if(num2[a] < num2[b])
            {
                c = num2[a];
                num2[a] = num2[b];
                num2[b] = c;
            }
        }
    }
    printf("\n");

    printf("其中素数按从大到小的数值排列:");
    for(i=0;i<n;i++)
    {
        printf("%d ",num2[i]);
    }

}


main()
{
    randomx(50,100,900);
    prime();
}

 问题原因分析:

可能没有将判断出来的素数数值进行保存,起码要定义2个数组分别保存随机产生的出来的50个数据,和其中素数的数据,上面是我给出的代码。
运行结果图:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-03
先将产生的素数保存,然后再对素数进行排序。
可能原因:
1、参数传递错误;
2、使用值传递。
第2个回答  2013-12-03
#include <stdio.h>
#include <stdlib.h>
#include <time.h>




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

}

int Qsort(int start,int length,int a[])//start排序的起始,length是要排序序列长度
{
int x = a[start];
int i,j;
i = start;
j = length -1;
while(i < j)
{
if(x < a[j])
j--;
else if(x > a[j])
{
a[i] = a[j];
a[j] = x;
i++;
}
else if(x < a[i])
{
a[j] = a[i];
a[i] = x;
j--;
}
else
i++;
}
if(start < length-1)
{
Qsort(start,i,a);
Qsort(i+1,length,a);
}
}

int main()
{

 srand(time(NULL));
 int n = 50;

 int i = 0;
 int arr[50];
 int tmp = 0;
 int j = 0;
 while(n--)
 {


  tmp = rand()%800 + 100;
  for(j=2;j<tmp;j++)
  {
  if(tmp%j == 0)
  {
 break;
  }
  if(j == tmp-1)
  {
  arr[i]=tmp;
  i++;

  }
  }

 }

 Qsort(0,i-1,arr);
 printArr(arr,i-1);
 return 0;
}

相似回答