荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: Version (Who makes history and why), 信区: Program
标 题: Ken Thompson 的经典 C 程序
发信站: 荔园晨风BBS站 (Tue Mar 25 18:28:47 2003), 站内信件
大师就是大师, 不是吹的
Ken 在大学里的时候没有游戏玩, 自己给自己题目编程序找乐
最喜欢的一个是, 编写一个能够输出自身源程序的程序,
并且跟人家比赛, 谁编的代码最短.
这有点像蠕虫病毒吧. 但是大家一般概念上的会自我复制的程序
仅仅是复制自己的二进制文件,这个相对来说比较简单. 而要
完整地输出自己的源程序, 难度就比较大了.
当然那时还没有C语言, Ken 是用 Fortran 编的.
后来在获图灵奖的演说中, Ken 用 C 语言演示了这个程序.
这个程序代码真的是有大师风范,
就像那些剑道高手到了一定境界,不用剑,用树枝就能当剑使.
主程序只有几行:
char s[]={
'\t',
'0',
'\n',
'}',
';',
'\n',
'\n',
'm',
'a',
'i',
'n',
'(',
')',
'\n',
'{',
'\n',
'\t',
'i',
'n',
't',
' ',
'i',
';',
'\n',
'\n',
'\t',
'p',
'r',
'i',
'n',
't',
'f',
'(',
'"',
'c',
'h',
'a',
'r',
' ',
's',
'[',
']',
'=',
'{',
'\\',
'n',
'"',
')',
';',
'\n',
'\t',
'f',
'o',
'r',
'(',
'i',
'=',
'0',
';',
' ',
's',
'[',
'i',
']',
';',
' ',
'i',
'+',
'+',
')',
'\n',
'\t',
'\t',
'p',
'r',
'i',
'n',
't',
'f',
'(',
'"',
'\\',
't',
'%',
'd',
',',
'\\',
'n',
'"',
',',
's',
'[',
'i',
']',
')',
';',
'\n',
'\t',
'p',
'r',
'i',
'n',
't',
'f',
'(',
'"',
'%',
's',
'"',
',',
's',
')',
';',
'\n',
'}',
'\n',
0
};
main()
{
int i;
printf("char s[]={\n");
for(i=0; s[i]; i++)
printf("\t%d,\n",s[i]);
printf("%s",s);
}
这个程序本身不是严格地符合要求的,因为输出时字符数组
里的元素是显示为数字的, 但是用输出内容作为正式程序
的源程序, 那么就是严格符合要求的了.
以下是输出:
char s[]={
9,
48,
10,
125,
59,
10,
10,
109,
97,
105,
110,
40,
41,
10,
123,
10,
9,
105,
110,
116,
32,
105,
59,
10,
10,
9,
112,
114,
105,
110,
116,
102,
40,
34,
99,
104,
97,
114,
32,
115,
91,
93,
61,
123,
92,
110,
34,
41,
59,
10,
9,
102,
111,
114,
40,
105,
61,
48,
59,
32,
115,
91,
105,
93,
59,
32,
105,
43,
43,
41,
10,
9,
9,
112,
114,
105,
110,
116,
102,
40,
34,
92,
116,
37,
100,
44,
92,
110,
34,
44,
115,
91,
105,
93,
41,
59,
10,
9,
112,
114,
105,
110,
116,
102,
40,
34,
37,
115,
34,
44,
115,
41,
59,
10,
125,
10,
0
};
main()
{
int i;
printf("char s[]={\n");
for(i=0; s[i]; i++)
printf("\t%d,\n",s[i]);
printf("%s",s);
}
115,
41,
59,
10,
125,
10,
0
};
main()
{
int i;
printf("char s[]={\n");
for(i=0; s[i]; i++)
printf("\t%d,\n",s[i]);
printf("%s",s);
}
--
*
* *
* *
no more to say
★ just wish you ★
good luck
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.1.50]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店