学习基础和C语言基础调查
做中学体会
阅读做中学之后,了解老师关于五笔练习、减肥、乒乓和背单词的经历,不禁联想到自己学古筝的经历。
- 成功的经验
- 兴趣
我其实小时候学过一段时间古筝,但是那时候是因为父母的要求,自己并不喜欢,后来就终止了。直到再过了几年自己对于古筝产生了兴趣,主动要求重新学习古筝,一直坚持到了最后。 - 专注
说来惭愧,我练琴从来不是定时定量的,而是根据心情和专注程度来,对于我来说,心不在焉的练习两个小时的效率没有专注练习半小时高。状态不好时当天我会放弃练习,状态好的时候连续练习几个小时也不觉得疲惫,最终效果也是不错。 - 坚持
学习过程中也遇到过许多困难,比如中间停止的断层,比如与学业的冲突,但是没有想过放弃,逐渐坚持下来,虽然由于上学距离远,携带不便等原因,现在还是生疏了,但是在整个学习过程中,不曾中断过。
- 兴趣
- 共通之处
- 持之以恒
不管是学习哪种技能,都是贵在坚持。学习速度因人而异,有快有慢,但是只要坚持,不管速度快慢都是可以达成目标的。 认真练习
从老师的博客联系自己的经历,不难看出,所有的学习过程都要付出努力,没有一蹴而就的事情,都需要认真练习,才能有所收获。C语言基础调查
数据结构为大二下的课程,有些问题不太了解,通过网络查询后形成自己的理解,如有理解错误希望老师能够指出。
- 持之以恒
- 你是怎么学习C语言的?(作业,实验,教材,其他),与你的高超技能相比,C语言的学习有什么经验和教训?
- 上课听讲,下课练习。有疑问查询网络,解决不了的进行答疑。
- 重在理解,语法虽然重要,但是是可以即时学习的,更重要的是算法的设计,编程只是实现算法的过程,可以有多种方式实现,锻炼自己的思维才是关键。
- 目前为止估算自己写过多少行C代码?理解的情况如何?量变引起质变,如何平衡质和量?
- 没有具体计算过,应该不少于4000行。
- 感觉对于复杂程序还不能熟练编写,有所理解但不够深入。
- 先进行量变:基础短代码练习,学习理解;再进行质变:调用知识,灵活运用,完成更深一层的理解学习。
- 学过了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;
}
- 学过了C语言,你明白文件和流的区别和联系吗?如何区分文本文件和二进制文件?如何编程操作这两种文件?
- 文件和流的区别与联系:文件是信息的一个集合,是一种真实的设备;而流是一种抽象概念,它是连接程序与文件、设备,导入或者导出设备的通
- 文本文件和二进制文件:文本文件是字符序列,与外设中的字符序列不一一对应,需要进行转换;二进制文件是字节序列,不需要进行转换可以直接对应。
- 编程操作两种文件的方法:C语言分别规定了相对应的函数操作:
- 文本文件函数:"r","w","a","r+","w+","a+"
- 二进制文件函数:"rb","wb","ab","rb+","wb+","ab+"
- 学过了C语言,你知道什么叫面向过程程序设计吗?它解决问题的方法是什么?
- 面向过程程序设计是分析解决问题的过程中的具体步骤,按照具体步骤进行程序设计,顺序执行每一函数。
- 解决问题方法方法:根据问题进行分析,按执行顺序安排每一步骤,依据步骤进行函授编程。
- 在C语言里面,什么是模块?你写过多个源文件的程序吗?
- 在C语言里面,模块可近似看为函数。
- 没有写过
- 学过了C语言,你知道什么是“高内聚,低耦合”吗?这个原则如何应用到高质量程序设计中?
- “高内聚,低耦合”的理解:高内聚是指模块尽可能独特完成单一子功能;低耦合是指模块与模块之间尽可能相互独立,模块与模块之间的接口尽可能少且简单。
- 在设计程序时,要学会将程序模块化成功能单一,相对独立的模块,再灵活调用,进行编程。
- 学过了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;
}
- 写一个程序,统计自己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;
}
- 你知道什么是断点吗?给出自己调试程序的例子。
- 设置断点后,程序运行到断点自动停止,方便我们进行逐步调试。
- 在多次程序编写中,遇到无语法错误但是运行不出的情况,就会设置断点进行单步调试。
快速阅读与提问
阅读完怎样快速阅读一本书后,由于没有教材,对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,完成一些略微复杂的困难编程。
- 如何通过刻意训练提高程序设计能力和培养计算思维?
- 训练方法:多练习,多提问,多思考,再回归练习。
- 如何通过“做中学”实现你的目标?
- 通过实践练习已经掌握的知识,发掘自己的疑问和漏洞,再进行思考和实践,弥补知识的漏洞,最终回归实践。