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

《C和指针》——6.4

题目:

  质数是只能被1和本身整除的整数。

  在1到1000之间的质数,在数组中剔除不是质数的数。

解答代码:

#include <stdio.h>

#define LIMIT 1000

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

void def_array(int *p)        //初始化数组元素值为索引号+1
{
    int i;

    for(i=0; i<(LIMIT); i++)
    {
        *(p+i) = i+1;
    }
}

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

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

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

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

代码简析:

  1、定义一个数组,元素依次为从1、2、3、……

  2、使用两层循环,外层从2开始遍历数组前半部分,内层从3开始遍历之后的全部数组元素,内层元素除以外层元素,余数为零时内层元素置为0。

  3、将数组中为零的元素全部剔除

 

posted @ 2015-11-15 21:22  micro虾米  阅读(291)  评论(0编辑  收藏  举报