版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据的运算与输入输出优选数据的运算与输入输出Ppt3.1运算符和表达式概述运算(即操作)是对数据的加工,被运算的对象——数据称为运算量或操作数。一个表达式包含一个或多个操作,操作的对象称为操作数,而操作本身是通过运算符(也称操作符)体现的。表达式:用来计算值的式子.一个表达式由运算符和运算对象组成.C语言运算符按其功能分类:算术运算符、关系运算符、逻辑运算符、逗号运算符、位运算符、赋值运算符等。运算对象:常量,变量,函数,表达式.C语言提供有丰富的运算符,构成多种表达式,主要有:算术表达式、赋值表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式。
3.2算术运算符和算术表达式3.2.1算术运算符1.基本算术运算符:+-*/%(求余)说明:(1)/(除运算):若参加运算的对象为两个整数,结果仍为整数.(向下取整,不进行四舍五入).若其中之一为负数,则结果视机器系统而定,但多数采用“向零取整”.(2)%(求余运算):要求参加运算的数据均为整数.2.自增自减运算符:使变量的值增加一个单位或减少一个单位。算符:++自加--自减用法:
++i;--i;前置运算:在使用i之前,先使i的值加1或减1.i++;i--;后置运算:先使用i的值,再使i的值加1或减1.例:inti=2,j;j=++i;j=i++;注::(1)++,--运算符只能用于变量,不能用于表达式.
例:++55++(a+b)++均为错误的表达式.(2)++和--的结合方向是自右至左,其优先级高于加、减、乘、除,与负号属同一优先级。例:intj=5,k;k=-j++;(3)前置和后置要使用正确。如果仅是为了对变量的值进行加1或减1,那么语句i++;与++i;效果一样,语句i--;与—i;效果一样。当自加和自减运算出现在表达式中时,前置和后置运算效果不同;【例3.1】自增、自减运算符前置、后置形式的差异程序示例。#include<stdio.h>intmain(void){intk,x,y;k=10;x=k++;y=++k;printf("k=%d,x=%d,y=%d\n",k,x,y);k=10;x=--k;y=k--;printf("k=%d,x=%d,y=%d\n",k,x,y);return0;}3.算术运算符的优先级与结合性(1)二目运算符:乘(*)、除(/)、求余(%)的优先级相同,高于加(+)、减(-);结合方向为“自左至右”,即先左后右。(2)一目算符:负(-)、自增(++)、自减(--)的优先级相同,高于二目运算符加(+)、减(-)、乘(*)、除(/)、求余(%);结合方向为“自右至左”,即先右后左。3.2.2算术表达式
用算术运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合C语言语法规则的式子,称为算术表达式。如:
3+a*b/2-1.5+'a'【例3.2】程序示例。#include<stdio.h>intmain(void){inta=3,b=8,c=2,d;d=a+b*-c;printf("d=%d\n",d);return0;}3.3赋值运算符和赋值表达式赋值运算符:=
使用格式:变量名=表达式
如:a=3,r=x%y
注:赋值运算符的左边只能是变量名或变量的地址,右边可以是变量名、常量、函数、可求值的表达式。例:inta=3a=a+32.赋值运算符的优先级及结合方向赋值运算符(包括下面将要讲的复合赋值运算符)的优先级低于算术算符的优先级,结合方向是右结合,即从右至左进行运算。3.赋值表达式
(1)由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。它的一般形式为:<变量><赋值运算符><表达式>(2)在赋值表达式的一般形式中,表达式仍可以是一个赋值表达式
。赋值表达式的值是被赋值后变量的值。例:inta,b,c;a=(b=3)a=b=c=8a=5+(c=6)a=(b=10)/(c=2)4.复合的赋值运算符:+=-=/=*=%=a+=3a=a+3a-=10a=a-10a*=y+6a=a*(y+6)a/=b+5a=a/(b+5)a%=b-6a=a%(b-6)例:(1)求下列表达式中a的值
a=b=c=5a=(b=4)+(c=6)a=(b=10)/(c=2)(2)若a=12,求
a-=a*aa+=aa+=a-=a*aa+=a-=a*=a注:赋值运算符的优先级低于算术算符的优先级.3.4关系运算符和关系表达式
3.4.1关系运算符1.关系运算符、优先次序及结合方向
关系运算符:<(小于)<=(小于等于)
>(大于)>=(大于等于)==(等于)!=(不等于)优先次序:①<,<=,>,>=优先级相同②==,!=优先级相同,且低于前四个算符③关系算符的优先级低于算术算符,高于赋值算符的优先级.④结合方向为自左至右,即同级关系运算自左至右算。2.关系表达式:用关系运算符将两个C语言合法的表达式连接起来的式子.例:a>b,a+b>b+c,(a=3)>(b=5)‘a’<‘b’,(a>b)>(b<c)3.关系表达式的值:当关系表达式成立时,即为真时关系表达式的值为1,否则其值为0.即1代表真,0代表假.例:inta=3,b=2,c=1;例:inta=3,b=2,c=1,d,f;a>3的值:d=a>bd的值:a>b的值:f=a>b>cf的值:(a>b)==c的值:a==b<c的值:0110103.1逻辑运算符和逻辑表达式1.逻辑运算符及其优先次序逻辑算符:&&逻辑与||逻辑或!非运算规则:设有a,baba&&ba||b!a真真假假真真假假真假假假真真真假假假真真逻辑算符优先次序及结合方向
:①!(非)→&&(与)→||(或)②逻辑运算符中的“&&”和“||”低于关系运算符,“!”高于算术运算符。③&&、||的结合方向为自左至右,即同级逻辑运算自左至右算,!(非)的结合方向为自右至左。例:inta=2,b=2,x=4,y=5;(a>b)&&(x>y)a>b&&x>y(a==b)||(x==y)a==b||x==y(!a)||(a>b)!a||a>ba=(a>b?++a:++b);%o:输入八进制整数x=(a=3,6*a)x=a=3,6*a{inta,b,c,d;>(大于)>=(大于等于)(float)(5%3)在C标准函数库中提供了一些输入输出函数如printf()scanf()等,它们不是C语句.intmain(void)①格式控制符:%d,%c,%f即1代表真,0代表假.#include<stdio.scanf("%f%f",&x,&y);⑴连续输入多个数据时,数据间用空格或回车键或Tab键分开;a*=y+6a=a*(y+6)①++x&&++y&&++z2.逻辑表达式逻辑表达式:由逻辑运算符连接起来的C合法的式子。逻辑表达式的值:是一个逻辑量“真”或“假”。C语言编译系统在给出逻辑运算结果时,以数值1代表“真”,以0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。即非0即“真”。例:inta=2,b=3;a&&b!a5>3&&8<4-!0‘a’&&’b’#include<stdio.例:inta=2,b=3;)这样C在编译阶段不涉及硬件,可以使编译简单,在连接阶段它们与源程序的目标文件相连接,生成一个可执行的目标程序,在执行阶段调用已被连接的函数库中的输入输出函数.②条件表达式可以嵌套,即一个条件表达式又可以与另一个条件表达式组成一个新的表达式。(double)a①!(非)→&&(与)→||(或)a%(int)ya%y‘a’<‘b’,(a>b)>(b<c)%o:输入八进制整数a=(int)y{chara,b,c;例:inta=2,b=3;若x=0,y=0,z=0,则表达式x||!y&&++z的值;例:inta,b,c;r=2;h=4;aba&&ba||b!a注:在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行:例:inta=1,b=1,c=1;求:
(1)a&&b&&c(2)--a&&--b&&--c(3)++a||++b||++c(4)--a||--b||--c非0非000非0非000100011100011对逻辑运算符说明(逻辑运算中的“短路”现象):⑴&&、||其运算对象可为基本型和指针型,操作数的值为0是假,非0是真,它们的两个运算对象不一定是同类型的。⑵运算顺序:&&、||的运算顺序严格按从左至右,两个操作数的位置不可交换。⑶&&、||的运算特点:与(&&)运算若左操作数为0,则不计算右操作数;或(||)运算若左边的操作数不为0,则不计算右边的操作数。例:若x=y=z=-1,则下列表达式的运算结果及x,y,z的值分别是什么?①++x&&++y&&++z②++x&&++y||++z③++x||++y&&++z④++x||++y||++z)这样C在编译阶段不涉及硬件,可以使编译简单,在连接阶段它们与源程序的目标文件相连接,生成一个可执行的目标程序,在执行阶段调用已被连接的函数库中的输入输出函数.①!(非)→&&(与)→||(或){inta,b,c;输入:23,78注:(1)作用:将表达式强制转换为指定类型;若输入:123456,a和b的值分别是什么?printf(“%d%d”,a,b);printf(“%d,%d,%d”,a,b,c);b=2/3;a=5.例:变量均为int型,值不等于7的表达式为()字符输入函数getchar()关系表达式的值:当关系表达式成立时,即为真时关系表达式的值为1,否则其值为0.⑴连续输入多个数据时,数据间用空格或回车键或Tab键分开;如果数值长度小于m,则右端补空格.a/=b+5a=a/(b+5)
作业:1.若x=y=z=0,则下列各式运算后x,y,z的值及表达式的值。①++x&&++y&&++z②++x&&++y||++z③++x||++y&&++z④++x||++y||++z2.若x=2,y=1,z=0,则表达式x||!y&&++z的值;
若x=0,y=0,z=0,则表达式x||!y&&++z的值;3.6条件运算符和条件表达式格式:表达式1?表达式2:表达式3说明:①条件运算符的运算顺序:先求解表达式1,若为非0(真),则求解表达式2,此时表达式2的值就作为整个表达式的值,不再求解表达式3的值;若表达式1的值为0(假),则求解表达式3的值,表达式3的值作为整个表达式的值,不再求解表达式2的值.
例:inta=1,b=1;a=(a>b?++a:++b);②条件表达式可以嵌套,即一个条件表达式又可以与另一个条件表达式组成一个新的表达式。如:
max=a>b?a:c>d?c:d
条件运算符的结合方向为“自右至左”,但运算顺序自左至右。③条件运算符的优先级高于赋值运算符,但低于关系算符、逻辑算符和算术算符的优先级。例:输入一个字符,判断它是否大写,如果是将它转换成小写字母,如果不是不转换,然后输出最后得到的字符。
c=(c>='A'&&c<='Z')?(c+32):c;3.7逗号运算符和逗号表达式在C语言中逗号在下列几种情形下出现:(1)逗号作分隔符,如用于说明语句中的变量标示符之间.intj,k;(2)作为运算符,构成逗号表达式,其一般形式:
表达式1,表达式2,表达式3说明:①逗号表达式的求解顺序:按自左至右顺序求表达式的值,整个表达式的值为最右边表达式的值.如:k=10,f=50.1f=50.1,k=10②逗号表达式中的表达式可以是算术表达式,也可以是赋值表达式,如(a=3),a*4(x=8*2,x*4),x*2
③逗号运算符的优先级最低,低于其他所有运算符.例:求下列表达式的值:x=(a=3,6*a)x=a=3,6*a例:变量均为int型,值不等于7的表达式为()(A)x=y=6,x+y,x+1(B)x=y=6,x+y,y+1(C)x=6,x+1,y=6,x+y(D)y=6,y+1,x=y,x+1例:main(){inta,b,c,d=5;a=(c=3,c*d);printf(“a=%d\tc*d=%d\n”,a,c*d);b=c=3,c*d;printf(“a=%d\tb=c=3,c*d=%d\n”,b,(b=c=3,c*d));}3.9数据类型转换
不同类型的数据进行混合运算时要考虑以下问题:运算符的优先级。运算符的结合方向。数据类型转换。3.9.1自动转换规则
不同数据类型的数据在赋值时的类型转换规则是“就左不就右”,即将赋值运算符右边表达式的数据转换成左边变量的数据类型,然后进行赋值。例如:
inta:floatb;b=2/3;a=5.0/2.0;(2)在同一表达式中各数据的类型不同,编译程序会自动进行如下方式,将不同数据类型转变成同一类型后再进行运算。转换规则如图3-3所示:例:inti;floatf;doubled;longe;10+’a’+i*f-d/e①int②double③double④double⑤double在进行运算时,若一个算符两侧的数据类型不同,则需要进行转换为同一类型,转换规则:将两个不同的操作对象转换为占空间较大的那种类型,以保不失精度.3.9.2强制转换
格式:(类型名)(表达式)注:(1)作用:将表达式强制转换为指定类型;(2)表达式:可以是单个变量或可求值的表达式.例:inta=2;floatx,y=1.5;(double)a(int)(y+x)(int)y+xa=(int)y(float)(5%3)a%(int)ya%y3.10数据的输入、输出C的输入输出:C本身不提供输入输出语句,(在C中输入输出是由函数来实现的.在C标准函数库中提供了一些输入输出函数如printf()scanf()等,它们不是C语句.)这样C在编译阶段不涉及硬件,可以使编译简单,在连接阶段它们与源程序的目标文件相连接,生成一个可执行的目标程序,在执行阶段调用已被连接的函数库中的输入输出函数.在使用C语言函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中.头文件:包含调用函数有关信息的库函数名,标准输入输出函数有关信息在“stdio.h”中,若程序中调用输入输出函数应将:#include“stdio.h”或#include<stdio.h>放在程序开始.3.10.1字符数据的输入输出1.字符输出函数putchar()
格式:putchar(c)
其中:c可以是字符型变量或整型变量或字符常量,
功能:向标准输出设备(通常是显示器或打印机)输出一个字符.例#include“stdio.h”main(){chara,b,c;a=‘B’;b=‘O’;c=‘Y’;putchar(a);putchar(b);putchar(c);putchar(‘\n’);putchar(‘A’);putchar(‘\101’);putchar(65);}2.字符输入函数getchar()格式:getchar()功能:从标准输入设备(通常是键盘)输入一个字符.例:#include“stdio.h”main(){charc;inta;c=getchar();putchar(c);a=getchar();putchar(a);}注:getchar()只能接收一个字符,该字符可以赋给字符变量或整型变量,也可以不赋给任何变量,作为表达式的一部分.如putchar(getchar())3.10.2格式输出函数printf()
1.printf()函数最简单的用法一般形式为:printf(要输出的字符串常量);【例3.6】printf函数应用#include<stdio.h>intmain(void){printf("Thescoreofmyclassesare:\n");printf("No.\tName\tScore\n");printf("1\tLiPing\t495\n");printf("2\tLiuHua\t465\n");return0;}2.格式化输出数据
格式:printf(格式控制,输出表列)
例:printf(“max=%d”,c)功能:按照“格式控制字符串”中指定的格式,将输出表列中诸项输出到标准输出文件中(通常指显示器)。其中:1)格式控制是双引号括起来的字符串,包括两种信息:①由“%”和格式字符组成,如%d,%f,%c等,将输出的数据转换成指定的格式输出;②普通字符,需要原样输出的字符.2)输出表列:要输出的数据,可以是变量名,函数名,表达式例:inta=2,b=3;printf(“%d%d”,a,b);printf(“a=%db=%d”,a,b);格式字符:⑴d格式符:用来输出十进制整数.
d%d:按整型数据的实际长度输出%md:按指定的长度输出整型数据%ld:输出长整型数据⑵o格式符:以八进制形式输出整数o%o:按整型数据的八进制的实际长度输出%mo:按指定的长度输出整型数据的八进制形式%lo:输出长整型数据的八进制形式x%x:按整型数据的十六进制的实际长度输出%mx:按指定的长度输出整型数据的十六进制形式%lx:输出长整型数据的十六进制形式⑶x格式符:以十六进制形式输出整数⑷u格式符:以无符号形式输出十进制整数⑸c格式符:用来输出一个字符c%c:输出一个字符%mc:按指定的宽度输出一个字符⑹s格式符:用来输出一个字符串s%ms%-ms%m.ns%-m.ns⑺f式符:以小数形式输出一个实数f%f:不指定宽度输出一个实数,整数部分原样输出,并输出6位小数%-m.nf:按指定的宽度输出数据占m列,其中n位小数.如果数值长度小于m,则右端补空格.%m.nf:按指定的宽度输出数据占m列,其中n位小数.如果数值长度小于m,则左端补空格.3.10.3格式输入函数scanf()1.scanf():从终端输入若干个数据.
格式:scanf(格式控制,地址表列)功能:从标准输入设备(通常是键盘)上,按照指定的格式为指定的输入项输入数据。其中:⑴格式控制字符串包含两种信息:①格式控制符:%d,%c,%f②普通字符:需要原样输入.⑵地址表列:由若干个变量地址组成.例:main(){inta,b,c;scanf(“%d%d%d”,&a,&b,&c);printf(“%d,%d,%d”,a,b,c);}2.格式说明符
%d:输入十进制整数
%o:输入八进制整数
%x:输入十六进制整数
%f:输入实数
%c:输入字符
%s:输入字符串3.scanf()的用法⑴连续输入多个数据时,数据间用空格或回车键或Tab键分开;
例:inta,b;scanf(“%d%d”,&a,&b);⑵格式符前可加数字,指定输入数据所占的位数.
例:inta,b;scnaf(“%2d%d”,&a,&b);
若输入:123456,a和b的值分别是什么?
若输入:123456,a和b的值分别是什么?例:main(){inta,b,c,d;scanf(“%2d%d”,&a,&b);printf(“%d\t%d\n”,a,b);scanf(“%2d%4d”,&c,&d);printf(“%d\t%d\n”,c,d);}⑶如果在%后有一个“*”,表示跳过它对应的列数.例:scanf(“%2d%*3d%2d”,&a,&b);
若输入:1223467,a,b的值分别是什么?⑷如果转换控制
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 双方自愿合作协议模板
- 公司的股权转让的协议书
- mpa案例分析报告
- 2024-2025学年北京市五年级语文上学期期末考试真题重组卷(统编版)-A4
- 2023-2024学年天津市环城四区高二(上)期末语文试卷
- 陕西省渭南市蒲城县2024-2025学年七年级上学期期中生物学试题(原卷版)-A4
- 《工业机器人现场编程》课件-任务2.1认识机器人上下料工作站工程现场
- 《犯罪构成》课件
- 养老院老人情感慰藉制度
- 课件电力工程质量监督检查大纲介绍
- 人教版五年级上册数学《解决问题(不规则图形的面积)》说课稿
- 国家开放大学本科《公共部门人力资源管理》期末纸质考试总题库2025版
- DL-T 1071-2023 电力大件运输规范
- 冲刺2022年中考英语必背高频词汇360°无死角精练-中考英语备考资料重点知识点归纳
- 性病艾滋病丙肝防治工作总结
- 代理记账公司保密协议
- 产能合作共建协议书
- 2024年教师招聘考试-中小学校长招聘笔试考试历年高频考点试题摘选含答案
- 2024年执业医师考试-中医师承及确有专长考核笔试考试历年高频考点试题摘选含答案
- 小学四年级科学试题及参考答案
- 2024届高考复习高考小说中物象的作用(含答案)
评论
0/150
提交评论