用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;
}

用c语言随机产生50个100到900之间的整数找出其中的素数并将这些素数按...
100,900); prime();} 问题原因分析:可能没有将判断出来的素数数值进行保存,起码要定义2个数组分别保存随机产生的出来的50个数据,和其中素数的数据,上面是我给出的代码。运行结果图:

c语言,编程产生50个100~200之间的随机整数,找出其中的素数,并将其按...
include "stdio.h"#include <stdlib.h>#include "time.h"void outprime(int a[]){int x[50],i,j,k,t;for(i=0;i<50;i++){\/\/找素数并存入xprintf("%4d",a[i]);if((a[i]&1)==0)continue;for(t=0,k=3;k*k<=a[i];k+=2)if(a[i]%k==0)break;if(k*k>a[i])x...

C语言编写程序找出100-999之间所有的素数
if (i%j == 0) \/\/如果不是素数,应该直接跳出循环,计算下一个i { flag=0; \/\/并设置标志为0 break;} } if (flag==1) \/\/在循环之外判断标志,如果是break出来的,肯定flag = 0,即不是素数 { count++;printf("%-5d", i);if (count % 10 == 0){ printf("\\n");} } } ...

用C语言求100-200之间的素数
对于100至200之间的每个整数,我们可以通过逐一检验其是否为素数来找出所有的素数。以下是一个简单的C语言程序,它实现了这一功能。请注意,程序中的`is_prime`函数用于判断一个数是否为素数。```c include \/\/ 函数声明 int is_prime(int n);int main() { int n;for (n = 100; n < 200; ...

C语言 编程 输出100~300之间所有素数
函数输出素数的数量。c printf("%d", j);通过上述C语言程序,我们成功地编写了一个可以输出100到300之间所有素数的程序。这个程序通过遍历100到300的整数,利用基本的数学和逻辑判断,有效地筛选出素数并计算其数量。在实际应用中,理解并掌握这种解决问题的方法对增强编程技能和逻辑思维能力非常有帮助。

C语言编程题:超级素数。
大体的思路:先求出1000-9999之间的素数,然后在这些素数中 找出前1、2、3、4位都是素数的数即为超级素数,每次找到一个 超级素数都与之前的超级素数加和,并且记录超级素数个数的变量加1,并与之前找到的超级素数比较,记录最大的超级素数。最后输出就可以了。\/ include <stdio.h> define MAX ...

求100到999之间最大三个素数的C语言程序
include<stdio.h>\/\/欧几里得算法 素质表 define N 999 int main(){ long int isPrime[N];int m, i, j;int cnt = -1;for (i = 0; i<N; i++) { isPrime[i] = 1;} for (m = 2; m<N; m++) { if (isPrime[m]) { cnt++;for (j = m; m*j<N; j++) { isPrime[...

C语言编写程序,找出100以内的所有素数,存放在一位数组中,并将所找到...
string 位数 = ""; foreach (int a in Enumerable.Range(0, 范围.ToString().Length)) 位数 += "0";foreach (int 自然数 in Enumerable.Range(2, 范围)){ foreach (int 除数 in Enumerable.Range(2, 范围)){ if (自然数 > 除数)if (自然数 % 除数 == 0){ 判 = true;break;}...

C语言编程:找出100~200之间的所有素数,
{int i;for(i=2;i<sqrt(n);i++) \/*循环除去sqrt(n)以下的数*\/ { if(n%i==0)return(0);\/*如果不是素数,返回0*\/ } return 1;\/*如果是素数,返回1*\/ } main(void){int i;printf("\\n\\n=== start ===\\n\\n");for(i=100;i<=200;i++){ if(prime(i))\/*得到素数*\/ ...

c语言如何找出一个整数是不是素数。
源代码如下:include <stdio.h> include <math.h> void main(){ int n=0, i, j,w,k;for(i=2;i<=1000; i++){ w=1;k=sqrt(i);for (j=2; j<=k; j++)if (i%j==0) {w=0;break;} if (w) { ++n;if (n%10==0) printf("%d\\n",i);else printf("%d\\t",i);...

相似回答