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

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


技能

  我的一项拿得出手的技能是绘画,从 5 岁学到了 13 岁。 国画、素描、水粉、水彩都包括在内,虽然水平不一,但是绘画技巧是相通的。
  8 年时间,它带给了我很多,最重要的一点,就是对基本功的掌握。举个例子,我刚学国画的时候,赵XY老师让我们用小白云画同心圆,从最内圈开始不间断,直到画完最外圈,宣纸上要画满,每天最少一张。当然,前几张的圆都惨不忍睹,直到过了一个月左右,才好看些。赵老师的目的其实不是让我们练习画圆,而是让我们充分掌握毛笔的笔锋和手感,练的时间久了,这些自然就有了。这和娄老师博客中提到的是同样的道理:

套路(Kata)指针对某一种特定技术或技能进行重复性的练习,从而将其熟练掌握。这个概念借鉴于武术,指的是可以独自或多人共同练习的一系列动作、招式。
体育运动的初学者练习时候都需要重复动作,比如「学习打乒乓球时」要练习挥拍,挥拍成千上万遍之后动作就会定型,也就是教练常说的「肌肉有了记忆能力」,以后实战中可以不假思索地做出来。

-- 引用自娄老师优秀的教学方法---做教练与做中学

  但是如果没有兴趣作为驱动,也就不会有日复一日的练习。我的爷爷在我很小的时候,教我用毛笔画虾,兴趣大概就是从那时候培养起来的吧。
  说实话,我也有一段时间遇到瓶颈觉得坚持不下去了,有过放弃的念头,然而正如娄老师所说:

现实生活中,只有极少部分人有意志力能长时间大量重复枯燥的基础练习。半途而废是许多人都经常面临的事情。

-- 引用自娄老师做中学之乒乓球刻意训练一年总结
  能否从入门到精通,就看有没有毅力坚持下来,将量变积累成质变。 想成功又不去付出,是绝不可能的。

  此外,赵老师能给我的最大帮助,就是课上在我练习的时候能够及时纠正我手法上的错误。这也就是娄老师所说的及时反馈。我在画鸟雀时有个别人都不会出现的毛病,我画出来的所有鸟都长得一样>_<...后来在赵老师多次手把手的纠正下最终克服了。可以说,仅凭自己是很难做到的。

Java

  我认为学Java也应当如此。

  • 首先克服对 Java 的抵触心理
  • 简略看一下整本书大致要学的内容
  • 万事开头难,尝试编写第一个 hello world 程序
  • 继续学习之后的内容,对于每个知识点要反复练习
  • 出现问题要及时向老师或同学提问,直到问题得到解答

C语言基础

  • Q:你是怎么学习C语言的?(作业,实验,教材,其他),与你的高超技能相比,C语言的学习有什么经验和教训?
    A:去年寒假我买了一本C语言的书提前自学的,开学后又用教材、作业系统进行巩固。期间编写了2个版本的成绩管理系统,综合性很强,收获很大。C语言的学习就是反复练习的过程,当我们编写综合性强的程序时,很多语句都是不需要停下来动脑子想的,比如冒泡排序、结构体等。

  • Q:目前为止估算自己写过多少行C代码?理解的情况如何?量变引起质变,如何平衡质和量?
    A:我大概写过5000行以上的C代码。量变到达足够程度才能引起质变,但是要注意的是,一定要把握度,比如练习选择排序,当已经能够熟练运用时,就基本代表掌握了,不必再刻意的反复练习。我认为质变的标准是:能够在编写一个程序时不假思索的写出这些语句。

  • Q:学过了C语言,你分的清数组指针,指针数组;函数指针,指针函数这些概念吗?
    A:分得清啊。
    数组指针是一个指向数组的指针,本质是指针;
    数组指针:(* p)[数组大小]
    指针数组是一个包含若干个指针的数组,本质是数组;
    指针数组:* p[数组大小]
    函数指针是一个指向函数的指针,本质是指针;
    函数指针:(* p)(参数)
    指针函数是一个返回值为指针的函数,本质是函数。
    指针函数:* p(参数)

  • Q:学过了C语言,你明白文件和流的区别和联系吗?如何区分文本文件和二进制文件?如何编程操作这两种文件?
    A:程序在和文件交互时,是通过数据流的形式进行的。打开文件时,数据流先从磁盘到缓冲区,再从缓冲区到程序,关闭文件时正相反。
    文本文件是以某种常用字符编码方式编码的,定长的,比如 ASCII ;而二进制文件是用自定义的编码方式编码的,不定长,打开二进制文件会显示一堆乱码。但它们在物理层面上都是二进制编码。我没有实际操作过这两种文件......

  • Q:学过了C语言,你知道什么叫面向过程程序设计吗?它解决问题的方法是什么?
    A:C语言是面向过程的,而Java是面向对象的。
    举个例子:
    面向过程是定义三个事件:吃早饭、吃午饭、吃晚饭。再确定由 Bob 来做,也就是参数是 Bob ,重点是把过程写出来;
    面向对象是先定义 Bob ,再确定他要做什么,重点是这个对象怎么做。

  • Q:在C语言里面,什么是模块?你写过多个源文件的程序吗?
    A:模块就是能够实现一定功能的源文件。我还没有写过过个源文件的程序...

  • Q:学过了C语言,你知道什么是“高内聚,低耦合”吗?这个原则如何应用到高质量程序设计中?
    A:高内聚就是每个模块独立性强,所实现的功能具有专一性,内部各要素紧密结合;低耦合就是各个模块之间的联系弱,接口较为简单,相互影响程度小。

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

