本系列資料由"韜略宏智" 授權(quán)發(fā)布,任何網(wǎng)站不得轉(zhuǎn)載,否則追究法律責(zé)任。
第1套
請編寫一個函數(shù)jsValue(int m,int k,int xx[]),該函數(shù)的功能是:將大于整數(shù)m且緊靠m的k個素數(shù)存入數(shù)組xx傳回。最后調(diào)用函數(shù)readwriteDat()讀取10組數(shù)據(jù),分別得出結(jié)果且把結(jié)果輸出到文件out1.dat中。部分程序已經(jīng)給出。
例如:若輸入17,5,則應(yīng)輸出:19,23,29,31,37。
請勿改動主函數(shù)main()和輸出數(shù)據(jù)函數(shù)readwriteDat()的內(nèi)容。
#include
#include
void readwriteDat();
void jsValue (int m,int k,int xx[])
{
}
main()
{
int m,n,xx[1000];
clrscr();
printf("\nPlease enter two integers:");
scanf("%d,%d",&m,&n);
jsValue (m,n,xx);
for(m=0;m
printf("\n");
readwriteDat();
}
void readwriteDat()
{
int m,n,xx[1000],i;
FILE *rf,*wf;
rf=fopen("in1.dat","r");
wf=fopen("out1.dat","w");
for(i=0;i<10;i++)
{
fscanf(rf,"%d %d",&m,&n);
jsValue (m,n,xx);
for(m=0;m
fprintf(wf,"\n");
}
fclose(rf);
fclose(wf);
}
本系列資料由"韜略宏智" 授權(quán)發(fā)布,任何網(wǎng)站不得轉(zhuǎn)載,否則追究法律責(zé)任。
第1套
請編寫一個函數(shù)jsValue(int m,int k,int xx[]),該函數(shù)的功能是:將大于整數(shù)m且緊靠m的k個素數(shù)存入數(shù)組xx傳回。最后調(diào)用函數(shù)readwriteDat()讀取10組數(shù)據(jù),分別得出結(jié)果且把結(jié)果輸出到文件out1.dat中。部分程序已經(jīng)給出。
例如:若輸入17,5,則應(yīng)輸出:19,23,29,31,37。
請勿改動主函數(shù)main()和輸出數(shù)據(jù)函數(shù)readwriteDat()的內(nèi)容。
#include <conio.h>
#include <stdio.h>
void readwriteDat();
void jsValue (int m,int k,int xx[])
{
}
main()
{
int m,n,xx[1000];
clrscr();
printf("\nPlease enter two integers:");
scanf("%d,%d",&m,&n);
jsValue (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("in1.dat","r");
wf=fopen("out1.dat","w");
for(i=0;i<10;i++)
{
fscanf(rf,"%d %d",&m,&n);
jsValue (m,n,xx);
for(m=0;m<n;m++)
fprintf(wf,"%d ",xx[m]);
fprintf(wf,"\n");
}
fclose(rf);
fclose(wf);
}
答案解析
【答案】
void jsValue (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++;
}
}
【解析】
考點:(1)判斷一個數(shù)字是否為素數(shù)。
(2)統(tǒng)計素數(shù)的個數(shù)。
本題的解題思路為:從m+1開始逐個數(shù)字判斷是否為素數(shù)(即只能被1和它本身整除的整數(shù))。若是素數(shù)則存入數(shù)組xx中,一直尋找連續(xù)的k個素數(shù)為止。判斷是否為素數(shù),可以通過除以2到它的一半之間所有的數(shù),比如,判斷17是否為素數(shù),則需除以2、3、4、5、6、7、8,若都不能整除,則該數(shù)字就一定是素數(shù)。尋找連續(xù)的k個素數(shù),可以設(shè)置一個記錄個數(shù)的變量,每找到一個素數(shù)時該記錄變量加1。
程序的流程為:首先從鍵盤輸入兩個十進制整數(shù),以第一個整數(shù)作為基礎(chǔ)開始尋找素數(shù),第2個整數(shù)作為需要尋找素數(shù)的個數(shù),然后把jsValue ()函數(shù)的處理結(jié)果,通過readwriteDat()函數(shù)寫回文件out1.dat中。
在jsValue ()函數(shù)中,使用一個while循環(huán)查找n個素數(shù),每次查找成功后n值將加1。因為不能確定循環(huán)執(zhí)行的具體次數(shù),所以設(shè)定while循環(huán)的條件恒為真(條件為“1”),并加入跳出循環(huán)的控制語句,即當(dāng)n>=k(超過所需的素數(shù)個數(shù))時循環(huán)結(jié)束。
進入while循環(huán)體后,首先使用for循環(huán),確定當(dāng)前數(shù)字是否為素數(shù),即判斷當(dāng)前數(shù)字data是否能被2到它一半之間的任意數(shù)整除,如果能被整除,則說明此數(shù)不是素數(shù),程序通過break語句跳出for循環(huán)(此時i<=half),否則循環(huán)執(zhí)行到i>half時,程序正常退出for循環(huán)體,說明當(dāng)前數(shù)字data是素數(shù),這里的i值既作為for循環(huán)計數(shù)器,又作為是當(dāng)前數(shù)字是否為素數(shù)的標(biāo)志。
if語句將根據(jù)此時i值的大小判斷data是否為素數(shù),如果是素數(shù),則將data存入數(shù)組xx中,同時記錄素數(shù)個數(shù)的變量n加1,接著判斷n的值是否達到了題目要求的個數(shù),如果達到了,則跳出while循環(huán),jsValue()函數(shù)結(jié)束,否則data加1后重新進入while循環(huán)體。直到找到滿足個數(shù)的素數(shù),jsValue()函數(shù)結(jié)束。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |