一个上机题,下午就要考试,在线等!
#include <conio.h>#include <stdio.h>
void readwriteDat();
void num(int m, int k, int xx[])
{
int data = m+1;
int half, n = 0, i;
while(1)
{
half = data/2;
for (i=2; i<=half; i++)
if (data%i == 0)
break;
if (i > half)
{
xx[n] = data;
n++;
}
if (n >= k)
break;
data++;
}
}
main()
{
int m, n, xx[1000];
printf("\nPlease enter two integers:");
scanf("%d%d", &m, &n);
num(m, n, xx);
for (m=0; m<n; m++)
printf("%d ", xx[m]);
printf("\n");
readwriteDat();
}
void readwriteDat()
{
int m, n, xx[1000], i;
FILE *rf, *wf;
rf = fopen("in.dat", "r");
wf = fopen("out.dat", "w");
for (i=0; i<10; i++)
{
fscanf(rf, "%d %d", &m, &n);
num(m, n, xx);
for (m=0; m<n; m++)
fprintf(wf, "%d ", xx[m]);
fprintf(wf, "\n");
}
fclose(rf);
fclose(wf);
}
上面是完整的答案,找出大于整数m且紧靠m的k个整数存入数组xx[],传回。
最后调用函数readwriteDat()从in.dat文件中读取10组数据,分别得出结果并把结果输出到文件out.dat中。
我应该把
void num(int m, int k, int xx[])
{
int data = m+1;
int half, n = 0, i;
while(1)
{
half = data/2;
for (i=2; i<=half; i++)
if (data%i == 0)
break;
if (i > half)
{
xx[n] = data;
n++;
}
if (n >= k)
break;
data++;
}
}
这一段程序自己编出来,我自己的想法是:
void num(int m, int k, int xx[])
{
int i,t,cnt=0;
t=m+1;
while(cnt<k)
{
for(i=2;i<=t/2;i++)
if(m%i==0) break;
if(i>t/2) {xx[cnt]=t;cnt++;}
t++;
}
}
可以编译运行,但就是运行时出错,出不来结果,我把自己编的那段代码放到一个独立的程序中可以正常运行,我真的不知道哪错了,下午就要考试了,希望有人指点一下,下面是我自己的代码放到独立的程序中正常运行的代码!
#include <stdio.h>
#include <math.h>
main()
{
int i,m,k,cnt=0,xx[50];
scanf("%d%d",&m,&k);
while(cnt<k)
{
m++;
for(i=2;i<=sqrt(m);i++)
if(m%i==0) break;
if(i>sqrt(m)) {xx[cnt]=m;cnt++;}
}
for(i=0;i<k;i++)
printf(" %d",xx[i]);
getch();
}