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

一:关于特产技能以及博客学习经验

      - 你有什么技能比大多人(超过90%以上)更好?

         关于自己的特长选项之中,可以纳入考虑的是打字速度、游戏以及学习能力,但前面2项似乎并不是一个可以展开的技能,关于打字能力,我在计算机基础的打字测试是满分的,而游戏能力,在我说玩的游戏当中,我也总能够占取高地。这些反应的都有限,可供提炼出的是反应能力以及手残程度。而学习能力,我的意思并不是指的是学习的全方面,即理解能力,拓展能力等等,我专长的在于学习状态。我在学习的过程中,是专注的,不会轻易地被外界所打扰,可以说是学习效率比较高。

         - 针对这个技能的获取你有什么成功的经验?

        对于专注的学习能力,关键在于把握一种学习方法,  在一个学习过程当中,如果进度没进行一点,就需要别人的帮助,那么这个过程就必定会耽误自己的投入程度,我的方法是,准备足够的参考资料以及上网工具,在遇到不会的东西,先思考,没有眉头第一做法就是马上就去翻阅自己所准备的东西,而不是第一想法是寻求他人的帮助,当然我不是说寻求他人的帮助不好,只是大多数的问题在网上都能够轻易的找到答案,而问同学,会造成思考时间上的一个断层,而且同学的解答也不一定能够对应你说问的东西。

        -与老师博客中的学习经验有什么共通之处?

      老师的学习经验中看重的学生的思考能力,而并非停留在工具的使用,对于套路的运用。要明白工具支撑的理论,套路的构架的使用而非照搬。对于我的学习方式而言,是紧密相关的,解决一个疑问,如果你习惯于去问已经解决了这个问题的同学,那么你就只会得到关于这个知识点的解答,若你去网上自己找答案,一般你就能得到更多的一些知识,学习不能靠他人,要靠自己,对于学习知识点广泛的科目很有意义。

        

二: 有关于C语言学习的调查

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

     对于C语言的学习,我大多数是考老师上课内容以及课后作业系统而学习的,其余的主要靠同学的教导。我的学习能力,应用在了个人学习上,在C语言的学习过程之中,我还是发现这是不足的,仅有个人学习能力是不够的,这不同于我往年如高考,中考一般,考试范围是哪些,试卷会出什么题目,自己买了试卷去做就可以应对,团队协作能力的作用显得不是很大。而在C语言的学习过程中,同学们之间的合作意义也十分重大,毕竟对于个人而言,总有一些自己喜欢的编译代码的方式,不可避免的忽视了一些自己不用的算法,造成了理解上的缺陷。对于C语言的学习,既要保持个人学习的能力,也不应当忽视团队协作的作用。

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

    到目前我大概写了有4000行代码(不算上重写的代码),而对于C语言的理解还是很有限的,对于稍微复杂一点的编码往往下不了手,在编译简单代码过程中,也会出现比较多的一些瑕疵。比如:

int main()
{
   char a[5]={'A','B','C','D'};
   char (*p3)[5] = &a;
   char (*p4)[5] = a;
   return 0;
}

很明显p3以及p4都是一个数组指针,指向一个字符类型的数组,而不同的在于一个指针赋予了一个数组的首地址,一个是赋予了一个数组首元素的地址,前面的数据类型是对应的,而后者不是,但因为其值相同而可以进行,只是会出现警告warning C4047: 'initializing' : 'char (*)[5]' differs in levels of indirection from 'char *'。

这只是其中的一个小例子,在编译过程中总会出现这样的残缺,这是需要加强的地方。

       -关于数组指针,指针数组以及函数指针,指针函数的概念,以及X[4]中X是什么东东。

        对于理解这个的关键在于优先级的理解,优先级 ()>[]。

例如 int (*a)[3],当中,()的优先级最大,所以他首先是一个指针,指向一个数组,所以他是数组指针。

而   int *a[3],[]优先级最大,所以他首先是一个数组,数组的元素都是指针。

