zoukankan      html  css  js  c++  java
  • 20165218 学习基础和C语言基础调查

    个人技能及阅读心得

    • 个人技能之绘画

    绘画是我从很小便开始接触的,从最初的简笔画到国画、素描、水粉,大约也学了七八年。但是到了高中之后,就逐渐放下了。

    记得当初学素描时,老师的一句话让我记忆犹新,她说,画素描就是要 “抄”:一是“抄”作品,也就是临摹;而是“抄”实物,因为素描追求的是真实,什么时候能把摆在桌子上的静物原封不动地“抄”到纸上,那水平才算是达标。

    临摹 是一种在技术不成熟的时期里很有效的学习方法。特别是在画水粉画的时候,初学者很难掌握调色技巧,比如有些绿色水果的暗面要用深红色、靛蓝处理,这对于初学者来说,很难从实物上看出来;而临摹时,因为有作品参考,便更容易把颜色从整体的物体上剥离。临摹不仅是单纯的复制,这是一个锻炼技巧、学习经验、把理论知识融会贯通的过程。对于编程语言的学习来说,这就相当于开始的抄代码,在“抄”的过程中巩固理论知识,明白上课讲的知识的用法。

    • 个人技能之阅读与写作

    我的写作技能不能算是出类拔萃,但至少在中学时期,这是我领先大部分人的一个加分项。阅读与写作,是知识的积累与运用过程,这二者在某种意义上是一体的。

    同绘画一样,我也是在很小的时候就开始阅读。但是到高中时期,由于学业,也由于手机的影响,我纸质书的阅读量大大减少,到了大学才又渐渐重拾。在我多有起伏的阅读经历中,我最大的心得就是要找到适合自己的方法.

    高中时期,阅读常常是为了积累写作素材、锻炼语感,那是我读到值得记录的段落、句子,就直接抄下来,虽说有些费时,但摘抄的过程可以大大加深记忆、也给人进一步思考的机会,同时,这也是个练字的过程,可谓一举多得。

    而到大学时期,我看书的同时会使用一个叫 “萝卜书摘” 的APP,它提供扫描功能,可以把文字拍摄并扫描记录,同时附上一个写感想的模块,最后生成一个完整的书摘保存。这样一来,大大节省了摘抄的时间。同时,该APP还提供书摘整理、“萝卜坑”(类似读书小组,可以一起读书、坑主领读等)等功能。利用这个APP,在阅读的同时,随手写下感想,还能保持写作的手感。从去年二月到现在,我一共读了12.5本书,写了91篇书摘、2篇随笔。看着自己的数据,也是小有成就感,更加激励自己坚持阅读。

    • 阅读心得

    读了老师的博客以后,我记忆最深刻的就是老师的做一件事时的目的性、系统性、总结性。无论减肥、学习五笔、背单词、乒乓球,娄老师在过程中以及结束后,都会进行系统地总结,条理清晰、阶段分明,这是我以前从未见到过的。

    有关C语言学习的调查

    • 你是怎么学习C语言的?

    说实话,我C语言的学习做的并不好。水平止步于比较浅的程度。学习的过程就是练习;在期末复习阶段,我有用笔记本整理过一些容易混淆的知识。

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

    估算大概在3000行以上。理解的情况较一般,有些知识点比如指针和数组、指针和函数、文件操作等只停留在初步了解阶段,几乎没有实际编程操作过。

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

    数组指针是一个指针变量,保存一个数组的首地址;
    指针数组是有若干及类型相同的指针构成的数组,其中每个元素都是一个指针;
    函数指针就是指向函数的指针,指向函数的指针变量中存储的是一个函数在内存中的入口地址;
    指针函数是一个返回值为指针的函数。

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

    文件和流

    计算机文件是以计算机硬盘为载体存储在计算机上的信息集合。文件可以是文本文档、图片、程序等等。通常是磁盘上一段命名的存储区。流是数据之间的传输操作。比如:

    标准I/O流:内存与标准输入输出设备之间信息的传递;文件I/O流:内存与外部文件之间信息的传递;字符串I/O流:内存变量与表示字符串流的字符数组之间信息的传递。
    ——C++ 流(stream)总结

    文件的I/O函数都是针对文件描述符进行操作的,比如说当调用open或者其他函数打开一个文件,返回一个文件的描述符fd,然后针对这个fd进行后续的I/O操作,由于需要多次反复调用对应的系统调用,效率低是自然的。
    而流I/O函数的操作是围绕流(Stream)进行的,当使用流I/O库打开或者创建一个文件时,可以使一个流和一个文件结合,接下来的操作就是对流进行读写、定位等,最后关闭即可。……用户可以简单地把流看做一块由操作系统分配的内存缓冲区,在该缓冲区中存放了文件对应的数据。——流和文件的区别 - CSDN博客

    我个人的理解,流就是程序输入/输出数据过程的载体。流连接了输入/输出设备与程序。

    文本文件和二进制文件

    C语言文件有两种类型,文本文件(也称 ASCII码文件)和 二进制文件。其差别在于存储数值型数据的方式不同。在二进制文件中,数值型数据是以二进制形式存储的,而在文本文件中,则是将数值型数据的每一位数组作为一个字符及其ASCII码的形式存储的。因此, 文本文件中的每一位数字都单独占用一个字节的存储空间。而二进制文件则是把整个数字作为一个二进制来存储的,并非熟知的每一位数字都占用单独的存储空间。
    ——《C语言程序设计(第3版)》P373

    编程编辑

    字 符 含 义
    “r" 以只读方式,打开文本文件;该文件必须是已经存在的,并且只能读出,不能写入数据;若文件不存在,则会出错
    “w" 以只写方式,创建并打开文本文件,已存在的文件将被覆盖;无论文件是否存在,都需创建一个新的文本文件,只能写入数据
    “a” 以只写方式,打开文本文件,位置指针移到文件末尾,向文件尾部添加数据,原文件数据保留;若文件不存在,则会出错
    “+” 与上面的字符串组合,表示以读写方式打开文本文件;既可以向文件中写入数据,也可从文件中读出数据
    “b” 与上面的字符串组合,表示打开二进制文件

    例如,

    fp=fopen("D:\demo.txt","a+");
    

    表示以读写方式打开D盘的文本文件demo.txt,保留原内容,并向尾部添加数据;

    fp=fopen("D:\demo.bin","ab+");
    

    表示以读写方式打开D盘的二进制文件demo.bin,保留原内容,并向尾部添加数据;

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

    我以前没有接触过这个概念,通过查资料,我了解到“面向过程”是一种以过程为中心的编程思想。

    “面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。“面向过程”也可称之为“面向记录”编程思想,他们不支持丰富的“面向对象”特性(比如继承、多态),并且它们不允许混合持久化状态和域逻辑。
    就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。——面向过程_百度百科

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

    个人理解模块就是函数,将主函数中一些比较繁琐,或者使用次数较多的部分写成函数方便随时调用。在利用c语言编程解决密码学数学基础的问题时用的比较多。
    我没有写过多个源文件的程序。

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

    模块分解的基本原则是:高聚合、低耦合,保证每个模块的相对独立型。 无论结构化方法还是面向对象方法,都要遵循这个原则。高聚合指的是模块内部的联系越紧密越好,内聚性越强越好,简单地说就是模块的功能要相对独立型和单一,让模块各司其职,每个模块只专心负责一件事情。低耦合指的是模块之间的联系越松散越好,模块之间仅仅交换那些为完成系统功能必须交换的信息,这意味着模块对外的接口越简单越好,因为借口越简单,模块与外界打交道的变量和交换的数据就越少,这样就会降低模块之间的互相影响到程度。——《C语言程序设计》P171

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

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

    #include <stdio.h>
    #include <stdlib.h>
    # define N 6
    int main()
    {
        int a[N], b[N];
        int i;
        printf("输入数组a:");
        for(i=0; i<6; i++)   //录入数组a的值
        {
            scanf("%d",&a[i]);
        }
        for(i=0; i<6; i++)  //将数组a的值复制到数组b中
        {
            b[i]=a[i];
        }
        printf("以下是数组b:
    ");
        for(i=0; i<6; i++)  //打印数组b
        {
            printf("%d	", b[i]);
        }
    }
    
    1. 查找整数数组A中有没有数字5

    #include <stdio.h>
    #include <stdlib.h>
    #define N 6
    
    int main()
    {
        int a[N], b[N];
        int i;
        printf("输入数组a:");
        for(i=0; i<6; i++)   //录入数组a的值
        {
            scanf("%d",&a[i]);
        }
        for(i=0; i<6; i++)  //将数组a的值复制到数组b中
        {
            b[i]=a[i];
        }
        printf("以下是数组b:
    ");
        for(i=0; i<6; i++)  //打印数组b
        {
            printf("%d	", b[i]);
        }
    }
    
    1. 对整数数组A进行排序(从小到大,从大到小)

    #include <stdio.h>
    #include <stdlib.h>
    void upsort(int a[],int m);
    void printa(int a[],int m);
    void downsort(int a[], int m);
    
    int main()
    {
        int a[7]={12,67,3,78,36,90,40,2};
        upsort(a,8);
        printf("升序为:");
        printa(a,8);
        downsort(a,8);
        printf("
    降序为:");
        printa(a,8);
    }
    
    void upsort(int a[],int m)//用选择排序法实现生序排序
    {
        int i,j;
        int k;
        int temp;
        for(i=0; i<m-1; i++)
        {
            k=i;
            for(j=i+1; j<m; j++)
            {
                if(a[j]<a[k])
                    k=j;
            }
            if(i!=k)
            {
                temp=a[i];
                a[i]=a[k];
                a[k]=temp;
            }
        }
    }
    
    void printa(int a[], int m)//打印数组
    {
        int i;
        for(i=0; i<m; i++)
            printf("%d	",a[i]);
    }
    
    void downsort(int a[], int m)//用冒泡排序法实现降序排序
    {
        int i,j;
        int temp;
        int flag=0;
        for(i=0; i<m; i++)
        {
            for(j=0;j<m-1-i; j++)
            {
                if(a[j]<a[j+1])
                {
                    temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                    flag=1;
                }
            }
        }
    }
    
    
    • 写一个程序,统计自己C语言共写了多少行代码。

    很抱歉我不会写这个程序。我在网上也找到了很过类似的程序,但是文件操作这一部分是我的薄弱之处。参考过其他人的代码后,我认为该程序大致思路应是

    graph LR
    A[遍历一个目录下所有.c的文件]-->B[分别统计行数]
    B-->C[分别相加]
    
    • 你知道什么是断点吗?给出自己调试程序的例子。

    断点,调试器的功能之一,可以让程序中断在需要的地方,从而方便其分析。

    断点也可以在一次调试中设置断点,下一次只需让程序自动运行到设置断点位置,便可在上次设置断点的位置中断下来,极大的方便了操作,同时节省了时间。

    断点模式可以看作一种超时。所有元素(例如,函数、变量和对象)都保留在内存中,但它们的移动和活动被挂起了。在中断模式下,您可以检查它们的位置和状态,以查看是否存在冲突或 bug。您可以在中断模式下对程序进行调整。例如,可以更改变量的值。可以移动执行点,这会改变执行恢复后将要执行的下一条语句。在 C++、C# 和 Visual Basic 中,甚至可以在中断模式下对代码本身进行更改(使用一种称为“编辑并继续”的强大功能)。
    ——断点-百度百科

    个人理解,断点就是在调试程序的过程中,程序运行到该处可以暂停,所有数据保留。而后通过逐行分析数据变化,检查程序的错误。

    断点调试的例子有很多,比如上学期密数实验:求一个数的生成元中,我就曾使用过断点调试测试程序。

    1. 如何理解类?
    2. 标识符由字母、下划线、美元符号和数字组成

    为什么例子中会有这样的代码,出现了中文?

    byte x= -12,  tom=28,  漂亮=98
    
    1. 何谓“boolean型数据”,这与用一个实数的1、0判断逻辑有何不同?
    2. 各个类之间有执行顺序的先后吗?如果如果需要先后执行,如何实现?
    3. 什么叫做“子类和父类在/不在一个包中”?“包”是什么?
    4. 将接口类比为C语言函数中的“形参”可以吗?
    5. C语言中,断点调试是设置断点,而后从断点开始逐行调试,Java中断言是否类似?
    6. 实用常用类中的特定的类是不是就是Java已经设定好的,针对特定对象的?
    7. GUI是什么?
    8. 流在何处使用?不能直接操作文件吗?
    9. 数据库是什么?
    10. wait()方法和sleep(int millsecond) 有什么区别?
    11. Java网络编程除了传输数据、远程调用之外还可以实现哪些功能?
    12. Java是否可以实现多种图形编辑功能?
    • 对比C语言的学习,你对《Java程序设计》的学习有什么具体目标?如何通过刻意训练提高程序设计能力和培养计算思维?如何通过“做中学”实现你的目标?

    对比C语言的学习,我希望Java我能学的更深入,不止停留于浅层知识。对于提高程序设计能力和培养计算思维,除了坚持练习和及时反馈外,我认为应逐渐接触一些比自身水平更难一点的程序,由浅入深,不能“知难而退“,只停留在学习的舒适区。

  • 相关阅读:
    Java中String做为synchronized同步锁
    99%的人都理解错了GET与POST的区别
    为什么Java中只有值传递
    解决maven打包时,会编译特定文件导致文件不可用
    Java使用icepdf转高清图片
    iText输出中文
    Error:(1, 1) java: 非法字符: ‘ufeff’
    java根据模板生成pdf
    携程Apollo统一配置中心的搭建和使用
    1008
  • 原文地址:https://www.cnblogs.com/zicerain/p/8409201.html
Copyright © 2011-2022 走看看