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

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

    做中学体会

    阅读做中学之后,了解老师关于五笔练习减肥乒乓背单词的经历,不禁联想到自己学古筝的经历。

    • 成功的经验
      • 兴趣
        我其实小时候学过一段时间古筝,但是那时候是因为父母的要求,自己并不喜欢,后来就终止了。直到再过了几年自己对于古筝产生了兴趣,主动要求重新学习古筝,一直坚持到了最后。
      • 专注
        说来惭愧,我练琴从来不是定时定量的,而是根据心情和专注程度来,对于我来说,心不在焉的练习两个小时的效率没有专注练习半小时高。状态不好时当天我会放弃练习,状态好的时候连续练习几个小时也不觉得疲惫,最终效果也是不错。
      • 坚持
        学习过程中也遇到过许多困难,比如中间停止的断层,比如与学业的冲突,但是没有想过放弃,逐渐坚持下来,虽然由于上学距离远,携带不便等原因,现在还是生疏了,但是在整个学习过程中,不曾中断过。
    • 共通之处
      • 持之以恒
        不管是学习哪种技能,都是贵在坚持。学习速度因人而异,有快有慢,但是只要坚持,不管速度快慢都是可以达成目标的。
      • 认真练习
        从老师的博客联系自己的经历,不难看出,所有的学习过程都要付出努力,没有一蹴而就的事情,都需要认真练习,才能有所收获。

    C语言基础调查

    数据结构为大二下的课程,有些问题不太了解,通过网络查询后形成自己的理解,如有理解错误希望老师能够指出。

    1. 你是怎么学习C语言的?(作业,实验,教材,其他),与你的高超技能相比,C语言的学习有什么经验和教训?
    • 上课听讲,下课练习。有疑问查询网络,解决不了的进行答疑。
    • 重在理解,语法虽然重要,但是是可以即时学习的,更重要的是算法的设计,编程只是实现算法的过程,可以有多种方式实现,锻炼自己的思维才是关键。
    1. 目前为止估算自己写过多少行C代码?理解的情况如何?量变引起质变,如何平衡质和量?
    • 没有具体计算过,应该不少于4000行。
    • 感觉对于复杂程序还不能熟练编写,有所理解但不够深入。
    • 先进行量变:基础短代码练习,学习理解;再进行质变:调用知识,灵活运用,完成更深一层的理解学习。
    1. 学过了C语言,你分的清数组指针,指针数组;函数指针,指针函数这些概念吗?
    • 数组指针:本质是指针,指向数组地址
      • eg:
    int a[5],*p;
    p=a;
    
    • 指针数组:本质是数组,是由指针组成的数组。
      • eg:
    int (*p)[3];
    
    • 函数指针:本质是指针,指向函数
      • eg:
    int function(int x,int y);//自定义某函数,具体不写
    int main()
    {
        int a=3,b=4,s;
        int (*p)(int ,int);
        p=function;
        s=(*p)(a,b);
        return 0;
    }
    
    • 指针函数:本质是函数,指返回值是指针的函数。
      • eg:
    int *(pr(int (*p)[2] ,int a ));
    {
        int *str;
        str=*p==a?*p:*(p+1);
        return str;
    }
    
    1. 学过了C语言,你明白文件和流的区别和联系吗?如何区分文本文件和二进制文件?如何编程操作这两种文件?
    • 文件和流的区别与联系:文件是信息的一个集合,是一种真实的设备;而流是一种抽象概念,它是连接程序与文件、设备,导入或者导出设备的通
    • 文本文件和二进制文件:文本文件是字符序列,与外设中的字符序列不一一对应,需要进行转换;二进制文件是字节序列,不需要进行转换可以直接对应。
    • 编程操作两种文件的方法:C语言分别规定了相对应的函数操作:
      • 文本文件函数:"r","w","a","r+","w+","a+"
      • 二进制文件函数:"rb","wb","ab","rb+","wb+","ab+"
    1. 学过了C语言,你知道什么叫面向过程程序设计吗?它解决问题的方法是什么?
    • 面向过程程序设计是分析解决问题的过程中的具体步骤,按照具体步骤进行程序设计,顺序执行每一函数。
    • 解决问题方法方法:根据问题进行分析,按执行顺序安排每一步骤,依据步骤进行函授编程。
    1. 在C语言里面,什么是模块?你写过多个源文件的程序吗?
    • 在C语言里面,模块可近似看为函数。
    • 没有写过
    1. 学过了C语言,你知道什么是“高内聚,低耦合”吗?这个原则如何应用到高质量程序设计中?
    • “高内聚,低耦合”的理解:高内聚是指模块尽可能独特完成单一子功能;低耦合是指模块与模块之间尽可能相互独立,模块与模块之间的接口尽可能少且简单。
    • 在设计程序时,要学会将程序模块化成功能单一,相对独立的模块,再灵活调用,进行编程。
    1. 学过了C语言,你如何把数组A的内容复制到数组B中?如何查找整数数组A中有没有数字5?如何对整数数组A进行排序(从小到大,从大到小)?写出相应的程序。
    • 数组复制:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
       int a[100],b[100],i,n;
       printf("Input n=:");
       scanf("%d",&n);
       for(i=0;i<n;i++)
       {
           scanf("%d",&a[i]);
       }
       memcpy(b,a,sizeof(int)*n);
        return 0;
    }
    
    • 数组排序:
      从大到小 :
    #include <stdio.h>
    int main()
    {
       int a[100],i,j,n,temp;
       printf("Input n=:");
       scanf("%d",&n);
       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;
              }
          }
      }
        return 0;
    }
    

    从小到大:

    #include <stdio.h>
    int main()
    {
       int a[100],i,j,n,temp;
       printf("Input n=:");
       scanf("%d",&n);
       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;
              }
          }
      }
        return 0;
    }
    
    
    • 查找是否存在数字5:

    假设已通过上述程序进行从小到大排序,下面程序直接进行二分法查找

    #include <stdio.h>
    int judge(int a[],int n)
    {
        int high=n-1,low=0,mid;
        while(low<=high)
        {
         mid=(high-low)/2+low;
         if(a[mid]==5)
         {
             return 1;
         }
         else if(a[mid]>5)
         {
             high=mid-1;
         }
         else
         {
             low=mid+1;
         }
         return -1;
        }
    
    
    }
    int main()
    {
       int a[100],n,ans;//数组a已输入并从小到大排序,n为a的长度  
       //具体程序见上面的“数组排序”
        ans=judge(a,n);
        if(ans==1)
        {
            printf("yes");
        }
        else
        {
            printf("no");
        }
        return 0;
    }
    
    1. 写一个程序,统计自己C语言共写了多少行代码。
    • 思路:将所有.c文件放入一个文件夹中,扫描文件夹目录,按照目录依次读取.c文件,不是注释行就计算为一行(按照个人编程习惯,注释行统一以//开头,可以修改程序为'/''/')
    • 不足:
      • 对于opendir,readdir函数还不是很理解,很多代码是根据例子生搬硬套的,自己独立无法灵活运用,无法利用dir等函数从将所有后缀文件中读取.c文件
      • 对于文件操作,文件函数理解还不深厚
    #include <stdio.h>
    #include <dirent.h>
    #include <stdbool.h>
    int main(int argc, char const *argv[])
    {
    	FILE *pt;
    	char *pt1,ch,buf[10000];
    	DIR *dirptr=NULL;
        int count=0;
        struct dirent *entry;
        if((dirptr = opendir("test.dir"))==NULL)//操作失败
        {
            printf("opendir failed!");
            return 1;
        }
        else
        {
         	while(entry=readdir(dirptr))
        	{
            	if((pt=fopen(entry -> d_name,"r"))==NULL)//打开操作不成功
    			{
        			printf("The file can not be opened.
    ");     
        			exit(0);//结束程序的执行
    			}
            	else
            	{
            		if(feof(!pt))
            		{
            			ch=fscanf(pt,"%1s",ch);
    
            			if (ch=='
    ')//扫描到换行符
            			{
            				pt1 = mystrstr(pt, "//");//注释的位置
            				if (pt1 != pt)//并不是整行注释
            				{
            					count++;//代码多一行
            				}
    
            			}
            			fgets(buf,10000,pt);
            			if (buf[0]=='')//删除空行数
            			{
            				count--;
            			}
            		}
            	}
        	}
            closedir(dirptr);
            printf("行数是%d
    ",count);
        }
    	return 0;
    }
    
    1. 你知道什么是断点吗?给出自己调试程序的例子。
    • 设置断点后,程序运行到断点自动停止,方便我们进行逐步调试。
    • 在多次程序编写中,遇到无语法错误但是运行不出的情况,就会设置断点进行单步调试。

    快速阅读与提问

    阅读完怎样快速阅读一本书后,由于没有教材,对PPT进行了阅读。

    • 第一章:如何在Linux,MacOS等环境下配置Java?Python,Java,C语言可以共用一个环境吗?
    • 第二章:在输入对象调用中看到了eader.++has++NextDouble(),在PPT中的调用格式中,没有包含has的格式,并且对System.in.read(); 与 Scanner reader=new Scanner(System.in);等具体Scanner的用法存在一定混淆。
    • 第三章:instanceof 运算符实际运用意义是什么? for(声明循环变量:数组的名字) 运用中,是不是不需要知道数组长度?
    • 第四章:在传参和包的这两个地方不太理解。
    • 第五章:什么时候需要运用到子类?
    • 第六章:接口变量public、static,final的区别是什么?
    • 第七章:为什么通过try-catch语句解决异常而不是从根本上改变异常语句出错的原因呢?try-catch语句能够解决所有异常吗?
    • 第八章:引用和实体的区别是什么?
    • 第九章:不是很理解不同处理事件之间的区别与应用。
    • 第十章:如何限制读取的文件的后缀名,例如只读取.txt文件忽略其他文件?
    • 第十一章:MySQL数据库与SQL Server数据库与Derby数据库分别应该如何应用呢,能否用JAVA搭建一个数据库?
    • 第十二章:Java是多线程,但是为什么PPT中说“JVM就会知道又有一个新一个线程排队等候切换了”,是排队而不是同时进行呢?
    • 第十三章:PPT讲解了基于UDP的数据包的接收与发送,那么如何基于TCP进行数据包的接收与发送呢?
    • 第十四章:除了钟表的公式还有别的特殊公式吗?
    • 第十五章:散列表的具体的数据结构是什么样的,和链表的区别是什么?

    Java学习

    • 对比C语言的学习,你对《Java程序设计》的学习有什么具体目标?

      • 学习目标:能较为熟练地运用Java,完成一些略微复杂的困难编程。
    • 如何通过刻意训练提高程序设计能力和培养计算思维?

      • 训练方法:多练习,多提问,多思考,再回归练习。
    • 如何通过“做中学”实现你的目标?

      • 通过实践练习已经掌握的知识,发掘自己的疑问和漏洞,再进行思考和实践,弥补知识的漏洞,最终回归实践。
  • 相关阅读:
    委托的BeginInvoke和EndInvoke
    HTTP Post
    显示一个托盘
    sql语句
    在C++ 中 如何调用 C# 写的DLL(转载)
    WinForm-MenuStrip
    rsync定时同步和rsync+sersync实时同步
    innobackupex自动备份数据库脚本
    innobackupex备份恢复mysql
    gitlab安装和基本使用
  • 原文地址:https://www.cnblogs.com/atbaoi/p/8412796.html
Copyright © 2011-2022 走看看