C语言程序设计专项训练题之 素数及应用Word文件下载.docx

上传人:b****5 文档编号:18693098 上传时间:2022-12-31 格式:DOCX 页数:13 大小:19.21KB
下载 相关 举报
C语言程序设计专项训练题之 素数及应用Word文件下载.docx_第1页
第1页 / 共13页
C语言程序设计专项训练题之 素数及应用Word文件下载.docx_第2页
第2页 / 共13页
C语言程序设计专项训练题之 素数及应用Word文件下载.docx_第3页
第3页 / 共13页
C语言程序设计专项训练题之 素数及应用Word文件下载.docx_第4页
第4页 / 共13页
C语言程序设计专项训练题之 素数及应用Word文件下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

C语言程序设计专项训练题之 素数及应用Word文件下载.docx

《C语言程序设计专项训练题之 素数及应用Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计专项训练题之 素数及应用Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。

C语言程序设计专项训练题之 素数及应用Word文件下载.docx

100;

i=i+2)

if(fun(i)&

&

fun(i+2))

printf("

(%2d,%2d)"

i,i+2);

printf("

\n"

);

return0;

解析:

按素数的判断方法,如果m不能被2~

编写的fun函数如下:

for(i=2;

=sqrt(n);

i++)

if(n%i==0)break;

if(i>

sqrt(n))

return1;

else

return0;

例2一般认为最小的素数是2,接着是3,5,...。

也就是说,“2”是第1个素数,“3”是第2个素数,依此类推。

编写函数fun,其功能是:

求第m个素数,并作为函数值返回。

例如,若m=20,则函数返回值为71。

intfun(intm)

intm,t;

scanf("

%d"

&

m);

t=fun(m);

t);

若m=1,则直接返回第1个素数2;

否则,从3开始判断每个奇数是否是素数,若是素数,则计数,计数到m,则返回当前的素数(即第m个素数)。

inti,n,cnt;

if(m==1)return2;

cnt=1;

for(n=3;

;

n+=2)

{

if(n%i==0)break;

cnt++;

if(cnt==m)break;

}

returnn;

二.程序填空题

1.给定程序中,函数fun的功能是:

统计所有小于等于n(n>

2)的素数的个数,素数的个数作为函数值返回。

{

inti,j,count=1;

\nTheprimenumberbetween2to%d\n"

n);

printf("

%5d"

2);

for(i=3;

i<

=n;

i+=2)

/**********found**********/

for(___1___;

j<

i;

j++)

if(___2___%j==0)

break;

if(___3___>

=i)

{count++;

printf(count%15?

"

:

"

\n%5d"

i);

returncount;

intn=20,r;

r=fun(n);

\nThenumberofprimeis:

%d\n"

r);

2.用筛选法可得到2~n(n<

10000)之间的所有素数,方法是:

首先从素数2开始,将所有2的倍数的数从数表中删除(把数表中相应位置的值置为0);

接着从数表中找到下一个非0数,并从数表中删除该数的所有倍数,以此类推,直到所找的下一个数等于n为止。

这样会得到一个序列:

2,3,5,7,11,13,17,19,23,…。

函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。

inta[10000],i,j,count=0;

i++)a[i]=i;

i=2;

while(i<

n)

for(j=a[i]*2;

j+=___1___)

a[j]=0;

i++;

while(___2___==0)

i++)

if(a[i]!

=___3___)

{

count++;

a[i]);

3.给定程序中,函数intfun(intn)的功能是判断正整数n是否素数,若是返回“1”,否则,返回“0”;

在主函数中,求出和为n(设n为大于4的偶数)的两个素数的积的最大值。

例如,输入n的值为50,输出应为589。

说明:

和为50的两个素数有3和47(积为141)、7和43(积为301)、13和37(积为481)、19和31(积为589)。

/**********found**********/

if(___1___)

inti,n,p=0;

n);

=n/2;

___2___)

if(___3___)p=i*(n-i);

%d\n"

p);

三.程序填空题参考答案

1.

(1)j=2

(2)i(3)j

2.

(1)a[i]

(2)a[i](3)0

3.

(1)i>

sqrt(n)

(2)fun(n-i)(3)i*(n-i)>

p

四.程序设计题

1.编写函数fun,其功能是:

找出一个大于形参m且紧随m的素数,并作为函数值返回。

例如,若m=20,则函数返回值为23。

2.编写函数fun,其功能是:

计算并返回high以内最大的10个素数之和。

若high以内的素数不足10个,则返回值为high以内所有的素数之和。

例如,若high的值为100,则函数返回值为732。

intfun(inthigh)

intn;

fun(n));

3.编写函数fun,其功能是:

计算3到n之间(含3和n)所有素数的平方根之和。

例如,在主函数中给n输入100后,输出为:

sum=148.874270。

doublefun(intn)

doublesum;

\n\nInputn:

sum=fun(n);

\n\nsum=%f\n\n"

sum);

4.编写函数fun,它的功能是:

将大于整数m且紧靠m的k个素数存入xx所指的数组中。

例如,若输入175,则应输出:

1923293137。

voidfun(intm,intk,intxx[])

intm,n,zz[1000];

\nPleaseentertwointegers:

%d%d"

m,&

fun(m,n,zz);

for(m=0;

m<

n;

m++)

%d"

zz[m]);

5.编写函数fun,它的功能是:

求出小于或等于lim的所有素数并存放到数组aa中,函数返回求出素数的个数。

#defineMAX100

intfun(intlim,intaa[MAX])

intlimit,i,sum;

intaa[MAX];

输入一个整数"

&

limit);

sum=fun(limit,aa);

for(i=0;

i<

sum;

if(i%10==0&

i!

=0)printf("

);

aa[i]);

6.编写函数fun,它的功能是:

将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。

例如,若输入:

17,则应输出:

9和46891012141516。

voidfun(intm,int*k,intxx[])

intm,n,zz[100];

\nPleaseenteranintegernumberbetween10and100:

n);

fun(n,&

m,zz);

printf("

\n\nThereare%dnon-primenumberslessthan%d:

m,n);

for(n=0;

n<

m;

n++)

\n%4d"

zz[n]);

五.程序设计题参考程序

1.intfun(intm)

inti,k;

for(i=m+1;

for(k=2;

k<

i;

k++)

if(i%k==0)break;

if(k>

=i)

returni;

2.intfun(inthigh)

intsum=0,n=0,j,yes;

while(high>

=2&

10)

yes=1;

for(j=2;

=high/2;

j++)

if(high%j==0)

yes=0;

if(yes){sum+=high;

n++;

high--;

returnsum;

3.doublefun(intn)

doubles=0.0;

inti,k;

i+=2)

for(k=3;

k<

=i/3;

k+=2)

if(i%k==0)break;

if(k>

i/3)

s+=sqrt(1.0*i);

returns;

4.voidfun(intm,intk,intxx[])

intx,i,n;

x=m+1;

n=0;

while(n<

k)

=x/2;

if(x%i==0)break;

x/2)xx[n++]=x;

x++;

5.intfun(intlim,intaa[MAX])

inti,k,n;

if(lim<

2)return0;

aa[0]=2;

n=1;

=lim;

for(k=0;

k++)

if(i%aa[k]==0)break;

=n)aa[n++]=i;

6.voidfun(intm,int*k,intxx[])

inti,j=0,t;

for(i=4;

m;

for(t=2;

t<

=i/2;

t++)

if(i%t==0)break;

if(t<

=i/2)xx[j++]=i;

*k=j;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1