下列程序的功能是:将大于整数m且紧靠m的k个被3除余1的素数存入数组xx。请编写函数num(int m,imt k,int xx[])实现程序的要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。例如:若输入17,5,则应输出:19,31,37,43,61。部分源程序已给出。请勿改动主函数main()和输出数据函数readwriteDat()的内容。include <conio.h>include <stdio.h>void readwriteDat();void num(in

题目

下列程序的功能是:将大于整数m且紧靠m的k个被3除余1的素数存入数组xx。请编写函数num(int m,imt k,int xx[])实现程序的要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。

例如:若输入17,5,则应输出:19,31,37,43,61。

部分源程序已给出。

请勿改动主函数main()和输出数据函数readwriteDat()的内容。

include <conio.h>

include <stdio.h>

void readwriteDat();

void num(int m, int k, int xx[])

{

}

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();

}

viod 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);

}


相似考题
参考答案和解析
正确答案:int isP(int m) { int i; for ( i=2; im; i++) if(m % i==O)return 0; /*用小于m的所有整数去试除*/ /*除尽则m不是素数*/ /*此步有优化余地*/ return 1; } /*寻找满足条件的素数*/ void num(int m int k int xx[]) { int s=0; for (++m; k>0 ;m++) if (m%3==1 && isP(m) ) { xx[s++]=m; k--; } }
int isP(int m) { int i; for ( i=2; im; i++) if(m % i==O)return 0; /*用小于m的所有整数去试除*/ /*除尽则m不是素数*/ /*此步有优化余地*/ return 1; } /*寻找满足条件的素数*/ void num(int m, int k, int xx[]) { int s=0; for (++m; k>0 ;m++) if (m%3==1 && isP(m) ) { xx[s++]=m; k--; } } 解析:类型:素数判断与运算。
关键点:素数判定。
求素数的题,可以先定义一个求素数的函数,然后在程序中直接调用,这样简单而且不容易出错。
原程序如果给了求素数的函数,可以直接调用。
更多“下列程序的功能是:将大于整数m且紧靠m的k个被3除余1的素数存入数组xx。请编写函数num(int m,imt k ”相关问题
  • 第1题:

    下列程序的功能是:将不超过整数m(m<2000)的所有素数存入数组xx。请编写函数 num(int m,int xx[])实现程序的要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。

    例如:若输入30,则应输出:2,3,5,7,11,13,17,19,23,29。

    部分源程序已给出。

    请勿改动主函数main()和输出数据函数readwriteDat()的内容。

    include <conio.h>

    include <stdio.h>

    void readwriteDat();

    int num(int m, int xx[])

    {

    }

    main ( )

    {

    int m,n,xx[2000];

    clrscr();

    printf("\nPlease enter the integer m:");

    scanf(" %d" ,&m);

    n = num(m, xx);

    for(m-0;m printf(" %d" ,xx[m]);

    printf("\n" );

    readwriteDat();

    }

    viod 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" ,&m);

    n=num(m, xx);

    for(m=0;m<n;m++)fprintf(wf," %d" ,xx[m]);

    fprintf(wf,"\n" );

    }

    fclose(rf);

    fclose(wf);

    }


    正确答案:int hum(int m int xx[]) { int s=0; int flag[2000]; /*初始化标记数组*/ for (i=0; i=m; i++) flag[i]=0; /*0和1不是素数*/ flag[0]=flag[1]=1; /*从2开始搜索素数*/ for(i=2; i=m;i++) { /*被标记为1的不是素数*/ if(flag[i])continue; /*i是素数输出*/ xx[s++]=i; /*将所有i的倍数标记为1*/ /*小优化:小于i*i的数必有小于i的素因数已标记*/ for(j=i*i;i=m;j+=i) flag[j]=1; } /*返回不超过m的素数个数*/ return S; }
    int hum(int m, int xx[]) { int s=0; int flag[2000]; /*初始化标记数组*/ for (i=0; i=m; i++) flag[i]=0; /*0和1不是素数*/ flag[0]=flag[1]=1; /*从2开始搜索素数*/ for(i=2; i=m;i++) { /*被标记为1的不是素数*/ if(flag[i])continue; /*i是素数,输出*/ xx[s++]=i; /*将所有i的倍数标记为1*/ /*小优化:小于i*i的数必有小于i的素因数,已标记*/ for(j=i*i;i=m;j+=i) flag[j]=1; } /*返回不超过m的素数个数*/ return S; } 解析:类型:素数筛选。
    关键点:素数筛选算法。
    求给定范围1~n内的所有素数的题,可以使用筛选法,步骤如下:
    创建一个0-1标志数组,对应1~n,1代表该数非素数,0代表素数。初始化全为0,以下面的方式将某些位置以1标记:
    (1)标记位置1为1(1不是素数),当前位置为2。
    (2)从当前位置开始,找到第一个标记为0的数p,p是素数;若找不到,转到6。
    (3)遍历数组,将所有p的倍数的位置标记为1。
    (4)当前位置前进到p+1。
    (5)返回2继续。
    (6)输出数组中所有标记为0的数(此步可并入第2步,找到一个输出一个)。

  • 第2题:

    请编写函数fun( ),其功能是:将所有大于1小于整数m的素数存入xx所指数组中,素数的个数通过k传回。

    例如,输入25,则应输出2 3 5 7 11 13 17 19 23。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include<conio.h>

    include<stdio.h>

    void fun(int m,int *k,int xx[ ])

    {

    }

    main( )

    {

    int m,n,zz[100];

    clrscr( );

    printf("/nPlease enter an integer number between 10 and 100:");

    scanf("%d",&n);

    fun(n,&m,zz);

    printf("\n\nThere are%d prime numbers

    less than %d:",m,n);

    for(n=0;n<m;n++)

    printf("\n %4d",zz[n]);

    }


    正确答案:void fun(int mint *kint XX[]) { int ijtn=0; for(i=2;im;i++) /*找出大于1小于整数m的素数*/ { t=l; for(j=2;ji;j++) if(i%j==0) { t=0; break; } if(t==1) xx[n++]=i; } *k=n; /*返回素数的个数*/ }
    void fun(int m,int *k,int XX[]) { int i,j,t,n=0; for(i=2;im;i++) /*找出大于1小于整数m的素数*/ { t=l; for(j=2;ji;j++) if(i%j==0) { t=0; break; } if(t==1) xx[n++]=i; } *k=n; /*返回素数的个数*/ } 解析:这道题是考查一个数是不是素数,只要掌握了判断素数的方法,问题便能顺利解决,请以此题为例,掌握判断素数的方法。

  • 第3题:

    程序test.c的功能是:将大于整数m且紧靠m的k个素数存入数组XX。请考生编写函数num(intm,intk,intxx[])实现程序的要求,最后调用函数readwriteDAT0把结果输出到0ut.dat文件中。 例如,若输入17,5,则应输出:19,23,29,31,37。


    正确答案:
    【审题关键句】将大于整数m且紧靠m的k个素数存入数组。
    【解题思路】
    ①首先定义一个计数变量cnt并赋初值为0。
    ②利用while循环统计大于整数m且紧靠m的k个素数,当计数变量cnt的值与变量k的值相等的时候,则退出while循环。每执行一次循环时,变量m的值加1,然后调用函数isP判断当前的m值是否为素数,如果是素数,则将m的值赋给数组xx[cnt],同时计算变量cnt的值加1,即当数组xx[0]中保存了一个素数之后,在T一次素数判断成立时将保存到xx[1]的位置上,依次类推。
    【参考答案】

  • 第4题:

    编写函数fun,其功能是:将所有大于1小于整数m的非素数存人XX所指数组中,非素数的个数通过k返回。

    例如,若输入17,则应输出:4 6 8 9 10 12 14 15 16。注意:部分源程序在文件PROGl.C中。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。


    正确答案:
    【考点分析】本题考查:如何判断非素数;循环判断结构;数组的引用。【解题思路】题目要求将l—m之问的非素数存人数组中,应使用循环判断结构。循环语句用来遍历1一m之间的每个数,判断语句用来判断该数是否为素数,若不是素数,则将其存人数组中。这道题目是考查—个数是否为素数的简单延伸,只要掌握了判断素数的方法,问题便能顺利解决。【解题宝典】判定一个数是否为素数,即该数除了能被l和它本身外,不能被任何数整除。代码实现为:for(j=2;j<i;j++)if(i%j==0)/*如余数为0,证明i不是素数·/此语句需要熟记,很多判断素数的题目也可通过此法解决。

  • 第5题:

    请编写一个函数void fun(int m, int k, int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入所指的数组中。

    例如,若输入17,5,则应输出19,23,29,3l,37。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include <conio.h>

    include <stdio.h>

    void fun(int m, int k, int xx[])

    {

    }

    main()

    {

    int m,n, zz[1000];

    clrscr();

    printf("\nPlease enter two integers: ");

    scanf("%d%d",&m,&n);

    fun(m,n,zz);

    for(m=O;m<n;m++)

    printf("%d ",zz[m]);

    printf("\n ");

    }


    正确答案:void fun(int m int k int xx[]) { int ijn; for (i=m+1n=0;nk;i++) /*找大于m的素数循环k次即找出紧靠m的k个素数*/ {for(j=2;ji;j++) /*判断一个数是否为素数如果不是跳出此循环判断下一个数*/ if(i%j==O) break; if(j>=i) /*如果是素数放入数组xx中*/ xx[n++]=i; } }
    void fun(int m, int k, int xx[]) { int i,j,n; for (i=m+1,n=0;nk;i++) /*找大于m的素数,循环k次,即找出紧靠m的k个素数*/ {for(j=2;ji;j++) /*判断一个数是否为素数,如果不是,跳出此循环,判断下一个数*/ if(i%j==O) break; if(j>=i) /*如果是素数,放入数组xx中*/ xx[n++]=i; } } 解析:本题只要掌握了判断素数的算法即不难完成了,其实程序缺少部分也正是这部分。