《数据结构》之实验一《VC编程工具的灵活使用》
2014-2015年上学期《数据结构》 ——实验一《VC编程工具的灵活使用》 一..实验目的 复习巩固VC编程环境的使用,以及C++模板设计。 1.回顾并掌握VC单文件结构程序设计过程。 2.回顾并掌握VC多文件工程设计过程 3.掌握VC程序调试过程。 4.回顾C++模板和模板的程序设计。 二.实验内容 1. 设计一个单文件结构程序完成从键盘输入两个数,输出二者的“和”和“积”的结果。要求如下: 1)设计函数来计算“和”和“积”,在主函数中调用,并能考虑重载函数,使整数和小数均能计算。 2)分别使用单步调试和断点调试来调试程序。并多次运行力求熟练调试方法。 2.使用函数的模板来实现上述功能。 3.使用一个类来实现上述功能。要求: 1)使用类模板 2)使用多文件:类的声明有头文件中;类的函数定义一个源文件中,在主程序文件中设计主函数程序,在实例化输出结果。
三.源程序和程序调试 1: (1) 源程序 #include<iostream> using namespace std; void f(int m=0,int n=0) { int sum,ji; cout<<"pleaseintput your two number:"<<endl; cin>>m>>n; sum=m+n; ji=m*n; cout<<"sum="<<sum<<endl; cout<<"ji="<<ji<<endl; } void g(float m=0,float n=0) { float sum,ji; cout<<"pleaseintput your two number:"<<endl; cin>>m>>n; sum=m+n; ji=m*n; cout<<"sum="<<sum<<endl; cout<<"ji="<<ji<<endl; } void main() { int choice; do{ cout<<"请选择计算数字类型!"<<endl; cout<<"| 1:整数 |"<<endl; cout<<"| 2:小数 |"<<endl; cout<<"| 0:退出 |"<<endl; cin>>choice; switch(choice) { case1:f();break; case2:g();break; case0:cout<<"EXIT!"<<endl;break; default:cout<<"没有该选项,请重新选择啊亲~"<<endl;break; } }while(choice!=0); } 程序是从main()主函数进行的,我的本次程序思想是在将“整数运算”和“带小数运算”分开来进行,于是乎就运用了c++语言中基本的switch语句。 当然同时,为了能多次输入,让输入显得更加多元化,也选用了do-while语句,可以循环使用。 算法部分,又重新定义了两个函数,分别对应“整数运算”和“带小数运算”。按照要求,进行键盘输入,屏幕输出的要求,适当的选用cout和cin输入输出流。 (2)、程序调试 编写完代码后,就可以进行调试了,从中可以看到代码是否有编写错误,为了程序的实现,要尽快依据错误进行整改。 图标有反应的分别是Compile(ctrl+F7)、Build(F7)、Go(F5)。如果能顺利地调试,就可以发现“组建”状态一栏会分别出现: 和 出现最后如上3幅图所示,表示代码编写的语法相应的没有错误! 当然最重要的是我们的算法有没有错误,接着以上步骤,就要进行真实数据的调试了。例如: a、选择“1、整数”按钮,输入两个整数(14和2),进行加和乘积的运算: 从简单的计算结果可以得知,该程序整数的算法是正确的。 b、同理,选择“2、小数”按钮,输入两个小数(1.5和1.5),进行加和乘积的运算: 从结果可以得知,该程序小数的算法是正确的。
2: (1) 源程序 #include<iostream> using namespace std; template<typename T> T num(T m,T n) { T sum,ji; cout<<"pleaseintput your two number:"<<endl; cin>>m>>n; sum=m+n; ji=m*n; cout<<"sum="<<sum<<endl; cout<<"ji="<<ji<<endl; return m,n; } void main() { int m,n,intn; float i,j,floatn; int choice; do { cout<<"请选择计算数字类型!"<<endl; cout<<"| 1:整数 |"<<endl; cout<<"| 2:小数 |"<<endl; cout<<"| 0:退出 |"<<endl; cin>>choice; switch(choice) { case1:intn=num(m,n);break; case2:floatn=num(i,j);break; case0:cout<<"ExIT!"<<endl; default:cout<<"没有该选项,请重新选择啊亲~"<<endl;break; } }while(choice!=0); } 其实,这第二个实验与第一个实验大同小异,后者按照要求,采用的是函数模版的形式,减少了代码的字数,防止代码冗余。 在其它程序编写中,也可以采用这种形式,按照函数模版,更加直观。但是在另一方面,如果数据输出的权限不同,就要重新架构函数模版,否则就是千遍一律的数据,没有差异了。 (2)、程序调试 第二个实验的调试步骤同上,这里我主要分析调试结果,程序的实现情况。 按照第一个实验的步骤选择按钮“1、整数”和“2、小数”。依次出现的结果如左图所示。 选择“1、整数”按钮时,就会执行case1:intn=num(m,n);break;语句,intn是整型,故返还到函数模版num()时,被赋予的数据就是整型。 选择“2、小数”按钮时同理。
3: (1)、源程序 //工程lyy1的头文件,s1.h这个头文件只存放有关sl1类的定义说明 #ifndefs1_H #defines1_H template<classT> classls1 { public: T a,b; T add,sum; T qsum(T m,T n); }; //ls1类定义结束 #endif //工程lyy1的源文件&主函数main(),s1.cpp类ls1的实现部分 #include<iostream.h> #include"s1.h" template<classT> Tls1<T>::qsum(T m,T n) { a=m; b=n; cout<<"Please input your twonumbers:"<<endl; cin>>m>>n; sum=m+n; add=m*n; cout<<"sum="<<sum<<endl; cout<<"add="<<add<<endl; return m,n; } void main() { int j,i,intsum; float b,c,floadd; ls1<int>ls1i; ls1<float>ls1f; int choice; do{ cout<<"1、整数运算"<<endl; cout<<"2、小数运算"<<endl; cout<<"0、安全退出"<<endl; cout<<"Please give meyour choice!"<<endl; cin>>choice; switch(choice) { case1:intsum=ls1i.qsum(j,i);break; case2:floadd=ls1f.qsum(b,c);break; case0:cout<<"EXIT!"<<endl;break; default:cout<<"没有该选项,请重新选择啊亲~"<<endl;break; } }while(choice!=0); } 多文件结构中,在头文件中定义类,在程序文件中定义成员函数。一般一个较大的程序可以分为三种文件来保存, 此处的实验内容较少,我就采用了简单地采用了这三者:类的定义、类的实现、类的使用。 模块化是信息隐蔽的重要思想,信息隐蔽对开发大的程序作用比较大。在这里,用户只需要了解类、应用类的外部接口, 对于类的内部不甚了解即可。 当然,我此次多文件实验中主要还是在类的定义的时候采用了类的模版、函数模版。对于模版的应用,以下有讲到。 (2)、程序调试 编写完代码后,按照实验一.1的步骤进行程序调试。 从类的实现,main()主函数开始程序开始运行。弹出选择数据类型的按钮选项,同样采用do-while语句和switch开关语句, 进行数据类型选择和运算操作。例如:选择“1”,则执行intsum=ls1i.qsum(j,i);调用类的对象ls1i的函数qusm()。再根据 模版函数Tls1<T>::qsum(T m,T n),采用相应的数据类型进行运算。其中,int是整型,而float是单精度浮点型。 四、浅说模版和重载 比较遗憾,在此次实验中没有采用重载的算法。但是在这里还是要简单的说说重载,还有总结模版的知识点。 模版是一种使用无类型参数来产生一系列函数或类的机制,是C++语言的一个重要特征,而且增强了其通用性,可以避免程序中多次书写相同的代码。 前面我也有说到,这多用于大规模开发程序软件。模版分为函数模版和类模版。在实验一的2和3中分别主要采用的函数模版和类模版, 更加利于我对模版编程方法的熟悉。 1、函数模版 说明形式: template<模版参数表> <返回值类型><函数名>(模版函数形参表) { //函数定义体} 函数模版定义不是一个实在的函数,编译系统不为其产生任何执行代码。 2、重载函数 以前有学过相关的知识,当模版函数与重载函数同时出现在一个程序体内时,C++语言编译器的求解次序是先调用重载函数;如果不匹配,则调用模版函数; 如果还不匹配则进行强制类型转换,前几种方法都不对,则最后报告出错! 3、类模版 类模版是类定义的一种模式,是抽象类,让类中的某些数据成员、成员函数的参数、成员函数的返回值,能取任何类型(包括系统预定义的和用户自定义的数据类型)。 类模版有C++语言的关键字template引入,定义的语法如下: template<class类属参数1,class类属参数2,...> class name { //类定义体} template<class类属参数1,class类属参数2,...> <返回类型><类名><类型名表>::<成员函数1>(形参表) { //成员函数定义体} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |