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.\n");     
    			exit(0);//结束程序的执行
			}
        	else
        	{
        		if(feof(!pt))
        		{
        			ch=fscanf(pt,"%1s",ch);

        			if (ch=='\n')//扫描到换行符
        			{
        				pt1 = mystrstr(pt, "//");//注释的位置
        				if (pt1 != pt)//并不是整行注释
        				{
        					count++;//代码多一行
        				}

        			}
        			fgets(buf,10000,pt);
        			if (buf[0]=='\0')//删除空行数
        			{
        				count--;
        			}
        		}
        	}
    	}
        closedir(dirptr);
        printf("行数是%d\n",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,完成一些略微复杂的困难编程。
  • 如何通过刻意训练提高程序设计能力和培养计算思维?

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

    • 通过实践练习已经掌握的知识,发掘自己的疑问和漏洞,再进行思考和实践,弥补知识的漏洞,最终回归实践。
posted @ 2018-02-04 11:37  AOI  阅读(196)  评论(3编辑  收藏  举报