预备作业2 学习基础和C语言基础调查
学习基础和C语言基础调查
一、技能学习经验及体会
-
你有什么技能比大多人(超过90%以上)更好?
看到这个问题,我仔细想了想,好像的确没有什么特别出众的技能,但是我想到了许多我个人的爱好。
我从小喜欢五子棋,并且对其有着自己的见解,但是一直未接受过棋类的培训,所以也只能算是一个爱好。可能是这方面的学习与理解能力较强吧,象棋、斗地主都是我通过观看别人对战而学会的,水平也还行。同时我还很爱玩游戏,尤爱那种需要耐心的探索型游戏,以及需要思考的益智型游戏。
体育运动方面,我从初一时开始接触排球,虽然只是在业余水平里很一般,但是每年我都会不断参加训练,在初中、高中参加班级排球赛,乃至在大学参加院排球赛。高考完之后我才去学了游泳,在学会之后我依旧经常去游泳馆练习,上大学后我还保持着至少每周一次去游泳馆的频率。当然我的这些爱好并不是比大多数人好,或者说只是很普通的爱好,但是对我而言是不错的锻炼身体的运动。
-
针对这个技能的获取你有什么成功的经验?
就对这些技能的获取过程而言,论成功的经验,我觉得可以归结为以下三点。
1. 对这些技能的热爱
我从小就对体育运动较为感兴趣,所以我愿意去接触、学习它们。从棋类游戏到益智类游戏,我都觉得非常有意思,所以我愿意去进行思考并进行尝试。
2. 持之以恒的练习
在学游泳时,我只用了五个课时,便掌握了蛙泳的所有要领,但接下来的五个课时都是练习。正所谓熟能生巧,经过后期不断地大量练习,才能真正掌握这一项技能。
3. 专业人士的指导
我无论是在学习排球还是学习游泳时,都得到过老师和教练的指导。在习得一项技能的过程中,老师和教练的指导是必不可少的。他们会根据我的及时反馈来告诉我正确的做法,能帮助我少走弯路。
-
与老师博客中的学习经验有什么共通之处?
正如我在上一个问题里所回答的,我并没有太出众的技能,但是我所拥有的这些技能/爱好,在获取的过程中都有共通之处。
娄老师在博客《优秀的教学方法---做教练与做中学》中分享了一些在学习,工作,健身中的实践:
做中学(Learning by Doing)之背单词-扇贝网推荐:两年词汇量超过22000.
做中学之五笔输入法实践教程:通过一个月的训练学会五笔输入法
每天一万步,一周减十斤:通过五个月的训练减肥30斤
「做中学(Learning By Doing)」之乒乓球刻意训练一年总结: 通过一年的训练提升乒乓球技能。
娄老师通过自己的背单词经历、五笔练习经历、减肥经历、乒乓球练习经历,详细地阐明了「做中学(Learning By Doing)」的重要性,并且总结了其中的要点:
学习是要思考的,仅仅实践是不够的;
技能是分层次的;
实践要具备一定的量才能引起质变;
技能的提升要「刻意训练」;
学习提升要有反馈。
我的学习经验也与这些要点有共通之处。“学而不思则罔,思而不学则殆”是我们从小就听过的道理,也是我一直以来具备的学习准则,学习中的思考与实践缺一不可。并且,量变决定质变因此,要想掌握一项技能,大量的练习必不可少。并且,在学习过程中时常做有针对性的练习,并且通过不断反馈来自我完善、自我提升。在下学期的学习中,我会争取巧妙地运用做中学(Learning By Doing)的方法,我们便可以在实践中发现问题,解决问题,不断提升自我。
二、C语言学习调查
-
你是怎么学习C语言的?(作业,实验,教材,其他),与你的高超技能相比,C语言的学习有什么经验和教训?
我在大一第一学期时曾通过网课的形式自学过一部分C语言,对C语言有了初步的了解。在第二学期的课堂上,老师是按照PPT来教学。因为对前面的部分比较熟悉,起初我有些松懈,但随着难度的加大,我必须在课堂上紧跟老师的思路,明白老师如何去分析一道题。同时,在课下对照课本多敲代码,多加练习。课本中有很多算法的基础实例,通过对教材进行细致研究,够获取新的知识,丰富自己的思路。
-
目前为止估算自己写过多少行C代码?理解的情况如何?量变引起质变,如何平衡质和量?
说实话,我C语言学得很一般。平时我对练习并不是特别重视,直到临近期末才开始大量地练习,我估计自己写过的代码大概有2000-3000行。我对C语言的理解程度也较为一般,前面的内容还相对熟悉,后面的很多知识点诸如指针和数组、结构体和共用体、文件操作,就比较陌生。我认为对于C语言,唯有大量的练习加深刻的理解才能够掌握,所以量大才能引起质变。
-
学过了C语言,你分的清数组指针,指针数组;函数指针,指针函数这些概念吗?
概念 | 解释 | 表示 |
---|---|---|
数组指针 | 指向数组的指针 | (*p)[数组大小] |
指针数组 | 数组内的元素都是指针,存储指针的数组 | *p[数组大小] |
函数指针 | 指向函数的指针包含函数的地址,调用函数 | (*p)(参数) |
指针函数 | 函数声明其返回值为某个指针时,给函数返回一个地址,用于需要指针的表达式 | *p(参数) |
-
学过了C语言,你明白文件和流的区别和联系吗?如何区分文本文件和二进制文件?如何编程操作这两种文件?
我不明白,上网查询得知:
概念 | 解释 |
---|---|
文件 | 是计算机管理数据的基本单位,是应用程序保存和读取数据的一个重要场所。 |
流 | 是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道等。 |
文本文件与二进制文件的区别是逻辑上的,这两者只是在编码层次上有差异。文本文件是基于字符编码的文件,而二进制文件是基于值编码的文件。因此,文本文件与二进制文件的区别仅仅是编码上的不同,二者无本质区别。
-
学过了C语言,你知道什么叫面向过程程序设计吗?它解决问题的方法是什么?
面向过程程序设计,就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。简单来说,就是在设计任务时要先明白自己要做什么,然后分成每个小任务完成,再整合到主线中完成。
-
在C语言里面,什么是模块?你写过多个源文件的程序吗?
在C语言里可用函数实现各个功能,作为不同的模块,然后在主函数中调用各个功能模块(函数),这样在维护或升级程序时就可以只关注某个模块,可以简化编程问题。我还没写过多个源文件的程序。
-
学过了C语言,你知道什么是“高内聚,低耦合”吗?这个原则如何应用到高质量程序设计中?
我不知道。通过上网查阅资料得知:
概念 | 解释 |
---|---|
内聚性 | 又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。 |
耦合性 | 也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。 |
高内聚 | 一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。 |
低耦合 | 一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。这样有利于修改和组合。 |
——引用自百科《高内聚低耦合》
-
学过了C语言,你如何把数组A的内容复制到数组B中?如何查找整数数组A中有没有数字5?如何对整数数组A进行排序(从小到大,从大到小)?写出相应的程序。
1. 把数组A的内容复制到数组B中:
#include <stdio.h> #include <stdlib.h> void main() { int n,i,j,a[N],b[N]; printf("Input n:"); scanf("%d",&n ); printf("A:\n"); for(i=0; i<n; i++) { scanf("%d",&a[i]); } printf("B:\n"); for(j=0; j<n; j++) { b[j]=a[j]; printf("%d",b[j]); } }
2. 查找整数数组A中有没有数字5:
#include <stdio.h> #include <stdlib.h> void main() { int a[20],i,b=0; for(i=0; i<20; i++) { scanf("%d",&a[i]); } for(i=0; i<20; i++) { if(a[i] == 5) { b=1; printf("第%d个数字是5",i); } } if(b == 0) printf("没有数字5\n"); }
3. 对整数数组A进行排序(从小到大,从大到小):
#include <stdio.h> #include <stdlib.h> //从小到大 void main() { int a[10]; int i,j,p; printf("Input 10 numbers:\n"); for(j=0; j<10; j++) scanf("%d",&a[j]); printf("\n"); for(i=0; i<9; i++) for(j=0; j<9-i; j++) if(a[j]>a[j+1]) { p=a[j]; a[j]=a[j+1]; a[j+1]=p; } for(j=0; j<10; j++) printf("%d\n",a[j]); printf("\n"); } #include <stdio.h> #include <stdlib.h> //从大到小 void main() { int a[10]; int i,j,p; printf("Input 10 numbers:\n"); for(j=0; j<10; j++) scanf("%d",&a[j]); printf("\n"); for(i=0; i<9; i++) for(j=0; j<9-i; j++) if(a[j]<a[j+1]) { p=a[j]; a[j]=a[j+1]; a[j+1]=p; } for(j=0; j<10; j++) printf("%d\n",a[j]); printf("\n"); }
-
写一个程序,统计自己C语言共写了多少行代码
我的想法是用某个函数,可以统计整个文件目录下的所有程序代码的行数,并将所有程序代码行数汇总。限于水平,目前不会写。
-
你知道什么是断点吗?给出自己调试程序的例子。
断点就是程序中断的地方。在某行代码处设置断点后,调试程序时,程序运行到该行代码时会自动停止,然后就可以在这进行逐步调试。
关于这部分我有些遗忘,在网上搜索资料时发现一篇不错的博客可参考:设置断点调试程序
图:设置断点
-
每章提出一个问题
第一章:保存源文件时需注意什么(怎样保存)?
第二章:C语言的数据类型和数组,与Java中的是否相通?数组的引用这部分不太懂。
第三章:如何利用复合语句进行运算?
第四章:类方法和实例方法的区别,类和对象在使用上的区别?
......(不懂的地方太多了)
我本身的C语言基础一般,越往后面看越费劲,我也对PPT里的很多内容一知半解,就不笼统地提出问题来糊弄了。
在今后的学习中,我会通过上手操作与实践,在实践中加深理解,解决所有遇到的这些问题。
-
对比C语言的学习,你对《Java程序设计》的学习有什么具体目标?如何通过刻意训练提高程序设计能力和培养计算思维?如何通过“做中学”实现你的目标?
在接下来的学习当中,我应该端正学习态度。我的具体目标就是,养成每天练习编程的习惯,将学习Java作为每天学习生活中的一部分。可以根据每天的情况不同来分配任务量,无论或多或少,每天都要写代码。并且,每次作业争取独立按时完成,多和班里的大佬交流讨论但不抄袭,有问题能与同学们和老师讨论。每一节课都认真听,每一次作业也都认真完成,及时查漏补缺。在具备基础知识的条件下,做更多的拓展以增加自己的见识。
我希望在学习Java时,思考与实践并行,努力理解课本上的大部分知识。并且在平时的学习中就一步到位,对学习中薄弱的地方进行刻意训练,不把遇到的问题堆到最后。并且,经常看看娄老师的博客,汲取经验,运用“做中学”的方法鞭策自我。