zoukankan      html  css  js  c++  java
  • 20165312 C语言基础调查和JAVA学习展望

    C语言基础调查和JAVA学习展望

    一、有关学习技能的经历

    掌握一项技能,我认为最重要的是练习和认真程度。

    我在上幼儿园的时候学过电子琴,上台表演过多次,但是三四年之后就半途而废了,后来小学毕业之后对钢琴产生了浓厚的兴趣,开始练习钢琴。或许是电子琴的底子在,我练习接受的速度就很快。

    体育运动的初学者练习时候都需要重复动作,比如「学习打乒乓球时」要练习挥拍,挥拍成千上万遍之后动作就会定型,也就是教练常说的「肌肉有了记忆能力」,以后实战中可以不假思索地做出来。

    --引用自《优秀的教学方法---做教练与做中学

    像打乒乓球一样的道理,弹钢琴如果只是练习一两遍可能会把一小段弹出来,可是效果绝对不会和练习十遍的效果一样。所以我初中的时候,每天会坚持抽出一个小时的时间练习钢琴,先从最简单的指法然后再练习老师的作业以及原来学习过的曲子。日积月累,在不经意之间已经背下来很多曲子的谱子,手已经有记忆力了,自然而然的可以弹出曲子,感觉很奇妙。后来上高中了,时间比较紧张就没有再上钢琴课了,不过有时候我还会自娱自乐一下。

    为了锻炼身体,高考之后我学习了游泳。最开始的基础学习进程很快,最后一步“换气”我学习几天、喝了不少水可是还是不会。回到家之后我在网上找了教学视频,又想了想教练说的要领,发现自己还是对水有害怕的情绪,不敢再水里做动作,害怕喝到水,身体过于僵硬,所以总是找不到感觉。后来在多次尝试、练习下终于学会,不敢说我的游泳技能有多么强,不过从一开始怕水到现在克服恐惧还是有些进步的。

    大一暑假回家我坚持每天去健身房游泳,一开始每天800m,很累,后来逐步每天加50m,适量的练习强度是必要的,我自己能明显感觉我的速度以及耐力有所提升。虽然还不是很快,但是我还会在今年夏天继续练习的。

    二、有关C语言的学习

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

    我的C大部分是自学的,结合老师上课讲的,课下自己看书,结合书上的例子在C的系统上做题,还有通过实验练习。C的练习还有依靠大二上的密数实验,编写了几个较长的程序,对他的理解进一步加深。

    一项技能的掌握程度分为:新手/高级初学者/合格者/精通/专家

    --引用自《优秀的教学方法---做教练与做中学

    我认为我的C的水平勉强算一个高级初学者,还有很多知识不会,我认为还是练习量不够。仅仅依靠作业的练习量是能够应付过期末考试的,但是离真正掌握还相差甚远。

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

    很惭愧的说,我没有统计过C的代码的行数,也没有将以前练习的文件保存,但是离老师要求的10000行代码还相差甚远。我认为想要理解一门语言还是需要练习,简单的程序我可以写出来。量变引起质变,保持一定量的练习再加上理解分析比较才能更好地提高C的水平。

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

    数组指针:它的本质是一个指针,即指向数组的一个指针。

    指针数组:它的本质是一个数组,即数组的每个元素都是指针。

    图片引用自《C语言指针数组和数组指针

    我在网上找了一个例子来说明数组指针和指针数组的区别,显然很容易能判断出p1为指针数组,p2为数组指针。

    函数指针:本质是一个指针,是一个指向函数的指针变量。以整数型为例写一个声明格式:int (*p1)(int a,int b);

    指针函数:本质是一个函数,它的返回值为某一类型的指针(一个地址值)。以整数型为例写一个声明格式:int *p2(int a,int b);

    注意指针函数与函数指针表示方法的不同,千万不要混淆。最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。

    --引用自《指针函数与函数指针的区别

    我认为这个方法同样也适用于指针数组和数组指针的区别。

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

    流(stream):磁盘或其它外围设备中存储的数据的源点或终点,它提供或储存数据。

    数据流将整个文件内的数据看作一串连续的字符(字节),数据流借助文件指针的移动来访问数据,文件指针目前所指的位置即是要处理的数据,经过访问后文件指针会自动向后移动。

    --引用自《「C语言」文件的概念与简单数据流的读写函数

    流就相当于一个文件指针,有流水的意思。

    文件(file):存储在计算机外部存储器中的数据的集合。文件是字符构成的序列,以字节的形式进行储存。

    根据文件的储存形式,分为文本文件(ASCII文件)和二进制文件。

    文本文件:文本文件在磁盘上储存的是字节所对应的ASCII码,可以在显示器上读出来,可以读懂文件内容。文本文件所占用的空间较大。

    二进制文件:是按照二进制代码进行存放的,用01表示,虽然也可以在显示器上显示,但我们不知道内容是什么意思。二进制文件所占用的空间较小。

    要打开指定的文件可以使用fopen()函数

    FILE *fopen(const char *filename,const char *mode);

    图片引用自《C中的文件操作

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

    面向过程是以过程为中心的编程思想。解决方法:分析出程序所需要的步骤,然后用函数把每一个步骤写出来,最后再依次调用。

    参考:《面向过程

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

    我认为模块是指将一个程序分成多个步骤来完成,分别编程实现每个步骤,就是模块。函数就可以看作模块。我没有写过多个源文件的程序。

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

    高内聚是模块内各个元素彼此结合的紧密程度高,一个模块只负责一项任务,即单一负责原则。低耦合是指程序中各个模块之间联系较少,每个模块的相对独立性很高,模块与模块之间的接口少而简单,这样就很容易改变各个模块的程序。

    在程序设计中,将每一个步骤模块化,擅长使用已经存在的函数简化程序。

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

    把数组A的内容复制到数组B中:

    #include <stdio.h>
    #include <stdlib.h>
    #define N 100
    int main(){
        int a[N],b[N];
        int i,n;
        printf("请输入n:
    ");
        scanf("%d",&n);
        printf("请输入数组a:
    ");
        for(i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        for(i=0;i<n;i++){
            b[i]=a[i];
        }
        printf("请输出数组b:
    ");
        for(i=0;i<n;i++){
            printf("%d ",b[i]);
        }
        return 0;
    }
    

    查找整数数组A中有没有数字5:

        int a[100];
        int i,n,flag=0;
        scanf("%d",&n);
        printf("请输入数组a:
    ");
        for(i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        for(i=0;i<n;i++){
            if(a[i]==5){
                printf("此数组中有5.");
                flag=1;
            }
        }
        if(flag==0){
             printf("此数组中没有5.");
        }
        return 0;
    

    对整数数组A进行排序(从小到大,从大到小):

    int main(){
        int a[100];
        int i,j,n,flag=0;
        int temp;
        printf("请输入n:
    ");
        scanf("%d",&n);
        printf("请输入数组a:
    ");
        for(i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        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;
                }
            }
        }
        printf("请从大到小输出a:
    ");
        for(i=0;i<n;i++){
            printf("%d
    ",a[i]);
        }
        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;
                }
            }
        }
        printf("请从小到大输出a:
    ");
        for(i=0;i<n;i++){
            printf("%d
    ",a[i]);
        }
        return 0;
    }
    
    • 9.写一个程序,统计自己C语言共写了多少行代码。

    能力有限,没能自己写出程序。我在网上找了相关的知识,找到了一段代码,现在能看懂了。不过我还是想尝试自己写出来。

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

    断点:在程序的某行代码处设置断点,程序运行到就停止,开始单步调试。

    单步调试数组从大到小排列的例子

    三、有关JAVA的学习

    1.有关ppt上的问题

    • (1)在第一章ppt中,安装jdk在D盘,而设置环境变量JAVA_HOME、path、classpath时却在E盘,我认为这里应该是jdk安装的路径,而非E盘。我在实际操作中按照我自己的想法更改了ppt的做法,事实证明我的想法是正确的。但是我不知道设置在E盘是否正确,如果在E盘也存在一个JDK,那应该是可以行得通的。


    • (2)在第二章ppt、2.3类型转换运算中,基本数据类型精度排列,float变量占4byte,long变量占8byte。我认为排序应该是:byte char short int float long double。而ppt中是:

    后来我查阅了资料:java----基本数据类型精度的研究与使用(char,byte,int等)。发现自己错了,那字节数和精度之间是否有联系呢?

    • (3)在第二章ppt中,输入基本型数据,Scanner reader=new Scanner(System.in);我没有看懂这个是什么意思。可能需要几个例子来理解一下。
    • (4)在第三章ppt中,自增自减运算符中:

    int f=2;
    int m=2;
    int y=(f*++m)+m; //y=9;

    我计算的y=8,在第二个m是取m=2(原值)还是取m=3(前面m运算后的值)?

    • (5)
    class Lader
    {   float above,area;
        float computerArea()
        {  area=(above+bottom)*height/2;
           return area;
         }
        float bottom;
        void setHeight(float h)
         {   height=h;          
        }
        float height;
    }
    

    这段代码中,bottom、height是局部变量还是成员变量呢?我比较偏向于成员变量,因为他不在方法体中。那这样是否就代表了成员变量的声明可以在方法之后?和位置无关?

    • (6)
          int add(int x,int y,int z)  
          {   return x+y+z;
          }
    

    在这段代码中的意思是声明有参数的方法头,显而易见x、y、z为局部变量,局部变量是没有默认值的。在使用局部变量的时候我们要保证其有具体的值,那这个是如何直接return x+y+z的呢?

    • (7)
    class Circle
    {  double rad;
       void changeRad(double newRad)
       { rad=newRad;
        }
    }
    class Test
    { public static void main(String args[])
      { Circle cir=new Circle(10);
        cir.changeRad(100);
       }
    }
    

    在这段代码中,cir.changeRad(100);表达的意思是什么呢?我理解的意思是调用方法changeRad,其引用值是100,那是否rad的值由10变成100?

    • (8)在第五章中,子类是如何继承父类的方法?在ppt中没有看到具体的例子。
    • (9)在第六章中,程序设计中的“开-闭”原则是什么?
    • (10)在第七章中,异常类(exception)和error有什么区别?

    后续的ppt我还没有阅读完,前面的ppt中已经有很多不懂的地方,没有前面的基础后面的就更不容易理解,我会在以后自学的时候及时补充我的疑问。

    2.有关JAVA的学习

    相比较C的学习,我会加大JAVA练习的程度。通过这几天的自学速读ppt,我觉得理解JAVA相比较C而言更困难,万事开头难,我会努力克服困难的,主张问题自己解答。在阅读ppt的同时,我也看了视频,我觉得视频中讲解的更加通俗易懂,并且讲到了很多ppt中没有的小细节,是自学理解的好办法。当然还需要实践,我自己尝试运行了Hello.java,虽然成功运行出来了,但是中间出了很多我意想不到的小问题,比如需要大写的我打的小写,因为一个小小的错误无法编译,所以下一步学习中我会多自己尝试着运行程序,结合教学视频尽多的掌握知识。我也会在后续的学习中积极补充我的问题。看过如何提问我受益很多,我会多结合自己的思考提出更有价值的问题。

  • 相关阅读:
    1069: [SCOI2007]最大土地面积
    Kettle 解决数据锁的问题(事务(进程 ID 51)与另一个进程被死锁在 锁 资源上)
    Kettle配合Windows执行计划实现定时实行作业
    把本地项目同步到码云
    IDEA通过Maven WebApp archetype 创建Spring boot项目骨架
    从零开始完整搭建 Spring-Boot 项目开发框架的教程
    使用IDEA搭建Spring Boot入门项目
    Win10激活失败并提示错误代码0xC004C003的解决方法
    javascript (JS组成、书写位置、基本概念、作用域、内存问题、变量)
    HTML基础之标签
  • 原文地址:https://www.cnblogs.com/cxgg/p/8412021.html
Copyright © 2011-2022 走看看