20165327 学习基础和C语言基础调查 学习基础和C语言基础调查

一、关于技能

1. 你有什么技能比大多人(超过90%以上)更好?

根据数据来看,应该是短跑(几次测速50米平均时间6.5s),上学期的体测中短跑这项成绩在班上排前面,我们这个年龄段算是体质较好的,由此推测我的短跑应该比大多人好。另外谈一个学习方面的就是英语,高一上英语经历过一次滑铁卢,然后那个寒假就用英语来写日记想到的词写不出就查,高一下又把NCE2的文章单词每天中午抽时间看了一遍,从那以后,英语就一直是我比较放心的学科了(不敢说英语水平超过90%,只能说高考时比同省90%的考得好一点)。
20165327 学习基础和C语言基础调查
学习基础和C语言基础调查

2. 针对这个技能的获取你有什么成功的经验?

短跑可能是从小学到高中坚持跑步踩点上学训练出来的(虽然我知道这是一个不好且有风险的习惯)。当然爆发力有质的飞跃应该是高一暑假在家附近的公园里晨练的结果。公园里有条288个台阶的长阶梯,在暑假(除去下雨天和不在家的时间)每天早上做完基本练习后跑*,从最初的200多秒(中间要歇息)到假期末的47秒(不停息)。再回想英语的学习,归结起来,还是要有目标长期坚持

20165327 学习基础和C语言基础调查
学习基础和C语言基础调查

3.与老师博客中的学习经验有什么共通之处?

我觉得自己的“跑*”练习和英语的提高和老师练乒乓球的刻意训练有共通之处。

二、有关C语言学习的调查

1.你是怎么学习C语言的?(作业,实验,教材,其他),与你的高超技能相比,C语言的学习有什么经验和教训?

当时学习C语言还是和学其他科目一样,上课听老师讲,下课做练习。由于当时自己不自觉,平时练习因为不是强制的所以做得不是很多;实验也是参考教材和辅导书上的代码;教材上的代码有在程序里面去敲,但没有仔细去研读;期末考试前还是有计划的复习,但由于平时基础不牢,成绩一般。和自己比较“高超的技能”相比,C语言之所以没取得很好的成绩,还是没有从内心去认真做,更多的是出于应是的角度(上次也说到过,上学期才体会到C语言在专业上的重要性)

2.目前为止估算自己写过多少行C代码?理解的情况如何?量变引起质变,如何平衡质和量?

3000行左右。真的理解到了的可能2500行(因为有些难的没理解到的部分是直接复制粘贴的)。要想平衡质与量,我认为不断不能以数量为目的。当然每次练习的基本量要达到,但是真正要理解使得练习的东西内化,还需要总结思考。

3.学过了C语言,你分的清数组指针,指针数组;函数指针,指针函数这些概念吗?

有些有点忘了,查找了相关资料后得到以下结果:
数组指针是一个指向数组的指针,其本质是指针;
指针数组是一个由指针为元素组成的数组,其本质是数组;
函数指针是一个指向函数的指针,其本质是指针;
指针函数是一个返回值为指针的函数,其本质是函数。

4.学过了C语言,你明白文件和流的区别和联系吗?如何区分文本文件和二进制文件?如何编程操作这两种文件?

文件是计算机管理数据的基本单位。流是由字节构成的序列。文本文件是基于字符编码的文件。二进制文件是基于值编码的文件,文本文件是数字中的每一位都以ASCII码值的形式存储,而二进制文件是数字作为一个整体以二进制的形式存储。
文本文件的存储与其读取基本上是个逆过程。而二进制文件的存取显然与文本文件的存取差不多,只是编/解码方式不同而已。

5.学过了C语言,你知道什么叫面向过程程序设计吗?它解决问题的方法是什么?

面向过程是一种以过程为中心的编程思想,就把问题分解成一环环有关联的步骤,然后按顺序依次解决。

6.在C语言里面,什么是模块?你写过多个源文件的程序吗?

