第3讲运算符和表达式
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运算符与表达式
2.6.7 条件运算符
格式: 表达式1 ?表达式2 :表达式3 1.表达式1的值为真,则条件表达式的值为表达式2的值 2.表达式1的值为假,则条件表达式的值为表达式3的值
3.条件运算符的结合方向为“自右至左”
4.条件运符优先于赋值运算符,低于关系运算符 例:y=6>9?2*6:18 则y=
x<=y x>=y
8〈 9 9〈 8 1 0
x==y x!=y
x=1
y=0
y=(x>y)
运算符与表达式
关系运算符优先级低于算术运算符 例 1 以下程序的结果是
高
<
<=
> >=
#include<stdio.h> == != main() { int x, y,z; = x=4+5<6*5; y=5!=12<5; z=7==8>9; printf(“%d,%d,%d”,x,y,z); } 1,1,0
x-=j+4
x*=j+4
x/=j+4
x%=j+4
x=x/(j+4)
x=x%(j+4)
注意:复合运算符相当于赋值号后有一括号,实际上是 自右至左进行运算的。
运算符与表达式
例1 如有int a=9, 计算a+=a+a和a*=2*a值。 a+=a+a a*=2*a a=a+(a+a) a=a*(2*a) a=9+18 a=9*18 a=27 a=162
运算符与表达式
例1 用关系逻辑表式x>8且x<28 例2 表示字符y是否是大写字母字符 y>=„A‟&&y<=„Z‟
x>8&&x<28
例3 判别一个数x既是5的倍数又是9倍数 x%5==0&&x%9==0 例4 判别某年y是否闰年,闰年的条年为 (1)能被4整除,但不能被100整除 (2)能被4整除,且又能被400整除 (y%4==0&&y%100!=0)||(y%4==0&&y%400==0 ) (y%4==0&&y%100!=0)||(y%400==0 )
_________; _________;
printf(“a=%d,b=%d”,a,b);
运算符与表达式
2.6.9逗号运算符和逗号表达式
1.逗号运算符:, 2.逗号表达式:表达式1,表达式2 ,...,表达式n 先计算表达式1,再计算表达式2, 最后计算表达式n的值,逗号表达式 的值为表达式n 的值。 3.逗号运算符的优先级最低,从左向右 例:x=(3+5,4+6) 例:x=3+5, x+6 赋值表达式的值为10 逗号表达式的值为14
例2 如有int a=9, 计算a+=a-=a+a和a+=a*=2*a a-=a+a a+=-9 a=a-(a+a) a=a+(-9) a=9-18 a=-18 a=-9
运算符与表达式
2.6.10 sizeof( )运算符 用来求变量或字符串所占的字节数。
如int a,b;则sizeof(b)=?
运算符与表达式
2.6.3 自增(++)、自减(- -)运算符
作用:使 变量 的值增1或减1。运算符:++,- -
形式:++n,- -n,
例 有int n=7,y;
n++, n- -
区别: ++n、- -n,先加(减)1,再对n运算 n++、n- -,先对n运算,再将n加1(减)1
y=++n;则y=8,n=8 n先自加1再把结果给表达式y y=n++;则y=7,n=8 先把n的值给表达式y,n再自加1 y=- -n; 则y=6,n=6 n先自减1再把结果给表达式y y=n- -; 则y=7,n=6 先把n的值给表达式y,n再自减1
如float a;则sizeof(a)=?
sizeof(int)=4(2),
sizeof(char)=1, sizeof(double)=8
sizeof(“hello”)=?
运算符与表达式
2.6.5 关系运算符与关系表达式
比较两个量之间的关系:< > <= >= = = !=
x<y x>y
比较的结果 真 假 int x=2,y=6; x=(y>3)
3<x<5
0 3 5
x>3 并且 x<5 3<x && x<5
高
!
&&
||
低
运算符与表达式
2.6.6 逻辑运算符与逻辑表达式
1.运算符: !(非) &&(与) ||(或)
2.运算法则如下(T为1, F为0) X 真 1 非0 真 1 非0 假 0 假 0 Y X && Y 真 1 1 非0 假 0 0 0 真 0 1 非0 假 0 0 X|| Y 1 1 1 0
(2)自增、自减运算符不能用于常量和表达式。 例如,5++、--(a+b)等都是非法的。
运算符与表达式
2.6.2 - 4.复合运算符 在赋值运算符前加上某些特定的运算符 常用复合运算符主要5种: += 例: i+=j+8 -= *= /= %= i=i+(j+8) x=x-(j+4) x=x*(j+4)
高 从左向右
* /
%
+ -
低
运算符与表达式
2.算术表达式
在计算机中,不能直接对代数式进行运算,而要将它 转化成相应的算术表达式。
例1 代数式 3x2+x-2
用算术运算符和括号将常量、变量及函数连起来的式子。
相应的算术表达式为:3*pow(x,2)+x-2 pow(x,2)是求幂的函数
a 6y 例2 代数式 2 5x 相应的算术表达式为:a/2-(6*y)/(5*x)
运算符与表达式
考虑:输入一个三位数,输出个位、十位和百位上的数字
例如,输入:135,输出:5 3 1
考虑:将两个两位数的正整数a,b合并成一个整数放在c 中。合并的方式是:将a数的十位和个位依次放在c数的 千位和十位上,b数的十位和个位数依次放在c数的百位 和个位上。
运算符与表达式
运算符的优先级和结合性
运算符与表达式
P68 从键盘输入整数a与b,如果a2+b2大于100,则输出百位 以上的数字,否则输出a与b之和。 #include<stdio.h> main() { int a,b; printf(“please input a and b”); scanf(“%d%d”,&a,&b); printf(“%d”, (a*a+b*b>100)?(( a*a+b*b)/100):(a+b)); }
低
运算符与表达式
关系表达式 适用于2个量的比较
3<x<5 x在3和5之间时,表达式值为1,其他为
计算机执行
0 (3<x)< 5 (3<1)< 5 0< 5 1
x=1时 x=4时
(3<x)< 5
(3<x)< 5 恒为 1
(3<4)< 5
1< 5
1
3个量如何进行比较???
运算符与表达式
2.6.6 逻辑运算符与逻辑表达式
运算符与表达式
2.10 顺序结构程序设计举例子
例2.5 鸡兔同笼,已知鸡兔总头数为h(Heads),总 腿数为f(Feet),问鸡兔各有多少只? 1 算法分析:
(1)数学模型 设鸡为x只,兔为y只,由题意有: x+y=h ......(1) 2*x+4*y=f ......(2)
(2)求解方程,找出x,y的具体求解公式: y=(f-2×h)/2 X=(4×h-f)/2 注意:计算机不会自己建数学模型,也不会自己解方程!
()
+ && ||
>
!
!
&&
运算符与表达式
逻辑表达式(表达式的值是1和0)
用逻辑运算符连接关系表达式的式子称逻辑表达式。 例 用逻辑表达式表达下述数学式 (1) 0<x<10 (2) x<60 ,x>80 (3)10≤x ≤ 30, 50 ≤ x ≤ 90 相应的逻辑关系表达: (1) 0<x && x<10 (2) x<60 || x>180 (或 !(x>=60 && x<=80)) (3) (x>=10 && x<=30) || (x>=50&& x<=90)
运算符与表达式
2.6.2 赋值运算符及赋值表达式
1.赋值运算符:= 2.赋值表达式:变量=表达式 例:n=5 或 sum = a+b (1)计算= 右侧表达式的值 (2)将表达式的值赋给左侧的变量 (3)将变量的值作为赋值表达式的值 3.赋值表达式加分号变成赋值语句 例:n=5; n=n+1; 4.赋值运算符的优先级和结合性 优先级较低,从右向左 例:p=q=r=9; p=q=(r=9) 表达式的值为:9
真值表 !X 0 0 1 1 !Y 0 1 0 1
!!2=? =1
运算符与表达式
4.算术、关系、逻辑运符的优先级
!
高
()
++,--
算术
-
关系
*,/
&& ||
%
=
低
+,= ,
例 已知a=3,b=4,c=5,求以下表达式的值。 1.a+b>c&&(b=c) ( ) = + > && 2.a||b+c&&b-c 3.!(a>b)&&!c
低
int
char,short
运算符与表达式
2.强制类型转换
格式: (类型名)(表达式) (double)a 将变量a的值转换成double型,等价于(double)(a)
(int)(x+y)
将x+y的结果转换成int型
ห้องสมุดไป่ตู้
(float)5/2
5转换成实型,再除以2(=2.500000),等价于(float)(5)/2
运算符与表达式
运算符与表达式
讲课顺序: 1 运算符 2 运算符的优先级
3 表达式
运算符与表达式
2.6.1算术运算符和算术表达式
1.算术运算符
+(加法)、-(减法)、*(乘法)、/(除法)、%(取余)
注意:
(1)a,b两个整数相除,商为整数,小数部分被舍弃。
例如,10/3=3 7/2=3(没有四舍五入)
运算符与表达式
2 数据结构 总头数h、总腿数f为整型常量;鸡x、兔y为整型变量 3 源程序代码 #include<stdio.h> main() 提示输入数 变量定义 { 据的内容 输入总头数 int f,h,x,y; 总腿数 printf(“Input the number of H and F:”); scanf(“%d,%d”,&f,&h); 输出总头数 x=(4*h-f)/2; 计算(变量使用) 总腿数 y=(f-2*h)/2; 输出结果 printf(“Heads=%d;Feet=%d”,h,f); printf(“Chicken=%d,rabbits=%d”,x,y); }
运算符与表达式
注意: 赋值号的左边不能是常量或表达式。 如5=b,a+b=c,是非法的。 考虑:交换两个变量的值,如果a=5,b=7,将程序 处理后a=7,b=5,将程序代码补充: int a,b,t; scanf(“%d%d”,&a,&b); printf(“a=%d,b=%d”,a,b); ________;
运算符与表达式
2.8
C程序的类型转换
表达式中出现不同类型的数据时,系统将不同类型 数据转换成同一种类型,才能进行运算。 1 自动转换 表达式的类型以最高类型为准。 两个float类型运算,先转换成double类型。 高
double float
long
unsigned
例:int a; char y; float b; z=a+y+b的类型为?
(float)(5/2)
将5整除2的结果转换成实型(2.000000)
运算符与表达式
习题1:设x=2.5,a=10,y=4.7
求表达式x+a%3*(int)(x+y)%2/4的值
习题2:设a=2,b=3,x=3.5,y=2.5
求 (float)(a+b)/2+(int)x%(int)y的值
考虑:对变量h中的值保留2位小数,并对第三位进行四 舍五入,例如h=3.1415926,处理后h=3.14;若h=2.345, 处理后h=2.35。
(2) a,b中至少有一个是实型的,则结果为实型。
例如,10.0/3=3.333333。
运算符与表达式
取余运算 a%b (b不为0)
(1) a,b必须是整型数据,否则出错。
例: 6 % 2,5 % 2, 输出结果为:0 1
(2)若a或b有负数,则对a与b的绝对值取余,余 数符号与a的符号相同 例: -7%5 余数为 -2 7%-5 余数为 2
运算符与表达式
main() { int i, j; i=5; j=5; printf(“%d\n”, ++i); printf(“%d\n”, j++); printf(“%d\n”, j); }
结果:6 5
6
运算符与表达式
说明:
(1)自增、自减运算常用于循环语句(第4章)以及 指针变量(第7章)中。它使循环控制变量加(或 减)1,或使指针指向下(或上)一个地址。