编写函数int fun(int lim, int aa[MAX ]),其功能是求出小于或等于num的所有素数并放在aa数组中,并返回求出的素数的个数。
其中题目已经给出函数体main定义:
如下:
/*--素数存储在aa[]数组中*/
#include
#include
#include
#define MAX 100
int fun(int num, int aa[MAX])
{
}
int main(void)
{
FILE* wf;
int num, i, sum;
int aa[MAX];
system("CLS");
printf("输入一个整数:");
scanf("%d", &num);
sum = fun(num, aa);
for (i = 0; i < sum; i++)
{
if (i % 10 == 0 && i != 0)/*每行输出十个数*/
printf("\n");
printf("%5d", aa[i]);
}
wf = fopen("out.dat", "w");
sum = fun(15, aa);
for (i = 0; i < sum; i++)
{
if (i % 10 == 0 && i != 0)/*每行输出十个数*/
printf("\n");
fprintf(wf,"%5d", aa[i]);
}
fclose(wf);
return 0;
}
a:找出素数
素数的定义:大于1的自然数,除了1和自身外,其他数都不是它的因子。
所以,我们我们可以得出判断的条件:
imprime)=num%(2~num-1)
num=你确定的范围数
2.判断如果不是素数的情况:
如果我们for循环来判断素数情况的话,在循环结束后,内置的循环变量会j>=i(不断增长的数字),
那样就要存储在数组中:
如下:
if (j >= i)//判断是否为素数,如果不是的话,
//遍历结束之后,j的值大于等于i的值
{
aa[k++] = i;
}
---------------------------------------------------------------------------------------------------------------------------------
b:存入数组
1.可以在条件满足时,k为数组下标变量,i为遍历变量------>aa[k++]=i;
用后置++这样的好处我们可以简化我们的步骤,使代码看起来更为简洁。
/*--素数存储在aa[]数组中*/
#include
int fun(int num, int aa[])
{
int i = 0;
int j = 0;
int k = 0;//下标变量
for (i = 2; i <= num; i++)
{
for (j = 2; j < i; j++)
{
if (i % j == 0)//判断素数的条件
break;
}
if (j >= i)//判断是否为素数,如果不是的话,
//遍历结束之后,j的值大于等于i的值
{
aa[k++] = i;
}
}
}
---------------------------------------------------------------------------------------------------------------------------------
完整代码如下:
/*--素数存储在aa[]数组中*/
#include
#include
#include
#define MAX 100
int fun(int num, int aa[MAX])
{
int i = 0;
int j = 0;
int k = 0;//下标变量
for (i = 2; i <= num; i++)
{
for (j = 2; j < i; j++)
{
if (i % j == 0)//判断素数的条件
break;
}
if (j >= i)//判断是否为素数,如果不是的话,
//遍历结束之后,j的值大于等于i的值
{
aa[k++] = i;
}
}
}
int main(void)
{
FILE* wf;
int num, i, sum;
int aa[MAX];
system("CLS");
printf("输入一个整数:");
scanf("%d", &num);
sum = fun(num, aa);
for (i = 0; i < sum; i++)
{
if (i % 10 == 0 && i != 0)/*每行输出十个数*/
printf("\n");
printf("%5d", aa[i]);
}
wf = fopen("out.dat", "w");
sum = fun(15, aa);
for (i = 0; i < sum; i++)
{
if (i % 10 == 0 && i != 0)/*每行输出十个数*/
printf("\n");
fprintf(wf,"%5d", aa[i]);
}
fclose(wf);
return 0;
}