zoukankan      html  css  js  c++  java
  • 分享一个有趣的打印菱形的程序

    想必如果让大家写一个c语言版本的打印菱形的程序,估计都是手到擒来的吧。但是大家请看看下面的这段代码,你是否可以想到呢?

    #include <stdio.h>
    
    int line = 1;
    int main()
    {
            printf("%*s\n",
                    7-(line>4? line-4: 4-line),
                    "*******"+2*(line>4? line-4:4-line)
            );
            if(++line != 8)
                    main();
            return 0;
    }
    

      

    首先说一下”%*s”的用法,论坛里前几天可可余香童鞋已经写过了一篇总结:
    http://www.cppleyuan.com/viewthread.php?tid=9351
    即*是用一个int参数来代替,比如:
    printf(“%*s\n”, 5, “def”);

    就相当于printf(“%5s\n”, “def”);
    指定了字符串输出的宽度。
    这个用法平时见得不多,可以了解下。

    另外:
    有人对这一行

    "*******"+2*(line>4? line-4:4-line)
    

      

    感到疑惑,其实认真看一下,就是一个字符串指针加上一个int整数,也就是指针的平移了。

    比如line=1第一行时,2*(line>4? line-4:4-line)即为6,也就是7个星号的字符串指针平移6个,所以输出一个星号了。

    最后这个程序用到了main函数的递归调用,注意一定要写上退出条件,否则就无限循环了。

  • 相关阅读:
    /usr/bin/ld: 找不到 /usr/lib64/libatomic.so.1.0.0
    linux Version mismatch error. This is libtool 2.4.6 Debian-2.4.6-2
    java播放语音文件
    java冒泡排序
    java递归求和
    常见芯片标号说明
    keil5 新建 stm32项目 步骤
    st-link 升级固件时报错“is not in the DFU mode”
    数码管 段选位选
    C51 定时器
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2601719.html
Copyright © 2011-2022 走看看