4.2数据结构设计
数据结构:结构体。 typedef struct {
int data[MAX]; int flag[MAX]; int size;
}array;
4.3算法设计
if((fp=fopen(\数组B.c\
{
printf(\文件打开失败!\\n\ exit(0); }
while(!feof(fp)) {
fread(&b,1,sizeof(array),fp); }
for(i=0;isize;i++) {
x=a->data[i];
for(j=i+1;jsize;j++) {
y=a->data[j]; b.data[k]=y-x; k++; } }
b.size=k;
26
4.4流程图如下:
图4.1 程序流程图
生成A 生成D
开始 录入A 4.5调试分析
a.调试中遇到的问题及对问题的解决方法
第一次排序的时候忘了让对应的下标对应起来,结果导致排序结果失误。解决方法,检查到之后更正回来。 b.算法的时间复杂度和空间复杂度
由于采用了三重循环进行组合计算,所以时间复杂度为O(n^3)
4.6测试结果
1 当输入数组A的大小为4,{0,1,5,8},数组B为{1,3,4,5,7,8,},输出结果如图所示。
图4.1 数组A,B排序重新组图
27
4.7 源程序(带注释)
部分源程序
# include
typedef struct {
int data[MAX]; int flag[MAX]; int size; }array; int
CREAT_NEW_A() {
FILE *fp;
array b,a; //b原始数据存储.a,构造的用于判断的结构体
int i,j,z; char ch[MAX];
strcpy(ch,\数组c.c\
if((fp=fopen(\数组B.c\ {
printf(\文件打开失败!\\n\ exit(0); }
28
while(!feof(fp)) {
fread(&b,1,sizeof(array),fp); }
fclose(fp); a.data[0]=0; printf(\数组:\\n\ for(i=0;i a.data[1]=b.data[i]; a.data[2]=b.data[j]; a.data[3]=b.data[z]; a.size=4; COMPARE(&a,ch); } printf(\满足条件\\n\ return 0; } int max; int COMPARE(array *a,char ch[MAX]) { FILE *fp; array d; array b; int i,j,k=0,n,x,y,z; if((fp=fopen(ch,\ { printf(\文件打开失败!\\n\ 29 exit(0); } for(i=0;isize;i++) { x=a->data[i]; for(j=i+1;jsize;j++) { y=a->data[j]; b.data[k]=y-x; k++; } } b.size=k; sort(&b); fwrite(&b,1,sizeof(array),fp); fclose(fp); if((fp=fopen(\数组B.c\ { printf(\文件打开失败!\\n\ exit(0); } while(!feof(fp)) { fread(&d,1,sizeof(array),fp); } fclose(fp); for(i=0;i if(b.data[i]!=d.data[i]) break; 30