20165228 学习基础和C语言基础调查
==========
做中学读后感
我依然认为兴趣与自觉性是推动一个人进步的两大因素,他们之间的区别是“兴趣”带来的影响更多是主动性的学习,而“自觉”则是略显被动性的学习。我所期望的师生关系是健身教练和学员之间的关系。无论是主动性的兴趣驱动去学习还是出于被动地去学习,都是在“学习”的基础上而言的。
学习是要思考的,仅仅实践是不够的:
不光会动手,还要理解背后的原理
不光会用工具,还要理解支撑的理论
技能是分层次的:
一项技能的掌握程度分为:新手/高级初学者/合格者/精通/专家
对技能要有个期许,不能有了高级初学者的水平就满足了,要有当专家的梦想
实践要具备一定的量才能引起质变:
学乒乓球,没有10万次的练习掌握不了一个动作
学好编程?没有10000行代码的训练量是不够的
技能的提升要「刻意训练」
低水平重复是不行的,训练时间再长都没用
要摆脱「舒适区」,进入「学习区」学习
要循序渐进,不能进入「恐慌区」
学习提升要有反馈
当老师最好的方法是做教练
调过程序的都知道,如果知道哪错了,改起来是很容易的,定位错误在很难,这就是老师(教练)的价值
-- 引用自《做中学》
“学而不思则罔,思而不学则殆“,学习不仅仅是接受知识,更重要的是去消化知识。接受知识就是知道如何使用,而消化知识就是怎样将它应用在实践之中。无论是学习C还是学JAVA,对于基础的知识,我们一定要掌握。当我们处于知道如何使用它的时候,我们仅仅处于新手阶段。要想达到更高的层次,需要我们不断地练习以及思考才能更为熟练地运用。正如做中学中所阐述的,学习的时候还要调控好自身的心态和方式,循序渐进。我的领悟是达到一个新的层次时,就能定位出以前发现不了的错误,这就是学习的意义之一。
技能
从小到大,我没有特意参加过技能。我特别喜欢玩游戏,除此之外还有一个兴趣就是篮球。杨SJ老师曾说:”高手只是将简单的事重复做“,刚开始接触篮球时,每周的体育课和周末,都会被一帮同学叫上去一起打球。由于不懂篮球,前几次的机会都被我用来熟悉球场规则,并没有对基本功多加练习。直到在球场上运球运着运着就控制不住和简单的空位投篮总是不中时,我才明白基本功的重要性。我所看的各种篮球集锦中,无一不是将基本功用得出神入化的。拉杆,急停跳投,突破,都是以运球和投篮为基础。要想将球运得好,通过不断地接触球来提升球感。要想提高命中率,只有改进投篮手势然后固定,并加以不断的练习。要想学会更加厉害的技巧,只有先在大脑里重复思考和拆分动作,通过量变的积累,最终达到质变的结果。
C语言学习
- 你是怎么学习C语言的?
最开始学C语言时,并没有预习以及自己去主动学习,所以觉得老师用幻灯片教学十分空洞,学习效果很差。在后来,自己对C慢慢有了兴趣,在尝试编程的过程中会主动从教材和网络上寻找解决问题的答案。我的收获就是,对于未知的知识,我们应该想着如何去领悟它,而不是心怀抵触。对于看起来比较枯燥的知识,要善于去发现它的有趣之处,兴趣是最好的老师。 - 目前为止估算自己写过多少行C代码?理解的情况如何?量变引起质变,如何平衡质和量?
在第一篇博客中已经回答过这个问题,理解的程度应该一般。写代码有助于巩固知识和加深印象,质变和量变总是相互转换的,只有足够的量变才能引起质变,引起质变不仅需要代码量,还需要理解的程度同时跟上。 - 学过了C语言,你分的清数组指针,指针数组;函数指针,指针函数这些概念吗?
数组指针,指针数组;函数指针,指针函数是四个不同的概念。其中指针数组int p[n],数组的每个元素都是指针。其中数组指针int (p)[n],它是指向n个整型元素数组的指针。其中函数指针int A(void),无函参数,返回整型指针。其中指针函数int (A)(void),表示函数指针,可以指向无参, 且返回值为整型指针的函数。 - 学过了C语言,你明白文件和流的区别和联系吗?如何区分文本文件和二进制文件?如何编程操作这两种文件?
我不清楚文件和流的区别。 - 学过了C语言,你知道什么叫面向过程程序设计吗?它解决问题的方法是什么?
面向过程表示是以过程为中心,对先后不同的阶段给出步骤、操作等。 - 在C语言里面,什么是模块?你写过多个源文件的程序吗?
举个例子,函数需要先定义再通过函数调用的途径来使用,嵌套,递归都是很重要的函数调用方式。写过多个源文件的程序。 - 学过了C语言,你知道什么是“高内聚,低耦合”吗?这个原则如何应用到高质量程序设计中?
不知道。 - 学过了C语言,你如何把数组A的内容复制到数组B中?如何查找整数数组A中有没有数字5?如何对整数数组A进行排序(从小到大,从大到小)?写出相应的程序。
将A赋值到B
#include <stdio.h>
#define N 100
int main()
{
int A[N],B[N];
int n,i;
printf("input n:");
scanf("%d",&n);
printf("input A[n]:");
for(i=0;i<=n-1;i++)
{
scanf("%d",&A[i]);
B[i]=A[i];
printf("%d ",B[i]);
}
}
查找数组A中的5
#include <stdio.h>
main()
{
int A[10]={1,2,3,4,5,6,7,8,9,10};
int i,j;
for(i=0;i<=9;i++)
{
if(A[i]==5)
{
j=0;
break;
}
}
if(!j)
{
printf("yes");
}
else
{
printf("no");
}
}
对数组A进行排序
#include<stdio.h>
main()
{
int A[10]={8,5,6,0,4,3,1,2,7,9};
int i, j, k , temp;
printf("please input k:");
scanf("%d",&k);
if(k==1)
{
for(i=0;i<=9;i++)
{
for(j=0;j<=9;j++)
{
if(A[i]>A[j])
{
temp=A[i];
A[i]=A[j];
A[j]=temp;
}
}
}
for(i=0;i<=9;i++)
{
printf("%d ",A[i]);
}
}
else
{
for(i=0;i<=9;i++)
{
for(j=0;j<=9;j++)
{
if(A[i]<A[j])
{
temp=A[j];
A[j]=A[i];
A[i]=temp;
}
}
}
for(i=0;i<=9;i++)
{
printf("%d ",A[i]);
}
}
}
- 写一个程序,统计自己C语言共写了多少行代码。
不会。 - 你知道什么是断点吗?给出自己调试程序的例子。
知道,设置断点有助于通过观察程序中各值的变化来排除程序的错误。 - 对比C语言的学习,你对《Java程序设计》的学习有什么具体目标?如何通过刻意训练提高程序设计能力和培养计算思维?如何通过“做中学”实现你的目标?
到目前为止,还没有具体的目标。学习JAVA的话,不断提高代码量是基础。在假期对JAVA的预习中多实践,多思考。早点发现JAVA的吸引人的地方,在兴趣的驱动下快乐高效地进行学习。
关于每一章提出的问题:
- 第一章:对反编译的概念不清
- 第二章:JAVA和C一样有很多类型的数据,如何更加清晰地区分它们
- 第三章:boolean型指的是什么?
- 第四章:编写JAVA程序是否有一定的模板?
- 第五章:abstract类和abstract方法的应用
- 第六章:如何使用接口?
- 第七章:每次编写JAVA后是否都需要使用断言语句来确定无误?
- 第八章:为什么使用BigInterer类来处理特别大的整数?
- 第九章:Jframe与布局之间的联系是什么?
- 第十章:如何应用各种流?/JBDC
- 第十一章到第十五章:到目前为止,很多知识点对于我来说概念依然模糊,短时间内只能大概地理解一点点。理解不了后面的MYSQL、JBDC技术、多线程与优先级,暂时不知道应该提什么问题。