求C语言高手指教

时间:2023-02-22 09:45:00
下列程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx。请编写函数num(int m,int k,int xx[])实现函数的要求 ,最后调用函数readwriteDAT()把结果输出到文件out.dat中。
    例如:若输入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? 求C语言高手指教 {
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;
}

#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 两个条件重复了,只判断一个应该也够了

#4


   lz你37、38行输入的m n 就相当于第4行的 m 和 k, 第9行到18行是判断是否为素数;19行到28行表示你输入的素数后边(这里你输入的是17)还要几个(这里你输入的是5)素数,然后将这些素数放到数组里,这样lz应该能看懂了吧?(如果我哪里说的不对,就请点出来,感激不尽, 求C语言高手指教不说了,睡觉啊)

#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 两个条件重复了,只判断一个应该也够了

#4


   lz你37、38行输入的m n 就相当于第4行的 m 和 k, 第9行到18行是判断是否为素数;19行到28行表示你输入的素数后边(这里你输入的是17)还要几个(这里你输入的是5)素数,然后将这些素数放到数组里,这样lz应该能看懂了吧?(如果我哪里说的不对,就请点出来,感激不尽, 求C语言高手指教不说了,睡觉啊)