20165207 学习基础与C语言基础调查反馈

文章阅读体会与学习调查反馈

文章阅读体会

我在娄老师的文章里了解到了“做中学”的概念。并且通过娄老师慷慨地分享的相关经验,我对于它有了进一步的理解以及体会。以下是我收获以及我的感想。
“做中学”的概念是指通过对于一个技能的相关套路的反复练习最终达到对于这一技能熟练掌握的目的。并且除去反复练习或者说实践这一核心内容之外,做中学还有其他例如思考、深入练习、反馈等等要点。具体操作过程中,还要结合所学知识的具体特点。
我对于文章的感想难以用一句话来加以概括。我的第一反应是这才是真正熟练掌握一项技能的正确方法。回想起来这种方法于我们而言又并非全新,至少我经历的一些学习过程就与之有许多共通之处。比如,在一些理科科目中为了增强解题能力主动地去寻找题目去练习的过程,还有在做电工学相关实验为了能够掌握几种特定实验仪器的使用方法反复到实验室去做练习。这些例子虽然不胜枚举,但是我也发现我从未对一个成功的学习过程以及经验像娄老师这样加以概括。所以有了老师在文章中对于做中学经验的总结的指导,我觉得今后的实践学习我更能有熟练掌握某一技能的信心与能力。

学习基础与C语言基础情况反馈

  • 这第一个问题简直让我倍感囊中羞涩,思来想去我能够做得比90%的人都好的一项技能就只有剥橘子皮了。而且我还甚是难以将其形象地描述,大概就是我能够流利地将一整只橘子的外皮快速而不间断地用手剥成一个螺旋的条形。
  • 这个技能我成功的经验大体上可以归结为两点。首先是我对于整齐或者说整洁的近乎于强迫症的追求。其次是我对于吃橘子的喜爱。当然我想我需要解释一下。小时候我吃橘子经常把橘子皮剥成碎碎的一片一片。看起来杂乱无章的碎橘子皮完全的失去了整齐的美感。后来我想出了把橘子皮剥成整齐而又美丽的螺旋条形的点子(当然这受到了削苹果皮的启发)。并且由于我对于橘子的痴迷,我才能得到反复练习剥橘子皮的机会。最终,我得以如愿以偿地把橘子皮整齐而流利地用手剥成螺旋的条形。
  • 至于共通之处,我觉得有两个地方,分别是需求以及练习。我希望剥下来的橘子皮整齐美观,这可以归结为一种需求,虽然并不高大上,但或许还是可以和老师在博客中所写的五笔打字和减重的需求类比。这个需求正是推动我不断练习勇敢面对失败的诱因。其次,不断的练习让我实际操作的技能与我的需求越来越近。我就是在这两点的相互作用之下熟练地掌握了剥橘子皮这个我唯一超过90%的人的技能。
  • C语言学习调查
    • 我是通过教材和在图书馆借阅参考书学习理论知识理解里面的代码之后,再在作业系统庞大的题库里进行练习来进行C语言的学习的。至于经验,我觉得最重要的一点就是反复的练习。对未知内容的抵触从来没有帮我获得任何C语言方面的能力,只有反复的练习才让我获得了预期的效果。教训我得到了两点,一是对于更困难内容的尝试二是时间的分配。C语言作业系统的题库是分级别的,回想起来我的脚步从来没有到达极难题那里,甚至说到达中等题就止步了。多做几道困难题并且试一试极难题一定会让我达到另一个高度,可惜我并没有去尝试。另外大一下学期课程很多,不乏有一些特别困难的科目。分配时间时我没能够给C语言足够的时间。尽管大一下学期我有的科目得了满分或者是第一,可唯独C语言没能到达那样的水平。
    • 上一篇博客中我估算我写过3500行左右的有效的代码。因为这个行数是通过作业管理系统分数估算的,作业管理系统有得分我便认为有效。所以,我也有理由认为这些代码我理解了绝大部分。我个人认为达到质变之后,我之前量变的积累才能够被赋予意义。所以我觉得平衡二者间关系就是一定要达到我期望达到的那个质变。
    • 这几个概念我可以分得清楚。数组指针的本质是指针,它是指向数组首地址的指针型变量。指针数组的本质是数组,这个数组的元素是指针型变量。函数指针的本质是函数,它所指向的是某一函数的入口。指针函数的本质是一个函数,它叫这个是因为它的返回值是指针型变量。
    • 文件和流的问题我不能够回答的特别清晰。我印象中文件是相对静态的概念,流是一个相对动态的概念。流是由于对文件的读取和写入产生。文本文件每个字节都用来保存ASCII码,表示对应的字符。二进制文件保存的是二进制编码不是ASCII码。这两种文件的操作,因为期末不要求掌握,我做的练习少之又少,现在已经完全忘掉了。
    • 面向过程程序设计解决问题时的侧重点是解决问题的方法或者说过程。它解决问题的方法我理解就是先有了解法或者说算法流程图,然后自顶向下、逐步细化的一个过程。
    • 我理解的C语言中的模块就是函数或者完成了某个功能的一段语句。我没有写过多个源文件的程序。
    • 在上网查阅资料之前我并不理解高内聚低耦合的概念。我刚刚才搜索到这个原则的解释,对于将其应用到高质量程序设计中并没有我个人的见解也并不想搬运网络上的信息。
    • 下面的程序中有四个函数分别实现要求的数组复制、查找整数5、升序排序、降序排序。查找使用线性查找,排序方法使用冒泡排序法。
