例如:若输入17,5,则应输出:19,23,29,31,37。
#include <conio.h>
#include <stdio.h>
void fun(int m, int k, int xx[])
{
int g=0,i,j,flag=1;
for(i=m+1;i<m*m;i++)
{
for(j=2;j<i;j++)
{
if (i%j!=0)
flag=1;
else
{
flag=0;
break;
}
}
if (flag==1&&j>=i)
为什么这部分要j>=i? {
if (k>=0)
{
xx[g++]=i;
k--;
}
else
break;
}
}
}
main()
{
int m,n,zz[1000];
FILE *out;
printf("\nPlease enter two integers:");
scanf("%d,%d",&m,&n);
fun( m,n,zz);
for(m=0; m<n; m++)
printf("%d ", zz[m]);
printf("\n");
fun(28, 20, zz);
out = fopen("out.dat", "w");
for (m = 0; m < 20; m++)
fprintf(out, "%d\n", zz[m]);
fclose(out);
}
fun函数部分一步步解释清楚更好 嘻嘻 谢哈
4 个解决方案
#1
#include <conio.h>
#include <stdio.h>
void fun(int m, int k, int xx[])
{
int g = 0, i, j, flag = 1;
for(i=m+1; i<m*m; i++)
{
for(j=2; j<i; j++)
{
if (i%j != 0)
flag = 1;
else
{
flag = 0;
break;
}
}
if (flag==1 && j>=i)
{
if (k >= 0)
{
xx[g++] = i;
k--;
}
else
break;
}
}
}
int main()
{
int m, n, zz[1000];
FILE *out;
printf("\nPlease enter two integers:");
scanf("%d %d",&m, &n); // scanf中不要加非输入控制符(这里指的是逗号),加了必须原样输出
fun( m, n, zz);
for(m=0; m<n; m++)
printf("%d ", zz[m]);
printf("\n");
fun(28, 20, zz);
out = fopen("out.dat", "w");
for (m = 0; m < 20; m++)
fprintf(out, "%d\n", zz[m]);
fclose(out);
return 0;
}
#3
if (flag==1&&j>=i)
为什么这部分要j>=i?
因为正常循环结束时 j>=i,否则是break中断出来的
当然这里flag==1 j>=i 两个条件重复了,只判断一个应该也够了
为什么这部分要j>=i?
因为正常循环结束时 j>=i,否则是break中断出来的
当然这里flag==1 j>=i 两个条件重复了,只判断一个应该也够了
#4
lz你37、38行输入的m n 就相当于第4行的 m 和 k, 第9行到18行是判断是否为素数;19行到28行表示你输入的素数后边(这里你输入的是17)还要几个(这里你输入的是5)素数,然后将这些素数放到数组里,这样lz应该能看懂了吧?(如果我哪里说的不对,就请点出来,感激不尽,
不说了,睡觉啊)
#1
#include <conio.h>
#include <stdio.h>
void fun(int m, int k, int xx[])
{
int g = 0, i, j, flag = 1;
for(i=m+1; i<m*m; i++)
{
for(j=2; j<i; j++)
{
if (i%j != 0)
flag = 1;
else
{
flag = 0;
break;
}
}
if (flag==1 && j>=i)
{
if (k >= 0)
{
xx[g++] = i;
k--;
}
else
break;
}
}
}
int main()
{
int m, n, zz[1000];
FILE *out;
printf("\nPlease enter two integers:");
scanf("%d %d",&m, &n); // scanf中不要加非输入控制符(这里指的是逗号),加了必须原样输出
fun( m, n, zz);
for(m=0; m<n; m++)
printf("%d ", zz[m]);
printf("\n");
fun(28, 20, zz);
out = fopen("out.dat", "w");
for (m = 0; m < 20; m++)
fprintf(out, "%d\n", zz[m]);
fclose(out);
return 0;
}
#2
关于scanf的用法lz可以看看这个——
http://blog.csdn.net/u012421456/article/details/18501309
#3
if (flag==1&&j>=i)
为什么这部分要j>=i?
因为正常循环结束时 j>=i,否则是break中断出来的
当然这里flag==1 j>=i 两个条件重复了,只判断一个应该也够了
为什么这部分要j>=i?
因为正常循环结束时 j>=i,否则是break中断出来的
当然这里flag==1 j>=i 两个条件重复了,只判断一个应该也够了
#4
lz你37、38行输入的m n 就相当于第4行的 m 和 k, 第9行到18行是判断是否为素数;19行到28行表示你输入的素数后边(这里你输入的是17)还要几个(这里你输入的是5)素数,然后将这些素数放到数组里,这样lz应该能看懂了吧?(如果我哪里说的不对,就请点出来,感激不尽,
不说了,睡觉啊)