20165203 学习基础和C语言基础调查

一、技能学习经验及体会

对于课外技能来说,我对很多领域都略知一二,但涉足不深,例如体育领域、摄影领域、绘画领域、书法领域等等,我所能拿得出手的就是体育领域的乒乓球了。娄老师的作业题目让我的思绪又回到了自己初学乒乓球时期。我认为自己的乒乓球学习经历无论是在身体上还是精神上都给我不小的帮助,我也很愿意和大家分享一下。

其实我的乒乓球说是“超过90%以上”的人那肯定是不可能的,在乒乓球如此盛行的中国,我也只不过是茫茫乒乓球爱好者中的沧海一粟。2008年,当看到北京奥运会的乒乓球比赛转播时,自己对这个小球产生了浓厚的兴趣,况且自己身体柔柔弱弱,为了使自己能强壮,也为了丰富了自己的课余生活,更重要的是满足自己的兴趣,我开始了自己的乒乓球经历。起初,教练让我们练习基本功,因为自己乒乓球起步较晚(大概是小学4年级),所以,自己必须要付出更大的努力才行,在假期一天挥拍上万次,对着镜子练习是假期常有的事,自己如今还记得在手臂上绑上弹簧绳同时将弹簧绳固定在墙壁上,以此既练习了力量,也增强了肌肉记忆。基本功练了一段时间,教练开始让我们分组练习,在练习过程中教练予以指导,也会指出你的长处和弱点。大量练习中我也发现自己身体条件并不是很好,正拍进攻力量不足,但优点是自己反拍稳定性好,脚步能快速到位,进入状态较快,一个典型的防守反击型球手。在接下来的训练中自己也着重提高自己的防守稳定性,并加强力量训练,加强进攻能力。慢慢地,自己的打球风格就是攻防兼备,起初通过防守观察对方的进攻特点,并在防守中通过击球节奏的变化破坏对方的击球节奏或是抓住对方回球质量不高的机会绝地反击。至今很多跟我打过球的同学都说,乍一看我力量不足,可打球时我很难缠,密不透风的防守,出色的远台进攻,并善于观察球路,思考对策,说我比赛并不仅仅用球技,还用智慧。教练的点评也是我的打球稳定,球商较高,善于观察。后来,到了中学尽管学习任务重了,打球的机会少了很多,但乒乓球依然是我的一大爱好,它让我强健了体魄,并改掉了很多生活上的坏习惯,同时通过打球结交了很多朋友,丰富了自己的朋友圈。无论到哪儿,乒乓球一直陪伴着我。

通过乒乓球学习,我也体会到,就像娄老师在自己的乒乓球学习经验中提到的那样,自己一定要跟学习区(在此也就是指乒乓球圈子)里和高手(比如和53班的孙同学)过招,自己才能进步;并且打球也要常思考,获得有效的反馈;当然还要高度集中注意力。我的乒乓球学习经验是

  • 对自己有充分的了解,了解自己的长处和短处。
  • 针对自己的短处多加练习,长处继续发扬。
  • 在与别人打球时一定要观察对方的长处和特点。这样做的好处之一是体会打法的多样化,这才是乒乓球的魅力所在,还有++取长补短++。
  • 多加练习并思考,在实践中暴露出来的问题自己的印象会更深,并且有迫切解决它的动力。
  • 每打一次要多加总结自己做的好的地方和出现的问题。
    学习任何东西都有相通之处,就是要思考,还要分层次训练,将所要学习的内容分成几个板块,一块一块地学习,其次,就是要多加练习,有了大量的练习量,量变才能引起质变。还有,练习也不是盲目的,要++有针对的练习++,针对自己要提升的地方着重练习,这样才能提升练习的效果。最后,练习要有反馈,要有总结,总结自己在每次练习中学到的东西,这样才能学有收获。

二、C语言学习调查

