程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int cur = 0;
int * numlist(int x, int y);
int * filter(int *p, int len);
int * newnum(int *p, int len);
int main(void) {
int i, x, y, len, *pnum = NULL;
double sum = 0;
printf("查找某个整数区间内素数 (下限 上限) : ");
scanf("%d%d", &x, &y);
if(y - x >= 0 && x >= 2) {
len = y - x + 1;
} else if(y - 2 >= 0 && x < 2) {
x = 2;
len = y - x + 1;
} else {
printf("\n请检查输入值...\n");
return 1;
}
pnum = newnum(filter(numlist(x, len), len), len);
if(pnum) {
printf("区间内的素数为:\n");
for(i = 0; i < cur; i++) {
printf("%d ", *(pnum + i));
sum += *(pnum + i);
}
printf("\n平均值: %.2f\n", sum / cur);
} else {
return -1;
}
return 0;
}
int * numlist(int x, int len) {
int i = 0, *p = NULL;
if(len > 0) {
p = malloc(len * sizeof(int));
} else {
return NULL;
}
if(p == NULL) {
printf("*内存分配错误!");
return NULL;
} else {
for(; i < len; i ++) {
*(p + i) = x + i;
}
}
return p;
}
int * filter(int *p, int len) {
int i, j, k;
if(p) {
for(i = 0; i < len; i++) {
if(*(p + i) != 0) {
for(j = 2; j <= sqrt(*(p + i)); k = 0, j++) {
if(*(p + i) % j == 0) {
while(k * j <= sqrt(*(p + i))) {
*(p + i + j * k) = 0;
k++;
}
*(p + i) = 0;
}
}
}
}
}
return p;
}
int * newnum(int *p, int len) {
int i, j = 0, *pnew = NULL;
if(p) {
for(i = 0; i < len; i++) {
if(*(p + i) != 0) {
cur++;
}
}
pnew = malloc(cur * sizeof(int));
if(pnew != NULL) {
for(i = 0; i < len; i++) {
if(*(p + i) != 0) {
*(pnew + j) = *(p + i);
j++;
}
}
} else {
printf("**内存分配错误!\n");
return NULL;
}
}
return pnew;
}