我见过的最短最强大的程序

来源:互联网 发布:淘宝对于新店的扶持 编辑:程序博客网 时间:2024/04/29 10:05
#include<stdio.h>
main()
{
    
char *a="#include<stdio.h>%cmain()%c{%c%cchar *a=%c%s%c;%c%cprintf(a,10,10,10,9,34,a,34,10,9,10,10,10);%c%cgetch();%c}";
    printf(a,10,10,10,9,34,a,34,10,9,10,10,10);
    getch();
}

这段代码的功能是输出自己的源代码 必须使用头文件
当初是看到兰大acm培训教材里有这个题目
百思不得其解
只好去找答案了

网上的解释:
上面的红色的部分是定义一个字符型的指针a,指向的是引号里面的字符串部分;
上面的蓝色的部分是输出字符型指针a所指向的地址里的内容,也就是引号里的内容;
printf(a,10,10,10,9,34,a,34,10,9,10,10,10);
这里小括号内的第一个a是作为输出字符串的参数传入的,后面的
10,10,10,9,34,a,34,10,9,10,10,10都是作为输入格式控制的参数输入的,也就是对应着#include<stdio.h>%cmain()%c{%c%cchar *a=%c%s%c;%c%cprintf(a,10,10,10,9,34,a,34,10,9,10,10,10);%c%cgetch();%c}里面的那么%c,%s,这些数字按字符输出,它们对应的ASCII码刚好是:
9   制表符 
10  换行符 
34  引号(")
32  空格


以下是我仿照改写的c99标准版
从c99开始函数的返回值不再默认为int
所以 main()是错误的写法
而void main()  也是不合标准的写法
可悲我们的教科书上还是一堆void main()
妈的 连个main函数都写不对 还好意思来骗学生的钱


#include<stdio.h>
int main()
{
    char *a=
"#include<stdio.h>%cint%cmain()%c{%c%cchar*a=%c%s%c;%c%cprintf(a,10,32,10,10,9,34,a,34,10,9,10,10,10,32,10);%c%cgetch();%creturn%c0;%c}";
    printf(a,10,32,10,10,9,34,a,34,10,9,10,10,10,32,10);
    getchar();
    return 0;
}

 
原创粉丝点击