第二次博客作业

C++课程学习阶段总结:

 

经历了三个多月的C++课程学习之后,我在编程基础和编程思想上收获了许多,学到了挺多,逐渐形成了简单的编程思维,但同时也发现了自己的许多不足和存在的问题。(中段测试成绩:得分77分。新手赛成绩:解决5题。)

 

1.  目前自己学习中存在的薄弱的知识点具体有哪些?每个薄弱的知识点都是如何获知的,每个薄弱的知识点需要列举具体的例子说明。

首先,通过中段测试以及平时的作业和课堂小测,我发现我在做选择题判断题这些客观小题的时候无法达到比较高的正确率,例如中段测试中选择题就扣了8分。这个问题反映出我对基础知识点的掌握还不到位,概念不够清晰,导致做客观小题时正确率不高。我反思了一下,这是由于我平时只注重做编程大题,只注重打代码编程,而忽略了课本上最基本的概念和定义,所以往往在做选择题和判断题的时候丢分严重。

 

例如中段测试的选择题第四题,题目要求选出正确的说法,而A、B两个选项十分相似(A. 内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方。 B. 内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方。)看似就一词只差,但实际可谓天差地别。而我随便看了A选项感觉很有道理马上就选择了A这个错误答案,说明我没有真正地掌握内联函数的定义和概念,它是在编译的时候,才将该函数的目标代码插入每个调用该函数的地方。编译和运行是两个完全不同的阶段。

 

通过这一题就说明了我对基础知识点概念模糊不清。而在期末考中,选择题和判断题这些客观小题也尤其重要!因此,接下来不到一个月的复习时间,我会认真的翻开课本,重新从第一章到现在所学章节,仔细的浏览一边课本,一切一切一切基础概念都源于课本!课本真的很重要,我必须得安排好计划好好地过一遍课本才能对基础知识有更牢固的掌握。

 

其次,我在做编程大题的时候效率低下,速度过慢!正如别人在新手赛都做了七八题,而我只解决了5题,一直卡在第六题。平时的PTA作业我完成时间也过长。我觉得这个问题源于我平时做PTA编程大题的时候,注意力不够集中,思想不够专注,总是做一下休息一下,导致我思维过慢。因此,我在今后的编程题作业中,必须抽出一段空闲时间来,专注的去解决问题,并且给自己一个时间限制,通过这种方法来不断锻炼,提高自己的思维和解题效率,让自己能够更加高效专注地解决编程问题。

 

另外,我对数组部分的二维数组的掌握一直不是很牢固,在指针部分面对二维数组的时候也比较模糊。比如PTA中cpp18-练习9的编程题第一题,我难以想到去定义一个二维数组,通过二维数组的行来表示出第一次第二次等的repeat,然后通过二维数组的列来表示每一次repeat的各个数字。我应该认真的好好看一下课本上二维数组部分的定义和例题,在转到指向二维数组的指针的部分,相互对比起来理解,多理解一下课本的例题,并且自己多试着定义二维数组和指向二维数组的指针,熟练掌握如何定义、初始化等一系列的问题。

 

 

 

 

 

2.  编程题举例:

Cpp18-练习10中编程题第四题:

(1)题目大意:任意输入三个字符串,将三个字符数组的指针传递给被调函数,通过函数给三个数组从小到大排序并在主函数中输出。

 

(2)解题思路:

a. 主函数思路:

1. 定义三个字符串数。2. 输入三个字符串数组。3. 调用函数,并以三个数组的数组名做实际参数。4. 输出三个经过函数排序后的数组。

 

###可以看出,主函数的思路是比较简单的,关键就是调用函数部分的思路。###

 

b. 调用函数思路:

三个字符串比较,先比较字符串m1和m2,有三种情况:m1=m2 , m1>m2 , m1

 

情况1:m1=m2时,有以下几种情况:m1=m2m3(此时交换m1和m3)。

 

情况2:m1m3(此时m2最大,再比较m1和m3,有这几种情况,m1

 

情况3:m1>m2时,有以下几种情况:m1>m2>m3(需要交换m1和m3)、m1>m2=m3(需要交换m1和m3)、m1>m2m3>m2,需要多次换值;m1=m3>m2,需要交换m1和m2;m3>m1>m2,需要交换m1和m2)。

 

可见,这道题情况比较多,比较复杂,我们需要耐心细心的把每一种情况列举出来,再将其转换成编程语言,才能做到不重不漏。

 

(3)代码思路

#include

#include

using namespace std;

 

void swap(char *m1, char *m2, char *m3)

{

        char t[100];

        //strcmp相等为 0,第一个大为 1,第二个大为 -1

       

        if(strcmp(m1,m2)>0 && strcmp(m1,m3)<0 && strcmp(m2,m3)<0)

        {strcpy(t,m1); strcpy(m1,m2); strcpy(m2,t);}//交换 m1 和 m2

       

        if(strcmp(m1,m2)==0)

           if(strcmp(m2,m3)>0)// m1 = m2 > m3

              {strcpy(t,m1); strcpy(m1,m3); strcpy(m3,t);}//交换 m1 和 m3

       

        if(strcmp(m1,m2)<0)

        {

                 if(strcmp(m1,m3)==0)// m2 > m1 = m3

            {strcpy(t,m2); strcpy(m2,m3); strcpy(m3,t);}//交换 m2 和 m3

            if(strcmp(m1,m3)>0)// m2 > m1 > m3

            {strcpy(t,m1);strcpy(m1,m3);strcpy(m3,m2);strcpy(m2,t);}

            if(strcmp(m1,m3)<0)

               if(strcmp(m2,m3)>0)

               {strcpy(t,m2); strcpy(m2,m3); strcpy(m3,t);}//交换 m2 和 m3

        }

  

           

    if(strcmp(m1,m2)>0)

    {

    if(strcmp(m2,m3)>=0)//m1 > m2 > m3 或 m1 > m2 = m3 

        {strcpy(t,m1); strcpy(m1,m3); strcpy(m3,t);}//交换 m1 和 m3

       

        if(strcmp(m2,m3)<0)//再比较 m1 和 m3

                 {

                         if(strcmp(m1,m3)==0)//m1 = m3 > m2

                         {strcpy(t,m1); strcpy(m1,m3); strcpy(m3,t);}//交换 m1 和 m3

                         if(strcmp(m1,m3)>0)//m1 > m3 > m2

                         {strcpy(t,m1);strcpy(m1,m2);strcpy(m2,m3);strcpy(m3,t);}

                        

                 }

        

        }

       

}

 

 

int main()

{

        char str1[100],str2[100],str3[100];

        cin>>str1>>str2>>str3;

        swap(str1,str2,str3);

        cout<

                

       

        return 0;

 }

 

详细思路已经在(2)中详细地说明了,关键在于调用函数的编写,分多种情况讨论。

 

(4)核心技术总结

核心技术有:if条件判断结构的使用、字符串处理函数的使用、指向一维数组的指针的使用。

 

(5)解题中存在的问题及解决方法

解题中,我初次编写代码结束后,部分数据能够通过测试,但部分数据不可以,说明了我还是在编写调用函数的时候,遗漏了一些可能产生的情况,因此我在草稿纸上重新将每一种情况一一列举出来,先比较字符串m1和m2,再比较m2和m3,将每一种情况列举,并且将每一种情况对应的处理方法写下来,找到了我在第一次编写代码时候遗漏的情况,从而解决了问题。

 

 

以上是我在学习了三个多月C++课程后的一些总结,感谢垂阅!

你可能感兴趣的:(第二次博客作业)