C语言随机生成十个整数,判断是否为素数,将二者存于一维数组中并输出
1. 如何在C语言中产生随机数;
利用随机数种子,其函数原型为:srand((unsigned int)(time(NULL))
现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。他们的工作过程如下:
》首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;
》然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)
》根据需要多次调用rand(),从而不间断地得到新的随机数;
》srand()提供一个新的种子是随时都可以的,从而进一步“随机化”rand()的输出结果。
2. 判断一个数是否是素数;
一共两种方式
》n能否被2~n-1整除
》n能否被2~√n整除
来一个题目小试牛刀
题目如下:调用随机函数产生 10 个 1-100 之间的整数,找出其中所有的素数并保存到一维数组 w 中。输出随机产生的十个原始数据及找到的素数。
要求:
第一行输出随机产生的十个原始数据,第二行输出素数的个数,第三行输出找到的素数,中间用空格隔开。
贴上代码仅供参考:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#pragma warning(disable:4996)
int prime(int n)
{
int i;
int flag = 0;
if (n < 2)
{
flag = 0;
}
else
{
for (i = 2; i < n; i++)
{
if (n % i == 0)//如果用可以除尽的数,则非素数
break;
}
if (i < n)
{
flag = 0;
}
else
flag = 1;
}
return flag;
}
void f(int* HArr, int len)
{
int i;
for (i = 0; i < len; ++i)
printf("%d ", *(HArr + i));
printf("\n");
}
int main() {
int i,k=0;
int a[10];
int b[10];
srand((unsigned)time(NULL));
for (i = 0; i < 10; i++)
{
a[i] = rand() % 100 + 1;
if (prime(a[i]))
{
b[k] = a[i];
k++;
}
}
f(a,10);
printf_s("素数一共有%d个\n", k);
f(b, k);
return 0;
}