首页 > C/C++语言, 流程方法, 编程语言, 轶事趣闻 > 老手是这样教新手编程的

老手是这样教新手编程的

2010年5月13日 发表评论 阅读评论 69,358 人阅读    

comp.lang.c全球最大的C语言新闻组,其Google的链接是:http://groups.google.com/group/comp.lang.c/ 可惜被GFW了。在comp.lang.c新闻组,有一个日本网友发了个贴子,说他正在学习一个在线的C语言课程,要完成一个作业,用程序输出如下的结果,而他的老师在美国,因为时差问题,他无法和他联系,所以只有上这里来寻求帮助。

    *
   ***
  *****
 *******
*********
*********
 *******
  *****
   ***
    *

很明显,在comp.lang.c上发这种贴子是一定会被拍的很惨的,这样的事,以前在SUN的论坛上也发生过,详情请看这里。还有一个去软件官网上要一个盗版序列号的。果不然后,我看到了这样的一个回贴。提供这样的一段代码:

#define      M 002354l
#define     A   000644l
#define    G     000132l
#define     I   000322l
#define      C 000374l
#define                a ;
#define               b for
#define              c    ++
#define             d       %
#define            e       int
#define           f           ,
#define          g             -
#define         h             011
#define        i                 =
#define       j                   {
#define      k                     )
#define     l                    '\n'
#define    m                      main
#define    n                         <
#define     o                       }
#define      p                     >
#define       q                  &&
#define        r                 (
#define         s              ||
#define          t             ?
#define           u     putchar
#define            v      void
#define             w     '*'
#define              x     :
#define               y ' '
#define                _ /
#define           C_O_O_L return
                   e u r e k a
                         e
                        m r
                       v k j
                      j j j j
                     j j j j j
                    j j j j j j
                   j j j j j j j
                  j e z a b r z i
                 M _ A _ G _ I _ C
                a z n G a u r z d h
               + z _ h p M _ A q z d
              h + z _ h n M _ G q z _
             h n z d h + M _ I q z _ h
            p z d h g M _ C t w x y k f
           z d h g h + 1 s u r l k f z c
          k a u r l k a j j j j j j j j j
         j j C_O_O_L M _ A _ G _ I _ C a o
        o o o o o o o o o o o o o o o o o o
                      o o o o
                      o o o o
                      o o o o
                      o o o o

这段程序是可以编译通过的,没有任何问题,而且还是可以得到正确的结果的。关于这样的程序,你可以参考本站的这篇文章《6个变态的C语言Hello World程序》,而另一篇文章教你如何搞乱你的C代码。呵呵。当然,你并不需要把在你的VC或是GCC下编译这段代码,现在什么都有在线了,编译器当然也在线了,这里是一篇关于在线编译器的文章,甚至一个在线的IDE(连这个网站的CTO都在本站留言了),上去编译一下你就可以看到结果了。

最后,不恶搞了,在comp.lang.c的这个贴子中看到了很多不错的“如何教新手编程”的观点,下面罗列一些:

1)你把你自认为最好程序贴出来,我会帮你看的,但我是不会帮你写的。

2)要解决这个问题,你需要先观察输出,然后找到其规律,算法总是去描述一些有规律的事情。关于你的这个程序,很明显,你可以分成两个部分,一个正三角,一个倒三角,每一行的星号都是连续的奇数,1,3,5,7,9,而前面的空格又是顺序的自然数:4,3,2,1,你看这样的规律用程序来干不是正合适吗?

从这两个例子,我们可以看到,老手应该如何去教新手,那就是,a)让其独立思考,b)步步为营的引导,c)教一种方法而不是直接给答案。希望与大家共勉。

(全文完)

(转载本站文章请注明作者和出处 酷 壳 – CoolShell.cn ,请勿用于任何商业用途)

