20165336 学习基础与C语言基础调查
20165336 技能学习心得与c语言学习
一、心得体会
- 做教练
从老师的健身教练健身学员的学习关系中我懂得了学生应该有自主的学习意识,要有计划地去训练、去流汗,并且要以100分的要求严于律己,老师是指导我们、帮助我们、点评我们的,这样老师可以从传统的教学模式中解放出来,学生也能从新的教学方式中受益匪浅。 - 做中学
看了韦钰老师的 做中学”/ “Learning by Doing” 理念 、邹老师的博客与娄老师的观点后,我十分赞同做中学,这需要一定量的练习作为基础,听会忘记;看能记住;做才学会,主动式的学习才是我们当代大学生最需要的。
你有什么技能比大多人(超过90%以上)更好?
我认为我在学习、生活、运动三方面中执行力、做饭、打篮球这三项技能比大多数人更好。
针对这个技能的获取你有什么成功的经验?
- 执行力
执行力的获取需要自己内心对自己所要完成的任务有充分的认识,在任务所规定的要求中,有计划、有条理的按照较高的标准,逐渐去完成自己的任务。 - 做饭
这项技能应该是每个人必须具备的技能,我认为自己的成功经验就是不断的学习,不断地模仿,从一开始的什么都不会,慢慢的到知道菜该怎么切,调料该在什么时候放,火候的掌控等等,这需要不断的学习,学习的渠道可以来自互联网,来自身边的父母或亲朋好友。 - 篮球
篮球这项技能是我最喜爱的,获取他的经验就是通过时间的洗礼,不断的触碰篮球,找到球感,并且强化自己的基本功,有了良好的基本功,在这基础上丰富自己的技术。
与老师博客中的学习经验有什么共通之处?
- 执行力
我认为执行力中与老师学习经验有共通之处的地方在于要有计划、有条理的去完成自己的任务,有条理有计划可以节约你在做一件事的时间,并且不乱,不会影响下一个任务的规划,能够做到高效学习。 - 做饭
做饭中与老师学习经验有共通之处的地方在于主动地去学习、去探索,并且不断实践,主动的学习才能知道怎么做饭味道会更好,主动的探索才能填充自己在食物领域的无知,不断实践是掌握一项技能必不可少的要素! - 打篮球
打篮球中与老师学习经验有共通之处的地方在于大量的练习,并有良好的基本功,学习中大量练习能带给我们熟能生巧,篮球也是一样,不断的练习不断的提高自己的球感,才能练就扎实的基本功,有了扎实的基本功才能做更进一步地提高。
二、C语言学习调查
你是怎么学习C语言的?(作业,实验,教材,其他),与你的高超技能相比,C语言的学习有什么经验和教训?
- 学习C语言我是通过对老师上课关键点的理解,下课不懂看书,慢慢将书本上的知识内化,结合老师的练习平台,每章根据重要内容不断练习,完成老师规定习题量来学习的。
- 学习C语言的经验:学习C语言需要大量的练习,光看是不能学好的,需要在练习中不断地将知识运用内化,练习是提高理解的高效途径,可以通过书本、老师、同学、互联网解决自己的问题,不能拖欠知识,C语言中的知识是一环套着一环的,一但有知识空缺,程序是无法实现成功运行的。
学习C语言的教训:切忌老想攻克难题,攻克难题是对自己能力的一种肯定,但是拥有良好的基本功同样重要,如果基本功不扎实又想解决难题,实则得不偿失,既不能把难题很顺利地解决,有可能也会造成问题解决不了,也浪费了时间这种局面。
目前为止估算自己写过多少行C代码?理解的情况如何?量变引起质变,如何平衡质和量?
- 目前为止从第一篇博客中提到自己写了将近5000行代码。
- 根据大一老师章节题型的要求,所解决的非常容易、容易题型都能掌握解决,一般及困难类的问题,部分能解决,在语句运用方面基本熟练,指针运用只能说比较熟练,链表只会简单的运用,太难的就不熟练了。调用打开文件等大一老师只是泛泛而谈并没有像其他的知识点那样带我们学习,所以只停留在了解的层面,仅仅有过几次的简单练习没有掌握。
- 我认为平衡质与量的关键在于是否真正的掌握了知识,在彻底了解过知识后,应用一定量的有层次分明的练习题,去强化知识的质,在保证掌握了知识,产生了量变后引起质变,在进行适当的减少过量的练习。
学过了C语言,你分的清数组指针,指针数组;函数指针,指针函数这些概念吗?
指针类型:用于存放变量的地址。
数组指针:指向数组的指针变量。
指针数组:这个数组的所有元素都是指针类型。
区别在于数组指针指向的是数组的首地址,指针数组是其中所有元素都有指向的首地址。
函数指针:指向函数的指针变量。
指针函数:函数返回类型是某一类型的指针,本质是一个函数。
区别在于函数指针指向的是函数的首地址,指针函数返回类型是一个指针。
学过了C语言,你明白文件和流的区别和联系吗?如何区分文本文件和二进制文件?如何编程操作这两种文件?
- 不是特别明白文件和流的区别与联系。
查参考资料得:
- 程序通过文件打开操作将流与设备联系起来,文件打开后,可在程序和文件之间交换数据。
- 由程序在磁盘上建立文件
- 文件打开后,通过写操作将数据存入该文件(写入数据)
- 由程序打开磁盘上的某个已有文件,通过读操作将文件中的数据读入内存供程序使用(读数据)
- 程序通过文件关闭操作断开流域文件的联系
通过访问度娘了解到:
文件是计算机管理数据的基本单位,同时也是应用程序保存和读取数据的一个重要场所。
流是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道等。流提供一种向后备存储器写入字节和从后备存储器读取字节的方式。----------引用于文件与流的区别与联系
区分文本文件于二进制文件:
- 文本本件:用字节表示字符的字符序列,储存每个字符的ASCⅡ码。
- 二进制文件:C程序的源代码生成的可执行的程序。
如何编程操作这两种文件
参考文本文件与二进制文件操作区别
学过了C语言,你知道什么叫面向过程程序设计吗?它解决问题的方法是什么?
面向过程程序设计我所理解的是:以过程为中心解决实际问题的编程思想,使程序一步步得以实现,最终解决问题。
解决问题的方法是根据问题,分成一些小的步骤,然后一步步完成小的步骤最终完成程序设计。
在C语言里面,什么是模块?你写过多个源文件的程序吗?
我认为C语言里模块就是函数。
没有写过多个源文件的程序
学过了C语言,你知道什么是“高内聚,低耦合”吗?这个原则如何应用到高质量程序设计中?
高内聚表示某个特定软件模块内部包含一系列关系及其相关的功能。
低耦合用来描述模块之间依赖的程度。
我认为高质量的程序设计应该内部有着丰富的所需的功能,并且有着清晰的模块关系。
学过了C语言,你如何把数组A的内容复制到数组B中?如何查找整数数组A中有没有数字5?如何对整数数组A进行排序(从小到大,从大到小)?写出相应的程序。
- 把数组A的内容复制到数组B中
#include <stdio.h>
#define N 20
int main()
{
int a[N],b[N];
int n,i;
printf("输入数组a的长度n=");
scanf("%d",&n);
if(n<1||n>N)
{
printf("输入长度错误");
}
else
{
printf("请输入数组a\n");
for(i=0 ; i<n ;i++)
{
scanf("%d",&a[i]);
}
for(i=0 ; i<n ;i++)
{
b[i]=a[i];
}
printf("输出数组b\n");
for(i=0 ; i<n ;i++)
{
printf("%d ",b[i]);
}
}
}
- 查找整数数组A中有没有数字5
#include <stdio.h>
#define N 20
int main()
{
int a[N];
int n,i,j=0;
printf("输入数组a的长度n=");
scanf("%d",&n);
if(n<1||n>N)
{
printf("输入长度错误");
}
else
{
printf("请输入数组a\n");
for(i=0 ; i<n ;i++)
{
scanf("%d",&a[i]);
}
for(i=0 ; i<n ;i++)
{
if(a[i]==5)
{
j=1;
}
}
if(j==0)
{
printf("数组a中没有5");
}
else
{
printf("数组a中有5");
}
}
}
- 对整数数组A进行排序(从小到大)
#include <stdio.h>
#define N 20
int main()
{
int a[N];
int n,i,j,k,min;
printf("输入数组a的长度n=");
scanf("%d",&n);
if(n<1||n>N)
{
printf("输入长度错误");
}
else
{
printf("请输入数组a\n");
for(i=0 ; i<n ;i++)
{
scanf("%d",&a[i]);
}
for(k=n-1 ; k>0 ;k--)
{
for(i=0 ; i<k ;i++)
{
j=i+1;
if(a[i]>a[j])
{
min=a[j];
a[j]=a[i];
a[i]=min;
}
}
}
printf("由小到大排列得数组a\n");
for(i=0 ; i<n ;i++)
{
printf("%d ",a[i]);
}
}
}
- 对整数数组A进行排序(从大到小)
#include <stdio.h>
#define N 20
int main()
{
int a[N];
int n,i,j,k,max;
printf("输入数组a的长度n=");
scanf("%d",&n);
if(n<1||n>N)
{
printf("输入长度错误");
}
else
{
printf("请输入数组a\n");
for(i=0 ; i<n ;i++)
{
scanf("%d",&a[i]);
}
for(k=n-1 ; k>0 ;k--)
{
for(i=0 ; i<k ;i++)
{
j=i+1;
if(a[i]<a[j])
{
max=a[j];
a[j]=a[i];
a[i]=max;
}
}
}
printf("由大到小排列得数组a\n");
for(i=0 ; i<n ;i++)
{
printf("%d ",a[i]);
}
}
}
写一个程序,统计自己C语言共写了多少行代码。
#include <stdio.h>
int main()
{
int line = 0;
int c;
printf("请输入所学过程序,用字符'$'作为结束\n");
while((c = getchar())!='$')
{
if(c == '\n') line++;
}
printf("line=%d\n",line);
}
自己想出的代码有缺陷:输入的代码必须顶格,开头不能有空格,意思是必须左对齐,因为大一打过的代码没有用过字符'$',所以我我用字符'$'作为结束输入的标志以此停止输入,算出总代码行数。
你知道什么是断点吗?给出自己调试程序的例子。
在某行代码处设置断点后,调试程序时,程序运行到该行代码时会自动停止!然后就可以在这进行逐步调试了。
例如从大到小排序
#include <stdio.h>
#define N 20
int main()
{
int a[N];
int n,i,j,k,max;
printf("输入数组a的长度n=");
scanf("%d",&n);
if(n<1||n>N)
{
printf("输入长度错误");
}
else
{
printf("请输入数组a\n");
for(i=0 ; i<n ;i++)
{
scanf("%d",&a[i]);
}
for(k=n-1 ; k>0 ;k--)
{
for(i=0 ; i<k ;i++)
{
j=i+1;
if(a[i]<a[j])
{
max=a[j];
a[j]=a[i];
a[i]=max;//在这里设置断点,根据观察窗就可以看到a[i],a[j],max此时的数据了。
}
}
}
printf("由大到小排列得数组a\n");
for(i=0 ; i<n ;i++)
{
printf("%d ",a[i]);
}
}
}
三、阅读云班课中PPT,每章提出一个问题
- 第一章:什么是字节码、机器码、字节码文件?在源文件中有多个类,有哪些?什么是public类?
- 第二章:逻辑类型Boolean、byte类型使用起来能解决什么问题?scanner reader=new Scanner(System.in);这条语句为创建reader对象后面new Scanner(System.in)是什么意思?
- 第三章:使用for语句遍历数组中遍历的是一维数组,如果是二维或三维数组,该怎样遍历呢?
- 第四章:JAVA中的方法与C语言中的函数有什区别于联系?
- 第五章:JAVA中子类的有关知识与C语言中结构体有关的知识有什么区别于联系?
- 第六章:当一类实现多个接口时,能解决什么问题?
- 第七章:匿名类、异常类怎么使用,使用对象?
- 第八章:JAVA中数字格式化与C语言中printf函数有什么联系?
- 第九章:容器内能添加哪些组件?能用添加组件的容器解决哪些问题?
- 第十章:是否所有带进度条的窗口都是带进度条的输入流所编写的?
- 第十一章:怎么将数据库与容器和组建联系起来?
- 第十二章:JAVA中多线程机制与电脑中的任务管理器有什么联系与区别?
- 第十三章:服务器能否用除ServerSocket对象以外方式将客户端的套接字对象与服务器端的一个套接字对象连接起来?
- 第十四章:能实现几何画板的哪些功能?
- 第十五章:JAVA的链表与C语言的链表有什么区别于联系?
对比C语言的学习,你对《Java程序设计》的学习有什么具体目标?如何通过刻意训练提高程序设计能力和培养计算思维?如何通过“做中学”实现你的目标?
对比C语言,我觉得我学JAVA我想学得更精、更熟练、更透彻,C语言的学习自我感觉停留在中下水平,没有做到特别熟练,离自己的目标还是有一定的差距,因为JAVA的熟练掌握对今后的学习以及今后的工作有着重大的影响,所以我希望能熟练地掌握JAVA这门语言,做到熟能生巧,举一反三,触类旁通。
我认为刻意的训练需要明确训练的目标,要有计划的针对训练,根据自己所不懂得,所缺少的知识点,有针对的去训练复习与巩固,这样在弥补自身知识漏洞的基础上,才能不断提高程序设计的能力,培养计算思维我认为得多多看有关的书籍,根据书上的知识,不断提高自己的思维能力,并且多多提出有价值的问题,并且及时地去解决,这样才能触类旁通,在刻意训练中培养自己的计算思维。
前面看了老师所推荐的做中学内容,我印象深刻的是听会忘记;看能记住;做才学会,要把做落到实处,并且调动自己的积极性,要懂得主动学习的重要性,并且在不断的练习中提升自己,没有大量练习作为提高自己的基础,想要学好JAVA是不太可能的,所以我要在做中学,在学中不断找到乐趣,补充自己的知识,进一步提高自己。