a[j+k]=a[j];
a[j+k]=a[0];
}
k=k==2?
1:
k/2;
}
for(i=1;i<=len;i++)
printf("%d",a[i]);
m_w6=a[1];
m_w7=a[2];
m_w8=a[3];
m_w9=a[4];
m_w10=a[5];
UpdateData(false);
}
5.2基于MFC的应用程序测试
运行程序后,首先出现的界面如图5.5所示。
图5.5程序运行界面
然后再输入数据如图5.6
图5.6输入排序数据
单击直接插入排序按钮,实现排序并将排序结果显示出来,如图5.7所示。
图5.7显示直接插入排序结果
第二次输入数据,单击希尔排序按钮,实现排序并将排序结果显示出来,如图5.8所示。
图5.8希尔排序结果图
图5.9直接插入排序结果图
单击确定或取消按钮后,程序能够正常实现退出。
由于是初次进行MFC方面的设计,所以在程序实现过程中遇到了不少问题,比如在希尔排序过程中利用到了函数的调用,这一点在刚开始时连续出错,但是最终还是解决了问题,成功运行了程序,实现了三种插入排序。
通过这次课程设计,对MFC相关的只是也掌握了不少。
结论
程序的关键在于建立一个虚拟类模板,然后再类模板中声明各成员函数,这些成员函数在类模板外进行定义,这里要特别注意在类模板外定义成员函数的方法。
除了类模板的基本特征之外,结合问题的实际需要,三种排序方法的算法要具备正确性,可读性,健壮性。
在类模板外定义成员函数时,应写成类模板形式。
不论成员函数在类内定义还是在类外定义,成员函数的代码段都用同一种方式储存,即都不占用对象的存储空间。
一个对象所占的空间大小只取决于该对象中数据成员所占的空间,而与成员函数无关。
函数代码是存储在对象空间之外的。
在程序的主函数部分,建立了两个实际的类对象s和p,实际类型参数分别为int型和char型。
首先通过选择参数类型来调用读入数组函数,进行数据的输入。
其次选择排序类型,根据所选的类型调用相应的排序函数进行排序。
最后通过输出函数输出排序之后的数据,完成整个程序的编译。
程序的成功运行是一个艰辛的过程,如果只是实现一般的功能,将变得容易很多,当加上MFC,不论是效率还是程序可行性,都需要精心设计。
这次做课程设计的过程中,学到了不少MFC的知识和排序的改进算法。
因而以后必须要加强程序MFC方面的训练,这样才能在将编程思想和数据结构转换为代码的时候能得心应手。
自己编好程序上机