第三章 运算符与表达式Pro

三、运算符与表达式

第三章 运算符与表达式Pro_第1张图片

 C语言一共有34个运算符,记这些运算符时从以下几个方面记:

        运算符的书写形式;

        运算符的运算规则;(两个整数相除,结果为整数)

        所能进行的操作数;(取余运算符%,操作数只能是整数

        优先级和结合性;

        a+b*c   //要考虑优先级问题

        

考点一       算术运算符

  1. 两个整数相除的结果为整数。
    5/3=1,1.0/2.0=0.5      //整数除法为整数    小数除法为小数
  2. %要求参加运算的运算对象为整数,结果也是整数。
    8%3,结果为2
    -8%3,结果为-2
    被除数是正结果为正,被除数为负,结果为负
  3. *不能省略
  4. 理解和掌握%10为截取个位
                        /10为截掉个位
    分解整数用的比较多

        考点二        赋值运算符与表达式(3钟)

  1. 赋值运算符: = ,优先级倒数第二(逗号倒一)
  2. 赋值运算符左侧必须为变量,不能为常量或表达式,区别于数学式;
  3. 右结合;
int x,y,z;//定义

x= y=z=3;//赋值

int x=y=z=3;   X  //定义要逐个定义逐个赋值


带数据类型的叫做定义
不带数据类型的叫做 使用

4、区分赋值运算和逗号运算x=3,y=5; x=(3,y=50);

5、复合赋值运算符:y+=y*=3+6;等价于y = y* (3+6);

++(--)只能是变量,不能是常量,表达式       可以是混合运算
 

2019 .已知int y=10:则执行y+=y-=y-y;后y的值是()

A.10        B.20        C.30        D.40

#include 
void main()
{
    int a = 10;
    a +=a -= a-a;
    printf("a = %d", a);
}

2018. 设有语句 int a=3; 则执行了 a*=a+=a-2; 后为()
A.3        B.4        C.16        D.9

#include 
void main()
{
    int a = 3;
    a *=a += a-2;
    printf("a = %d", a);
}

        第三章 运算符与表达式Pro_第2张图片

        考点三        关系与逻辑运算符等价形式

  1. > < >= <= == !=
  2. 优先级:< <= > >= ——  ==    !=
    算术运算符 → 关系运算符赋值→ 赋值
  3. 关系表达式的值为一个逻辑值,即“真”用“1”表示或“假”用“0”表示。

int x=4,y; y=2

#include 
void main()
{
    int x=4,y;
    y=2
  1. ! && ||
  2. 优先级:!&&||
    ! 算术运算符 关系运算符 &&   || 赋值
  3. 知识点
    运算时:所有非0值(包括负数)均“真”,0表示“假”
    结果:真为1,假为0

 2)若变量c为char型,能正确判断c为大写字母的表达式写法:

#include 
void main()
{
    char c;
    scanf("%c",&c);
    if (c >= 'A' && c <= 'Z') {
        printf("你输入的是大写字母");
    }else{
        printf("你输入的是小写字母");
    }
}

 

判断c为小写的程序段

#include 
void main()
{
    char c;
    scanf("%c",&c);
    if ((c >= 'a') && (c <= 'z')) {
        printf("你输入的是小写字母");
    }else{
        printf("你输入的不是小写字母");
    }
}

第三章 运算符与表达式Pro_第3张图片 

2019.以下关于逻辑运算符两侧运算对象的叙述正确的是( )

A.只能是整数0或1

B.只能是整数0或非0

C.只能是整数0或正整数

D.可以是任意合法表达式

 2019 .若有int x=1,y=2,z;则表达式z=(x==y)的值是

A.0        B.1        C.true        D.flase

#include 
void main()
{
    int x=1,y=2;
    int z=(x==y);
    printf("%d",z);
}

    

         考点四        短路规则

  1. a&&b :有假则假,全真才真。
    求解——如a为真,才判断b的值;如a为假则不再判断b;
  2. allb:有真则真,全假才假。
    求解——如a为假,才判断b的值;如a为真则不再判断b;
  3. 注意:优先级在短路规则中失效!

若a=3,b=1;执行a++1l--b后,a,b的值?

#include 
void main()
{
  int a=3,b=1;
  if(a++||--b){
      printf("%d%d",a,b);
        }
    }

      

例:a = 2; b = 3; c = 4a>1|| b++ >2 ||c--!=0

#include 
void main()
{
  int a=2, b=3,c=4;
  if(a>1||b++>2||c--!=0){     //遇真则真 全假才假   a>1 成立为1 不继续往下执行
      printf("a=%d \nb=%d\nc=%d",a,b,c);
        }
    }

       第三章 运算符与表达式Pro_第4张图片

 例: a=1,b=2,c=3,d=4,m=1,n=1(m=a>b)&&(n=c>d) m=?,n=?

已知整型变量m,n,a,b,c,d的值都是0,则执行(m=a==b) || (n=c==d);后m与n的值分别为()。

#include 
void main()
{
  int m=0, n=0,a=0,b=0,c=0,d=0;
  if((m=a==b)||(n=c==d)){
      printf("m=%d \nn=%d",m,n);
        }
    }

第三章 运算符与表达式Pro_第5张图片

 已知w=1,x=2,y=3,z=4,a=5,b=6;则执行语句(a=w>x)&&(b=y>z)后, a,b的值为( )。

#include 
void main()
{
  int w=1,x=2,y=3,z=4,a=5,b=6;
  if((a=w>x)&&(b=y==z)){
      printf("a=%d \nb=%d",a,b);
        }
    }

        第三章 运算符与表达式Pro_第6张图片

        考点五        条件运算符

  1. 表达式1? 表达式2:表达式3
  2. 优先级比赋值运算符,逗号运算符高
  3. 右结合
  4. a> b?a:c> d?c:d 
  5. 正确区分表达式1、2、3
    +x=y+2?y++:y-=3;
    b?a:c>d?c:d
    +a>b? (max=a):(max=b);

若x=1,y=2;则表达式x++>=y?1:2的值为( )。

#include 
void main()
{
    int x=1,y=2;
    if(x++>=y?1:2){
      printf("x=%d \ny=%d",x,y);
        }
}

第三章 运算符与表达式Pro_第7张图片

2018,已知a=1,b=2,c=3,d=4,x=5,则语句x=(a>b?a:c

#include 
void main()
{
    int a=1,b=2,c=3,d=4,x=5;
    if(x=(a>b?a:c

     第三章 运算符与表达式Pro_第8张图片

        考点六        逗号运算符

  1. 表达式1,表达式2,....,表达式n.
  2. 求解过程为:先求解表达式1,再求解表达式2,后求解表达式n。
  3. 逗号表达式的值是最后一个表达式的值.
  4. 优先级最低,具有左结合性。

        考点七        位运算

  1. &(按位)   |(按位)  ^(按位异或)   :相同为0,不同为1
    ~ (按位取反)<<(左移位)>>(右移位)
  2. 只能是整型数据或字符型数据,不能实型数据;
  3. 字节内的二进制位进行的操作;
  4. 运算对象一律按二进制补码参加运算,并按位进行运算;
    转换成二进制补码,进行位运算,根据要求转换进指数

你可能感兴趣的:(C语言,Pro,算法)