版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 数据的运算与输入输出,本章主要内容: 运算符和表达式概述 算术运算符和算术表达式 赋值运算符和赋值表达式 关系运算符和关系表达式 逻辑运算符和逻辑表达式 条件运算符和条件表达式 逗号运算符和逗号表达式 数据类型转换 数据的输入、输出,3.1运算符和表达式概述,运算(即操作)是对数据的加工,被运算的对象数据称为运算量或操作数。一个表达式包含一个或多个操作,操作的对象称为操作数,而操作本身是通过运算符(也称操作符)体现的。 表达式:用来计算值的式子.一个表达式由运算符和运算对象组成. C语言运算符按其功能分类:算术运算符、关系运算符、逻辑运算符、逗号运算符、位运算符、赋值运算符等。 运算对
2、象:常量,变量,函数,表达式. C语言提供有丰富的运算符,构成多种表达式,主要有:算术表达式、赋值表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式。,3.2算术运算符和算术表达式 3.2.1算术运算符 1.基本算术运算符: + - * / %(求余) 说明: (1) /(除运算):若参加运算的对象为两个整数,结果仍为整数.(向下取整,不进行四舍五入).若其中之一为负数,则结果视机器系统而定,但多数采用“向零取整”. (2)%(求余运算):要求参加运算的数据均为整数.,2.自增自减运算符:使变量的值增加一个单位或减少一个单位。 算符:+ 自加 -自减 用法: +i; -i; 前置运算:在使
3、用i之前,先使i的值加1或减1. i+; i-; 后置运算:先使用i的值,再使i的值加1或减1. 例:int i=2,j; j=+i; j=i+; 注::(1)+,-运算符只能用于变量,不能用于表达式. 例: +5 5+ (a+b)+均为错误的表达式.,(2)+和- - 的结合方向是自右至左,其优先级高于加、减、乘、除,与负号属同一优先级 。 例:int j=5,k; k=-j+; (3)前置和后置要使用正确。如果仅是为了对变量的值进行加1或减1,那么语句i+; 与+i;效果一样,语句i-;与i;效果一样。当自加和自减运算出现在表达式中时,前置和后置运算效果不同;,【例3.1】自增、自减运算符
4、前置、后置形式的差异程序示例。 #include int main(void) int k,x,y; k=10; x=k+;y=+k; printf(k=%d,x=%d,y=%dn,k,x,y); k=10; x=-k;y=k-; printf(k=%d,x=%d,y=%dn,k,x,y); return 0; ,3. 算术运算符的优先级与结合性 (1) 二目运算符:乘(*)、除(/)、求余(%)的优先级相同,高于加(+)、减(-);结合方向为“自左至右”,即先左后右。 (2) 一目算符:负(-)、自增(+)、自减(-)的优先级相同,高于二目运算符加(+)、减(-)、乘(*)、除(/)、求余(
5、%);结合方向为“自右至左”,即先右后左。,3.2.2算术表达式,用算术运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合语言语法规则的式子,称为算术表达式。如: 3+a*b/2-1.5+a,【例3.2】程序示例。 #include int main(void) int a=3,b=8,c=2,d; d=a+b*-c; printf(d=%dn,d); return 0; ,3.3 赋值运算符和赋值表达式 赋值运算符: = 使用格式: 变量名=表达式 如:a = 3,r = x % y 注: 赋值运算符的左边只能是变量名或变量的地址,右边可以是变量名、常量、函数、可求值的表达式。 例
6、: int a=3 a=a+3 2. 赋值运算符的优先级及结合方向 赋值运算符(包括下面将要讲的复合赋值运算符)的优先级低于算术算符的优先级,结合方向是右结合,即从右至左进行运算。 3 . 赋值表达式 (1) 由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。它的一般形式为: (2) 在赋值表达式的一般形式中,表达式仍可以是一个赋值表达式 。赋值表达式的值是被赋值后变量的值。 例:int a,b,c; a=(b=3) a=b=c=8 a=5+(c=6) a=(b=10)/(c=2),4.复合的赋值运算符:+= -= /= *= %= a+=3 a=a+3 a-=10 a=a-10
7、 a*=y+6 a=a*(y+6) a/=b+5 a=a/(b+5) a%=b-6 a=a%(b-6) 例: (1)求下列表达式中a的值 a=b=c=5 a=(b=4)+(c=6) a=(b=10)/(c=2) (2)若a=12, 求 a-=a*a a+=a a+=a-=a*a a +=a-=a*=a 注:赋值运算符的优先级低于算术算符的优先级.,3.4关系运算符和关系表达式,3.4.1关系运算符 1.关系运算符、优先次序及结合方向 关系运算符: (小于) = (小于等于) (大于) = (大于等于) = (等于) != (不等于) 优先次序: , = , , = 优先级相同 = , != 优
8、先级相同,且低于前四个算符 关系算符的优先级低于算术算符,高于赋值算符的优先级. 结合方向为自左至右,即同级关系运算自左至右算。,2.关系表达式:用关系运算符将两个C语言合法的表达式连接起来的式子. 例: ab , a+bb+c , (a=3)(b=5) ab)(b3 的值: d=ab d 的值: ab的值: f=abc f的值: (ab)=c 的值: a=bc 的值:,0,1,1,0,1,0,3.1 逻辑运算符和逻辑表达式 1 . 逻辑运算符及其优先次序 逻辑算符: a若表达式1的值为0(假),则求解表达式3的值,表达式3的值作为整个表达式的值,不再求解表达式2的值. 例: int a=1,
9、b=1; a=(ab?+a:+b);,条件表达式可以嵌套,即一个条件表达式又可以与另一个条件表达式组成一个新的表达式。如: max= ab ? a: cd ? c:d 条件运算符的结合方向为“自右至左”,但运算顺序自左至右。 条件运算符的优先级高于赋值运算符,但低于关系算符、逻辑算符和算术算符的优先级。 例:输入一个字符,判断它是否大写,如果是将它转换成小写字母,如果不是不转换,然后输出最后得到的字符。 c=(c=A,3.7 逗号运算符和逗号表达式 在C语言中逗号在下列几种情形下出现: (1)逗号作分隔符,如用于说明语句中的变量标示符之间. int j,k; (2)作为运算符,构成逗号表达式,
10、其一般形式: 表达式1,表达式2,表达式3 说明:逗号表达式的求解顺序:按自左至右顺序求表达式的值,整个表达式的值为最右边表达式的值.如: k=10,f=50.1 f=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,
11、x=y,x+1 例: main( ) int a,b,c,d=5; a=(c=3,c*d); printf(“a=%dt c*d=%dn”,a,c*d); b=c=3,c*d; printf(“a=%dt b=c=3,c*d=%dn”,b,(b=c=3,c*d); ,3.9数据类型转换,不同类型的数据进行混合运算时要考虑以下问题: 运算符的优先级。 运算符的结合方向。 数据类型转换。,3.9.1自动转换规则,不同数据类型的数据在赋值时的类型转换规则是“就左不就右”,即将赋值运算符右边表达式的数据转换成左边变量的数据类型,然后进行赋值。例如: int a: float b; b=2/3; a=5
12、.0/2.0; (2) 在同一表达式中各数据的类型不同,编译程序会自动进行如下方式,将不同数据类型转变成同一类型后再进行运算。转换规则如图3-3所示:,例: int i; float f; double d; long e; 10+a+i * f- d / e,在进行运算时,若一个算符两侧的数据类型不同,则需要进行转换为同一类型,转换规则:将两个不同的操作对象转换为占空间较大的那种类型,以保不失精度.,3.9.2强制转换,格式: (类型名)(表达式) 注: (1)作用:将表达式强制转换为指定类型; (2)表达式:可以是单个变量或可求值的表达式. 例: int a=2; float x,y=1.
13、5; (double) a (int)(y+x) (int)y+x a=(int)y (float)(5%3) a%(int)y a%y,3.10数据的输入、输出 C的输入输出:C本身不提供输入输出语句,(在C中输入输出是由函数来实现的.在C标准函数库中提供了一些输入输出函数如printf( ) scanf( )等,它们不是C语句.)这样C在编译阶段不涉及硬件,可以使编译简单,在连接阶段它们与源程序的目标文件相连接,生成一个可执行的目标程序,在执行阶段调用已被连接的函数库中的输入输出函数. 在使用C语言函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中.头文件:包含
14、调用函数有关信息的库函数名,标准输入输出函数有关信息在“stdio.h”中,若程序中调用输入输出函数应将: #include “stdio.h” 或#include 放在程序开始.,3.10.1字符数据的输入输出 1.字符输出函数putchar () 格式:putchar(c) 其中:c可以是字符型变量或整型变量或字符常量, 功能:向标准输出设备(通常是显示器或打印机)输出一个字符. 例 #include “stdio.h” main( ) char a,b,c; a=B; b=O; c=Y; putchar(a); putchar(b); putchar(c ); putchar(n); p
15、utchar(A); putchar(101); putchar(65); ,2 .字符输入函数getchar () 格式:getchar( ) 功能:从标准输入设备(通常是键盘)输入一个字符. 例: #include “stdio.h” main( ) char c; int a; c=getchar( ); putchar(c); a=getchar( ); putchar(a); ,注:getchar( )只能接收一个字符,该字符可以赋给字符变量或整型变量,也可以不赋给任何变量,作为表达式的一部分.如 putchar(getchar( ),3.10.2格式输出函数printf(),1.p
16、rintf()函数最简单的用法 一般形式为:printf(要输出的字符串常量); 【例3.6】printf函数应用 #include int main(void) printf(The score of my classes are:n); printf(No.tNametScoren); printf(1tLiPingt495n); printf(2tLiuHuat465n); return 0; ,2.格式化输出数据 格式:printf(格式控制,输出表列) 例: printf(“max=%d”,c) 功能:按照“格式控制字符串”中指定的格式,将输出表列中诸项输出到标准输出文件中(通常指显
17、示器)。 其中: 1)格式控制是双引号括起来的字符串,包括两种信息: 由“%”和格式字符组成,如%d,%f,%c等,将输出的数据转换成指定的格式输出; 普通字符,需要原样输出的字符. 2)输出表列:要输出的数据,可以是变量名,函数名,表达式,例: int a=2,b=3; printf(“%d %d”,a,b); printf(“a=%d b=%d”,a,b); 格式字符: d格式符:用来输出十进制整数.,d,%d:按整型数据的实际长度输出,%md:按指定的长度输出整型数据,%ld:输出长整型数据,o格式符:以八进制形式输出整数,o,%o:按整型数据的八进制的实际长度输出,%mo:按指定的长度
18、输出整型数据的八进制形式,%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位小数.如果数值长度小
19、于m,则右端补空格.,%m.nf:按指定的宽度输出数据占m列,其中n位小数.如果数值长度小于m,则左端补空格.,3.10.3格式输入函数scanf() 1.scanf( ):从终端输入若干个数据. 格式:scanf(格式控制,地址表列) 功能:从标准输入设备(通常是键盘)上,按照指定的格式为指定的输入项输入数据。 其中: 格式控制字符串包含 两种信息: 格式控制符:%d,%c,%f 普通字符:需要原样输入. 地址表列:由若干个变量地址组成. 例: main( ) int a,b,c; scanf(“%d%d%d”, ,2.格式说明符 %d :输入十进制整数 %o :输入八进制整数 %x :输入
20、十六进制整数 %f :输入实数 %c :输入字符 % s:输入字符串 3. scanf( )的用法 连续输入多个数据时,数据间用空格或回车键或Tab键分开; 例: int a,b; scanf(“%d%d”,格式符前可加数字,指定输入数据所占的位数. 例: int a,b; scnaf(“%2d%d”, , 如果在%后有一个“*”,表示跳过它对应的列数. 例: scanf(“%2d%*3d%2d”, 输入: 23,78,4.使用scanf函数应当注意的事项 (1) 在格式控制中,格式说明的类型与输入项的类型,应该是一一对应的。 (2) 在scanf函数中的格式字符前可以用一个整数指定输入数据所占宽度,但不可以对实型数指定小数位的宽度。如下面的scanf函数的使用就是错误的:scanf(%7.2f, (3) 在格式控制串中,格式说明的个数应该与输入项的个数相同。若格式说明的个数少于输入项的个数时,scanf函数结束输入,多余的数据项并没从终端接受新的数;若格式说明的个数多于输入项的个数时,scanf函数同样也结束输入。 (4) 当输入的数据少于输入项时,程序等待输入,直到输入数据的个数等于输入项的个数为止。当输入的数据多于输入项时,多余的数据并不消失,而是留作下一个输入操
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027届河南周口地区洪山乡联合中学物理九年级第一学期期末综合测试模拟试题含解析
- 陕西省扶风县2027届九上化学期中检测试题含解析
- 湖北省武汉市东湖高新区2027届九上化学期中联考试题含解析
- 2026中国室内装饰材料行业竞争格局及投资发展路径报告
- 2026中国涡流泵行业客户需求变化与产品升级报告
- 2027届江苏省句容市崇明中学化学九年级第一学期期中学业水平测试试题含解析
- 2026中国老年群体防跌倒智能设备供需现状与未来发展蓝图报告
- 2027届浙江省金华市东阳市东阳中学化学九年级第一学期期中联考模拟试题含解析
- 2026石油中国能源产品行业市场现状供需分析及投资评估规划分析研究报告
- 2026瑞士高端制造技术国际影响力与同行竞争力研究
- 2026广西壮族自治区经济社会技术发展研究所招聘编外聘用人员3人笔试题库含答案详解(A卷)
- 2026海南农村商业银行招聘1人(202607)笔试备考试题及答案详解
- 肿瘤患者的姑息治疗护理
- 2026年安徽安庆经开区老峰镇村(社区)专职工作人员招聘考试试卷-含答案解析
- 工程结算中工程款抵房款审批流程
- 2026年河南省中考英语试题(含答案和音频)
- 2026年河南省中考英语试卷(含答案)
- 2026年战士留疆考试真题及答案解析
- 2026年贵州高考物理真题解析含答案
- 2026年国家电投集团苏州审计中心选聘15人笔试备考试题及答案解析
- 10KV高配运行管理规定培训课件
评论
0/150
提交评论