Posted by: o o
May 27th,
2008
谭浩强《C语言程序设计》里面有一个动态链表的输入和输出的例子,代码如下:
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#define LEN sizeof(struct student)
struct student
{
int num;
float score;
struct student *next;
};
struct student *creat(void)
{
int N=0;
struct student *p1,*p2,*head;
p1=p2=(struct student *)malloc(LEN);
scanf("%d%f",&p1->num,&p1->score);
head=0;
while(p1->num!=0)
{
N++;
if(N==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(struct student *)malloc(LEN);
scanf("%d%f",&p1->num,&p1->score);
}
p2->next=0;
return(head);
}
void print(struct student *head)
{
struct student *p;
p=head;
if(head!=0)
do
{
printf("%d %f\n",p->num,p->score);
p=p->next;
}while(p!=0);
}
void main()
{
struct student *head1;
printf("input:\n");
head1=creat();
printf("output:\n");
print(head1);
getch();
}
用win-tc编译的时候,没有错误,可是运行的时候输入第二值后就自动关闭了,用Turbo C也一样,不过找到错误提示是scanf:floating point formats not linked. 到网上搜了搜错误原因是这样的:TC开发时(80年代)DOS下的存储资源紧缺,因此TC在编译时尽量不加入无关部分。在没发现需要做浮点转换时,就不将这个部分安装到可执行程序里。也就是说默认的情况下是不连接浮点库的,除非你需要他,这就造成了如果你没有调用浮点函数,而是直接用%f或别的形式在scanf()和peintf()里调用就会出现本例的错误——floating point formats not linked.
有两种解决办法:
1.声明一个float型的中间变量,读入,然后赋值给p->score。把第一个 scanf("%d,%f",&p->num,&p->score);
改为
float temp;
scanf("%f",&temp);
p->score = temp;
2.生明一个函数,不用调用它。
static void forcefloat(float *p)
{ float f = *p;
forcefloat(&f);
}
3.使用gcc或vc++编译器
Posted by: o o
March 26th,
2008
统计学里有一种样本,叫做自发性回应样本(voluntary response ),举个例子,就像网站做调查让人来投票,是投票的人自己主动投票来构成样本,而不是调查者主动抽取样本。这样取得结果往往是有偏的(biased),因为他吸引到到的往往是对议题有强烈感受的人,这些人可能并不能公平地代表一般大众的意见。
例如某县级地区只有一家公司有权提救护车服务,当地一家报纸发出调查是否赞成由一家公司来垄断,让读者自己打电话来赞成或反对,但之后他们发现3000多个电话中,有600多个都是那家公司的办公室或高层主管的家里,一定还会有更多的底层员工打来的。员工可能担心工作稳定和生活重担,也可能被领导嘱咐和命令多多投票,多次投票。在统计学上,3000多个样本在这个例子中已经足够,然而它却是一个坏样本。
同样想到网上的评论,它一般是自发性评论,通常对这个主题有强烈感应的人,尤其是负面感觉的,才会比较不嫌麻烦的回应。从统计学上去看网上评论和调查也蛮好玩的。主要想说的是,例如网上的泛滥的评论、评分、调查,它只代表这个网站受众中,参与这个这个调查的人的意见,他们不够成代表性的样本,不能拿到参与者之外的语境中说事。
复杂的原因比直接原因更普遍。
Posted by: o o
March 10th,
2008
弗洛伊德的防御机制里面有一条是,反应生成:人按照与无意识欲望相反的方式行动,以躲开可怕的念头或欲望。例如反色情斗争的激进分子,无意识中可能对色情有强烈的兴趣。一个如此反对色情的人怎么会是色情狂呢?
Posted by: o o
March 5th,
2008
事情发身后,什么人都可以作出合理的解释。中国的老话叫事后诸葛亮。
如果科学工作者有一个不错的理论(理论不能被证明,只能根据理论提出假设,证明假设),我们就可以预期,他在实验之前,还没有获得数据的时候能够对结果作出预测。研究的目的就是为了支持假设或不支持假设。比如一位研究者想考察自尊与助人行为之间的关系,但是他不能对这种关系作出明确预测。假如研究结果发现,高自尊的人比低自尊的人帮助别人更多,这位研究者可能作出这样的结论:出现这种情况的原因是自我感觉练好的人能够保持对做好事行为的自我评价。在这种情况下,研究资料支持了假设吗?从学书角度来说,答案是否定的。因为他的假设是在看到结果之后作出的。按照这样的顺序,假设不可能得不到资料的支持。假如结果发现低自尊的人帮助人更多,这位研究者又可能得出结论说,这些人可能想通过做好事来改善自我形象。这个假设同样不可能得不到支持。因为这个假设并没有真正地得到检验。
这不代表,如果研究者没有预测,他们的发现就不重要。相反,这样的假设往往是进一步提出假设和从事研究的基础。但是在得到结果之后作出解释等于什么也没解释。你可以从每天关于证券市场的新闻里看到这样的例子。如果美国总统讲了一次话之后,股市跌了,分析家会说,总统讲话使股市跌了,但是如果股市涨了,毫无疑问,这位分析家又会说,总统讲话使股市涨了。
我想,事后解释的意义仅是在为下个试验假设提供一个选题。
看待问题答案首先应该这样想:两件事情彼此关联并不代表一件事情是导致另外一件事情的原因。关联可能仅仅意味着两个因素(比如我们可以称其为X和Y)之间存在着一定的关系,而我们并不知道这种关系的方向。很可能是X导致了Y,也可能是Y导致了X,或者也可能是X和Y都是有另一因素Z引起的。曾经有一个故事,俄国沙皇听说那些疾病肆虐最为严重的省份往往正是那些医生最多的省份。于是他立即命令处死所有的医生。
道理虽然简单,实际中很多人都犯这样的错误。具体到生活中就会有意识和无意识的忽悠别人和被忽悠。
Posted by: o o
March 3rd,
2008
不遵循规矩就叫变态。就思想和行为而言,与众不同,不受他人左右便是变态,变态则意味着被人嫉恨。因此,词典编纂学家劝人们努力忘记自身,随波逐流,谁做到这一点,谁就会获得安宁,就可望走向死亡,实现下地狱的希望。——《魔鬼词典》