-
很奇怪的现象!
2007-10-07
#include<iostream>
#include<string>
using namespace std;
// 很奇怪的现象!如果传入参数不是"hello",是不是不会返回了呢?
// 结果是:返回a!!
string test(string t)
{
string a="what?";
if(t=="hello")
{
a="world";
return a;
}
// 这里无返回!
}int main()
{
string t;
while(cin>>t)
{
cout<<test(t)<<endl;
}
return 0;
} -
Java学习心得 (2)
2007-09-07
● java禁止块嵌套变量定义。
● boolean值一定是false或true,不可为1或0。
● 在java中int整型占4个字节,与平台无关,而C++与目标机器和操作系统相关。
● 在java中没有unsigned类型。
● 返回可变对象时,要用到clone技术,该对象要支持clone,实现cloneable接口。
● 每一个类都可以有一个main函数,方便单元测试。
● static数据域用类名访问或static方法,不推荐后者。
● "string"+2结果是"string2"。
● Java中参数传递是值传递,即使是可变对象(值为对象的引用,此时最多改变原参数对象的状态)。
● 类域会自动初始化(0或false或null),而局部变量则不会!
● Java可直接初始化类数据域,C++则不行(有一个初始化列表,在java中没必要,因没有子对象,只有引用)。
● 构造器可调用另一个构造器,而C++不行。
● 目录与包名不一致,可能可以编译,但无法解释运行(找不到class文件)。
● 由于包的可见性,类中的数据一般都应该private。(现在有了包密封jar技术)。
● Java中的继承都是公有继承,并取消多继承(多余的机制)。
● Java子类不可访问超类的私有成员,可用公用接口(super.F())。
● Java的多态默认处理方式是动态绑定。
● 可将子类放入超类数组,取出时强制转换(先用instanceof检查)(不推荐,可考虑超类的设计)。
● 抽象类不一定包括抽象方法,包括抽象方法的类一定是抽象类。抽象类不能实例化,但可引用其非抽象子类的实例。
● getClass返回一个非空对象的类型名称。
● 定义类时最好重写equals、hashCode、toString方法,必要时加个clone。
● 接口无实例域,只有未实现的方法(默认公有)和常量(默认公有静态final),可继承。
● 内部类可访问外围类实例域,并由编译器为内部类构造器添加外围类引用(outerClassName.this)。
● 局部内部类只可访问final局部变量。
● 静态内部类没有访问外围类的特权。
● AWT将处理用户界面元素的任务交给目标平台本地GUI工具箱,“一次编写,到处运行”,但结果是:1. 外观依赖于平台。2. 可移植库小。 3. “一次编写,到处调试”。
● swing实现所有平台外观一致性、平台相关的bug少、丰富便捷的元素集合。
● 异常处理原则:早传递(throws),晚处理(catch)。不可替代简单测试。无需也无法处理系统error和runtimeerror。 -
快速排序
2007-08-03
#include<iostream>
#include<time.h>
using namespace std;
const int N=10; // the length of the array will be sorted
int a[N];
int GetRandInt(int min, int max) // min<=x<=max
{
static bool Init=true;
int rc;
if(Init)
{
srand(time(NULL));
Init=false;
}
rc=(rand()%(max-min+1)+min);
return rc;
}
void RandA() // init the array: a
{
for(int i=0;i<N;i++)
{
a[i]=GetRandInt(0,100);
}
}
inline void Swap(int &a,int &b)
{
int tmp=a;
a=b;
b=tmp;
}
int Partition(int data[],int start,int end)
{
int i=start;
int j=end;
int tmp=data[start];
while(i<j)
{
do{i++;}while(data[i]<tmp);
do{j--;}while(data[j]>tmp);
if(i<j) Swap(data[i],data[j]);
}
data[start]=data[j];
data[j]=tmp;
return j;
}
void QuickSort(int data[],int i,int j)
{
if(i<j)
{
int mid=Partition(data,i,j);
QuickSort(data,i,mid);
QuickSort(data,mid+1,j);
}
}
void Display(int data[],int n)
{
for(int i=0;i<n;i++)
{
cout<<"a["<<i<<"]="<<data[i]<<endl;
}
}
int main()
{
RandA(); // init array: a with random int between 0 to 100
cout<<"Before sort:"<<endl;
Display(a,N);
QuickSort(a,0,N);
cout<<"After sort:"<<endl;
Display(a,N);
cout<<"Successfully end"<<endl;
system("pause");
return 0;
} -
加油!
2007-07-31
转眼之间,暑假已经过去了一半。时间不饶人啊~~得抓紧时间做事情啦!未来就掌握在现在的手中~是成为牛人还是人牛,在此一搏了。
-
计数排序
2007-07-31
#include<iostream>
#include<time.h>
using namespace std;
const int N=10; // the length of the array will be sorted
const int M=N; // the element in the array range 0 to M-1
int a[N];
int b[N];
int c[M];
int GetRandInt(int min, int max) // min<=x<=max
{
static bool Init=true;
int rc;
if (Init)
{
srand(time(NULL));
Init=false;
}
rc=(rand()%(max-min+1)+min);
return rc;
}
void RandA() // init the array: a
{
for(int i=0;i<N;i++)
{
a[i]=GetRandInt(0,M-1);
}
}
void displayA() // display the array: a
{
for(int i=0;i<N;i++)
{
cout<<"a["<<i<<"]="<<a[i]<<endl;
}
}
void displayB() // display the array: b
{
for(int i=0;i<N;i++)
{
cout<<"b["<<i<<"]="<<b[i]<<endl;
}
}
void Jsort()
{
for(int i=0;i<M;i++) // init the array: c with 0
{
c[i]=0;
}
for(int i=0;i<N;i++) // count the number of elements
{
c[a[i]]++;
}
for(int i=1;i<M;i++) // count the accumulate number of elements
{
c[i]+=c[i-1];
}
for(int i=N-1;i>=0;i--) // the purpose of decline is assure stable sort.
{
b[c[a[i]]-1]=a[i];
c[a[i]]--;
}
}
int main()
{
RandA(); // init array: a with random int between 0 to M-1
cout<<"before sort:"<<endl;
displayA();
Jsort();
cout<<"After sort:"<<endl;
displayB();
cout<<"successfully end"<<endl;
system("pause");
return 0;
} -
软考结果
2007-07-23
全国软件设计师考试的成绩终于出来了~~嗯,考得还可以,上午68分,下午67分,总分就是135了(满分上下午各75,总150分)。这一次的出题的确不难,不少人都过了呢~~ ^^ -
编译原理实验中
2007-07-07
NetBeans在如果生成项目时发生这种错误就无法生成项目:build-impl.xml:319:class org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs cannot be found
今天在生成项目时就遇到这个问题,郁闷了好久。上网查资料才知道是这么简单的:选择工具(T)---库管理器(L)---CopyLibs任务(类库中)---添加jar/文件夹---%NETBEANS_HOME%\ide7\ant\extra\org-netbeans-modules-java-j2seproject-copylibstask.jar---确定,然后重新生成项目就可以啦!再后来又因为NetBeans的一次意外死掉,重开之后,项目就乱了套。新建了两次项才有点莫名其妙地好了。得到的经验是,NetBeans的更新项目信息速度太慢了,一般来讲都要关了它再重开一次才算是更新,晕晕~~我认为,对文件manifest.mf和build.xml的修改都是在重启NetBeans之后才生效的,不然我不会郁闷这么久,5555555555项目基本完成了,实现了/、*、-、+、^、sin、cos、tan、cot、abs等功能。不过还要进行Junit测试的最后阶段,然后写实验报告。明天得尽快写好啦,拖拖拉拉的不好~下面是一些截图:


