首页 > 其他分享 >C语言打印上下金字塔的按位取反运算符的精妙用法

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

时间:2023-04-30 21:10:03浏览次数:30  
标签:int 取反 C语言 运算符 -- 按位 printf

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

#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;
}

标签:int,取反,C语言,运算符,--,按位,printf
From: https://blog.51cto.com/u_15896475/6238225

相关文章

  • java基础-算术运算符(加减乘除取余),隐式转换、强制转换
    一、运算符和表达式的定义运算符:对字面量或者变量进行操作的符号。表达式:用运算符把自变量连接起来,符合java语法的式子就可以称为表达式。例如:inta=10;intb=20;intc=a+b;其中,+,是运算符,并且是算术运算符;a+b是表达式,由于+是算数运算符,所以这个表达式叫算术表达式。二、......
  • 栈的顺序存储 C语言
    #include<iostream>#include<stdio.h>#defineMAXSIZE50typedefstruct{intdata[MAXSIZE];inttop;}SqStack;//初始化栈voidInitStack(SqStack&s){s.top=-1;}//判断栈空boolStackEmpty(SqStack&s){if(s.top==-1)......
  • C语言链式存储(使用引用传递)
    #include<stdio.h>#include<stdlib.h>typedefstructLinkNode{ intdata; structLinkNode*next;}LinkNode;typedefstructLink{ LinkNode*front,*rear;//frontrear为链表的伴随指针}LinkQueue;voidInitQueue(LinkQueue&Q){Q.front=Q.rear......
  • C语言的存储类别
    存储类别概念对象:硬件中,被存储的每个值都占用一定的物理内存,c语言吧这样的一块内存成为对象标识符:标识符用来指定特定的对象存储期:用来描述对象,描述对象在内存中保留了多长时间作用域、用来描述标识符,描述程序中可以访问标识符的区域链接:用来描述标识符,c语言有3中链接属性:......
  • C语言函数大全-- s 开头的函数(3)
    C语言函数大全本篇介绍C语言函数大全--s开头的函数(3)1.sleep1.1函数说明函数声明函数功能unsignedintsleep(unsignedintseconds);它是C语言标准库中的函数,用于使当前进程挂起一定的时间。在挂起期间,操作系统会将该进程从调度队列中移除,直到指定的时间过去为......
  • c语言创建队列的链式存储
    #include<stdio.h>#include<stdlib.h>typedefstructLinkNode{intdata;structLinkNode*next;}LinkNode;typedefstructLink{LinkNode*front,*rear;//frontrear为链表的伴随指针}LinkQueue;//初始化voidInitQueue(LinkQueue*......
  • c语言报错 [Error] invalid initialization of non-const reference of type 'LinkQue
     进行地址传递是出现报错临时值不能作为非常量引用参数进行传递所以需要在main函数中·重新定义指针传递 ......
  • 希望所有计算机学生能看到这篇c语言教程
    大部分程序员走入编程世界第一个学习的语言就是C语言。作为一门古老的编程语言,c语言拥有48年的发展历程。为什么要学习C语言?C语言是学习计算机程序设计语言的入门语言。最全面的编程面试网站C语言是一门偏底层的语言,学好它,可以让你更好的了解计算机。学会了C语言,你就能学习......
  • c语言中inline用法
    使用inline函数可以提升程序效率,但是让inline函数生效是有条件的...打开Linux内核源代码,会发现内核在定义C语言函数时,有很多都带有“inline”关键字,请看下图,那么这个关键字有什么作用呢? inline关键字的作用在C语言程序开发中,inline一般用于定义函数,inline函数也被称作......
  • C语言函数大全-- s 开头的函数(2)
    C语言函数大全本篇介绍C语言函数大全--s开头的函数(2)1.setlinestyle1.1函数说明函数声明函数功能voidsetlinestyle(intlinestyle,unsignedupattern,intthickness);设置当前绘图窗口的线条样式、线型模式和线条宽度参数:linestyle:线条样式,取值范围......