实验E2:模块化,接口与实现分离、多文件编译
array.h#include <iostream>#include <cstdlib>#include <string.h>using namespace std;#include <iostream>#include <cstdlib>#include <string.h>using namespace std;void
·
array.h
#include <iostream>
#include <cstdlib>
#include <string.h>
using namespace std;
#include <iostream>
#include <cstdlib>
#include <string.h>
using namespace std;
void set(int *arr,int size,int val=0);//设置初始值
void find(const int *arr,int size,int &maxm,int&minm);//寻找最大值最小值
void emer(int* &arr1,const int*arr2,int &size1,int size2,int *arr3=NULL);//合并两个数组
void dele(const int target, int *arr,int &size);//删除某个值
array.cpp
#include "array.h"
void set(int *arr,int size,int val){
for(int i=0;i<size;i++){
arr[i]=val;
}
arr=NULL;
}
void find(const int *arr,int size,int &maxm,int&minm){
minm=maxm=arr[0];//初始化为第0个元素
for(int i=1;i<size;i++){
if(arr[i]>maxm){
maxm=arr[i];
}
else if(arr[i]<minm){
minm=arr[i];
}
}
arr=NULL;
}
void emer(int* &arr1,const int*arr2,int &size1,int size2,int *arr3){
if(arr3==NULL){
arr1=(int *)realloc(arr1,4*(size1+size2));
for(int i=size1;i<size1+size2;i++){
arr1[i]=arr2[i-size1];
}
size1+=size2;//如果arr3==NULL要把数组大小返回
}
else{
arr3=(int *)realloc(arr3,4*(size1+size2));
int cnt=0;//用cnt来作arr3的计数器
for(int i=0;i<size1;i++){
arr3[cnt++]=arr1[i];
}
for(int i=0;i<size2;i++){
arr3[cnt++]=arr2[i];
}
}
arr2=NULL,arr3=NULL;
}
void dele(const int target, int *arr,int &size){
bool jud[size];
memset(jud,0,sizeof (jud));
int size1=size;
int *temp=(int *)malloc(4*size);//一个临时数组储存
int cnt=0;
for(int i=0;i<size1;i++){
if(arr[i]==target){
jud[i]=1;
size--;
}
if(!jud[i]){
temp[cnt++]=arr[i];//写入
}
}
for(int i=0;i<cnt;i++){
arr[i]=temp[i];//重新写入
}
arr=(int *)realloc(arr,sizeof (temp));
arr=NULL;
}
main
#include "array.h"
int main(int argc, char** argv) {
cout<<"请输入a、b数组的长度"<<endl;
int len1,len2;
cin>>len1>>len2;
int *a=(int*)malloc(sizeof(int)*len1);
int *b=(int*)malloc(sizeof(int)*len2);
cout<<"请输入初始化a数组的元素值"<<endl;
int val=0;
cin>>val;
set(a,len1,val);
cout<<"结果为"<<endl;
for(int i=0;i<len1;i++){
cout<<a[i]<<endl;
}
cout<<"请输入初始化b数组的元素值"<<endl;
cin>>val;
set(b,len1,val);
cout<<"结果为"<<endl;
for(int i=0;i<len2;i++){
cout<<b[i]<<endl;
}
int maxm,minm;
cout<<"下面开始对a数组进行自由赋值"<<endl;
for(int i=0;i<len1;i++){
cin>>a[i];
}
cout<<"下面开始查找a数组的最大值最小值"<<endl;
find(a,len1,maxm,minm);
cout<<"最大值为"<<maxm<<endl;
cout<<"最小值为"<<minm<<endl;
cout<<"下面合并a、b数组"<<endl;
emer(a,b,len1,len2);
cout<<"结果为"<<endl;
for(int i=0;i<len1;i++){
cout<<a[i]<<endl;
}
cout<<"接下来删除a数组中的特定的数字"<<endl;
int tar;
cin>>tar;
dele(tar,a,len1);
cout<<"结果为"<<endl;
for(int i=0;i<len1;i++){
cout<<a[i]<<endl;
}
return 0;
}
更多推荐
已为社区贡献3条内容
所有评论(0)