1.你是怎么学习C语言的?(作业,实验,教材,其他),与你的高超技能相比,C语言的学习有什么经验和教训?
  • 我学习C语言靠老师讲课自学两部分。起初接触C语言时,因为自己在计算机方面涉足不深,很多名词都不太熟悉,听老师讲课时也很吃力。于是,自己就在课下时自己阅读学习教材,同时,结合了一下网课——腾讯课堂中的C语言编程,自己不懂的名词就在百度上查找,每学完一章节要总结一下自己学的东西,然后每天在作业系统上练习几道题,不懂的就找同学一起来探讨。但是,自己在学习C语言的过程中,始终未占据主动地位,课上效率极低,课下练习不够,一直停留在作业系统上的题型解决就可以的层面,未曾深入探究C语言的用途。与乒乓球相比,自己没有及时总结每次练习时的经验教训,也没有根据自己的特点制定适合自己的学习计划。其实,自己没有根据C语言自身的特点制定适合的学习计划,自己在学习时,总以为自己了解了书本知识就会了,忽略了学习编程语言需要在做中学,并在课下加大练习。相信有了C语言的教训之后,Java学习时能深刻体会到做中学,取得理想的效果。
2.目前为止估算自己写过多少行C代码?理解的情况如何?量变引起质变,如何平衡质和量?
  • 目前为止自己也就写了2000大几不到3000行的代码,写代码的高峰期聚集于大一下学习C语言的时期和大一的暑假准备计算机二级考试时期。自己因为没有及时复习,只是明白当时写的代码,经过这么长时间,早已忘的一干二净。自己也深知,自己的天资并不聪慧,要想到达自己想要的高度,必须在一开始就把基础打牢,要想让自己的水平长时间维持在自己想要的水平线上,就必须保持练习,经常接触,那样自己才不会对它陌生。

  • 量变引起质变是亘古不变的真理。对于量和质,我认为每个人特点不同,平衡关系自然是不同的。如何要用比例去衡量它的话,拿我自身来说,量和质的关系大概为3:1或4:1,要想取得理想的效果,大量的努力是必须的。所以,具体到程序学习上来说,大量基础知识点和基本练习即是量,具体到更复杂,用途更高级的程序即是质。大量的练习是自己到达更高台阶的垫脚石。

3.学过了C语言,你分的清数组指针,指针数组;函数指针,指针函数这些概念吗?

-** 指针数组**:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。

  • 数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。

  • 详细见指针数组&数组指针

  • 指针函数是指带指针的函数,即本质是一个函数。

  • 函数指针是指向函数的指针变量,即本质是一个指针变量。

  • 具体见指针函数&函数指针

4.学过了C语言,你明白文件和流的区别和联系吗?如何区分文本文件和二进制文件?如何编程操作这两种文件?