#include<stdio.h>
#include<string.h>
#define N 100
int main()
{
    char A[N]={"afisniuiksnfinai"},B[N];
    memcpy(B,A,strlen(A));
    printf("%s\n",B);
    return 0;
}

  2、查找整数数组A中有没有数字5

#include<stdio.h>
int main()
{
    int A[20]={3,7,4,1,8,223,65,23,65,8,5,32,78,12,16,861,34,5,57,19};
    int i;
    for(i=0;i<20;i++)
    {
        if(A[i]==5)
        {
            printf("数组中有 5 !\n");
            break;
        }
    }
    return 0;
}

3、对整数数组A进行排序(从小到大,从大到小)
冒泡排序

#include<stdio.h>
void Sortup(int N[]);
void Sortdown(int N[]);
int main()
{
    int i;
    int A[20]={3,7,4,1,8,223,65,23,65,8,5,32,78,12,16,861,34,5,57,19};
    Sortup(A);
    for(i=0;i<20;i++)
    {
        printf("%d ",A[i]);
    }
    Sortdown(A);
    for(i=0;i<20;i++)
    {
        printf("%d ",A[i]);
    }
    return 0;
}
void Sortup(int N[])
{
    int i,j,temp;
    for(i=0;i<20;i++)
    {
        for(j=i+1;j<20;j++)
        {
            if(N[i]>N[j])
            {
                temp=N[i];
                N[i]=N[j];
                N[j]=temp;
            }
        }
    }
}
void Sortdown(int N[])
{
    int i,j,temp;
    for(i=0;i<20;i++)
    {
        for(j=i+1;j<20;j++)
        {
            if(N[i]<N[j])
            {
                temp=N[i];
                N[i]=N[j];
                N[j]=temp;
            }
        }
    }
}

选择排序

#include<stdio.h>
void Sortup(int N[]);
void Sortdown(int N[]);
int main()
{
    int i;
    int A[20]={3,7,4,1,8,223,65,23,65,8,5,32,78,12,16,861,34,5,57,19};
    Sortup(A);
    for(i=0;i<20;i++)
    {
        printf("%d ",A[i]);
    }
    Sortdown(A);
    for(i=0;i<20;i++)
    {
        printf("%d ",A[i]);
    }
    return 0;
}
void Sortup(int N[])
{
    int i,j,k,temp;
    for(i=0;i<19;i++)
    {
        k=i;
        for(j=i+1;j<20;j++)
        {
            if(N[k]>N[j])
            {
                k=j;
            }
        }
        if(i!=k)
        {
            temp=N[i];
            N[i]=N[k];
            N[k]=temp;
        }
    }
}
void Sortdown(int N[])
{
    int i,j,k,temp;
    for(i=0;i<19;i++)
    {
        k=i;
        for(j=i+1;j<20;j++)
        {
            if(N[k]<N[j])
            {
                k=j;
            }
        }
        if(i!=k)
        {
            temp=N[i];
            N[i]=N[k];
            N[k]=temp;
        }
    }
}
  • Q:写一个程序,统计自己C语言共写了多少行代码。
    A:上一次作业统计过了。

  • Q:你知道什么是断点吗?给出自己调试程序的例子。
    A:断点就是当我们运行程序时,到断点处会停止,以便逐步检查程序。

  • Q:对比C语言的学习,你对《Java程序设计》的学习有什么具体目标?如何通过刻意训练提高程序设计能力和培养计算思维?如何通过“做中学”实现你的目标?
    A:在学习Java时,我要坚持每周写一定量的代码,并在博客写上自己的学习心得,通过进度条监督自己。
      在学习C语言的过程中,我有一个特别好的方法,就是对于同一个问题,去用多个办法解决,比如对于排序问题,可以用冒泡排序、选择排序、插入排序等,也可以直接用库函数解决,这样可以加深理解。

posted @ 2018-01-28 00:26  磁暴魔王特斯拉  阅读(252)  评论(5编辑  收藏  举报