《数据结构》之实验一《VC编程工具的灵活使用》

前端之家收集整理的这篇文章主要介绍了《数据结构》之实验一《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>(形参表)

{ //成员函数定义体}

猜你在找的数据结构相关文章