——=== 访问 酷壳404页面 寻找遗失儿童。 ===——
好烂啊有点差凑合看看还不错很精彩 (26 人打了分,平均分: 4.85 )
Loading ... Loading ...
  1. 2010年5月13日09:42 | #1

    17行的’n'应为’\n’,不然不会是个菱形。

  2. 2010年5月13日10:36 | #2

    看不懂C的飘过,不过后面的建议倒是很赞。

    新手要学会独立思考,要不然永远是新手。

  3. 2010年5月13日10:50 | #3

    你的博客系统,把 ‘\n’ 变成了 ‘n’ ??

    17 #define l ‘n’

  4. 2010年5月13日12:54 | #4

    汗,没注意看,前面已经有人指出了 …

  5. 2010年5月13日14:16 | #5

    程序员都很幽默~

  6. 2010年5月13日16:49 | #6

    可惜被GFW了//https

  7. 2010年5月13日17:17 | #7

    tiger :

    17行的’n’应为’\n’,不然不会是个菱形。

    ox0spy :

    你的博客系统,把 ‘\n’ 变成了 ‘n’ ??

    17#define l ‘n’

    你们很强啊,还能读懂程序。PFPF

  8. 2010年5月13日18:53 | #8

    呵呵,编译跑一下就行了嘛~~看到都是 *n*n 就猜到了~

  9. 2010年5月14日16:41 | #9

    真心求教一个问题 例子里面是PHP求绝对值 我想PHP求某数的负值 怎么求

  10. SAM
    2010年5月14日16:46 | #10

    经过若干年的网络熏陶之后,现在想学学如何编程序,lz可否指点一下该如何入门? 小弟拜谢

  11. ostric
    2010年5月15日10:57 | #11

    为啥访问网站速度很慢?难道因为天子脚下墙比较厚?

  12. 2010年5月20日00:23 | #12

    ostric :

    为啥访问网站速度很慢?难道因为天子脚下墙比较厚?

    最近访问太大了,服务器顶不住了。Sorry !

  13. 2010年7月5日22:16 | #13

    # 33 “b.c”
    int putchar ( int ) ;
    int
    main (
    void ) {
    { { { {
    { { { { {
    { { { { { {
    { { { { { { {
    { int z ; for ( z =
    002354l / 000644l / 000132l / 000322l / 000374l
    ; z 002354l / 000644l && z %
    011 + z / 011 < 002354l / 000132l && z /
    011 z % 011 – 002354l / 000374l ? ‘*’ : ‘ ‘ ) ,
    z % 011 – 011 + 1 || putchar ( ‘\n’ ) , z ++
    ) ; putchar ( ‘\n’ ) ; { { { { { { { { {
    { { return 002354l / 000644l / 000132l / 000322l / 000374l ; }
    } } } } } } } } } } } } } } } } } }
    } } } }
    } } } }
    } } } }
    } } } }

    TCC预处理后的样子,大家来膜拜一下,谁给格式化下?

  14. 2010年7月5日22:19 | #14

    int putchar(int);
    int main(void)
    {
    int z;
    for(z =002354l / 000644l / 000132l / 000322l / 000374l; z 002354l / 000644l && z %011 + z / 011 < 002354l / 000132l && z /011 z % 011 – 002354l / 000374l ? '*' : '' ) ,z % 011 – 011 + 1 || putchar ( ‘\n’ ) , z ++);
    putchar('\n');
    return 002354l / 000644l / 000132l / 000322l / 000374l ;
    }
    其实格式化后只有这么个样子……

  15. 汪桂洋
    2010年9月29日16:12 | #15

    程序本身是很简单的,难得是这位仁兄花这么长的时间,将这些字符进行预定义了…这么多的字母,如果我年轻十年,我也会做的,现在嘛,太忙了,但也不知道忙什么,总之很忙就是了,代码…调试…代码…调试…

  16. 2011年4月21日19:20 | #16

    感觉这仁兄真的很有爱啊~我觉得我是没有这种毅力来娱乐代码……能跑起来就好了……

    @汪桂洋

  17. 2011年4月29日20:44 | #17

    那个程序我怎么编译失败? wintc跑了趟。。失败,VS再跑,还是失败。。

  18. Walkerinwind
    2011年6月3日11:43 | #18

    @瑟
    如果在codeblocks中编译,需要加个
    #include 之类的头文件
    putchar()貌似需要头文件的

  19. 守望
    2011年6月7日16:50 | #19

    @瑟
    不要忘记在最开始加个头文件 #include哟~

  20. 守望
    2011年6月7日16:51 | #20

    @守望
    #include

  21. 守望
    2011年6月7日16:52 | #21

    # i n c l u d e

  22. 守望
    2011年6月7日16:54 | #22

    为什么打不出 $tdiΘ。h ??????

  23. Tydus
    2011年6月9日08:44 | #23

    我试试……
    #include <stdio.h>

  24. Tydus
    2011年6月9日08:44 | #24

    @Tydus
    yeah=。=

  25. Tsing
    2011年8月23日17:44 | #25

    厄?? 不是被GFW了么?我怎么可以访问???http://groups.google.com/group/comp.lang.c/

  26. meShare2011
    2012年4月27日23:19 | #26

    太牛逼了,在CMD里cl fucking_original.c出现EXE的那一刻,碉堡了!点击运行,都快要晕过去了!

  27. aishuishou
    2012年8月9日16:32 | #27

    至少2012年可以上这个网址了,哈

  28. vai
    2013年5月6日17:48 | #28

    这位仁兄让我想到了JS1K上面那些变态老外的搞法。。。

  29. nnkken
    2013年9月20日10:09 | #29

    用gcc -E展開#define後,刪掉大量無用大括號,把數字與算式換回十進制,再稍微修改後得到:
    int putchar ( int ) ;
    int main (void ) {
    int z;
    for ( z = 0; z 3 && colnum+linenum < 14 && linenum colnum-5 ? ‘*’ : ‘ ‘);
    if (colnum == 8) {
    putchar(‘\n’);
    }
    }
    putchar ( ‘\n’ ) ;
    return 0;
    }

  30. nnkken
    2013年9月20日10:12 | #30

    怎麼源代碼貼不出來……
    http://ideone.com/HNx57v

  31. lilongss
    2014年1月26日17:48 | #31

    不错啊。
    看出来是老鸟。

  1. 2010年8月31日17:21 | #1
  2. 2010年9月30日11:30 | #2
  3. 2011年4月21日19:13 | #3
  4. 2011年6月3日15:41 | #4
  5. 2011年6月7日16:54 | #5
  6. 2011年6月8日12:45 | #6
  7. 2011年8月18日18:45 | #7
  8. 2011年10月13日17:26 | #8
  9. 2013年1月28日15:56 | #9
  10. 2014年3月6日22:42 | #10
  11. 2014年3月7日14:42 | #11