题目:随机生成100个整数存入一个顺序表,整数范围在[100,200)之间,输出表中所有元素;然后去掉其中所有的偶数,输出表中所有元素。
重点:产生随机数;随机数的产生范围;出去偶数
1.顺序表的结构声明:
struct SqList {
int *Data; // 本实验中,元素类型设置为int
int N; //表中现有元素个数
int MaxSize; // 表的最大容量
};
2.随机数生成函数rand:
使用该函数需要表头文件为:#include <stdlib.h>
- 语句定义:srand((int)time(NULL)); //初始化随机数发生器
- 函数:m=rand()%a; //随机生成 0~(a-1) 之间的一个数字
-
函数:m=rand()%a +b ; //随机生成 b~(a+b-1) 之间的一个数字,若执行一次则生成一个随机整数,执行n次就生成n个随机整数
int a=rand()%(100+1)+100;
语句说明:利用该语句在100到200之间随机生成一个整数并赋值给a
3.创建一个新的顺序表
struct SqList *CreateList()
{
struct SqList *L;
L = (struct SqList *)malloc(sizeof(struct SqList));//创建新的表空间
L->Data=(int*)malloc(sizeof(int)*L->MaxSize);
L->N = 0;//将现有表中的元素数赋值
L->MaxSize = 200;//定义表中可以存放的最大元素数量
return L;
}
4.产生随机数并存入到顺序表中:
int randInsert(struct SqList *L)
{ int i;
srand((int)time(NULL)); //初始化随机数发生器
for(i=0;i<100;i++){
L->Data[i]=rand()%(100+1)+100;//将产生的随机数存入顺序表中
L->N++;
}
return L;
}
5.找出偶数并删除偶数:
void Delete(struct SqList *L ,int i){//删除偶数函数
int j;
for(j=i;j<L->N;j++){
L->Data[j]=L->Data[j+1];
}
L->N--;
}
int findDou(struct SqList * L)//查找偶数函数
{
int i,j;
for (i = 0; i < L->N;) {
if((L->Data[i])%2==0);//判断是否为偶数的条件
Delete(L,i);//若为偶数则通过该数下标号调用前面的函数删除偶数
else i++;//若不是偶数,则继续查找下一个数是否为偶数
}
完整源代码为:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct SqList{
int *Data;
int N;
int Maxsize;
};
void Delete(struct SqList *L ,int i){
int j;
for(j=i;j<L->N;j++){
L->Data[j]=L->Data[j+1];
}
L->N--;
}
int main() {
struct SqList *L;
L=(struct SqList*)malloc(sizeof(struct SqList));
L->N=0;
L->Maxsize=200;
L->Data=(int*)malloc(sizeof(int)*L->Maxsize);
int i;
printf("随机生成数如下:\n");
srand((int)time(NULL));
for (i=0;i<100;i++) {
L->Data[i]=rand()%100+100;
L->N++;
printf(" %d",L->Data[i]);
}
printf("\n");
printf("删除偶数后的顺序表:\n");
printf("\n");
for (i=0;i<L->N;) {
if(L->Data[i]%2==0)
Delete(L,i);
else
i++;
}
for (i = 0;i<L->N;i++) {
printf(" %d ",L->Data[i]);
}
return 0;
}