《C和指针》章节后编程练习解答参考——6.6

《C和指针》——6.6

题目:

  在指定的下限、上限之间使用数组方法查找质数,并将质数提取出来。

要求:

  略

解答代码:

#include <stdio.h>

#define UPLIMIT        11000
#define DOWNLIMIT    10000
#define NUM            UPLIMIT-DOWNLIMIT

void show_array(int *p, int n)        //显示数组p[]中的n个元素
{
    int i;
    for(i=0; i<n; i++)
    {
        if ((i%10 == 0) && (i!=0))
            printf("
");
        printf("%6d", *(p+i));
    }
    printf("
");
}

void def_array(int *p)        //初始化数组元素值为序号+1
{
    int i;
    for(i=0; (i+DOWNLIMIT)<(UPLIMIT); i++)
    {
        *(p+i) = i+1+DOWNLIMIT;
    }
}

void DataProcess(int *p)        //将数组中的非质数替换为0
{
    int i, j;
    for(i=2; i<=(UPLIMIT/2); i++)
    {
        for(j=0; j<NUM; j++)
        {
            if ((*(p+j) >= 2) && (*(p+j) != i) && (*(p+j) % i == 0))
            {
                *(p+j) = 0;
            }
        }
    }
}

int DataSelect(int *p)            //将数组中的所有0去掉
{
    int i, j;
    for(i=0, j=0; i<NUM; i++)
    {
        if(*(p+i) > 1)
        {
            *(p+j) = *(p+i);
            j++;
        }
    }
    return j;
}

int main(void)
{
    int arrayt[NUM];
    int *p = arrayt;
    int n = 0;

    def_array(p);            //初始化数组元素值为索引号+1
    show_array(p, NUM);        //显示数组p[]中的n个元素
    DataProcess(p);            //将数组中的非质数替换为0
    n = DataSelect(p);        //将数组中的所有0去掉,n为质数的个数
    printf("There are %d numbers:
", n);
    show_array(p, n);

    getchar();
    return 0;
}

注:

  下限和上限可以设置

原文地址:https://www.cnblogs.com/microxiami/p/4972512.html