怎样使DOS下C程序在Win下运行


DOS下许多优秀的C语言源程序,能否不加修改或只作少量修改 就能够在Win下运行? 这些程序在用 VC 6.0 编译时,大都能获得通过,但在运行时 却一闪而过。 问:原DOS下C程序编译运行一闪而过如何解决? 答:以《电脑爱好者》2000年第7期擂台赛为例 (擂主源程序见2000年第13期)。 求矩阵的乘积,这是一个有实用价值的题目,因为无论自然科学 和社会科学都常要用到矩阵运算。 擂台赛题目是要求编一程序,从输入文件 input.dat 中读入两矩阵的数据,然后输出计算出的乘积矩阵的结果。 矩阵元素可以是任意实数。为简化起见 input.dat 用了2个简单的矩阵。 一个2行3列的矩阵 | 1 2 3 | | 2 1 0 | 一个3行2列的矩阵 | 1 2 | | 2 3 | | 1 2 | 求这2 个矩阵的乘积。 矩阵乘法的基本规则: 设A是一个m×n的矩阵也就是m行、n列的矩阵,B是一个 p×q的矩阵,那么,当n=p时,可以定义A乘B的乘积矩阵C =A×B。 其中:C是m×q的矩阵,并且它的第i行第j列元素c i,j 等于A矩阵第i行的行向量与B矩阵的第j列列向量的点积,即:    c i,j=∑ a i,k×b k,j 利用上述基本定义就可以设计出相应矩阵乘积的计算程序了。 两种办法:一种是预先开辟一个足够大的固定数组;另一种则是运 行时根据数据规模,动态分配内存,开辟相应大小的数组。显然后 一方法更好一些,前一方法如果开的数组过大浪费内存,而过小又 在某些情况下无法处理。 VC 源程序:lst13.c C 源程序在用 VC 6.0 编译时,可以顺利通过,但在运行时却 一闪而过如何解决? 在 VC 6.0 下编译生成: 程序和工程文件:lts13.vbp,lts13.vbw 执行文件:lts13.exe 但运行时一闪而过,无法看清结果。 解决方法: 以擂台赛本题为例,说明采取的解决办法。 第1种方法:编写能显示结果的批处理程序。
(1)在 VC 6.0 下,打开源程序。 文件 |打开 :lts13.c (2)编译和链接。 编译 |编译 lts13.c 自动建程序和工程文件:lts13.vbp,lts13.vbw 编译 |构建 lts13.exe 但运行时一闪而过,无法看清结果。 (3)在不改变源程序的情况下,编写批处理程序。 用 文本编辑器,编辑一个批处理文件:lts13.bat 内容只有一句: start lts13.exe >output.txt 第2种方法:修改源程序的相关语句。
(1)源程序中关于输出的语句。 for(i=0;i<m;++i,printf("\n")) for(j=0;j<p;++j,printf("%g ",h)) for(h=0,k=0;k<n1;++k) if( (h1=x[i][k])&&(h2=y[k][j]) )h+=h1*h2; // h+=((h1=x[i][k])&&(h2=y[k][j]))?h1*h2:0.f; 在本例,可以在源程序中增加输出文件语句。 (2)修改源程序中关于输出的语句。 在本例,在源程序中增加输出文件语句。 fp=fopen("output.txt","w");/* 打开输出文件 */ for(i=0;i<m;++i,fprintf(fp,"\n")) /* 由显示结果改为写文件 */ for(j=0;j<p;++j,fprintf(fp,"%g ",h)) for(h=0,k=0;k<n1;++k) if( (h1=x[i][k])&&(h2=y[k][j]) )h+=h1*h2; // h+=((h1=x[i][k])&&(h2=y[k][j]))?h1*h2:0.f; fclose(fp);/* 关闭输出文件 */ (3)源文件改名保存:lt13.c (4)编译链接步骤和上述相同。 (5)运行后应生成新的 output.txt 文件。 第3种方法:使用 QuickWin 软件使在Windows下显示DOS程序输出结果。
QuickWin 概述: 许多 C和 C++ 程序使用了标准输入/输出函数,如 C中的 printf()和 scanf()、C++中的cout和cin。但是由于在窗口 环境下没有输入/输出流供用户使用,使得这些函数不能执行。 QuickWin是Visual C++的一个工具,它可以把用户程序 程序中的标准I/O调用转换成Windows调用。 使用这个软件,可以解决输出一闪而过的问题。QuickWin.exe 56 KB 操作步骤: File |Open Process(打开执行文件) |Browese(浏览) 找到所在的路径和文件 lts13.exe |打开 |OK(确认) 应显示结果。C 矩阵元素: 8 14 4 7 通过这个例子,可使DOS下许多优秀的C语言程序转换到 在Windows下也能正常运行。并如果由此引发对深入编程的 兴趣,那是很可喜的。 运行中如发现问题以及对本文的意见和建议,欢迎来函或留 言交流,以便改进。 谢谢。 应用程序实例下载 下载: bc05091.zip 220 KB 河石 2005.8.25 编 相关链接: 《建立图片目录的快捷方法》 黄河之滨 网站 : http://hhstone.vip.sina.com http://www.hhstone.com