-
考试终于结束咯~
2007-06-29
大三的考试终于结束了,大学的最后一次必修课考试!这同时也意味着接下来的一大堆事情需要去做了,软件工程大作业,毕业设计,实习,还有个编译原理实验~有点晕呢~
不过至少可以先睡一个好觉了,睡完后再继续加油!年轻人就是这样,脚步一直都是如此地匆忙,一刻也不允许你停顿一下。
-
今天的编译原理考试!
2007-06-27
这次考试失利,总结一下:
我这次考试失利的个人原因:
1.对于LL(1)和代码优化的复习不充分。
2.对于创新性的题目做得太少了!
3.基本功还不扎实这次编译原理期末考试不合理的理由:
1.首先当然是试卷印得乱七八糟啦,无语...
2.有些题目比较偏,而且表述有时不清。
3.比较有创新性的题目分值太大了。这对于其它性质的考试不为过,但对于期末考试就不应该这样了,因为考核的应该是基础性的东西比较多才是。李文军这次的出题中的基础题的比重明显比以前出的大大下降了。让人感觉是有意让大批的人不过的。
4.李文军教的班期末考试占50%,我们C班就占60%,所以期末考试难对我们班不利。 -
编译原理个人总结
2007-06-26
偶从总体上概括一下,觉得整本书就讲到了四大块:
一.词法分析
这里要知道,正规文法、有限自动机、正规表达式是可以互相转换的,左右线性文法也可以互相转换,ε-NFA、NFA和DFA也是可以互相转换的。转换的方法大家可以自己总结一下。觉得这里最大的难题是:给出一个具体问题,让你设计对应的DFA之类的。
二.语法分析
这一块好像最多内容了。主要分成两大块,一块是自顶向下的分析方法,一块是自下而上的分析方法。自顶向下的分析方法主要有:递归下降法,包含递归的不带回溯的预测分析方法,非递归的不带回溯的预测分析方法。递归下降法要求文法已消除了左递归,另外两种方法除了要消除左递归之处还要提取公共左因子。自下而上的分析方法主要是要掌握算符优先分析法,以及LR(0)、SLR(即SLR(1))、LR(1)三种分析器。它们都是无回溯的移进归约方法,且对应的文法是无二义性的。其中的最大区别是:LR(0)无展望信息,SLR最多展望一个(当然不是任何时候都展望的,只是发生冲突时才展望,所以才叫“最多”,这也是与LR(1)最大的不同之处),而LR(1)总是向前展望一个字符。
三.语法制导翻译
好像这一章只要会画个带注释的语法树就行了。不知道是不是这样呢?
四.代码优化
好像这一章只要会用DAG对块内局部优化就行了~







