20165115 C语言学习心得

学习经验问题

如果将比大多数人好的大多数人定义为超过90%以上的话,我估计我除了高考的排名以外,没有什么可以达到这个标准了。然而这也并不能算得上是什么成功的技能,否则我也不会来到电科院了。至于其他的技能,一方面并没有一个合理的量化标准来进行衡量,另一方面这点数我心里还是有的。

但是若抛开这个衡量的标准,单单从掌握的还算可以这一方面来进行讨论的话,针对这几个问题还是可以进行一定的阐述的。相对而言,综合一下各种学习过的兴趣爱好,我觉得想在一项技能中获得成功,最重要的一点就是要保证自己有充足的兴趣和热情能够投入到这项技能当中。兴趣能够保证不让技能的获取变得枯燥,热情则能够保证投入充足的精力去掌握这项技能。想要精通一项技能,时间和效率都是必不可少的环节。只有通过大量且高效的训练才能达到最好的效果。这就和娄老师在博文中强调的有一些共同之处了。大量的训练是掌握一项技能不可或缺的一个步骤,但是如何对训练内容进行把控也是非常重要的一环。就像学习C语言时,虽然每天都能保证五六十行代码的训练量,到了后半个学期甚至可以达到每天近百行代码的量,但这当中有很多是为了刷分而刷的垃圾代码,真正有挑战性的可以达到良好训练效果的可能只有几十行。所以说兼顾效率和质量的训练才能称得上是有效的训练

C语言学习调查

先贴几段代码:
这个是进行数组复制和查找数组中是否含5的程序:

#include <stdio.h>
#include <stdlib.h>
#define N 5
int main()
{
    int a[N],b[N];
    int i,num;
    printf("Please enter the array you want:\n");
    for(i=0;i<5;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0;i<5;i++)
    {
        b[i]=a[i];
    }
    for(i=0;i<5;i++)
    {
        printf("%d ",b[i]);
    }
    printf("\n");
    printf("Please enter the num you want to search:\n");
    scanf("%d",&num);
    for(i=0;i<5;i++)
    {
        if(a[i]==num)
        {
            printf("a[%i]is the num you're looking for",i);
            return 0;
        }
    }
    printf("Can't find the num");
    return 0;
}

这个是进行整数数组排序的程序:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[10],t,i,j,choice;
    printf("Please enter the array you want:\n");
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    printf("Please enter the order you want:\n1from small to large\n2from large to small\n");
    while(scanf("%d",&choice)!=EOF)
    {
        if(choice==1)/*从小到大排序*/
        {
            for(i=0;i<10;i++)
            {
                for(j=i+1;j<10;j++)
                {
                    if(a[i]>=a[j])
                    {
                        t=a[i];
                        a[i]=a[j];
                        a[j]=t;
                    }
                }
            }
            for(i=0;i<10;i++)
            {
                printf("%d ",a[i]);
            }
            return 0;
        }
        else if(choice==2)/*从大到小排序*/
        {
            for(i=0;i<10;i++)
            {
                for(j=i+1;j<10;j++)
                {
                    if(a[i]<=a[j])
                    {
                        t=a[i];
                        a[i]=a[j];
                        a[j]=t;
                    }
                }
            }
            for(i=0;i<10;i++)
            {
                printf("%d ",a[i]);
            }
            return 0;
        }
        else
        {
            printf("Error!\n");
        }
    }
    return 0;
}

这两个程序都是比较粗糙的程序,仅仅能够大致上完成题目中的要求。也没有对程序进行边界检测。而且这两个程序都应该可以进行进一步的简化。但仅从完成情况进行考虑的话,这两个程序的实现算是相当简单顺利的,基本都是一遍完成没有出现什么太大的问题。所以说虽然有一段时间没有使用C语言,对于它的使用还没有完全生疏。对于其它的几个问题的大致解答情况如下:

你是怎么学习C语言的?(作业,实验,教材,其他),与你的高超技能相比,C语言的学习有什么经验和教训?

主要是通过大量的练习与答疑完成学习任务的。实验更多的侧重于阶段性测试,教材上的训练主要是完成了每一章练习题最后的学生身份信息系统。这一份作业可以说是一份质量相当高的训练题,这套题涵盖的知识点也可以说是非常全面。在学期末的时候,我在这一套题目上面花费了将近两周的时间,反复调试并不断地进行修改,最后这一个程序得到了徐老师的认可。而在完成这一个程序的过程中,我对我之前存在的问题有了很深刻的认识并改正了很多在编程上面的误区。这一段经历让我明白了,大量的训练着实重要,但有时候针对性强、质量高的练习更有四两拨千斤的奇效。这一道题目的三百多行代码可能比四五百行简单的代码都要有效得多。

