版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章C程序的基本构成3.1C语言的运算符与表达式3.2C语言的语句 程序设计基础1第3章C程序的基本构成教学目标熟悉运算符及其功能。掌握各种表达式的使用。了解数据的类型转换规则。理解C程序的语句。 程序设计基础23.1C语言的运算符与表达式C运算符算术运算符:(+-*/%++--)关系运算符:(<<===>>=!=)逻辑运算符:(!&&||)赋值运算符:(=及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(*&)求字节数运算符:(sizeof)位运算符:(<<>>~|^&)强制类型转换:((类型))特殊运算符:括号(),下标[],成员()等程序设计基础3→,.1.运算符的定义及分类学习运算符应注意:运算符功能与运算量关系要求运算量个数:单目、双目、三目要求运算量类型运算符优先级别结合方向结果的类型3.1C语言的运算符与表达式程序设计基础4单目:-6双目:3+5右结合:x=y=z左结合:8/2*4=168/(2*4)=12.表达式及其值用运算符和括号将若干个运算量(常量、变量和函数等)连接起来的、符合C语言语法规则的式子,称为表达式。例:
a*b+ca*(b+c)c*sin(x)+cos(x)
注意:(1)乘号*不能省略;(2)运算符两侧运算对象的类型应一致,否则将自动转换;(3)只能使用圆括号改变运算的优先顺序。(4)只能使用纯文本字符,不能用上标、下标、平方根号等。3.1C语言的运算符与表达式程序设计基础5运算符含义操作数个数优先级结合性-取相反数1个(单目)高低从右向左*/%乘法除法求余2个(双目)从左向右+-加法减法2个(双目)从左向右3.1.1算术运算符和算术表达式1.算术运算符:
+-*/%程序设计基础6/:除格式:A/B5/2=25.0/2=2.53.1.1算术运算符和算术表达式注意:(1)两个整数相除,结果是整数,若不能整除,只取结果整数部分,小数部分舍去。(2)+、-、*、/运算符中的两个数,有一个是实数,则结果为实数。程序设计基础73.1.1算术运算符和算术表达式【例3.1】除运算符对整数和带小数点数的不同处理示例。#include<stdio.h>main(){ printf("%d,%d\n",8/3,-8/3); printf("%f\n%.20f\n",8.0/3,8.0/3);}运行结果:2,-22.6666672.66666666666666650000程序设计基础8%:取余。格式:A%B返回整数A和整数B相除之后的余数(Remainder)3.1.1算术运算符和算术表达式注意:(1)%运算要求操作数A、B都必须是整数(2)%运算余数的符号与被除数相同9程序设计基础程序设计基础【例3.2】+、-运算符的应用。#include<stdio.h>main(){intx=-5;printf("%d,%d,%d,%d\n",+x,-x,x,5+-x);}3.1.1算术运算符和算术表达式运行结果:-5,5,-5,1010
作为前缀运算符时,先n值加/减1,然后取变量n的值m=++n;n=n+1;
m=n;3.1.1算术运算符和算术表达式2.算法运算符:++--自增、自减运算符
形式:前缀(++n,--n),后缀(n++,n--)
功能:++让参与运算的变量值加1;--让参与运算的变量值减1作为后缀运算符时,先取变量n的值,然后n值加/减1m=n++;m=n;n=n+1;程序设计基础11程序设计基础【例3.3】++运算符的功能及前缀、后缀形式的功能区别。#include<stdio.h>main(){intm=6,n=6;printf("表达式m++=%d\n",m++);
//%d位置输出的是表达式m++的值,而不是m的值
printf("m++之后的m=%d\n",m);printf("表达式++n=%d\n",++n);//输出++n的值printf("++n之后的n=%d\n",n);}3.1.1算术运算符和算术表达式运行结果:表达式m++=6m++之后的m=7表达式++n=7++n之后的n=712程序设计基础【例3.4】--运算符的功能及前缀、后缀形式的功能区别。#include<stdio.h>main(){intm=6,n=6;printf("表达式m--=%d\n",m--);
//%d位置输出的是表达式m--的值,而不是m的值
printf("m--之后的m=%d\n",m);printf("表达式--n=%d\n",--n);//输出--n的值printf("--n之后的n=%d\n",n);}3.1.1算术运算符和算术表达式运行结果:表达式m--=6m--之后的m=5表达式--n=5--n之后的n=513说明:(1)++和--的操作对象是变量,不能用于常量和表达式。
例:5--和(a-b)++都是非法的。(2)++和--的结合方向:自右向左。
例:-i++-(i++)
3.1.1算术运算符和算术表达式程序设计基础143.1.1算术运算符和算术表达式3.算术表达式及其值算术表达式是用若干个算术运算符将若干个运算量连接起来的式子。运算量可以是常量、变量、函数。算术表达式的书写规则:①要遵从运算符和它操控的运算量的书写顺序要求。②用*表示乘且不能省略。③只能使用纯文本字符构成,不能使用上标、下标、平方根号等。算术表达式的值:该表达式的计算结果。由自增、自减运算符构成的表达式的值规定如下:用作前缀时,把执行加1或者减1运算之后的变量的值作为表达式的值。用作后缀时,把执行加1或者减1运算之前的变量的值作为表达式的值。程序设计基础153.1.1算术运算符和算术表达式4.算术运算符的优先级和结合性算术运算符的优先级为:(+、-、++、--)高于(*、/、%)高于(+、-)算术运算符的结合性为左结合例:inti=3;-5+3%2+9/4-2*i=(-5)+(3%2)+(9/4)-(2*i)=-5+1+2-6=-8程序设计基础163.1.1算术运算符和算术表达式5.整数、实数、字符间的混合运算整型、实型、字符型数据间可以进行混合运算,在运算之前需将所有运算量的数据类型转换为相同。算术表达式会进行自动转换,转换规则如下:(1)进行+、-、*、/运算的两个数中若有一个数为float或double型,则将两个数均先转换为double型再运算,表达式的值是double型。(2)字符(char)型数据可与整型数据直接进行运算,就是把字符的ASCII值与整型数据进行运算。程序设计基础173.1.2关系运算符和关系表达式1.关系运算符运算符名称功能举例表达式的值==等于判断左右两侧的数据的值是否相等a==ba与b相等则为真,用整数1表示,否则为0!=不等于判断左右两侧的数据的值是否不相等a!=ba与b不相等则为真,用整数1表示,否则为0>大于判断左侧的数据是否大于右侧的数据a>ba大于b则为真,用整数1表示,否则为0<小于判断左侧的数据是否小于右侧的数据a<ba小于b则为真,用整数1表示,否则为0>=大于或等于判断左侧数据是否大于或等于右侧的数据a>=ba大于或等于b时值为1,否则为0<=小于或等于判断左侧数据是否小于或等于右侧的数据a<=ba小于或等于b时值为1,否则为0程序设计基础183.1.2关系运算符和关系表达式2.关系运算符优先级与结合性<<=>>===!=优先级6(高)优先级7(低)关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。3.关系表达式及其取值规则关系表达式是用关系运算符连接运算量得到的表达式。关系表达式的值:逻辑值“真”或“假”,分别用整数1和0来表示。float19程序设计基础3.1.2关系运算符和关系表达式3.关系表达式及其取值规则【例3.5】关系表达式的值。#include<stdio.h>main(){
floatx=3.15,y=3.15;
printf("%d\n",x==3.15);//将输出0,系统判为不成立
printf("%d\n",x<3.15);//将输出0,系统判为不成立
printf("%d\n",x>3.15);//将输出1,系统判为成立
printf("%d\n",3.15==3.15);//将输出1,系统判为成立
printf("%d\n",x==y);//将输出1,系统判为成立}程序设计基础203.1.2关系运算符和关系表达式3.关系表达式及其取值规则【例3.6】分析下面程序的运行结果。#include<stdio.h>main(){
floatx,y=0.3;
x=3+0.3;//x中应存入3.3,但实际所存的数不一定精确等于3.3y=y*11;//y中应存入3.3,但实际所存的数不一定精确等于3.3
printf("x=%f,y=%f\n",x,y);//输出x和y的值
printf("%d",x==y);//将会输出0,判为不成立}运行结果:
x=3.300000,y=3.3000000程序设计基础213.1.2关系运算符和关系表达式4.注意事项(1)对实数进行比较时,应避免作相等或不等的判断,实在需要比较,则用它们的差的绝对值与一个很小的误差值(如1e-6)相比,如果小于此数,认为它们相等。程序设计基础22例floata,b;if(fabs(a-b)<1e-6)printf("相等");3.1.2关系运算符和关系表达式4.注意事项(2)注意区分“=”与“==”。(3)一个表达式中含有多个关系运算符时,一定要注意它与数学式的区别。
数学式5>x>3与关系表达式5>x>3的区别程序设计基础23例注意区分“=”与“==”inta=0,b=1;if(a=b)printf("aequaltob");elseprintf("anotequaltob");3.1.3逻辑运算符和逻辑表达式1.逻辑运算符运算符名称功能举例功能&&逻辑与做逻辑与运算a&&ba和b同时为真时,运算结果为真;否则为假||逻辑或做逻辑或运算a||ba和b同时为假时,运算结果为假;否则为真!逻辑非做逻辑非运算!aa为真时,运算结果为假;a为假时,运算结果为真程序设计基础243.1.3逻辑运算符和逻辑表达式2.逻辑运算符的优先级与结合性!(2)&&(11)||(12)高低例a>b&&c>d
!b==c||d<a
a+b>c&&x+y<b优先级:结合方向:!:从右向左&&:从左向右||:从左向右//(a>b)&&(c>d)//((!b)==c)||(d<a)//((a+b)>c)&&((x+y)<b)程序设计基础253.1.3逻辑运算符和逻辑表达式3.逻辑表达式及其取值规则ab!a!ba&&ba||b非0非00011非0001010非01001001100程序设计基础263.1.3逻辑运算符和逻辑表达式3.逻辑表达式及其取值规则短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符例a&&b&&c//只在a为真时,才判别b的值;
只在a、b都为真时,才判别c的值例a||b||c//只在a为假时,才判别b的值;
只在a、b都为假时,才判别c的值例a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)//结果m=0,n=1程序设计基础273.1.3逻辑运算符和逻辑表达式3.逻辑表达式及其取值规则【例3.7】写出能够判断下面条件的逻辑表达式。(1)条件“诚信得分不低于80且团队合作得分不低于70”。逻辑表达式:(honestyScore>=80)&&(teamworkScore>=70)(2)条件“|x|是一个两位数”。逻辑表达式:x>=10&&x<=99||x>=–99&&x<=–10(3)条件“y年是闰年”,能被4整除但不能被100整除的年份或者能被400整除的年份是闰年。逻辑表达式:y%4==0&&y%100!=0||y%400==0(4)条件“x、y落在圆心在(0,0)半径为1的圆外、中心点在(0,0)边长为2的正方形内”。逻辑表达式:x*x+y*y>1&&x>–1&&x<1&&y>–1&&y<1程序设计基础281.三种赋值形式1.简单赋值(SimpleAssignment)2.多重赋值(MultipleAssignment)赋值运算的结合性是右结合3.复合的赋值(CombinedAssignment)变量
=表达式;变量1=变量2=表达式;3.1.4赋值运算符和赋值表达式简单赋值:floatx=3.14;inta,b,c;a=2;a=2*10;a=a+1;x=sin(a)*x;a=(a>1)&&(a<5);错误:34=2;sin(x)=5.6;3+a=5;程序设计基础29运算符实例说明+=n+=5;n=n+5;-=n-=5;n=n–5;*=n*=5;n=n*5;/=n/=5;n=n/5;%=n%=5;n=n%5;3.复合赋值运算符
3.1.4赋值运算符和赋值表达式程序设计基础303.1.4赋值运算符和赋值表达式2.赋值运算符的优先级和结合性结合方向:自右向左优先级:14(所有的赋值运算符的优先级都是相同的)
a=b-=c+=3等价于a=(b-=(c+=3))3.“=”与“==”的不同例注意区分“=”与“==”if(a==2)printf("%d",a);if(a=2)printf("%d",a);程序设计基础313.1.5条件运算符和条件表达式1.条件运算符
一般形式:表达式1
?表达式2
:表达式3执行过程求两个数据的最大值?表达式1取表达式2值取表达式3值非0=0例(a==b)?'Y':'N'(x%2==1)?1:0(x>=0)?x:-x(c>='a'&&c<='z')?c-'a'+'A':cmax=a>b?a:b;程序设计基础323.1.5条件运算符和条件表达式2.条件运算符的优先级与结合性结合方向:自右向左优先级:条件运算符的优先级比赋值运算符高,比前面介绍的其他运算符都低。例a>b?(a>c?a:c):(b>c?b:c)
a>b?a>c?a:c:b>c?b:c程序设计基础333.1.6逗号运算符和逗号表达式形式:表达式1,表达式2,……,表达式n结合性:从左向右优先级:15(所有运算符里最低)逗号表达式的值:等于表达式n的值例a=3*5,a*4a=3*5,a*4,a+5例x=(a=3,6*3)x=a=3,6*a//a=15,表达式值60//a=15,表达式值20//赋值表达式,表达式值18,x=18//逗号表达式,表达式值18,x=3程序设计基础343.1.7不同类型数据之间的类型转换类型转换:发生在不同数据类型的数据混合运算时。三种类型转换方式:1.自动转换(隐式转换)2、赋值转换(隐式转换)3、强制转换(显式转换)程序设计基础353.45+103.45+10+'a'3.1.7不同类型数据之间的类型转换1.自动转换(隐式转换)运算转换---不同类型数据混合运算时赋值转换---把一个值赋给与其类型不同的变量时输出转换---输出时转换成指定的输出格式函数调用转换---实参与形参类型不一致时转换运算转换规则:程序设计基础363.1.7不同类型数据之间的类型转换1.自动转换(隐式转换)程序设计基础37例charch;inti;floatf;doubled;ch/i+f*d-(f+i)floatfloatintintdoubledoubledoubledouble3.1.7不同类型数据之间的类型转换1.自动转换(隐式转换)程序设计基础38#include<stdio.h>main(){charch='a';inti=5;unsignedintj=6;longk=12;floatf=3.0;doubled=6.0;printf("%lf\n",ch/i+i*k-(j+k)*(f*d)/(f+i));}38.5000003.1.7不同类型数据之间的类型转换2.赋值转换(隐式转换)
变量
=
表达式
赋值号右侧表达式值的类型强制换成左侧变量的类型转换规则:(1)实型数据赋给整型变量,舍去小数部分。(2)整型数据赋给实型变量,数值不变,以浮点形式存放(3)字符型数据赋给整型变量,将字符的ASCII码值赋给整型变量。(4)整型数据赋给字符型变量,只把整数的低8位赋给字符变量。程序设计基础393.1.7不同类型数据之间的类型转换2.赋值转换(隐式转换)【例3.8】赋值时自动发生的类型转换举例。#include<stdio.h>main(){inta,b=322;//322的二进制101000010floatx,y=8.88;charc1='k',c2;
a=y;
x=b;printf("a=%d,x=%f\n",a,x);a=c1;c2=b;//整数赋给字符型变量,只截取低8位printf("a=%d,c2=%c\n",a,c2);}运行结果:
a=8,x=322.000000
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学交通安全知识班会课件
- 能源行业安全监管及环保指标完成情况KPI考核表
- 数字营销策略优化与转化提升预案
- 影视后期制作团队视频剪辑师作品质量与创意绩效考核表
- 数据备份恢复策略技术预案
- 小学主题班会课件-传统文化我传承
- 金属矿山安全管理员运行操作安全操作规程
- IT技术支撑部门员工专业技术水平绩效考评表
- 旅游行业导游客户满意度与旅行规划实施KPI考核表
- 网络通信设备配置与维护指南
- 天津高考英语词汇3500
- ISOIEC17025:2017CNAS-CL01:2018《检测和校准实验室能力认可准则》
- 结构化学课件-金属晶体与离子晶体的结构
- 2023年四川日报报业集团招聘笔试备考试题及答案解析
- 食品工程原理-传热
- GB/T 77-2007内六角平端紧定螺钉
- GB/T 6730.18-2006铁矿石磷含量的测定钼蓝分光光度法
- GB/T 33772.1-2017质量评定体系第1部分:印制板组件上缺陷的统计和分析
- GB/T 29679-2013洗发液、洗发膏
- 煤矿安全管理基础知识培训
- 某某单位空调维保投标文件
评论
0/150
提交评论