• C语言学习笔记(四)运算符与表达式(下)


    1逗号运算符和逗号表达式

    1.1逗号表达式格式:表达式1,表达式2,表达式3,...,表达式n;

    该表达式的功能是:先计算表达式1,再计算表达式2,最后计算表达式 n,最后一个表达式的值为此逗号表达式的值。

    1.2逗号表达式的优先级:最低。

    1.3逗号表达式的值:

    例子代码:

    #include "stdio.h"
    main(){
      int a,b,c;
      a=1,b=2,c=a+b+3;
      printf("%d,%d,%d\n",a,b,c);
      c=(a++,a+=b,a-b);                    	/*变量c保存逗号表达式的值*/
      printf("%d,%d,%d\n",a,b,c);        	/*逗号表达式的作用为顺序求值*/
    }

    输出结果如下:

    1,2,6

    4,2,2

    2关系运算符和关系表达式

    2.1C语言中的真值和假值:C语言中没有逻辑型数据,所以C语言规定,用整型常量1来表示真值,所有非0的表达式和常量的逻辑值都为1,用整型常量0表示假值,只有表达式的值为0的常量和表达式的逻辑值为0

    关系表达式例子代码:

    #include "stdio.h"
    main(){
      char x='m',y='n';
      int n;
      n=x<y;                             /*取关系表达式x<y的值*/
      printf("%d\n",n);
      n=x==y-1;                          /*取关系表达式x==y-1的值*/
      printf("%d\n",n);
      n=('y'!='Y')+(5<3)+(y-x==1);       /*取关系表达式x==y-1的值*/
      printf("%d\n",n);
    }

    程序运行结果:

    1

    1

    2

    关系表达式参加算术运算:

    #include "stdio.h"
    main(){
      int a,b,c;
      a=b=c=10;                             /*变量a,b,c赋初值*/
      a=b==c;
      printf("a=%d,b=%d,c=%d\n",a,b,c);     /*注意等号与赋值号的区别*/
      a=(b+(c++>2));
      printf("a=%d,b=%d,c=%d\n",a,b,c);
      /*关系表达式的值可以参加运算c++>2成立,值为1和b相加值放到a中存放*/
      a=b>c*100;
      printf("a=%d,b=%d,c=%d\n",a,b,c);
      /*利用关系表达式计算要注意运算的优先级*/
    }

    程序运行结果:

    a=1,b=10,c=10

    a=11,b=10,c=11

    a=0,b=10,c=11

    3逻辑运算符和逻辑表达式

    3.1基本逻辑运算符包括:单目运算符!,双目运算符&&、||。

    逻辑与运算符例子代码:

    #include "stdio.h"
    #define PI 3.1415926
    main(){
       int  m,n;
       int k;
       k=(m=0)&&(m=1);
       printf ("%d,%d\n",m,k);
       k=(m=1)&&(m=0);
       printf ("%d,%d\n",m,k);
       k=(m=2)&&(m=1)&&(m=0);                   /*多层逻辑与运算的规则测试*/
       printf ("%d,%d\n",m,k);
       m=0,k=0;
       n=k++&&m++;
       printf ("%d,%d,%d\n",k,m,n);
       m=0,k=0;
       n=m++&&k++;                             /*测试表达式k++&&m++与m++&&k++*/
       printf ("%d,%d,%d\n",k,m,n);
    }

    程序运行结果:

    0,0

    0,0

    0,0

    1,0,0

    0,1,0

    逻辑或运算符例子代码:

    #include "stdio.h"
    main(){
      int  m,n;
      int k;
      k=(m=0)||(m=1);                        /*逻辑或运算的计算规则*/
      printf ("%d,%d\n",m,k);
      k=(m=1)||(m=0);
      printf ("%d,%d\n",m,k);
      k=(m=2)||(m=1)||(m=0);                 /*多层逻辑或运算的规则测试*/
      printf ("%d,%d\n",m,k);
      m=0,k=0;
      n=++m||++k;
      printf ("%d,%d,%d\n",k,m,n);
      m=0,k=0;
      n=++k||++m;
      printf ("%d,%d,%d\n",k,m,n);          /*测试表达式++k||++m与++m||++k+*/
    }

    程序运行结果:

    1,1

    1,1

    2,1

    0,1,1

    1,0,1

    逻辑与和逻辑或混合运算例子代码:

    #include "stdio.h"
    main(){
      int m,k;
      k=(m=0)||(m=1)&&(m=2);    /*表达式理解为(m=0)||((m=1 )&&(m=2))*/
      printf ("%d,%d\n",m,k);
      k=(m=2)||(m=1)&&(m=0);     /*表达式理解为(m=2)||((m=1)&&(m=0))*/
      printf ("%d,%d\n",m,k);
      k=(m=2)&&(m=1)||(m=0);     /*表达式理解为((m=2)&&(m=1))||(m=0)*/
      printf ("%d,%d\n",m,k);
      k=(m=0)&&(m=1)||(m=2);     /*表达式理解为((m=0)&&(m=1))||(m=2)*/
      printf ("%d,%d\n",m,k);
    }

    程序运行结果:

    2,1

    2,1

    1,1

    2,1

    4条件运算符和条件表达式

    4.1条件运算符"?:"C语言中唯一的的三目运算符,优先级高于赋值运算

    表达式语法: 表达式1?表达式2:表达式3

    其执行顺序是:先求解表达式1,若为0则执行表达式2,否则执行表达式3

    例子代码:

    #include "stdio.h"
    main(){
      char  ch;
      scanf("%c" , &ch);	 /*  输入一个字符,赋给变量ch  */
      ch=(ch>='A'&&ch<='Z')?(ch+'a'-'A'):ch;        /*  当字符为大写字母时,将其变为小写字母 */
      printf("\n%c",ch);
    }

    5sizeof运算符

    5.1sizeofC语言的一种单目运算符,运算对象是变量名、表达式或数据类型标示符。功能是以字节形式给出操作数的存储大小。

    5.2语法格式:sizeof(表达式或 sizeof 表达式 或sizeof(数据类型)

    6取地址运算符

    6.1取地址运算符的运算对象只能是变量,运算结果为变量的存储地址。

    7几种运算混合运用

    例子代码:

    #include "stdio.h"
    main(){
      int x,y=1,z;
      x=((9+6)%5>=9%5+6%5)?1:0;  /*((9+6)%5>=9%5+6%5)等价于(((9+6)%5)>=(9%5+6%5))其值为0*/
      printf(" x=%d\n",x);
      y+=z=x+3;                    /* y+=z=x+3等价z=x+3,y=y+z*/
      printf(" y=%d\t z=%d\n",y,z);
      x=y=z=1;
      --x&&++y||z++;               /*混合的逻辑与和逻辑或运算*/
      printf(" x=%d\t y=%d\t z=%d\n",x,y,z);
    }

    程序运行结果:

      x=0

      y=4  z=3

      x=0  y=1 z=2

  • 相关阅读:
    关于这个 blog
    P6499 [COCI2016-2017#2] Burza 题解
    CF1172F Nauuo and Bug 题解
    CF1479D Odd Mineral Resource 题解
    CF1442E Black, White and Grey Tree 题解
    CF1442D Sum 题解
    CF1025D Recovering BST 题解
    CF1056E Check Transcription 题解
    CF1025F Disjoint Triangles 题解
    红包算法的PHP实现
  • 原文地址:https://www.cnblogs.com/SunnyYue/p/3970283.html
Copyright © 2020-2023  润新知