江智宇20155225 第二次随笔

获取技能的成功经验与C语言

你有什么技能比大多数人好

小时候学过很多东西(钢琴、书法、画画、竹笛、葫芦丝、古筝……),不过都没学出什么成绩。对于这些艺术,年纪小的时候,对这些都只有一时的兴趣,也不懂什么坚持,很多学一学就放弃了。年纪稍大点的时候,又开始忙于学习,哪有时间去发展艺术兴趣。书法是坚持最久的,学了两年,那时我在班上是字写得最好的,老师批改我的作文会在后面注“小书法家”,课堂作业每篇我都是100+10(全对的基础上,字写得好加10分),搭着小凳子帮老师抄题到黑板上,还写过作品到教委参展呢……不过后来教我的老书法家因为身体原因不能再给我们上课了,也因为学业负担慢慢变重,书法就被我完完全全的放下了。现在回想起来还真是挺遗憾的。

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

除了在艺术上的学习,在多年的课程学业上,我感悟出自己认为的学习核心和本质就是四个字“熟能生巧”,我发现学习一个新的技能,最开始都是从模仿开始的,不断地模仿,达到熟练,才能“生巧”。

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

我感受到的学习诀窍“熟能生巧”和娄老师说的通过“刻意训练”产生“肌肉记忆”有些异曲同工之妙吧。所以我一般学东西开始也都不懂,但我不会急躁,因为我知道学习是个循序渐进的过程,不急不躁才能慢慢领悟到精髓。
下学期的Java课应该也是这样,从模仿开始,写些小程序,不断熟练,体会老师的话,积累到一定程度,就像冯老师说的“开窍就是一瞬间的事”希望下学期java的学习中,我能体会到这种豁然开朗的感觉。

关于C语言

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

上学期C语言的学习我的学习方式是以课堂和题目为主,配合着看书理解。现在反省当时的学习状态,发现学习不够深入,不能举一反三,还有当时极不好的编程习惯,对很多编程方法不求甚解,都让我在面对大程序时寸步难行。所以在下学期Java学习过程中,我会更加注重对很多东西本质的理解。

目前为止估算自己写过多少行C代码?理解的情况如何?

目前为止5000行代码应该是有的,自己编的程序当时肯定是理解了,只是说很多东西理解不够深入全面吧。

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

我的理解是:数组指针是指向数组的指针,是一个指针变量;指针数组是一个数组里面存放的全是指针,是一个数组;函数指针是指向函数的指针,是一个指针变量;指针函数是返回值是一个指针的函数,是一个函数。

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

二进制文件和文本文件最大的区别是存储数值型数据的方式不同,二进制文件中数字是直接按其二进制形式存储的,优点在于大数存储节省空间,又因为无需转换为节省时间;文本文件是一个个数字分开存的,还有按ASCII转换,优点在一个字节对应一个字符,方便读取,在打开文本文件时只需在文本文件打开方式后面加个b。C语言文件都是字节流,又称为流式文件。

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

至于什么叫面向过程程序设计我还没有体会,下学期的Java课程里我会重点体会这个问题。
面向对象的方法主要是把事物给对象化,对象包括属性与行为。当程序规模不是很大时,面向过程的方法还会体现出一种优势,因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。

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

我对模块的理解就是模块是解决问题的一个步骤吧,往往是通过一个函数来实现的。源文件的程序我还没有涉及过。

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

“高内聚,低耦合”我这学期的密数实验课上体会特别深刻,一个“高内聚,低耦合”的程序会将每个步骤分离出来写成函数,而主函数中简单几句话便可将它们联系起来,这样在单步调试的时候,会轻松很多。所以我们在编程之前一定要先有个整体的框架思路,每个步骤尽量编写函数实现。

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

对数组的处理我一般有两种,一种是直接使用下标遍历数组,另一种是通过指针来遍历数组;对于特殊的数组比如字符串,还可以使用简便的字符串函数来处理。

#include <stdio.h>
#include <stdlib.h>
#define N 10

int main()
{
    int A[N],B[N];
    int i,j,k,temp;
    int flag=0;
    for(i=0;i<N;i++)
    {
        scanf("%d",&A[i]);
    }
    printf("\n");
    //A复制到B
    for(i=0;i<N;i++)
    {   B[i]=A[i];
        printf("%d ",B[i]);
    }
    printf("\n");
    //A中查找5
    for(i=0;i<N;i++)
    {
        if(A[i]==5)
        {
            flag=1;
        }
    }
    if(flag)
    {
        printf("A中有5");
    }
    else
    {
        printf("A中没有5");
    }
    printf("\n");
    //对A排序,从大到小,选择排序法
    for(i=0;i<N-1;i++)
    {
        k=i;
        for(j=i+1;j<N;j++)
        {
            if(A[j]>A[k])
            {
                k=j;
            }
        }
        if(i!=k)
        {
            temp=A[k];
            A[k]=A[i];
            A[i]=temp;
        }
    }
    for(i=0;i<N;i++)
    {
        printf("%d ",A[i]);
    }
}

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

