二級C語言部分上機編程題詳細分析(3)

字號:

3.請編寫一個函數(shù)void fun(char m,int k,int xx[]),該函數(shù)的功能是:將大于整數(shù)m且緊靠m的k個素數(shù)存入xx所指的數(shù)組中。例如,若輸入17和5,則應(yīng)輸出:19,23,29,31, 37。
    注意:部分源程序存在PROG1.C中,請勿改動主函數(shù)和其他函數(shù)中的內(nèi)容,僅在函數(shù)fun的指定的部位填入你編寫的若干語句。
    試題源程序如下:
    #include <stdio.h>
    void fun(int m, int k, int xx[])
    {
    }
    main()
    { int m, n, zz[100];
    printf("\nPlease enter two integers(m & n): ");
    scanf("%d%d",&m,&n);
    fun(m, n, zz);
    for(m=0; m<n; m++) printf("%d ",zz[m]);
    printf("\n\n");
    }
    分析:
    (1)本題的基本算法是求素數(shù)。假設(shè)有整數(shù)i,若i不能被2到i之間的任意一個數(shù)除盡,則i就是素數(shù);若一旦能被某個數(shù)除盡就不是素數(shù)。
    (2)以下是求i是否為素數(shù)的基本算法:變量ok用作i是素數(shù)的標志,ok為1,則i是素數(shù)。
    ok=1;
    for(p=2; p<i/2; p++)
    if( i%p==0){ ok=0; break; }
    if(ok)……
    (3)本題要求把大于m的k個素數(shù)存入xx所指的數(shù)組中。所以,i的值應(yīng)大于m;取大于m的值逐一進行判斷,若是素數(shù)就放入xx所指數(shù)組中。把以上語句放入一個循環(huán)中:
    for( i=m+1,j=0; ? ; i++ )
    { ok=1;
    for(p=2; p<=i/2; p++)
    if( i%p==0 ){ ok=0; break; }
     if (ok) { xx[j]=i;j++; }
    }
    此處,變量i統(tǒng)計存入數(shù)組中元素的個數(shù),同時作為下標。
    (4)按本題的要求,外循環(huán)結(jié)束的條件應(yīng)當是:j<k(j的值從0到k-1)。只要求得了k個素數(shù),就可退出循環(huán)。因此在?處應(yīng)填入j<k。