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