《数据结构》之实验一《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>(形参表)

{   //成员函数定义体}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值