目 录[A1]
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];
}
}
}
}
程序设计中构建图结构以及实现最短路径算法较难,经过参考资料以及不断测试解决了问题,从中更加深刻了解了最短路径算法的原理以及实现,体会到图论在日常生活中的应用。
数据结构:C++语言版/邓俊辉编著.—3版.—北京:清华大学出版社,2013清华大学计算机系列教程