说句实话,我尚未那种特别特别自信的、说我能拿得出手的、所谓能超过百分之九十以上的人的技能。毕竟人外有人,天外有天。html
姑且算上象棋吧,能下的过一些人,碰上一些天天都在下的那种老爷爷可能仍是不太招架得过来。java
至于说我所积累的经验,总结一下,大量的实战经验和灵活的思惟模式。编程
首先说这头一点吧,实战经验就是大量的练习。有的人下棋就喜欢背棋谱,不过我以为纸上得来终觉浅,或者说,我以为真刀真枪地干上一局比背棋谱进步得快。其实......我小时候也没想这么多,这都是我如今瞎bb的。个人象棋算是野路子学来的,小时候和爷爷奶奶下,一点点启蒙的技巧仍是会的。再后来,上小学了,和班里同窗下,参加比赛等等。从始至终没有上过正儿八经的培训班之类的,因此,到底应该怎么学我也不知道。数组
可是我以为下的多,仍是有帮助的。见的套路多,中的招多了,天然能长记性。编辑器
因此我如今把这个经验总结为:大量的实战经验。小时候打下的底子,纵观全局,不可或缺。模块化
第二,死脑筋仍是不行的,思惟要灵活。对局时动脑子想一想几步以后走到哪里了,有没有便宜可占,猜对手想干什么,其中有没有杀机;对局后动脑子,这个对手棋路风格如何,刚才有没有失误,等等。若是不动脑子,那么进步就是一种奢望。函数
勤能补拙,静能生慧。我以为这是与老师博客中的学习经验的最大共通之处,也是全部求学道路上的秘诀。学习
刚刚开始的时候,基础的知识了解一点,一些基本的语句。测试
而后就是刷题刷题刷题......老师给的那个c语言在线题库。debug
以后慢慢开始学会看错误信息,找错,学会用debug等等,再后来帮同窗改程序,一些易错的地方愈来愈熟练,到最后慢慢地开始和大佬们交流,看看其余人是怎么写的。
总而言之就是不断进步嘛,本身发现问题解决问题,查书,问同窗,问度娘,问老师。这就是个人,最大的收获。
(老师对不起写了多少行C语言代码我是真的内心没数啊)
等等啊,咱们如今一个实验写程序大概100~200行,这样算下来,咱们作了这么多大大小小的实验,应该有个小几千行了。
目前写的代码都仍是能理解的,毕竟都是本身写的,应该不存在看不懂的问题;其余人的代码也仍是看得懂,只是要多看两眼,多琢磨琢磨,多是代码看少了,不太熟练吧。
量变引发质变,这是必然的规律。我以为咱们只要慢慢积累,天然集腋成裘,没有必要刻意追求质变的发生。也许有一天,咱们回过头来,看见本身从最开始的“Hello world!”到后来能本身编个小应用,咱们就会感叹不知不觉中质变的发生。
也不知道我记的是否是对的。
数组指针,说白了是指针嘛,指向一个数组的指针;指针数组是一个数组,数组里储存的是指针。
函数指针相似,函数指针是指向一个函数的指针;指针函数是一个函数,函数返回值是一个指针。
第一个问题只知道一点点......
文件指的是电脑储存设备上的数据信息,流简单的说应该是字节序列,文件的输入输出控制,外部输入输出设备等等。关系:流是一种向文件写入字节和从文件读取字节的方式。
第二个问题......我以为广义上讲,文本文件本质就是二进制文件的......因此两者的区别并非物理上的,而是逻辑上的。二进制文件能够存储char/int/short/long/float/……各类变量值。做为特殊的二进制文件,文本文件只能存储char型字符变量。所以,文本文件每条数据一般是固定长度的,而二进制文件不是。
文本文件编辑器就能够读写,好比记事本;二进制文件须要特别的解码器。
C语言是面向过程的程序设计。所谓过程就是,酒一口一口喝,步子一步一步走,先干吗再干吗,顺序很重要,对于计算机而言只须要一个一个地实现就好了。
解决问题的办法就是把一个程序模块化,从上往下步步求精便可。
在设计一个较大的程序时,能够把它分红若干个程序模块,每个模块包括一个或多个函数,每个函数实现一个特定的功能。C语言经过函数来实现其模块化功能的。
多个源程序倒没有写过,目前只写一个源程序的。
“高内聚,低耦合”其实按字面意思也很好懂,程序的模块与模块之间的耦合度要低,接口处尽可能简单;模块内部要作得精细,模块内的函数功能联系要紧密。
应用上主要的问题在于模块的划分。一方面要考虑耦合性:为了提升模块的独立性,模块与模块之间的联系应该尽量的减小,尽可能在主函数里调用,实现非直接耦合;另外一方面要考虑内聚:尽量实现一个模块对应一个功能。
(假设数组char型,长度为5,数组a是1,2,a,b,c)
把数组A的内容复制到数组B中:最简单就是脚标循环,一个一个对应着写。
#include <stdio.h> #include <stdlib.h> int main() { char a[5]={'1','2','a','b','c'}; char b[5]; int i; for (i=0;i<5;i++) { b[i] = a[i]; } return 0; }
如何查找整数数组A中有没有数字5?脚标循环查找。
#include <stdio.h> #include <stdlib.h> int main() { char a[5]={'1','2','a','b','c'}; int i; int flag = 0; for (i=0;i<5;i++) { if (a[i]=='5') { flag = 1; break; } } if (flag) printf("Bingo!"); else printf("Not Found!"); return 0; }
如何对整数数组A进行排序(从小到大,从大到小)?冒泡排序。
下面是从大到小排序(按照ASCII码排序)。从小到大只须要将判断条件,由“if (a[j]<a[j+1])”
改成“if (a[j]>a[j+1])”
。
#include <stdio.h> #include <stdlib.h> int main() { char a[5]={'2','1','b','a','c'}; int i,j; int temp; for (i=0;i<4;i++) { for (j=0;j<4-i;j++) { if (a[j]<a[j+1]) { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } for (i=0;i<5;i++) { printf("%c",a[i]); } return 0; }
这个是大二上作中国剩余定理实验的代码,前先后后敲了一周吧。
//中国剩余定理实验 #include <stdio.h> #include <stdlib.h> #define N 10000 #define M 10 struct equa //方程:bx = a mod n; { int a; int b; int n; }; int modni(int a,int b); //模逆运算 m = a^(-1) mod b int gcd(int a,int b); //求最大公因子 int gcd(int a,int b)//展转相除法求最大公因子 { int temp; if (a<b) { temp = a; a = b; b = temp; } while (b!=0) { temp = a % b; a = b; b = temp; } return a; } int modni(int a,int b)//模逆运算 m = a^(-1) mod b { int v1=0,v2=1,q,temp; if (a>b) { a = a % b; } while (a!=0) { q = b/a; v1 = v1-v2*q; temp = b % a; b = a; a = temp; temp = v1; v1 = v2; v2 = temp; } return v1; } int main() { int x,xn; //方程总个数 struct equa E[M],B[M]; //两个方程组,互写(bx = a mod n) int m0 = 1; //m0 是中国剩余定理的 m int m[M]; //m 是中国剩余定理的 M int mm[M]; //mm 是中国剩余定理的 M' int shit = 0; //最终结果 x = shit mod m0 int i = 0,j,k; //角标 int g1,g2; //互素分解的临时储存位置 printf("Please input the number of equations:\n"); scanf("%d",&x); xn = x; //数据保留 if (x>M) { printf("Error!\nx>%d\n",M); exit(0); } while (x--) { printf("Please enter b,a,n:\n(bx = a mod n)\n"); if (scanf("%d",&E[i].b)&&scanf("%d",&E[i].a)&&scanf("%d",&E[i++].n)) continue; else { printf("\nError!"); exit(0); } } for (i = 0;i<xn;i++) //计算m m0 *= E[i].n; for (i = 0;i<xn;i++) //计算M m[i] = m0/E[i].n; for (i = 0;i<xn;i++) //计算M' mm[i] = modni(m[i],E[i].n); for (i = 0;i<xn;i++) shit += m[i]*mm[i]*E[i].a; shit = shit % m0; printf("x = %d mod %d",shit,m0); //程序测试部分 /*for (i = 0;i<xn;i++) { printf("%dx = %d (mod %d)\n",E[i].b,E[i].a,E[i].n); }*/ }
原来的那个程序太长了,我就改了一下,如今这段代码只能解很简单的那种方程了。这个程序掐头去尾共有91行代码。
断点就是程序运行时会自动中止的地方,准确来讲应该是在调试过程当中,程序运行到断点位置会中止。
程序调试如图所示。
程序运行结果如图所示。
Java的动态特征不太理解。
为啥有一个“boolean 关闭 = false”?
3.1.5的例子看不怎么懂......
不理解“Java支持中文类名、方法名、属性名,而且不会由于乱码问题致使运行期连接失败。这是Java内核支持UTF-8这一特性决定的。”
全部的类都有本身的子类吗?
不理解接口和abstract类的具体区别。
异常类不理解。
第八章日后我基本一脸蒙逼了......后面的边学边问吧,我感受这学期Java的学习会让我收获很多。
计算机语言的学习我以为是代码堆出来的。语言的学习离不开环境,而对于计算机语言,代码就是环境。想要提升程序设计能力和培养计算思惟,软磨硬泡地训练是必不可少的。“作中学”要求咱们有灵活的思惟,摆脱“温馨区”,进入“学习区”。