#include <stdio.h>
#include <stdlib.h>
#define N 50
int input(int a[]);             /*向数组中输入数据并记录数据个数函数原型*/
void findfive(int a[],int n);   /*查找整数组中有没有5函数原型*/
void asc(int a[],int n);        /*升序排序函数原型*/
void desc(int a[],int n);       /*降序排序函数原型*/
void cpy(int a[],int b[],int n);/*将数组a的内容复制到数组b中函数原型*/
int main()
{
    int n,s;
    int a[N],b[N];
    n=input(a);

    printf("将a中内容复制到b? 1\n");
    printf("查找a中有没有5?   2\n");
    printf("升序排序a?        3\n");
    printf("降序排序a?        4\n");

    do
       scanf("%d",&s);
    while(s!=1&&s!=2&&s!=3&&s!=4);

    if(s==1)
        cpy(a,b,n);
    else if(s==2)
        findfive(a,n);
    else if(s==3)
        asc(a,n);
    else if(s==4)
        desc(a,n);
    return 0;
}

int input(int a[])
{
    int i=-1;
    printf("向数组中输入数据,输入负数停止\n");
    do
    {
        i++;
        scanf("%d",&a[i]);
    }
    while(a[i]>=0);
    printf("共输入%d\n",i);
    return i;
}

void cpy(int a[],int b[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        b[i]=a[i];
    }
}

void findfive(int a[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        if(a[i]==5)
        {
            printf("有5\n");
            break;
        }
    }
    if(i==n) printf("没5\n");
}

void asc(int a[],int n)
{
    int i,j,t;
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(a[j]<a[i])
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
        }
    }
    printf("结果:");
    for(i=0;i<n;i++)
    {
        printf("%d ",a[i]);
    }
}

void desc(int a[],int n)
{
    int i,j,t;
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(a[j]>a[i])
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
        }
    }
    printf("结果:");
    for(i=0;i<n;i++)
    {
        printf("%d ",a[i]);
    }
}
  • 我没能成功编出来一个能够统计代码行数的程序。之前我想通过getchar函数的返回值来计算回车的个数。但是我没能想出来一个好的办法判断程序终止,之前我尝试用EOF表示但是需要手动敲击F6。开学之后我会积极与老师和同学沟通,寻找我自己程序中的问题以及这个问题的正确解决方法。

  • 断点是程序调试过程中暂停的地方,断点之前的所有语句得以执行,到达断点之后执行暂停,以进行其他的调试操作。下图是对刚才不成功的统计代码行数程序进行断点调试的图片

  • 在阅读老师的博客怎样快速阅读一本书,并快速阅读蓝墨云班课中每章的PPT之后。我有如下现存的问题(由于阅读仓促并且我思考的并不深入部分问题质量或许不高):

    • 第一章中,我看到关于使用javap指令进行反编译的内容。我对于反编译这个新名词的用途产生了疑惑。在网络上,我查阅的资料将反编译解释为将.class文件转换为.java文件,以阅读代码。根据我学习C语言的经历,一个项目的文件夹总是会有main.c文件,通过这个文件就能够阅读代码。所以仅仅通过这些我依旧存在的困惑是在java编译生成.class之后.java文件是否被删除掉了。
    • 第二章中,我的疑惑在于引用型的数组变量的赋值操作。但在查阅资料和思考之后,我认识到这种赋值操作的关键在于被赋值数组中存放的引用的改变。之前的以后可以说是解决了。
    • 第三章的PPT我阅读到switch开关语句中break语句是是可选的。但根据以往的经验以及相关资料的解释,我认为不加break语句会出现问题。所以我仍然存在的疑惑依旧是这个可选的的解释。
    • 第四章中我有一个没能通过PPT解决的疑惑。我没能弄清楚除了static关键字之外实例成员变量和类变量之间究竟有何深层次的区别。
    • 第五章的我想要提的问题在抽象类一部分。我并没有开始这一方面实践操作,我很想知道怎样给一个抽象的行为标准加入一个具体的内容。比如说例题里的对于女朋友的标准有cooking运行之后却能够显示“roast beef”。
    • 第六章的PPT内容,经过快速阅读我想了解的内容是为何接口之中不能有变量而abstract中却可以有,除了规定之外是否有更为深层次的原因。
    • 对于第七章的断言语句,为什么它能够被保留在源代码中。因为从我以往的印象来思考,代码中的语句一定会被执行除了注释之外。所以我想了解它是如何将其关闭之后保留在源代码之中不被执行的。
    • 第八章中我的疑惑是适合使用string类和string buffer类的场合。这个问题其实在开学之后的练习过程我应该能够自己解决。
    • 我发现第九章中涉及到许多java swing组件以及各种事件处理器的使用。仅仅通过快速阅读,我没能够想出有质量的问题。
    • 第十章的PPT中有关于文件锁的操作,我想知道其作用以及是否必要。
    • 第十一章由于我缺少数据库的相关知识,仅仅通过快速浏览PPT我仍旧无法想到有价值的问题。
    • 第十二章的PPT我阅读到了目标对象与线程之间的关系之中完全解耦的关系,我的疑惑在于如果能够完全解耦那么目标对象的所谓目标以及目标对象本身的定义究竟是什么。我并没有在网络上得到一个想要的解释。
    • 之后三章的PPT在阅读之后,我想不出什么有价值的问题了。我想在开学后,有了课程的基础以及数据库的方面的知识再深入地进行思考。
  • 对于课程的学习目标我觉得我应该至少在期末之前深入理解并实践操作过教材上每个地方的知识。另外,我觉得刻意训练提高程序设计能力的关键在于平时练习难度的加深。这也就意味着不能停留在自己习惯或者说适应的那一部分内容要不断超越原有的水平。

posted @ 2018-02-01 13:30  ltl0501  阅读(201)  评论(2编辑  收藏  举报