为了写统计电脑里代码行数的程序我真是花费了好大力气!在冯老师的帮助下总算是有了一个成品。在这个过程中我有三点体会:

  1. 命名的规范性很重要。以前看C语言书上的变量命名好长,还觉得这样费事,但经过这个程序,我才发现正是它规范的变量命名,竟让我从完全不懂一步步慢慢看懂了这个程序!可见变量命名对程序可读性的重要作用。
  2. 宏的优势。这个程序里判断磁盘类型的函数是直接判断函数返回值是不是3,来判断磁盘是不是本地磁盘,这样其实是不好的,应该用宏DRIVE_FIXED来表示,这样可以使程序兼容性更好。
  3. 函数参数不理解。打开文件的函数fopen第一个参数是文件名,之前打开文件都是自己键入的文件名,格式一般是fopen=("D:\\.","r"),但这个程序里我找到文件后,文件名直接就是filename里的字符串了,所以直接是fopen=(filename,"r")即可打开,可见我对字符串的理解还不够到位,特别是字符串的表示方法上不能贯通。
    1071233-20161219183351916-110716753.png
#include<stdio.h>
#include<windows.h>
void FindFile(char* ,char* );
int count=0;//统计文件数
char fname[32];
int hangshu=0;//统计总行数
#define BUFSIZE 256//获取本地磁盘驱动器的盘符及类型
int main(int argc,char* argv[])
{
    char szLogicalDriveStrings[BUFSIZE];
    DWORD iLength;//DWORD 就是 Double Word, 每个word为2个字节的长度,每个字节是8位,共32位。
    int iSub;
    printf("请输入要搜索的文件名:");
    scanf("%s",fname);
    ZeroMemory(szLogicalDriveStrings, BUFSIZE);//全部清零
    iLength = GetLogicalDriveStringsA(BUFSIZE-1, szLogicalDriveStrings);
    for(iSub=0; iSub<iLength; iSub+=4)
    {
      //如果不是固定磁盘驱动器:本地硬盘或移动硬盘,忽略
      if(GetDriveType(szLogicalDriveStrings+iSub)!=DRIVE_FIXED)//DRIVE_FIXED=3; {本地硬盘}
            continue;
    FindFile(szLogicalDriveStrings+iSub,"*.*");
    }
    printf("%d",hangshu);
    printf("一共发现%d个文件...\n",count);
    scanf("%*d");
    return 0;
}
void FindFile(char* pfilename,char* pfilter)
{

    char ch;int j;int t;
    FILE *fp;
    WIN32_FIND_DATA findfiledate;//WIN32_FIND_DATA这个结构用于装载与找到的文件有关的信息。该结构可用于后续的搜索
    HANDLE hfind;
    char filename[512];
    char lpFileName[512];
    char _lpFileName[512];
    int i;
    int result;
    for(i=0;*(pfilename+i)!='\0';i++)
          filename[i]=*(pfilename+i);
    filename[i]='\0';//如果最后一个字符不是'\'
    if(filename[strlen(filename)-1]!='\\')
        {strcat(filename,"\\");} //添加'\'
    strcpy(lpFileName,filename);
    strcat(lpFileName,pfilter);
    hfind=FindFirstFile(lpFileName,&findfiledate);//该函数到一个文件夹(包括子文件夹)去搜索指定文件
    if(hfind==INVALID_HANDLE_VALUE)//FindFirstFile执行错误的返回值一个常数,即-1
        return;
    do
    {
        //如果不是目录
        if(!(findfiledate.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))//FILE_ATTRIBUTE_DIRECTORY——找到的是一个目录
        {
            //如果找到指定文件
            if(0==strcmp(fname,findfiledate.cFileName))
            {
               strcat(filename,findfiledate.cFileName);
               printf("%s\n",filename);
               if((fp=fopen(filename,"r"))==NULL)//打开找到的文件
               {
                  printf("Failure to open !\n");
                  exit(0);
               }
               while((ch=fgetc(fp))!=EOF)//统计行数
               {
                  if(ch=='\n')
                  hangshu++;
               }
                 count++;
            }
        }
        //如果是目录
        else
        {
            //.和..不输出 返回的文件名中会包含"."和".."。“.'代表本目录,".."代表上一层目录。一般情况下需要把这两个名称过滤掉。
            if(findfiledate.cFileName[0]!='.')
            {
                strcpy(_lpFileName,filename);
                strcat(_lpFileName,findfiledate.cFileName);
                FindFile(_lpFileName,pfilter);  //递归
            }
        }
    }while(FindNextFile(hfind,&findfiledate));//FindNextFile返回为真,继续搜索
    FindClose(hfind);
    return;
}

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

断点是调试程序时运行停止的地方。但我单步调试的能力其实比较差,调很久才能找到错误。
1071233-20161219183414807-183400050.png

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

具体目标:每天5道编程题。
正如老师的“做中学”所说,学习不能总在舒适区学习,学C时,我就有些惧怕复杂的程序,简单的程序练了很多遍,进步不明显。所以下学期的Java课,在掌握简单程序的基础上,我要进一步尝试稍微复杂的程序。

公文写作

就我个人而言,我还是喜欢写东西的,也喜欢看书,我想在课余时间,广泛积累,开拓视野,所谓“读书破万卷,下笔如有神”,不仅仅是专业课的书籍,各方面的书籍都要涉猎,开卷有益。为写好公文打下坚实的基础!

转载于:https://www.cnblogs.com/clever-universe/p/6195987.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值