目前为止估算自己写过多少行C代码?理解的情况如何?量变引起质变,如何平衡质和量?

因为当时并没有每天统计写出的代码数量,所以我只能大致的估算一下,可能有大概有四千到五千行代码。写过的代码中,只要没出现运行错误的应该都可以称得上是理解,从这个角度出发,大概能有百分之八十的理解效率。关于量与质的平衡问题,我认为这需要按情况分析。就像我在学习C语言的时候,作业系统的做题数量会计入最后的总评当中,但是每天能够投入的时间与精力毕竟有限,所以就需要刷一部分简单题目保证自己的分数不会太低。我当时的比例大概是简单题:难题=5:2,我认为这样的比例对于我来说是能够保证量的同时也能保证每天可以学到新的东西。

学过了C语言,你分的清数组指针,指针数组;函数指针,指针函数这些概念吗?
学过了C语言,你明白文件和流的区别和联系吗?如何区分文本文件和二进制文件?如何编程操作这两种文件?
学过了C语言,你知道什么叫面向过程程序设计吗?它解决问题的方法是什么?
在C语言里面,什么是模块?你写过多个源文件的程序吗?
学过了C语言,你知道什么是“高内聚,低耦合”吗?这个原则如何应用到高质量程序设计中?

指针及其相关应用,徐老师在上课时无数次强调过其重要性,并且数次提到指针是C语言的精髓。因此在指针方面也对我们提出了较高的要求,虽然有一段时间没有系统回顾过这一方面的内容,但是上面提到的这几点还是可以分清的。
但是文件这一方面就有一些差距了。因为文件在学的时候并不是作为考点来学的,所以在掌握了基本的应用之后就没有深入使用了。所以这些还没有掌握的很好。
面向过程程序设计大概的意思就是以过程为主导,大致流程是分析程序流程之后用函数按步骤实现。解决问题的方法就是通过不同的函数实现不同的步骤,在需要用的时候将函数组合调用出来。
模块是指能够实现某一功能的子程序或程序段。没有写过多个源文件的程序。
关于“高内聚,低耦合”的有关内容我了解的并不是很多。

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

这一个要求我并不是非常理解,没有什么思路。是进入所有能找到的文件当中统计代码行数在进行叠加?如果是这样进行的话,以我目前对文件的掌握程度,我应该是编不出这个程序的。

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

断点一般是编辑器当中对程序的调试工具,通过设置断点可以从很长的程序的中间某一个部分进行运行,方便程序员进行错误检查。

这个图片中的红点处就是一处断点的设置。

每一章提出一个问题

第一章:Java是一种面向对象的编程语言,这个概念在实际运用当中到底和面向过程这个概念有多大的区别?
第二章:逻辑类型boolean的具体使用方法是什么
第三章:位运算与逻辑运算符的具体使用方式及使用中的注意事项是什么?
第四章:方法与C语言中函数的异同点有哪些?
第五章:“开-闭原则”再具体编程的过程中应该如何体现?
第六章:抽象类和接口有什么联系?
第七章:断言语句和断点有什么异同?
第八章:字符串分析器的具体使用方法
第九章:事件处理器应该如何运用?
第十章:文件的具体用法
第十一章:数据表和C语言当中的链表有什么异同
第十二章:多线程和C语言中的多函数有什么相同点吗
第十三章:网络编程可以实现什么操作?
第十四章:基本图形的绘制有简便的方法吗
第十五章:链表和堆栈的具体细节有什么

对比C语言的学习,你对《Java程序设计》的学习有什么具体目标?如何通过刻意训练提高程序设计能力和培养计算思维?

Java程序设计的最终目标就是掌握Java这种语言,当然这只是一个很虚的难以量化的目标。我觉得一个可以量化的具体目标就是娄老师之前要求过得4000行代码,当然,不仅仅是数量问题,这4000行代码中,我认为至少有百分之七十的代码是有挑战性的代码。这样才能够真正学到东西。提高程序设计能力和培养计算思维方面,积极寻找针对性练习不失为一种很好的方法。

posted @ 2018-01-27 21:07  20165115  阅读(262)  评论(1编辑  收藏  举报