《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; }
注:
下限和上限可以设置