不好意思,没有接触过。不过,我查到了相关资料

  • 文件的一种,或者说是的派生,主要指存放于硬存储器的二进制序列。(结合
    文件&流
  • 文本文件和二进制文件,该博客中详细介绍了这两种文件,以及编程操作这两种文件的区别。
5.学过了C语言,你知道什么叫面向过程程序设计吗?它解决问题的方法是什么?

面向过程是一种以++过程++为中心的编程思想,是以什么正在发生为主要目标进行编程。一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思想方法。比如拿学生早上起来这件事说明面向过程,粗略的可以将过程拟为:(1)起床(2)穿衣(3)洗脸刷牙(4)去学校,而这4步就是一步一步地完成,它的顺序很重要,你只需要一个一个地实现就行了。

6.在C语言里面,什么是模块?你写过多个源文件的程序吗?

我认为,C语言中的模块就是将程序根据功能分成几个部分,然后再一块一块儿的调用,函数的利用就是一个很好的例子。遗憾,没有写过多个源文件的程序。

7.学过了C语言,你知道什么是“高内聚,低耦合”吗?这个原则如何应用到高质量程序设计中?

学艺不精,不过,我查到了一些资料,从资料的介绍来看,“高内聚,低耦合”的意思为增强模块内部代码的功能,减少模块间数据接口的复杂程度。因为多模块程序我只编过函数程序,对于这样的程序我的理解大概是增强函数内部代码的相关性,减少函数接口的复杂程度。

8.学过了C语言,你如何把数组A的内容复制到数组B中?如何查找整数数组A中有没有数字5?如何对整数数组A进行排序(从小到大,从大到小)?写出相应的程序。

#include <stdio.h>
#include <stdlib.h>
#define N 100
void find5(int a[], int n);
void max(int a[], int n);
void min(int a[], int n);
int main()
{
    int a[N],b[N];
    int i,n;
    printf("How many numbers do you want to put in?\n");
    scanf("%d",&n);
    if(n>100)
    {
        printf("Too many!\n");
    }
    else
    {
        printf("Please input some number in a:\n");
        for(i=0; i<n; i++)
        {
            scanf("%d", &a[i]);//输入整数到数组a
        }
        for(i=0; i<n; i++)
        {
            b[i] = a[i];//将数组a中的数复制到数组b中
            printf("%d\n",b[i]);//输出数组b中的数
        }
        find5(a, n);//查找数组a中是否有5
        max(a,n);//从大到小排序
        min(a,n);//从小到大排序
    }
}
void find5(int a[], int n)//查找数组a中是否有5
{
    int  i;
    for(i=0; i<n;)
    {
        if(a[i]==5)
        {
            printf("Yes.\n");
            break;
        }
        else
        {
           i++;
        }
    }
    if(i==n)
    {
        printf("No.\n");
    }
}
void max(int a[], int n)//从大到小排序
{
    int i,j,temp;
    for(i=0; a[i] != NULL; i++)
    {
        for(j=i+1; a[j] != NULL;j++)
        {
            if(a[j]>a[i])
            {
                temp = a[j];
                a[j] = a[i];
                a[i] = temp;
            }
        }
    }
    printf("从大到小为:\n");
    for(i=0; i<n; i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");
}
void min(int a[], int n)//从小到大排序
{
    int i,j,temp;
    for(i=0; a[i] != NULL; i++)
    {
        for(j=i+1; a[j] != NULL;j++)
        {
            if(a[j]<a[i])
            {
                temp = a[j];
                a[j] = a[i];
                a[i] = temp;
            }
        }
    }
    printf("从小到大为:\n");
    for(i=0; i<n; i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");
}   

在上述程序中,我将老师给出的问题整合到一个程序里。

9.写一个程序,统计自己C语言共写了多少行代码。

不好意思,太复杂的程序不太会写。但是,上一题的程序是我写的,并且修饰了一下,但是排序法用的是较简单的选择法排序,而且上述程序有很多不太好的地方,学艺不精,敬请见谅。上一题是一次非常有意义的练习,这次练习让我回忆起C语言很多知识。

10.你知道什么是断点吗?给出自己调试程序的例子。

断点就是程序中断的地方。在某行代码处设置断点后,调试程序时,程序运行到该行代码时会自动停止,然后就可以在这进行逐步调试。

大一时,程序中设置循环时,如果出问题可以用用断点调试找出问题的原因。

11.对比C语言的学习,你对《Java程序设计》的学习有什么具体目标?如何通过刻意训练提高程序设计能力和培养计算思维?如何通过“做中学”实现你的目标?
  • 通过对比C语言的学习,我认为对Java的学习要对自己有更高的要求,不能仅仅停留在解决基本问题上,要有更深一层次的理解,掌握它的思维设计方法,同时自己可以尝试解决更复杂的问题。要说具体的目标,最近的当然是在测试或考试中取得好成绩,进一步,希望自己的Java学习可以在下学期的大创中很好地帮助自己,更进一步,希望Java学习可以在自己今后的学习、工作和生活中成为自己一个很好的工具。

  • 平时可以对于具体的问题,多加练习,从每次练习中总结经验和方法。要想提高能力和培养计算思维,大量的练习和总结是必要的。

  • 就像娄老师在做中学说的那样,实践是必须的,但是实践的过程中必须要思考;还要刻意训练;并且,还要有反馈。所以,大量的练习Java编程是必要的,并且在每次练习中要思考,并有所收获,然后针对自己的强项多发扬,弱点多多巩固练习,并且,时常和老师同学们多多交流,最后,自己可以尝试探索并解决更深一步的问题。相信通过自己的努力,一定可以取得理想的效果,实现自己的目标。

posted @ 2018-02-01 17:29  I~Justice  阅读(185)  评论(4编辑  收藏  举报