当前位置 : 主页 > 编程语言 > c语言 >

C语言打印上下金字塔的按位取反运算符的精妙用法

来源:互联网 收集:自由互联 发布时间:2023-09-06
在打印上下金字塔的通常语句用法应该都是像下面这种 #include stdio.h int main(){ int n; do{ for(int i=1;in;i++){ for(int a=0;an-i;a++){ printf(" "); } for(int j=0;j2*i-1;j++){ printf("*"); } printf("\n"); } for(int g=n;

在打印上下金字塔的通常语句用法应该都是像下面这种

#include <stdio.h>
int main(){
    int n;
  do{
     for(int i=1;i<n;i++){
         for(int a=0;a<n-i;a++){
             printf(" ");
         }
        for(int j=0;j<2*i-1;j++){           
            printf("*");
        }
        printf("\n");
    }
        for(int g=n;g>0;g--){
         for(int a=n-g;a>0;a--){
             printf(" ");
         }
        for(int j=2*g-1;j>0;j--){           
            printf("*");
        }
       printf("\n");
    }
   } while(scanf("%d",&n)!=EOF);
}

但是我发现用while循环与按位取反运算符的精妙用法直接解决了金字塔中多打印空格的问题,随然解决的问题有很多替代方法但是看见这种“绝迹”用法还是会觉得眼前一亮。各位可以尝试说一下按位取反运算符解决空格问题的实现原理。

#include<stdio.h>
int main()
{
    int n;
    int i,j;
    while(~scanf("%d",&n))
    {
        for(i=0;i<n;i++)
        {
            for(j=i;j<n-1;j++)
                printf(" ");
            for(j=0;j<2*i+1;j++)
                printf("*");
            printf("\n");
        }
        for(i=0;i<n-1;i++)
        {
            for(j=0;j<i+1;j++)
                printf(" ");
            for(j=0;j<2*(n-i-1)-1;j++)
                printf("*");
            printf("\n");
        }
    }
    return 0;
}

上一篇:[Linux]初识Linux
下一篇:没有了
网友评论