《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(" "); printf("%5d ", *(p+i)); } printf(" "); } 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); getchar(); return 0; }
代码简析:
1、定义一个数组,元素依次为从1、2、3、……
2、使用两层循环,外层从2开始遍历数组前半部分,内层从3开始遍历之后的全部数组元素,内层元素除以外层元素,余数为零时内层元素置为0。
3、将数组中为零的元素全部剔除