2006年9月全國等級考試三級c語言上機題庫(一)

題目1(上機題庫id 14、id 27(提供isp()函式;上機題庫id 23題)

請編寫一個函式jsvalue(int m,int k,int xx[]),該函式的功能是:將大於整數m且緊靠m的k個素數存入數組xx傳回。
最後調用函式writedat()讀取10組數據,分別得出結果且把結果輸出到檔案out.dat中。
部分源程式存在檔案prog1.c中。
例如:若輸入17 5 則應輸出:19,23,29,31,37。
請勿改動主函式main()和寫函式writedat()的內容。
#include <conio.h>
#include <stdio.h>
void readwritedat();

int isp(int m)
{
int i;

for(i=2;i<m;i++)
if(m % i==0)return 0;
return 1;
}

void num(int m,int k,int xx[])
{ int s=0;
for(m=m+1;k>0;m++)
if(isp(m)) { xx[s++]=m; k--;}
}

main()
{
int m,n,xx[1000];
clrscr();
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);
}

無憂id 14題(無isp()函式)
#include <stdio.h>

void jsvalue(int m,int k,int xx[])
{ int i,j,s=0;
for(i=m+1;k>0;i++)
{ for(j=2;j<i;j++)
if(i%j==0) break;
if(i==j) { xx[s++]=i; k--;}
}
}


main()

{
int m,n,zz[100];

printf("\n請輸入兩個整數:");
scanf("%d%d",&m,&n);
jsvalue(m,n,zz);
for(m=0;m<n;m++)printf("%d ",zz[m]);
printf("\n");
writedat();
}

writedat()
{
int m,n,zz[100],i;
file *in,*out;

in=fopen("in.dat","r");
out=fopen("out.dat","w");
for(i=0;i<10;i++){
fscanf(in,"%d%d",&m,&n);
jsvalue(m,n,zz);
for(m=0;m<n;m++)fprintf(out,"%d ",zz[m]);
fprintf(out,"\n");
}
fclose(in);
fclose(out);
}

另一解法:
void num(int m,int k,int xx[])
{
int n=0,data=m+1;
while(n<k){
if(isp(data)) xx[n++]=data;
data++;}
}