这个图可一更清楚的解答这个问题,关于详细的解答可以参考这个链接http://www.cnblogs.com/mq0036/p/3382732.html,是一位博客主写的关于数组指针以及指针数组的区别。

而对于指针函数以及函数指针的区别。也在于优先级的一个理解。

例如:int *f(int a,int b);

前面的int代表有返回值,且返回值是int整数型的,他首先是一个函数,再是指针,为指针函数。返回值为 int *

而 int (*f)(int a,int b)

前面Int的含义相同,主要区别在于先执行()内部的,它首先是一个指针,再是函数,所以是函数指针。主要区别在于函数名前有一个*。

对于X[4]理解,感觉就像X是一个文件夹,然后取里面第4个子夹?

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

内聚即为一个部件内部的功能完善程度,而耦合时各个部件之间的关联处。这个理解有点像一种团队模式,每个人都应该做好自己应该做的事,每个人做的事的完善程度相当于内聚程度,而耦合程度即我们做的应该是不同的事,关联程度小,不能是你做着,我也做,降低效率。一个好的程序也应如此。运用这种原则的关键在于尽量减少重复代码,采用分功能分块的形式比较好。

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

在目前的学习当中,我对于模块的理解比较少,下面是网上的理解,但我对于文件的概念还没有过多的了解,所以还是不太懂,也没写过多个源文件的程序。

模块是在内核空间运行的程序,实际上是一种目标对象文件,没有链接,不能独立运行,但是其代码可以在运行时链接到系统中作为内核的一部分运行或从内核中取下,可以动态的扩展内核的功能。

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

 #include<stdio.h>

main()

{ int a[5]={1,5,6,2,4};

int b[5];

int i,j,c;

c=0;

for(i=0;i<5;i++)

{ b[i]=a[i];}

b[5]='';

for(i=0;i<5;i++)

(if(a[i]==5)

{c=1;}}

if(c==1)

printf("数组中有5“);

else

printf("数组中没有5”);

for(i=0;i<4;i++)

{

  for (j=i+1;j<5;j++)

 { if(a[i]>a[j])

   a[i]=b[j];

 a[j]=b[i];}}

for(i=0;i<5;i++)

(printf("%d ",&a[i]);)   //  从小到大排序//

or(i=0;i<4;i++)

{

  for (j=i+1;j<5;j++)

 { if(a[i]<a[j])

   a[i]=b[j];

 a[j]=b[i];}}

for(i=0;i<5;i++)

(printf("%d ",&a[i]);)   //从大到小//

}

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

断点是程序员在调试程序中有力的手段。双击行数旁边的空白处即可设置断点。程序运行到这便会停止,可以通过观察数字得出结论。

 -阅读PPT之后我的疑问

 1 关于length的使用方法。在C语言中我做过的把A数组的数字转移到数组B当中,最初不知道A有多少元素,一般定义B为,B[500]之类的,但实际上A的数字一般没有这么多,即最后B中的元素个数会小于500的。

这个4是一定是元素的个数而不是数组长度的什么的?

2:对于输出较长的,老师采用以下的方式输出,作用好像是分2行可以美化的作用,和多行注释的效果一样?

3:对于for(int i:a)不太懂什么意思,其他的大概还行。

4:组合关系和依赖关系的数据结构可以不一样?

5:开-闭原则上的易修复特性有点类似于核心模板的子程序?

6:一个子类只能有一个父类,但能有多个接口,核心是接口的回调作用,但回调的具体还是不太清楚。

7:断言语句有点类似于断点调试,用asset声明是放在哪个位置的。

8:calendar中的顺序,可不可以省略掉其中的一个如小时等信息?

-对于java学习的期望

 对于java的学习,我比较期待JavaScript的制作,这需要java的一些基础编写能力,希望通过java课程的学习,能够摆脱过去的满足时学习,而达到一个新的高度,能够完成一些程序的编译工作。让自己写的程序活起来。

原文地址:https://www.cnblogs.com/qq2497879550/p/8413754.html