20165211 学习基础和C语言调查
20165211 学习基础和C语言调查
理论脱离实践是最大的不幸。——达芬奇
达芬奇,是我眼里最有嫌疑的穿越者。
绘画、天文、雕塑、音乐、发明、建筑,数学、生理、物理、天文、地质……我很难想象有一个人能在这么多的领域都取得堪称大家的成就。从他的这句话中,似乎能让我们一窥他成功的秘诀。
在阅读了娄老师的博客后,我对于之后的学习也有了一些的感触,就在这里记录一下吧。
在娄老师的博客做中学中,老师与我们分享了学习的经验方法,并向我们推荐了一些学习的资料和途径,并和我们分享了练五笔,减肥,打乒乓球,背单词的经验。在这些过程中,注重方法,做好规划,注重坚持。
我主要的感悟是,一是要有足够科学的方法,娄老师所强调的做中学,强调了,学习需要的是理论,思考,实践,总结的结合。二是要做一个自制的人,这里的自制不限于自我的克制,更多地是在于自我的管理,克制恶习的同时,要能主动地去完成自己的目标,所以,在这中间,我认为制定自己的目标,并对自己进行自我和外界的监督极为重要。
你有什么技能比大多数人(超过90%)更好
这个问题,其实我是有一些惭愧的,父母一直奉行着放养原则,并不强迫我去参加一些兴趣班,补习班之类的,而我对于自己感兴趣的事物大多是自学,要达到比90%的人要好,我肯定是没有这个自信的。仔细想了之后,自己能写的大概就是自学能力和耐心能写吧。
就自学能力来说,我觉得自己应该可以算是比大多数人要好一点,小时候对奥数比较感兴趣,奥数班也是我为数不多的报的兴趣班,在那里的一些思维方式对于之后一些知识的理解助力。之后在高中也报了不少的竞赛,高二时未选生物,生物也算是基本自学,也有一些成绩。还有自己感兴趣的事物,也基本是自学。还有耐心,最明显的表现大概就是,我对于一些细小的工作会更加的感兴趣。
针对这个技能的获取你有什么成功的经验?
总结一下,我觉得经验主要是有以下几点吧:
- 有兴趣的指引,可以作为自己学习的最初动力。
- 在有兴趣的同时,要有即刻去做的行动能力。
- 要做好规划管理,为自己制定好计划。
- 要有足够的自制能力,在最初的热情褪去的时候,要有坚持执行自己计划的自制力。
- 都对自己实行自我的监督和外界的监督。
与老师博客中的学习经验有什么共通之处?
共同之处的话,我觉得主要在于。规划,自制和合适的监督这三点。
我觉得这三点,规划在于在学习之初的指导作用,还有对自己的一个期望,是学习开始一个必要的阶段。自制,则是能够坚持的关键,也是整个学习过程的关键,不然,三天打鱼,两天晒网,只在初期努力就只能在获得很浅的知识,并不能对自己有什么提升。合适的监督则是一个辅助的机制,减少自己的惰性心理,预防放弃也是不可小视的。
有关C语言学习的调查
你是怎么学习C语言的?(作业,实验,教材,其他),与你的高超技能相比,C语言的学习有什么经验和教训?
在C语言的学习过程中,在大一上学期就已经有所接触,而且我认为我主要的知识也是在大一上完成了基本的了解,下学期主要着重于积累和练习。我觉得主要的学习过程为:自学,听讲,练习,复习,巩固。
相比于之前提到的技能,我觉得主要的区别就在于,C语言,我是出于一种必要技能的需要来学习的,并不是出于个人最初的兴趣。并且,因为在下学期又进行了二次的学习,算是学习了两次吧。
我觉得在C语言的学习过程中,主要的经验教训在于,在学习之后,不能只能依靠练习来进行复习,毕竟,我们所接触的那些练习和题目,都是在我们能力范围内的,而C语言,有很多其实是我们上课程上接触不到的,对于编程语言的学习,如果只限于课程范围内,那么就永远只能掌握很小的一部分,我们要在掌握的基础上,不断扩展,才能真正的掌握知识。
目前为止估算自己写过多少行C代码?理解的情况如何?量变引起质变,如何平衡质和量?
我觉得自己写的代码,大概有3000到4000行。就自己所掌握的来说,这3000~4000行代码,有很大一部分是一些内容的变形,重复。就这些小部分的知识,我觉得掌握是没有问题的。但是很无奈的是,C语言的内容并不是只有这些,有很多知识,我至今还是一知半解,甚至根本不了解。
我觉得在学习中质变和量变有两种,一是对一个知识点,或对某一个知识块的了解和练习的量变达到一个对这一个知识的质变的点,也就是完全的掌握和延伸。二是这样的知识点或知识块的积累的量变,并且,达到了这样的知识块的连接,则达到了整个学科的理解的质变。简单来说,就是量变引起部分的质变,再到整体的质变。我们不能停留于一个个部分的质变,而要不断去追求整体的质变。
学过了C语言,你分的清数组指针,指针数组;函数指针,指针函数这些概念吗?
- 数组指针:指向数组地址的指针,本质是指针
- 指针数组:元素是指针的数组,本质是数组,例如int *p[3]
- 函数指针:指向函数的指针变量,用途为调用函数和做函数的参数
- 指针函数:返回值是指针的函数,本质是函数
对于这个问题,我还有有点懵的,去找了一些博客作为参考的资料的。
学过了C语言,你明白文件和流的区别和联系吗?如何区分文本文件和二进制文件?如何编程操作这两种文件?
并不清楚,以下是我查阅资料所得:
- 文件是计算机管理数据的基本单位,同时也是应用程序保存和读取数据的一个重要场所。每个文件都有文件名、文件所在路径、创建时间及访问仅限等属性。
- 流是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道等。流提供一种向后备存储器写入字节和从后备存储器读取字节的方式。除了和磁盘文件直接相关的文件流以外,流还有多种类型。流可以分布在网络中、内存中或者是磁带中。
- Windows 平台中,程序中是 "\n",对应的文件内容是 "\r\n";而二进制文件的写入和读取按其原样。例:定义 fp 是 Windows 平台中以文本文件形式打开的文件指针,则 fprintf(fp, "\n"); 运行后,文件中多了 "\r\n"。
- 文件的操作
文件的打开操作 | fopen | 打开文件 |
---|---|---|
文件的关闭操作 | fclose | 关闭文件 |
文件的读写操作 | fgetc | 从文件中读取一个字符 |
fputc | 写一个字符到文件中去 | |
fgets | 从文件中读取一个字符串 | |
fputs | 写一个字符串到文件中去 | |
fprintf | 往文件中写格式化数据 | |
fscanf | 格式化读取文件中数据 | |
fread | 以二进制形式读取文件中的数据 | |
fwrite | 以二进制形式写数据到文件中去 | |
getw | 以二进制形式读取一个整数 | |
putw | 以二进制形式存贮一个整数 |
学过了C语言,你知道什么叫面向过程程序设计吗?它解决问题的方法是什么?
C语言是一种面向过程的程序设计,这是一种以过程为中心的编程思想。
解决问题的方法为:分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
在C语言里面,什么是模块?你写过多个源文件的程序吗?
查阅了以下资料,emmmm...还是有一种一知半解的感觉啊,感觉到自己对C语言的了解还是停留在很表层的阶段,多个源文件的程序也没有写过。
以独立性、低耦合性,逐层分解”的基本思想描述(分解)系统,首先以数据流图为基础导出系统模块(功能)结构图,直到每一模块都是功能单一的模块系统模块(功能)结构图
结构化设计方法、“自顶向下、公共模块作为模块划分的原则,再将各大模块继续划分为较小的模块、高内聚性。
学过了C语言,你知道什么是“高内聚,低耦合”吗?这个原则如何应用到高质量程序设计中?
在学习过程中,经常听到这个原则,但是没有详细的了解过,又只能找度娘了......
内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系;
耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。
就我个人的理解就是,在系统之中,单个模块要使他尽可能的联系紧密,但是模块之间,尽可能的使其独立存在,减少相互之间的影响。
学过了C语言,你如何把数组A的内容复制到数组B中?如何查找整数数组A中有没有数字5?如何对整数数组A进行排序(从小到大,从大到小)?写出相应的程序。
我将所有的功能都放在了下面这个程序里了。
#include <stdio.h>
#include <stdlib.h>
#define N 100
int main()
{
int a[N],b[N],n,i,j,temp;
printf("请输入数组中数的个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
b[i]=a[i]; //数组复制
}
for(i=0;i<n;i++)
{
if(a[i]==5)
{
printf("数组中有5");
exit(0);
}
}
printf("数组中没有5"); //查找数组中的5
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]<a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
} //从大到小排序
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
} //从大到小排序
return 0;
}
写一个程序,统计自己C语言共写了多少行代码。
这个程序,真的是没什么头绪,我的文件操作,真是的,一团糟,当时也只是做了一点点的了解(有种后悔莫及的感觉......)
目前思路大概是,导入文件,统计换行符,判断注释及空行。但是,文件操作真的是一团乱麻,所以现在先写了一个统计行数的程序。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a;
int l=0;
do
{
a=getchar();
if (a=='@') break;
if (a=='\n') l++;
}while(1);
printf("共有%d行。\n",l);
}
还有文件的操作部分和对于注释空格的判断,打算不断地学习完善,争取能尽快写出来!
下面是一些找到的博客资料,作为完善的参考:
你知道什么是断点吗?给出自己调试程序的例子。
断点是一种调试方法,即在调试中设置断点,下一次让程序自动运行到断点位置,便可在上次设置断点的位置断下来,可以提高调试的效率。
参考怎样快速阅读一本书,快速阅读一下云班课中有PPT,每章提出一个问题
- JAVA的平台无关性是怎样实现的?
- 字符串长度较长时用并置符号连接,那么我们一般划分字符串长度的标准是什么?
- instanceof运算符的具体使用方法及使用场合?
- 类和C语言中的结构体是否可以类比,二者之间的主要区别是什么?
- 子类继承父类的方法有哪些?有什么不同之处?
- 接口是怎样克服Java单继承的缺点的?
- 内部类,匿名类,异常类的定义,及在Java语言中如何使用?
- String类及StringBuffer类之间的不同和联系,以及各种常用实用类的使用场合。
- 窗口的含义,作用及使用方法。
- File类的各种方法的使用是否可以比较C语言中的文件操作进行类比比较理解?
- 预处理语句的作用及具体的使用方法。
- 线程的定义以及多线程的概念。
- URL类是指什么,有何特点?
- 绘制这些基本图形,以及对基本图形的变形的具体操作是怎样实现的?能否实现简单的绘画功能?
- 怎样具体了解堆栈及相关概念?
对比C语言的学习,你对《Java程序设计》的学习有什么具体目标?如何通过刻意训练提高程序设计能力和培养计算思维?如何通过“做中学”实现你的目标?
我的目标主要就是能够真正的学到知识,能独立的编写完成自己的小程序。在简单看了一遍PPT之后,我几乎有一种头昏脑涨的感觉,各种概念,名词,在脑子里乱飞。
在即将到来的Java学习中,我对自己的最低要求是要能够真正的理解掌握新的知识。在做完C语言基础的调查之后,我深深地感觉到,之前的C语言学习和成绩是有很大水分的,有一些概念真的是一概不知。在此基础上,还需要做知识的延伸,理解掌握这门课。