20165316 技能学习心得与c语言学习
一、技能学习经验
我会打乒乓球,在中国,我只能说我“会”打,至于“比大多数人更好”我不敢断言,因为我无时无刻不感受到乒乓球圈子远比我想象的要深。但是,我觉得乒乓球学习的过程对我今后的学习有所启发,我希望通过总结给大家,最主要还是给自己,一个方向。
像乒乓球这类运动,主要是反复练习,我记忆最深刻的是小学一年级,刚刚能在台子上打球,教练就让我练习多球,即一次使用一个动作套路连续打200到300个球。之后每次练球都必须练习基本功。可以毫不夸张的说,基本功贯穿了一个乒乓球运动员的一生。但是,很多人会发现乒乓球运动员在比赛时经常为了救球做出一些“非套路”的动作,很多经典的照片都记录了他们的精彩瞬间,那么,是什么让他们能够打出这些精彩的对抗呢?答案很简单,是平时基本功训练形成的“球感”。最终,运动员们又不拘泥于“型”,而是追求更加内在的东西——控球能力。据说国家级运动员可以精确到把球打到一个硬币上,可见控球能力,换句话说就是自我控制能力,更为重要。这一点与娄老师在乒乓球训练总结中所叙述:“任何的学习都是在增强人的可控能力”是相同的。
另外,在打乒乓球的这十几年里,我对乒乓球的态度从“被动接受”变成了“主动学习”,很显然,反复的训练带来的不一定是枯燥和无趣,反而随着训练难度的提高和对自身要求的严格,我逐渐感受到挑战自我的乐趣。而这种乐趣,是科学的训练方法所致:每个目标都是可以达到,但有一定难度的。这样,我就不会放弃或者自大,日积月累,技术水平自然有所提升。这一点娄老师在乒乓球训练总结中也有论述。其实,与不同的对手对打也有这种效果:能够看到自己的不足,进而进行自我的,或者有教练帮助的反思和改进,最终实现自我提升。此时,比赛的胜负已经变得不再重要了。
二、c语言学习调查
1.你是怎么学习C语言的?(作业,实验,教材,其他),与你的高超技能相比,C语言的学习有什么经验和教训?
我学习c语言主要是上课听老师讲,课下在网上平台练习,遇到不会的问题用百度查答案,将答案程序复制下来,进行分析和学习。在c语言学习过程中,我在自我学习方面比较欠缺,自认为掌握老师要求所学就可以,考试通过就可以,自我满足,没有想要进一步学习的欲望和动力,导致我c语言的学习一直停留在舒适区,简单程序重复化,没有尝试过挑战自己,没有主动探索c语言更多的功能。简言之,我的c语言基础不够牢固,对计算机语言的理解还不够深刻。
2.目前为止估算自己写过多少行C代码?理解的情况如何?量变引起质变,如何平衡质和量?
代码数量我在上一篇博客中也提到过,大概3000行左右,基本自己写过的都理解了(现在也快忘光了)。由此可见,没有持之以恒的练习,任何技能都会退步。所以关于质和量,我认为应该循序渐进。像我这种普通学生,理解示例程序之后不进行再创造是不行的。就是说我起码要写2到3个类似程序(解决方法类似)才能够基本掌握。所以,在学完一个知识点之后,我必须自己试一下能不能使用,这就是量变的过程;然后再考虑更难的程序,即质变。我觉得量变与质变数量上2:1到3:1最为合适。用的时间上大概要反过来量变比质变大概1:2到1:3比较合适。
3.学过了C语言,你分的清数组指针,指针数组;函数指针,指针函数这些概念吗?
这些概念主要是看名词吧,即“指针”、“数组”、“指针”、“数组”。所以数组指针和函数指针本质上是一个指针,分别指向数组中的一个地址和某个函数的地址;而指针数组顾名思义是一组地址;指针函数就是返回指针——一个地址的函数。
4.学过了C语言,你明白文件和流的区别和联系吗?如何区分文本文件和二进制文件?如何编程操作这两种文件?
惭愧,不知道。但是我查到了文本文件和二进制文件的区别;二者的编程操作似乎是相同的,只是写入读取时规则不同,参阅c语言里面文本文件和二进制文件有什么区别,从侧面印证了二者的编码方式不同。
5.学过了C语言,你知道什么叫面向过程程序设计吗?它解决问题的方法是什么?
面向过程顾名思义就是以过程为中心,主要关注一句话里的“动词”的解决问题办法。把需要的步骤一步一步实现。
6.在C语言里面,什么是模块?你写过多个源文件的程序吗?
我个人理解为把一个程序的不同步骤拆分成一个一个的模块,分别调用,进而实现预期效果。惭愧的是,我没有写过多个源文件的程序。
7.学过了C语言,你知道什么是“高内聚,低耦合”吗?这个原则如何应用到高质量程序设计中?
根据之前对钱老师的话的模糊记忆和我的理解,“高内聚,低耦合”是指一个程序的各个模块之间的联系尽量少,模块的泛用性尽量高的一种状态。在高质量程序设计中,我们应尽量使用现成的函数和模块,用尽量少的语言将几个模块连接起来,达到预期的目的。
参考:百度百科
8.学过了C语言,你如何把数组A的内容复制到数组B中?如何查找整数数组A中有没有数字5?如何对整数数组A进行排序(从小到大,从大到小)?写出相应的程序。
解答如下
#include <stdio.h>
#include <stdlib.h>
void maxnumber(int a[30],int n)//从大到小排序
{
int i, j, max, temp;
for(i=0; i<n; i++)
{
max = i;
for(j=i; j<n; j++)
{
if(a[max]<a[j])
{
max=j;
}
}
if(max!=i)
{
temp=a[i];
a[i]=a[max];
a[max]=temp;
}
}
}
void minnumber(int a[30],int n)//从小到大排序
{
int i, j, min, temp;
for(i=0; i<n; i++)
{
min = i;
for(j=i; j<n; j++)
{
if(a[min]>a[j])
{
min=j;
}
}
if(min!=i)
{
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
}
}
int main()
{
int i,n,a[30],b[30];
printf("how many numbers?\n");
scanf("%d",&n);
if(n>30)
{
printf("too many!\n");
}
else
{
printf("please input numbers:\n");
for(i=0; i<n; i++)
{
scanf("%d",&a[i]);
b[i]=a[i];//数组内容复制
}
}
maxnumber(a,n);
for(i=0; i<n; i++)
{
printf("%d ",a[i]);
}
printf("\n");
minnumber(a,n);
for(i=0; i<n; i++)
{
printf("%d ",a[i]);
}
return 0;
}
9.写一个程序,统计自己C语言共写了多少行代码。
惭愧,不会写,只能放一段我改过的别人的代码。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv)
{
FILE* rf = fopen("f:\\main.txt","r");
char a[1024][128];
int i=0;
while(fgets(a[i],128,rf))i++;
int n=i;
printf("行数:%d\n",n);
fclose(rf);
i=0;
system("pause");
return 0;
}
这个代码可以统计一个txt文档当中的代码,但是每行必须小于128字节,而且无法统计是否会溢出,有些文件(比如这里的main.txt是我用图片base64编码得到很长一段代码),就会导致崩溃,可以说只能进行简单的统计工作。
参考:百度知道
10.你知道什么是断点吗?给出自己调试程序的例子。
断点就是程序调试是自动中断的地方,比如说我在调试第9问的程序时查找崩溃的原因就是把断点设置在主程序第五行的时候程序崩溃,表明在打开文件进行循环时数据溢出导致崩溃。
JAVA学习的目标与途径
和我之前在第一篇博客中写的一样,在课程内容的学习中,基础上,我希望能够掌握这门语言,并使用它编写简单的应用程序;深层次上,既然JAVA被称作“面向对象的程序设计”,我认为相对c来讲,一定有它的独到之处,在思维方式上也一定有所不同,我希望能够了解掌握这门计算机语言的设计思路和思维模式。从而能够举一反三,触类旁通。
我认为,我应该勇敢地从“舒适区”走出来:在学习上,勇于挑战难题,平时多关注行业前沿动态,在博客园这个平台上,利用它丰富的资源,挑战难关,寻求解答;在生活中,调整自己的心态,磨练自己的意志,挤出更多时间用以提升自我价值,进而养成良好习惯,使终身受益。
写程序主要是实践,光看书是不可能有所突破,娄老师在做中学一文中提到“不光要动手,还要理解背后的原理;不光要会用工具,还要理解支撑的理论”“学习提升要有反馈”。谁都想成为“专家”,但是最终实现梦想的能有几人?因此,我计划这学期充分利用时间,进行有益的、大量的学习,在前期尽量积累经验,通过博客园增长自己的见识,让自己不至于陷入“疲于应付”的境地中,同时,通过多种方式与老师、同学们交流,甚至可以通过网络学习一些“大神”的操作。简而言之,仰望星空,脚踏实地,相信在老师“做中学”的正确思想引导下,我能够实现目标。
原文地址:https://www.cnblogs.com/treebeard123/p/8372903.html