模块就是把一个大的的程序拆解成的一个个环节,例如函数就是模块。自己并没有写过多个源文件的程序。

7.学过了C语言,你知道什么是“高内聚,低耦合”吗?这个原则如何应用到高质量程序设计中?

高内聚是说模块内部要高度聚合,低耦合是说模块与模块之间的藕合度要尽量低。在程序设计中,就是要做到模块间的借口清晰、明确,模块内部密封性强。

8.学过了C语言,你如何把数组A的内容复制到数组B中?如何查找整数数组A中有没有数字5?如何对整数数组A进行排序(从小到大,从大到小)?写出相应的程序。

  • 把数组A的内容复制到数组B中
#include<stdio.h>
        #include<stdlib.h>
        #define N 20
        int main()
        {
                int i,a[N],b[N];
            printf("请输入一个长度为%d的数组A:
",N);
            for(i=0;i<N;i++)
            {
                scanf("%d",&a[i]);
            }
            for(i=0;i<N;i++)
            {
                b[i]=a[i];
            }
            return 0;
  • 查找整数数组A中有没有数字5:
#include<stdlib.h>
#define N 10
int main()
{ 
    int i,a[N],count=0,ret;
    printf("请输入一个长度为%d的数组:
",N);
    for(i=0;i<N;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0;i<N;i++)
    {
        if(a[i]==5) count++;
    }
    if(count==0) printf("该数组A中没有数字5");
    else printf("该数组A中有数字5");
    return 0;
}
  • 对整数数组A进行排序(从小到大以及从大到小):
#include<stdlib.h>
#define N 10
int main()
{
int i,j,t,a[N];
printf("请输入一个长度为%d的数组:
",N);
for(i=0;i<N;i++)
{ 
scanf("%d",&a[i]);
}
for(i=0;i<N-1;i++)
{
for(j=0;j<N-i-1;j++)
if(a[j]>a[j+1]) //若要从大到小排序,只需要将'>'改成'<'即可
{ 
    t=a[j];
    a[j]=a[j+1];
    a[j+1]=t;
}
}
for(i=0;i<N;i++) 
{
printf("%d ",a[i]);
}
return 0;
}

9.写一个程序,统计自己C语言共写了多少行代码。

既然是“统计”,那我觉得这可能就要用到文件相关的知识。具体的程序不会,思路:搜索自己写的C语言的文件夹,统计里面每个C程序的行数,按顺序,统计一个加一个里面的行数,知道加完最后一个文件。

10.你知道什么是断点吗?给出自己调试程序的例子。

在某行代码处设置断点后,调试程序时,程序运行到该行代码时会自动停(当时学习C语言时看老师演示过这个红点很多次)然后就可以在这进行逐步调试了,在检查程序时很实用。

三、对于Java的学习

每章提问:

1.为什么要使用解释器来执行程序?
2.Java是否可以对地址进行操作?
3.instanceof运算符的作用是什么?
4.类方法与实例方法各自的优势是什么?
5.子类从父类得到了什么?
6.面向借口编程与面向抽象编程有何区别?
7.断言语句的作用是不是在最后程序的输出阶段可以去掉?
8.怎么样使用StringTokenizer对象?
9.如何通过接口来实现监视器?
10.文件锁有什么实际应用?
11.java可以用哪些方式操作数据库?
12.多线程的使用如何更好体现高内聚的思想?
13.怎样寻找套接字的对象?
14.泛型类的具体优缺点有哪些?

对比C语言的学习,你对《Java程序设计》的学习有什么具体目标?如何通过刻意训练提高程序设计能力和培养计算思维?如何通过“做中学”实现你的目标?

我希望通过《Java程序设计》的学习首先能基本掌握这门编程语言,其次能对编程思想有进一步的强化。具体目标的话,学完能自己写个比较有意思的程序。
学完每一章做相应的刻意练习,争取都提出一些问题并将问题解决。
在学习时将学习进度和学习的问题以及解决方案通过博客记录下来并不断反思总结。