下载后可任意编辑一
引言由于 C 语言长期广泛应用,现存有大量经过严格检验的有用 C 程序,它们可以用来很好地解决工程应用中的实际问题
但是旧的 C 程序往往有很多与现代编译器不兼容的地方,因此我们要根据具体的代码情况进行相应的移植处理
本文以改写清华大学出版社出版的 C 常用算法程序集(以下简称“程序集”)为例,说明如何将旧的 C 程序移植到目前普遍使用的 C/C 开发环境 Visual C 下
除了列举一些移植程序的方法和技巧,本文还给出两个 C 类:数组类和矩阵模板类,以例示如何对 C 程序进行面对对象的包装处理
基于 C 语言分析和改换我们知道,Visual C 支持 ANSI C,下面列举源代码影响编译、不兼容的情况和相应解决方案,并给出基于 ANSI C 标准的函数的基本调用例子
函数定义参数声明没有采纳现代风格,例如全选主元高斯消去法:int agaus(a,b,n)int n;double a[],b[];{……;}参数声明应改为数组形式:int agaus(double a[],double b[],int n)或者改为指针形式:int agaus(double* a,double* b,int n); 调用方法:agaus(&a[0][0],&b[0],n); /* a 二维双精度型数组、b 一维双精度型数组,n 整型变量 */C/C 中用下标法和指针法都可以访问一个数组,设有数组 a,则 a[i]和*(a i)无条件等价
假如指针变量 p 指向数组中的一个元素,则 p 1 指向同一数组的下一个元素
若 p 的初值为&a[0],则 p i 和 a I 都是 a[i]的地址;*(p i)和*(a i)就是 p i 或 a i 所指向的数组元素,即a[i];指向数组的指针变量也可以带下标,如 p[i]与*(p i)等价
所以,在实际使用该函数,