04运算符、表达式、语句

04运算符,表达式和语句

一、运算符
1单目运算符

+(正号运算符)

-(负号运算符)

2赋值运算符
=
int a = 1;

读法:将1赋值给a

= 左边必须是一个变量,因为不能将一个值赋给一个常量

左侧是目标类型,计算机会转成左侧一样的类型

定义变量时要防止数据溢出

如果只是声明了变量,未赋值,则编译器会默认赋予声明的变量一个值(-858993460)。

赋值表达式和赋值语句:

  • 赋值表达式的末尾没有分号,而赋值语句有分号
  • 一个表达式可以包含赋值表达式,但决不能包含赋值语句

复合赋值运算符

> += -= *= /= %

int a = 12;
int a += 12;//相当于 a = a + 12;
int a -= 12;
int a *= 12;
int a /= 12;
int a %= 12;
3算术运算符

+ - * / %

a = b + 1;
a = b - 1;
a = b * 1;
a = b / 1;//取整
a = b % 1;//取余
a = (3 + 2) * 5;
printf("%d %d %d %d %d",f + 4, 1 + 2, 2 - 1,3 * 5, 6 / 2, 7 % 2,(3+4)*2);

除法中注意:

  • 分母不能为0,取余时不能为浮点数
  • 负数参与除法运算,VC++采取向零取整。例-5/3 = -1

% 运算符要求参加运算的运算对象(即操作数)为整数,结果也是整数。如8%3,结果为2.

小练习:拆分整数

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
    int b = 2345;
	printf("%d",b % 10);//5
    printf("%d", b / 10 % 10);//4
    printf("%d", b / 10 / 10 % 10);//3
    printf("%d", b /1000);//2
    system("pause");
    return 0;
}

自加自减

++ –

int main(void)
{
    int a = 12, b = 12;
    int c = a++;
    int d = ++b;
    printf("%d, %d",a, c);//13,12
    printf("%d, %d",b, d);//13,13
}

++操作符后置,先运算再自增;++操作符前置,先自增再运算;自减同理

(其实上边这句话不对,因为++运算符比=优先级高,但是可以得出正确的结果!)

注意点:

❗ 同一个变量的自加自减在同一条语句中尽量只用一次,不同编译器得到的结果不一样.例如:

int b = a++ + ++a + a++;//❌
printf("%d %d %d", a, a++, ++a);//❌

❗ 当下边语句中出现了++后,该变量的值就变了

int a = 1;
int b = a++;
printf("%d %d", a, b);//2 1
4逗号运算符

运用:

  • 在for循环中:
for(int i = 0,int j = 2; i < 5; i++)
j++;
  • 作分隔符使用:
printf("%d", num);
scanf("%ld",&number);
  • 作为逗号表达式:
x =(y = 3,(z = ++y + 2+ 5;
//效果是首先把y赋值为3,把y递增为4,然后把4加上2,把结果6赋值给z,接下来把z加5,最后把x赋为结果值11。
int number = 249, 450;
//249是左子表达式,而450是右子表达式,而整个表达式的值是右子表达式的值即450
5关系运算符

> < = > <= >= == !=

每个关系运算符都把它左边的值与它右边的值进行比较。

一个简单的关系表达式由一个关系运算符及其两侧的操作数组成。如果关系为真,关系表达式的值为1;如果关系为假,关系表达式的值为0。

6逻辑运算符

&& :两者都为真则真

|| :一假则为假

!:取相反

逻辑表达式是从左到右求值的,一旦发现有使表达式为假的因素,立即停止求值。

5 > 2 && 4 > 7//flase
5 > 2 || 4 > 7//ture
!(4 > 7)//ture
    
if(range >=90 && range <= 100)//✔
    printf("Good show!\n");
if(90 <= range <= 100)//❌
    printf("Good show!\n");

🎈改变拼写法:

C99标准为逻辑运算符增加了可供选择的拼写法:

他们在iso646.h头文件里定义,如果包含了这个头文件,就可以用and,or,not来分别代替他们

传统的ISO646.h
&&and
||or
not
if(ch != '"' and ch !='\'')
    charcount++;
7条件运算符

? :

expression1 ? expression2 : expression3

如果expression1为真,整个表达式的值为expression2,否则为expression3.

(5 > 3) ? 1 : 2//1
(a > b) ? a : b//取最大值
8位运算符

<< >> ~ | ^ &

9求字节数运算符

sizeof

给出它右边的操作数的字节大小。操作数可以是在圆括号里的一个类型说明符,或者具体的变量、数组的名字

例如:

sizeof(float);
sizeof foo;
10强制类型转换运算符

(类型名)(表达式)

作为指派运算符,它将跟在它后面的值转换成由圆括号里的关键字所指定的类型。

  • (double)a 将a转换成double类型
  • (int)(x + y) 将x + y的值转换成int型
  • float(5%3) 将5%3的值转换成float型

有两种类型转换;

  1. 系统自动进行的类型转换
  2. 强制类型转换
11成员运算符

. ->(减号和一个大于号)

//.应用举例:结构体变量引用
struct Date
{
    int day;
    int month;
    int year;
} today;
today.day = 1;
today.month = 15;
today.year = 2021;
//->应用举例:访问结构体类型数组成员
struct Date
{
    int day;
    int month;
    int year;
};
struct Date today, *pDate;
pDate = &today;
pDate -> day = 1;
pDate -> month = 15;
pDate -> year = 2021;
12下标运算符

[]

也是变址运算符

13函数调用运算符

()

14指针运算符

* 指针变量定义时,*是指针说明符,表示其后面的变量是一个指针变量;使用指针变量时,*是取内容运算符,表示取得指针所指向的变量的值。

&取地址运算符,作用是取得&后面的变量的地址。&符号后能接任何类型的变量

混合运算

计算机只能对同种类型的数据进行运算,不同类型的混合运算,系统要先进行转换,才能运算。

类型转换就可能造成内存截断,这个结果可能是错误的,或者我们不想要的。

  • +、-、*、/ 运算的两个数中有一个数为float或double型,结果是double型。系统将float型数据都先转换为double型,然后进行运算。
  • 如果int型与float或double型数据进行运算,先把int型和float型数据转换为double型,然后进行运算,结果是double型
  • 字符型数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算
优先级

百度百科

二、表达式

含义:表达式是一个运算符和操作数的组合。(操作数是运算符操作的对象)

举例:

4

2 + 3

q = 5 * 2

q > 7

三、语句

语句是构造程序的基本成分。一条语句是一条完整的计算机指令。

程序是一系列带有某种必需的标点的语句集合。

分为简单语句和复杂语句,简单语句以一个分号结束,例如

声明语句:int toes;

赋值语句:toes = 12;

函数调用语句:printf("%d\n", toes);

结构化语句:while( toes < 20 ) toes = toes + 2;

空语句: ;//什么都不做

复合语句或代码块,由一个或多个括在花括号里的语句(这些语句本身也可能是复合语句)构成,例如:

while(years < 100)
{
    wisdom = wisdom * 1.05;
    printf("%d %d \n",wisdom);
    years = years + 1;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值