c++课程设计实验报告

目    录[A1] 

1.题目A19................................................................................................................ 1

1.1 问题描述................................................................................................... 1

1.2 解题思路................................................................................................... 1

1.3 程序设计................................................................................................... 1

1.4 测试结果................................................................................................... 1

2.题目A34................................................................................................................ 1

2.1 问题描述................................................................................................... 1

2.2 解题思路................................................................................................... 1

2.3 程序设计................................................................................................... 1

2.4 测试结果................................................................................................... 2

3.题目A49................................................................................................................ 2

3.1 问题描述................................................................................................... 2

3.2 解题思路................................................................................................... 2

3.3 程序设计................................................................................................... 2

3.4 测试结果................................................................................................... 2

4.题目B10................................................................................................................ 2

4.1 问题描述................................................................................................... 2

4.2 解题思路................................................................................................... 2

4.3 程序设计................................................................................................... 3

4.4 测试结果................................................................................................... 3

5. 结论与心得......................................................................................................... 3

6. 参考文献............................................................................................................. 3

1.题目A19

1.1 问题描述

编写程序,从键盘输入两个整数分别赋值给变量a和b,将两个变量的值互换并输出。例如:a=1;b=2;  将变量值交换,使得a=2;b=1; 然后输出。

输出格式如图:

1.2 解题思路

把交换两个数的值封装为函数,使用引用类型参数传参以至于可以改变实参的值

1.3 程序设计

实现两个数值的交换

1.4 测试结果

#include<iostream>

using namespace std;

void Swap(int &a,int &b) {

    int temp = a;

    a = b;

    b = temp;

}

int main_A01() {

    cout << "变量值交换" << endl;

    cout << "请输入两个需要交换的数" << endl;

    int a, b;

    cin >> a;

    cin >> b;

    cout << "交换前" << endl;

    cout << "a=" << a << " b=" << b << endl;

    Swap(a, b);

    cout << "交换前" << endl;

    cout << "a=" << a << " b=" << b << endl;

    return 0;

}

2.题目A34

2.1 问题描述

编写程序,计算1到100之间的奇数的和(1+3+5+…+99)。

2.2 解题思路

定义类Sum,成员变量num为计算结果。成员函数sum()计算1到100之间的奇数的和并为num赋值。

2.3 程序设计

封装为类Sum,在类中实现计算功能及输出功能。

2.4 测试结果

#include<iostream>

using namespace std;

class Sum{

public:

        int num;

        void sum(){

                  for (int i = 1; i <= 100; i++) {

                

                        if (i % 2 != 0) {

                

                            num += i;

                

                        }

                

                     }

        }

        void print(){

                     cout << "1+3+5+...+99= " << num << endl;

        }

        Sum(int num=0){

                 this->num=num;

        }

       

};

int main(){

        Sum s(0);

        s.sum();

        s.print();

        return 0;

}

3.题目A53

3.1 问题描述                    

设计一个findmax函数,该函数能寻找数组中的最大元素,将该元素的下标通过参数返回,函数返回值为其地址值。

3.2 解题思路

在该函数的参数有整数指针array用来传入数组,整型len传入数组长度,整型引用类型index

利用for遍历数组需求最大值,并及时修改index

3.3 程序设计

     完成函数findmax功能

3.4 测试结果

int* findmax(int* array, int len, int& index) {

        int max = INT_MIN;

        for (int i = 0; i < len; i++) {

                 if (array[i] > max) {

                         index = i;

                 }

        }

        int* a = &array[index];

        return a;

}

4.题目B10

4.1 问题描述                    

地铁自动售票机系统

题目描述:地铁是当今城市较为流行的一种铁路运输的形式,地铁能避免城市地面拥挤,

         充分利用空间,具有运量大、准时、正点率较其他公交高、速度快等优点。

         请设计一个简易的地铁自动售票机系统。

功能需求:

(1) 设计一个地铁路线类Router,包含路线编号,途中的各个站点。

(2) 设计一个地图类Map,可以显示所有可以乘坐的地铁站名,以及线路信息。

(3) 根据用户输入的起点和终点和人次信息,可以自动计算应付金额;

    根据用户输入的金额,计算找零信息;

4.2 解题思路

        (1)、包含路线及站点故用图来储存数据

    (2)、使用最短路径算法来计算站点与站点之间的最小金额(最小距离)

4.3 程序设计

    (1)、Router类为路线类,包含路线的距离

    (2)、Point类为站点类,包含站点的名称、优先级、状态

    (3)、Map类为图类,包含图的矩阵表示以及计算最短路径的函数

4.4 测试结果

        (1)、测试方法:在func()函数中录入数据并且进行各个功能的测试

    (2)、关键功能测试过程及结果:

        (3)、关键代码:

void Map::Dijkstra(Point s) {//更新全图站点的全部离s的最短路径:并且赋值在priority上

        s.priority = 0;

        //status(s) = VISITED; parent(s) = -1;

        for (int i = 0; i < P.size(); i++) { //共需引入n个顶点和n-1条边

                 //搜索站点s所在数组中的i:P[i][]

                 int index = 0;//记录站点s的下标

                 for (int k = 1; k < R.size(); k++) {

                         if (R.at(k).name == s.name) {

                                  index = k;

                                  break;

                         }

                 }

                 this->R.at(index).status = true;

                 //status(s) = VISITED;

                 for (int j = 1; j < R.size(); j++)  { //枚举s的所有邻居j

                         if (data(s, R[j]) == INT_MAX) {

                                  continue;

                         }

                         if ((status(R[j]) ==false) && (this->R[j].priority > s.priority + data(s, R[j]))){ //对邻接顶点j做松弛

                                  this->R[j].priority = s.priority + data(s, R[j]);//更新s邻居的优先级

                         }

                 }

                 for (int shortest = INT_MAX, n = 1; n < R.size(); n++) { //选出下一最近顶点

                         if ((status(R[n]) == false) && (shortest > R[n].priority)){

                                  shortest = R[n].priority;

                                  s = R[n];

                         }

                 }

        }

}

  1. 结论与心得

程序设计中构建图结构以及实现最短路径算法较难,经过参考资料以及不断测试解决了问题,从中更加深刻了解了最短路径算法的原理以及实现,体会到图论在日常生活中的应用。

  1. 参考文献

数据结构:C++语言版/邓俊辉编著.—3版.—北京:清华大学出版社,2013清华大学计算机系列教程


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值