定义一个数组int a[20],放置60到100以内的随机数,编程删除其中的素数,输出删 除前后数

如题所述

#include <stdio.h>
#include <conio.h>
#include <string.h> 
#include <time.h>

#define LEN 100 /*数组长度*/
#define elemType int /*元素类型*/
#define status int

/*生成n项min~max范围的随机数并存入数组randArr*/
void randomArray (elemType randArr[LEN], int n, elemType min, elemType max) {
int i;
srand ((unsigned)time(NULL)); /*用时间做种,每次产生随机数不一样*/
for (i=0; i<n; i++)
randArr[i] = rand() % (max-min+1) + min; /*产生min~max的随机数*/
}

/*判断素数 1:是;0:否*/
/*对于某数num,若其不能被2~num^1/2(num的平方根)之间所有整数整除,则其为素数*/
int isPrime (int num) {
int i,squareRoot;
squareRoot = (int) sqrt (num);
for (i=2; i<=squareRoot; i++)
if (num%i==0)
return 0;
return 1;
}

/*删除数组指定位置元素*/
status delElem (elemType arr[], int *len, int i) {
int j;
if (i>*len||i<0) /* 删除位置不合理 */
return 0;
for (j=i; j<(*len)-1; j++) /*arr[j]之后元素向前移动一位*/
arr[j] = arr[j+1];
arr[j] = -1;
--(*len);
return 1;
}

/*打印数组*/
void printArr (elemType arr[], int len) {
int i;
for (i=0; i<len; i++) {

printf ("%d\t",arr[i]);
}
putchar ('\n');
}

int main (void) {
elemType arr[LEN],arrTmp[LEN];
int len,lenTmp;
int i;

len = lenTmp = 20;
randomArray (arr, len, 60, 100); /*随机生成60~100的数组*/
memcpy (arrTmp, arr, sizeof(arr)); /*arr复制一份到arrTmp*/

for (i=0; i<len; i++) { /*遍历数组寻找素数元素并删除*/
if (isPrime(arr[i]))
delElem (arrTmp, &lenTmp, i);
}

printf ("原始数组:\n");
printArr (arr, len);
printf ("删除素数后数组:\n");
printArr (arrTmp, lenTmp);

getch (); /*屏幕暂留*/
return 0;
}

运行结果

温馨提示:答案为网友推荐,仅供参考
相似回答