【C++】步步为营之综合应用

简介:
	在开学初,开始进入C++的做题阶段。听已经考过一次C++的同学说,要通过考试,就是需要做题;而且直接从三道大题入手,最后一个综合应用题也不能放弃。
	做了几套大题下来,发现前两种类型(改错题、基本操作题)做多了慢慢就越来越有感觉了,而且每次出题的立意也就是来回的几个换。这篇博客是从最后一题入手,总结一些类型的题目,给自己积累一些知识,大家也可做个参考。
	在别人告诉自己最后一题不能放弃之后,我就勇敢地去面对了几套题,下面就一类一类的总结一下:
	一.字符交换位置
	这一类题其实就是实现将一段字符串中的第一个字符与最后一个字符交换位置,第二个字符与倒数第二个字符交换位置,以此类推。
	a.如果题目中已经定义好字符串的长度,下面只需要做的是通过一个循环和一个中间变量进行位置交换。	

int i,j  '定义两个整数,分别表示相互对应的两个位置
'编写循环条件,for语句
for(int i=0,j=length-1;i<j;i++,j--)
'数组的下标从零开始,所以最后应该为总个数-1
'两个值交换位置,添加一个中间变量,以便赋值
{
char temp=str[i];
'将j位置上的字符与i位置上的字符交换
str[i]=str[j];
str[j]=temp;
}
	b.如果题目中没有定义字符串长度,那么开始就应该先定义一个变量去获取字符串的长度。

int length = strlen(str); '字符串的长度
for (int i = 0, j = length -1; i < j; i++, j--) 
{ 
    char temp = str[i]; 
    str[i] = str[j]; 
    str[j] = temp; 
}
	二.按从小到大的顺序排序(冒泡排序法)
	这一类题就是排序,而冒泡排序是一种比较简单的方法。如果理解了,其实也没有很难下手的。
	在编写代码之前,先简单回顾一下冒泡排序实现的思想是怎样的。比如现在我要对以下数据进行排序:
	10 3 8 0 6 9 2
	当使用冒泡排序进行升序排序时,排序的步骤是这样的:
	3 10 8 0 6 9 2  // 10和3进行对比,10>3,交换位置
	3 8 10 0 6 9 2  // 10再和8进行对比,10>8,交换位置
	3 8 0 10 6 9 2  // 10再和0进行对比,10>0,交换位置
	……
	3 8 0 6 9 2 10  // 这个时候,10到达了最右边,是最大的数字,此时,我们在从头开始进行对比
	3 8 0 6 9 2 10  // 3小于8,所以不用交换位置
	3 0 8 6 9 2 10  // 8大于0,所以交换位置
	……
	0 2 3 6 8 9 10
	很简单,就是让大数沉入下面,小数慢慢上浮起来。
	下面是具体实现的核心代码:	

for(int i=0;i<length;++i)
    for(int j=i;j<length;++j)
    if  (d[i]>d[j])
    {
        char temp=d[i];
        d[i]=d[j];
        d[j]=temp;
    }
	.运算符重载
	我认为这一类题的核心就在于两个值,如何表示需要进行运算符重载操作的两个值。其中的一个肯定来自于构造函数下初始化的值,而另一个值,我们可以通过题目给我们写好的函数名获取,比如下面以重载+为类的函数,进行复数计算:
	运算符重载首先要理解被重载的运算符的含义,其次就是类的定义。
	下面一张图是题目完整的代码,中间空缺的地方就是需要我们编写的地方:

	已有的代码我们可以获取的信息有:
	1.类名:MiniComplex;
	2.属性名:realPart;imagPart;
	3.重载类名:otherComplex
	所以,表示两个值也就清楚简单了许多,具体代码如下:

MiniComplex MiniComplex::operator+ (const MiniComplex& otherComplex) const
{
//********333********
MiniComplex sum; 
sum.imagPart = this->imagPart + otherComplex.imagPart; 
sum.realPart = this->realPart + otherComplex.realPart; 
return sum; 
//********666********
}  
	四.一般函数
	这一类题目是根据题目要求,编写空缺的代码,以实现获取初识值、进行求面积、求和等计算。
学习心得:
	对于这么长时间以来的C++学习,不论是做题还是看书的角度去看,发现了自己对代码的亲和力还是不够的,刚开始几乎所有的操作题都是无从下手的。而在自己做过几套过后,才有了一些些改变。不过每次遇到新题,还是不会写代码,我想这可能也与C++是一门完全面向对象的编程语言有一定关系,之前一直都是面向过程的编程。C++,还是个问题啊。
	



目录
打赏
0
0
0
0
2
分享
相关文章
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
47 12
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
62 5
C++中的引用和指针:区别与应用
引用和指针在C++中都有其独特的优势和应用场景。引用更适合简洁、安全的代码,而指针提供了更大的灵活性和动态内存管理的能力。在实际编程中,根据需求选择适当的类型,能够编写出高效、可维护的代码。理解并正确使用这两种类型,是掌握C++编程的关键一步。
121 1
|
10月前
|
C++
C++中的封装、继承与多态:深入理解与应用
C++中的封装、继承与多态:深入理解与应用
220 1
C++多线程应用
【10月更文挑战第29天】C++ 中的多线程应用广泛,常见场景包括并行计算、网络编程中的并发服务器和图形用户界面(GUI)应用。通过多线程可以显著提升计算速度和响应能力。示例代码展示了如何使用 `pthread` 库创建和管理线程。注意事项包括数据同步与互斥、线程间通信和线程安全的类设计,以确保程序的正确性和稳定性。
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
110 2
|
6月前
|
【C++核心】函数的应用和提高详解
这篇文章详细讲解了C++函数的定义、调用、值传递、常见样式、声明、分文件编写以及函数提高的内容,包括函数默认参数、占位参数、重载等高级用法。
51 3
C++ STL应用宝典:高效处理数据的艺术与实战技巧大揭秘!
【8月更文挑战第22天】C++ STL(标准模板库)是一组高效的数据结构与算法集合,极大提升编程效率与代码可读性。它包括容器、迭代器、算法等组件。例如,统计文本中单词频率可用`std::map`和`std::ifstream`实现;对数据排序及找极值则可通过`std::vector`结合`std::sort`、`std::min/max_element`完成;而快速查找字符串则适合使用`std::set`配合其内置的`find`方法。这些示例展示了STL的强大功能,有助于编写简洁高效的代码。
86 2
【C++航海王:追寻罗杰的编程之路】哈希的应用——位图 | 布隆过滤器
【C++航海王:追寻罗杰的编程之路】哈希的应用——位图 | 布隆过滤器
56 1
Android c++ core guideline checker 应用
Android c++ core guideline checker 应用