C语言使用printf打印半"v"状图形

来自《C语言程序设计-现代方法(第2版)》第二章的编程题1:

使用printf打印如下类似图形:

/*
==============================
        *
       *
      *
*    *
 *  *
   *
==============================
*/

当然最简单的办法是一行一行的打印,后来想用变量来代替并要求输入需要打印的层数。

最开始想用"\b"退格打印"V"的第一边,感觉不好控制并且"\b"不一定各种系统均兼容退格的效果,写了一半放弃了

后来想,有以下特点:

  1. 不管是什么字符,每打1行,字符数-1;

  2. 每一行末尾均为字符"*"和换行符;

  3. "V"形的第一边从层的一半开始,每加一层,第一边缩进一个空格

看来,"想"才是最重要的。

唉,当年学计算概论也做过这道题目,那时为了应付交差就按最简单的方法做了。

现在做项目也没怎么多想,想着能实现功能就行了,特别是外包的项目...

在我头顶天空一直看着我的那个人说,这种态度不好...我说好吧......

/*
 ========================================
 Name : C语言程序设计-现代方法第二章第一题
 Desc : 输出如下图形
         *
        *
       *
  *   *
   * *
    *
 ========================================
 */
#include <stdio.h>
int main( void)
{
    int i, j;
    /*层数*/
    int layer=0,
            /*第一层总字符数*/
            firstLayerChars,
            /*中间变量,某一层的字符数*/
            tmpLayerChars,
            /*层数的一半,刚好是V另一边开始*/
            halfLayer,
            /*是否是奇数层*/
            isOdd=0;
    printf("Please enter the layers you want to print:(layer must gt 4)\n");
    scanf( "%d", &layer);
    if ( layer < 4 ) {
        printf("layer must gt 4.\n" );
        return 0;
    }
    /*计算第一层要打印的字符数*/
    if ( layer%2 ==0 ) {
        /*将折断的*往下移动成直线,则为要打印的字符数*/
        halfLayer = layer/2;
    } else {
        halfLayer = (layer-1)/2;
        isOdd = 1;
    }
    firstLayerChars = (halfLayer-1) + layer;
    for ( i=0; i<layer; i++ ) {
        tmpLayerChars = firstLayerChars-i;
        for ( j=0; j<tmpLayerChars; j++) {
            if ( j<tmpLayerChars-1 ) {
                if ( i<halfLayer ) {
                    printf(" " );
                } else {
                    /*V开始*/
                    if ( j-(i-isOdd-halfLayer) == 0 ) {
                        printf("*" );
                    } else {
                        printf(" " );
                    }
                }
            } else {
                printf("*\n" );
            }
        }
    }
    getchar();
    getchar();
    return 0;
}
Tags: c语言 printf "v"
Time: 1370278513369