整数素数1.docx
《整数素数1.docx》由会员分享,可在线阅读,更多相关《整数素数1.docx(61页珍藏版)》请在冰点文库上搜索。
整数素数1
题目1:
下列程序的功能是:
将大于整数m且紧靠m的k个素数存入数组xx。
请编写函数num(intm,intk,intxx[])实现函数的要求,最后调用函数readwriteDAT()把结果输出到文件out.dat中。
例如:
若输入17,5,则应输出:
19,23,29,31,37。
注意:
部分源程序已给出。
请勿改动主函数main()和函数readwriteDAT()的内容。
--------------
类型:
素数。
voidnum(intm,intk,intxx[])/*标准答案*/
{intdata=m+1;
inthalf,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++;
}
}
或者:
voidnum(intm,intk,intxx[])
{inti,j,s=0;
for(i=m+1;k>0;i++)
{for(j=2;j
if(i%j==0)break;/*注:
素数为只能被自己和1整除的数.如果i%j等于0,说明i不是素数,跳出本层循环*/
if(i==j)
{xx[s++]=i;k--;}
}}
voidnum(intm,intk,intxx[])
{inti=0;
for(m=m+1;k>0;m++)
if(isP(m))
{xx[i++]=m;
k--;}}
题目2:
已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:
如果四位数各位上的数字均是0或2或4或6或8,则统计出满足此条件的个数cnt,并把这些四位数按从大到小的顺序存入数组b中。
最后main()函数调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。
注意:
部分源程序存在文件PROG1.C文件中。
程序中已定义数组:
a[200],b[200],已定义变量:
cnt
请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
-------------------------
voidjsVal()/*标准答案*/
{intbb[4];
intI,j,k,flag;
for(I=0;I<200;I++)
{bb[0]=a[I]/1000;bb[1]=a[I]%1000/100;
bb[2]=a[I]%100/10;bb[3]=a[I]%10;
for(j=0;j<4;j++)
{if(bb[j]%2==0)
flag=1;
else
{flag=0;break;}
}
if(flag==1)
{b[cnt]=a[I];
cnt++;}}
for(I=0;Ifor(j=I+1;jif(b[I]
{k=b[I];b[I]=b[j];b[j]=k;}
题目15:
已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:
若一个四位数的千位数字上的值小于等于百位数字上的值,百位数字上的值小于等于十位数字上的值,十位数字上的值小于等于个位数字上的值,并且此四位数是偶数,则统计出满足此条件的个数cnt,并把这些四位数按从大到小的顺序存入数组b中。
最后main()函数调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。
注意:
部分源程序存在文件PROG1.C文件中。
程序中已定义数组:
a[200],b[200],已定义变量:
cnt
请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。
-------------------------
voidjsVal()/*标准答案*/
{intI,j;
inta1,a2,a3,a4,k;
for(I=0;I{a1=a[I]/1000;a2=a[I]%1000/100;
a3=a[I]%100/10;a4=a[I]%10;
if((a1<=a2)&&(a2<=a3)&&(a3<=a4)&&(a[I]%2==0))
{b[cnt]=a[I];
cnt++;}
}
for(I=0;Ifor(j=I+1;jif(b[I]>b[j])
{k=b[I];b[I]=b[j];b[j]=k;}
题目14:
已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:
依次从数组a中取出一个四位数,如果该数连续大于该四位数以后的5个数且该数是奇数,则统计出满足此条件的个数cnt,并把这些四位数按从小到大的顺序存入数组b中。
并要计算满足上述条件的四位数的个数cnt。
最后main()函数调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。
注意:
部分源程序存在文件PROG1.C文件中。
程序中已定义数组:
a[200],b[200],已定义变量:
cnt
请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
-------------------------
voidjsVal()/*标准答案*/
{intI,j,flag=0;
intk;
for(I=0;I{for(j=I+1;j<=I+5;j++)
{if(a[I]>a[j])
flag=1;
else{flag=0;break;}
if(a[I]%2==0)
flag=0;}
if(flag==1)
{b[cnt]=a[I];cnt++;}}
for(I=0;Ifor(j=I+1;jif(b[I]>b[j])
{k=b[I];b[I]=b[j];b[j]=k;}
}
题目20:
编写函数jsvalue,它的功能是:
求Fibonacci数列中大于t的最小的一个数,结果由函数返回。
其中Fibonacci数列F(n)的定义为:
F(0)=0,F
(1)=1
F(n)=F(n-1)+F(n-2)
最后调用函数writeDat()读取10个数据t,分别得出结果且把结果输出到文件out.dat中。
例如:
当t=1000时,函数值为:
1597。
注意:
部分源程序已给出。
请勿改动主函数main()和写函数writeDat()的内容。
-----------------------
intjsValue(intt)/*标准答案*/
{intf1=0,f2=1,fn;
fn=f1+f2;
while(fn<=t)
{f1=f2;
f2=fn;
fn=f1+f2;}
returnfn;
}
题目22:
请编写函数countvalue(),它的功能是:
求n以内(不包括n)同时能被3和7整数的所有自然数之和的平方根s,并作为函数值返回,最后结果s输出到文件out.dat中。
例如若n为1000时,函数值应为:
s=153.909064。
注意:
部分源程序已给出。
请勿改动主函数main()和输入输出数据函数progreadwrite()的内容。
----------------------------
doublecountValue(intn)/*标准答案*/
{doublexy=0.0;
intI;
for(I=1;Iif(I%3==0&&I%7==0)xy+=I;
xy=sqrt((double)xy);
returnxy;
}
doublecountvalue(intn)
{inti,j=0;
doublek;
for(i=0;iif(i%3==0&&i%7==0)
j+=i;
k=sqrt(j);
returnk;
}
题目23:
已知在文件in.dat中存有N个(个数<200)四位数字的正整数,函数readdat()读取这N个正整数并存入数组xx中。
请编制函数calvalue(),其功能要求:
1、求出这N个实数的平均值aver;2、分别求出这N个实数的整数部分之和sumint以及小数部分之和sumdec,最后调用函数writedat()把所求的结果输出到文件out.dat中。
注意:
部分源程序已给出。
请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。
----------------------------
voidCalValue(void)/*标准答案*/
{intI;
doublex,sum=0;
for(I=0;I{sumint=sumint+(int)xx[I];
x=xx[I]-(int)xx[I];
sumdec=sumdec+x;
sum=sum+xx[I];
}
aver=sum/MAXNUM;
}
题目24:
在三位整数(100至999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,又是两位数字相同,例如144、676等。
请编制函数实现此功能,满足该条件的整数的个数通过所编制的函数返回。
最后调用函数writeDat()把结果输出到文件out.dat中。
注意:
部分源程序已给出。
请勿改动主函数main()和写函数writeDat()的内容。
--------------------
jsValue(inta[10][9])/*标准答案*/
{intI,j,k=0;
inthun,ten,data;
for(I=100;I<=999;I++)
{j=10;
while(j*j<=I)
{if(I==j*j)
{hun=I/100;data=I-hun*100;
ten=data/10;data=data-ten*10;
if(hun==ten||hun==data||ten==data)
{bb[k]=I;k++;}
}
j++;}}
returnk;
}
题目25:
下列程序的功能是:
寻找并输出11至999之间的数m,它满足m,m2和m3均为回文数。
所谓回文数是指其各位数字左右对称的整数,例如121,676,94249等。
满足上述条件的数如m=11,m2=121,m3=1331皆为回文数。
请编制函数intsvalue(longm)实现此功能,如果是回文数,则函数返回1,反之则返回0。
最后把结果输出到文件out.dat中。
注意:
部分源程序已给出。
请勿改动主函数main()的内容。
-------------------
intjsValue(longn)/*标准答案*/
{intI,strl,half;
charxy[20];
ltoa(n,xy,10);
strl=strlen(xy);
half=strl/2;
for(I=0;Iif(xy[I]!
=xy[--strl])break;
if(I>=half)return1;
elsereturn0;
}
或者:
intjsvalue(longn)
{inti,aa[10],j=0,b=1;
while(n)
{aa[j++]=n%10;
n=n/10;}
for(i=0;iif(aa[i]!
=aa[j-i-1])
b=0;
returnb;
}
题目26:
已知在文件in.dat中存有若干个(个数<200)四位数字的正整数,函数readdat()读取这若干个正整数并存入数组xx中。
请编制函数calvalue(),其功能要求:
1、求出这文件中共有多少个正整数totnum;2、求这些数右移1位后,产生的新数是偶数的数的个数totcnt,以及满足此条件的这些数(右移前的值)的算术平均值totpjz,最后调用函数writedat()把所求的结果输出到文件out.dat中。
注意:
部分源程序已给出。
请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。
----------------------------
voidCalValue(void)/*标准答案*/
{intI,data;
for(I=0;I{if(!
xx[I])break;
if(xx[I]>0)totNum++;
data=xx[I]>>1;
if(data%2==0){totCnt++;totPjz+=xx[I];}
}
totPjz/=totCnt;
}
或者:
voidCalvalue(void)
{inti,k,a,b,c,d;
for(i=0;ifor(i=0;i{k=xx[i]>>1;
if(k%2==0)
{totCnt++;
totPjz+=xx[i];}}
totPjz/=totCnt;
}
题目27:
已知数据文件IN.DAT中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsvalue(),其功能是:
求出千位数上的数减百位数减十位数上的数减个位数上的数大于零的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数writeDat()把结果输出到OUT.DAT文件。
例如:
9123,9-1-2-3>0,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。
9812,9-8-1-2<0,则该数不满足条件计算平均值pjz2.
注意:
部分源程序已给出。
程序中已定义数组:
a[300],已定义变量:
cnt
请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
---------------------
voidjsValue()/*标准答案*/
{intI,thou,hun,ten,data,j;
for(I=0;I<300;I++)
{thou=a[I]/1000;hun=a[I]%1000/100;
ten=a[I]%100/10;data=a[I]%10;
if(thou-hun-ten-data>0){b[cnt]=a[I];cnt++;}
}
for(I=0;Ifor(j=I+1;jif(b[I]>b[j])
{data=b[I];b[I]=b[j];b[j]=data;}
}
题目28:
已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:
把千位数字和十位数字重新组成一个新的十位数ab(新十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的十位数cd(新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的百位数字),如果新组成的两个十位数ab-cd>=0且ab-cd<=10且两个数均是奇数,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数cnt。
最后main()函数调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。
注意:
部分源程序存在文件PROG1.C文件中。
程序中已定义数组:
a[200],b[200],已定义变量:
cnt
请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
-------------------------
voidjsVal()/*标准答案*/
{intI,thou,hun,ten,data,j;
intab,cd;
for(I=0;I<200;I++)
{thou=a[I]/1000;hun=a[I]%1000/100;
ten=a[I]%100/10;data=a[I]%10;
ab=10*thou+ten;cd=10*data+hun;
if((ab-cd)>=0&&(ab-cd)<=10&&ab%2==1&&cd%2==1&&ab!
=0&&cd!
=0)
{b[cnt]=a[I];cnt++;}
}
for(I=0;Ifor(j=I+1;jif(b[I]
{data=b[I];b[I]=b[j];b[j]=data;}
}
题目29:
已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:
把千位数字和十位数字重新组成一个新的十位数ab(新十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的十位数cd(新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的百位数字),如果新组成的两个十位数ab-cd>=10且ab-cd<=20且两个数均是偶数,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数cnt。
最后main()函数调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。
注意:
部分源程序存在文件PROG1.C文件中。
程序中已定义数组:
a[200],b[200],已定义变量:
cnt
请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
-------------------------
voidjsVal()/*标准答案*/
{intI,thou,hun,ten,data,j;
intab,cd;
for(I=0;I<200;I++)
{thou=a[I]/1000;hun=a[I]%1000/100;
ten=a[I]%100/10;data=a[I]%10;
ab=10*thou+ten;cd=10*data+hun;
if((ab-cd)>=0&&(ab-cd)<=10&&ab%2==1&&cd%2==1&&ab!
=0&&cd!
=0)
{b[cnt]=a[I];cnt++;}
}
for(I=0;Ifor(j=I+1;jif(b[I]
{data=b[I];b[I]=b[j];b[j]=data;}
}
题目30:
已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:
依次从数组a中取出一个四位数,如果该数连续小于该四位数以后的5个数且该数是偶数,则统计出满足此条件的个数cnt,并把这些四位数按从小到大的顺序存入数组b中。
并要计算满足上述条件的四位数的个数cnt。
最后main()函数调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。
注意:
部分源程序存在文件PROG1.C文件中。
程序中已定义数组:
a[200],b[200],已定义变量:
cnt
请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
-------------------------
voidjsVal()/*标准答案*/
{intI,j,flag=0;
for(I=0;I{for(j=I+1;j<=I+5;j++)
{if(a[I]flag=1;
elseflag=0;
if(a[I]%2!
=0)
flag=0;
if(flag==0)
break;}
if(flag==1){b[cnt]=a[I];cnt++;}
}
for(I=0;Ifor(j=I+1;jif(b[I]>b[j])
{flag=b[I];b[I]=b[j];b[j]=flag;}
}
题目33:
请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制函数Compute()分别计算出xx中奇数的个数odd,奇数的平均值ave1,偶数的平均值ave2以及所有奇数的方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。
计算方差的公式如下:
totfc=1/N∑(xx[i]-ave1)2
设N为奇数的个数,xx[i]为奇数,ave1为奇数的平均值。
原始数据文件存放的格式是:
每行存放10个数,并用逗号隔开。
(每个数均大于0且小于等于2000)
注意:
部分源程序已给出。
请勿改动主函数main()和输出数据函数writeDat()的内容。
------------------------------
intReadDat(void)/*标准答案*/
{FILE*fp;
intI,j;
if((fp=fopen(""IN.DAT"",""r""))==NULL)return1;
for(I=0;I<100;I++)
{for(j=0;j<10;j++)
fscanf(fp,""%d,"",&xx[I*10+j]);
fscanf(fp,""'n"");
if(feof(fp))break;}
fclose(fp);
return0;}
voidCompute(void)
{intI,yy[MAX];
for(I=0;I<1000;I++)
if(xx[I]%2){odd++;ave1+=xx[I];}
else{even++;ave2+=xx[I];yy[even-1]=xx[