【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;
    }

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

【C++】步步为营之综合应用_第1张图片

 已有的代码我们可以获取的信息有:
 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++,还是个问题啊。  



你可能感兴趣的:(C++)