c++输出星号三角形阵

img


如何打每个星号中间的空格是它对齐?
应该再怎么加个循环,没转过弯来

参考这个:

#include <stdio.h>
int main()
{
    int height,n,i,j,k;
    char ch;
    printf("请输入高度:");
    scanf("%d",&height);
    printf("请输入要打印的字符:");
    getchar();
    scanf("%c", &ch);

    n=height;
    for(i=1;i<=height;i++) // 控制上面等腰三角形的高度
    {    
        for(j=n-1;j>0;j--)
        {
            printf(" "); // 输出每一行最前面的空格    
        }
        n--;
        for(k=1;k<=i;k++) // 打印每一行的字符ch和空格后的东西
        {
            printf("%c ", ch);
        }
        printf("\n"); // 打印下一行
    }

    // for(i=1;i<height;i++) // 控制下面等腰三角形的高度
    // {
    //     for(j=1; j<=i;j++) // 输出每一行最前面的空格
    //     {
    //         printf(" ");
    //     }
    //     for(k=i;k<height;k++) // 打印每一行的字符ch和空格后的东西
    //     {
    //         printf("%c ", ch);
    //     }
    //     printf("\n"); // 打印下一行
    // }
    return 0;
}
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/259860
  • 这篇博客也不错, 你可以看下C++ 重复释放同一块内存空间没有报错的思考
  • 除此之外, 这篇博客: c++中无符号整数回绕机制以及原理解析中的 首先明确一点,在计算机内部,所有的带符号数据都是用补码表示的,那究竟为什么用补码表示呢? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 我们知道:原码的表示方法:最高位作为符号位,不表示数据,0为正,1为负。
    比如 [+1] = [0000 0001] (原码) [-1] = [1000 0001] (原码)

    反码:正数和原码相同,负数:符号位不变,其余数位取反
    [+1] = [0000 0001] (反码) [-1] = [1111 1110] (反码)

    补码:正数和原码相同,负数:符号位不变,其余数位取反+1
    [+1] = [0000 0001] (补码) [-1] = [1111 1111] (补码)

    所以到这里,基本出来了,-1对于带符号型(以8位为例)来说用补码表示自然就是 1111 1111
    对于不带符号整数来说,最高位不表示符号位,故表示255 这也是unsigned回绕机制的原理。说到底,还是计算机底层表示