




已阅读5页,还剩73页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第2章 C语言的数据运算,实例,2.1 常量与变量 2.2 C语言数据类型 2.3 运算符和表达式,2,本章实例,实例2.1,实例2.2,实例2.3,实例2.4,实例2.5,实例2.6,实例2.8,实例2.9,实例2.10,实例2.11,实例2.7,3,常量是在程序运行过程中其值不能变的量。 变量是在运行过程中其值可以改变的量。,P20,2.1 常量与变量,4,【实例2.1】若有5个半径相同的圆,编写一个求圆周长总和的程序。,一般在主函数中需要做三部分事: 输入数据 调用函数实现功能 输出结果,输入半径,周长的5倍,调用函数计算圆周长总和,编程点拨:,5,程序代码:,#include #define PI 3.1415926 double perimeter(double);,定义符号常量PI,计算圆周长总和,6,程序代码:,main() double r=0.0,s=0.0; printf(“Input the radius of circle:“); scanf(“%lf“, ,double,双精度浮点数,%lf,输入格式,%lf,输出格式,7,程序代码:,double perimeter(double radius) double len=0.0; len=2*PI*radius; len=5*len; return len; ,圆形半径,存放周长,len,1个圆的周长,5个圆的周长,8,运行结果:,Input the radius of circle:10 The total perimeter of 5 circles is 314.159260,9,变量的定义形式,类型 变量名1,变量名2,变量名n;,10,说明:,(1)类型(type) 变量的数据类型,可以是int、float、double、char 等。 定义变量时一定要确定变量的数据类型,不同类型的变量存放不同类型的数据。,double r=0.0,s=0.0;,int,float,double,char,11,说明:,(2)建议命名的变量名具有一定的意义而且第一个字符用类型名的首字母。 如: iAge为int型变量,用于存放年龄 dRadius为double型变量,用于存放半径 fArea为float型变量,用于存放面积,12,说明:,(3)注意变量名和变量值的区别。 变量中所存放的内容就是变量的值。 int a; 定义部分a中的值是不确定的 a=5; 赋值语句 使用变量时一定要考虑变量的当前值。,13,说明:,(4)变量的初始化(initialization) 可在定义变量的同时为变量赋初值。 int a=5,b=2; 为防止程序中使用没有确定值的变量,定义变量时对于暂时不需要赋初值的变量均赋 0 。 double len=0.0;,14,整型 实型 字符型 数组 指针类型 结构体类型,P14,2.2 C语言数据类型,15,2.2.1 整型数据类型 2.2.2 实型数据类型 2.2.3 字符型数据类型,P22,2.2 C语言数据类型,16,2.2.1 整型数据类型,基本整型(integer) 基本整型的类型名为int,占个字节,其取值范围是 长整型(long integer) 长整型的类型名为long,占4个字节,其取值范围是,-32,76832,767,-2,147,483,6482,147,483,647,P22,17,【实例2.2】观察下面程序的运行结果。,#include main() int iX=12; int iY=012; int iZ=0x12; printf(“%d,%d,%dn“,iX,iY,iZ); printf(“%o,%o,%on“,iX,iY,iZ); printf(“%x,%x,%xn“,iX,iY,iZ); ,按10进制形式输出iX、iY、iZ的值,按8进制形式输出iX、iY、iZ的值,按16进制形式输出iX、iY、iZ的值,0,0x,表示8进制数,表示16进制数,18,运行结果:,12,10,18 14,12,22 c,a,12,int iX=12; int iY=012; int iZ=0x12; printf(“%d,%d,%dn“,iX,iY,iZ); printf(“%o,%o,%on“,iX,iY,iZ); printf(“%x,%x,%xn“,iX,iY,iZ);,19,程序说明:,(1)整型数据有3种表示形式 十进制 八进制用数0开头 十六进制用数0和小写字母x开头,20,程序说明:,(2)整型数据可用3种格式输出 说明符 %d 按十进制(decimal)形式输出 %o 按八进制(octet)形式输出 %x 按十六进制(hex)形式输出,21,【实例2.3】观察下面程序的运行结果。,#include main() int iA=300,iB=200,iC=0; long lX=300,lY=200,lZ=0,lS=0; iC=iA*iB; lS=iA*iB; lZ=lX*lY; printf(“%d,%ld,%ldn“,iC,lS,lZ); ,运行结果:-5536,-5536,60000,%ld用于输出长整型数据,预计结果:60000,?,22,程序说明:,(1)程序中3个变量iC、lS、lZ的预期结果均是60000 但iC和lS的实际结果是-5536 错误发生的原因是int型数据其取值范围小。 iC=iA*iB; lS=iA*iB;,计算300*200的值时已经出现数据溢出,23,程序说明:,(2)整型变量中只能存放整型数据 int a=12.7; 整型变量中只存放实型常量的整数部分,a 中实际存放的值为12,24,2.2.2 实型数据类型,实型数据分为: 单精度型(single-precision),类型名为float,占4个字节,其取值范围是-3.410-383.41038 双精度型(double- precision),类型名为double,占8个字节,其取值范围是 -1.710-3081.710308 实型变量只能存放实型数据。,float,double,P24,25,【实例2.4】观察下面程序的运行结果。,#include main() float fX=0.0; printf(“Input a float number:“); scanf(“%f“, ,运行结果: Input a float number:98765.4321 98765.429688,9.87654e+04,0,26,程序说明:,float型变量存放数据的有效位数为6位 double型变量存放数据的有效位数为15位,27,程序说明:,用scanf()和printf()函数输入、输出float型数据时,应使用的格式说明符如下: %f以小数的形式输出(有6位小数) %e以指数的形式输出(小数点前有1位非数字,小数点后有位数字)。 对于不同类型数据的输入输出,必须选用相应的格式说明符。,若用%d输出float型数据,显示的值将是0,28,2.2.3 字符型数据类型,字符型变量的类型名为char 字符型数据占1个字节 字符变量存放的值为该字符对应的ASCII码值,P24,29,【实例2.5】观察下面程序的运行结果。,#include main() char cX=A,cY=E; printf(“ %cn“,cX); printf(“ %c %c %cn“,cY,cY+1,cY+2); printf(“%c %c %c %c %cn“, cX,cX+1, cX+2, cX+3,cX+4); printf(“ %c %c %cn“,cY,cY+1,cY+2); printf(“ %cn“,cX); printf(“cX=%d,cY=%dnn“,cX,cY); ,运行结果: A E F G A B C D E E F G A cX=65,cY=69,输出两个字符的ASCII码值,30,程序说明:,%c表示以字符的形式输出字符型数据。 字符型数据也可以用格式说明符%d输出,这时输出的是该字符对应的ASCII码值。,31,【实例2.6】编写程序输出如下图形。,cX=A; cX=; 字符数据按ASCII码值存放。 字符“的十进制ASCII码值为30, (八进制值为36,十六进制值为1e) cX=30; cX=36; 均给变量cX赋” cX=x1e;, ,编程点拨:,32,程序代码:,#include main() char cX=36; printf(“%cn“,cX); printf(“%c %cn“,cX,cX); printf(“%c %c %cn“,cX,cX,cX); printf(“%c %c %c %cn“,cX,cX,cX,cX); ,36是转义字符,33,表达式是用运算符将运算对象(常量、变量和函数等)连接起来的、符合语言语法规则的式子。 每个表达式都有一个确定的值,其类型由运算量和运算符决定。,P20,2.3 运算符和表达式,34,2.3.1 算术运算符和表达式 2.3.2 赋值运算符和表达式 2.3.3 逗号运算符和表达式 2.3.4 关系运算符和表达式 2.3.5 逻辑运算符和表达式 *2.3.6 其他运算符,P26,2.3 运算符和表达式,35,2.3.1 算术运算符和表达式,P26,36,【实例2.7】运行下面程序,观察不同数据类型之间的混合运算。,#include main() int iA=10; float fB=0.09; double dC=1000.6; long lD=200; char cE=A; printf(“%lfn“,iA*(fB+dC)+lD-cE); ,运行结果: 10141.900000,int float double long char,37,int,long,double,程序说明:,运算量类型的转换规则“垂直降落,向上位移“,char 先转换,float 先转换,是算术运算时运算量类型的转换规则,垂直降落,向上位移,38,程序说明:,运算符的优先级 运算符的结合性 除单目运算符、赋值运算符和条件运算符是自右至左地运算外,其他都是自左至右运算。,39,【实例2.8】编写程序,计算代数式 的值,x为整数,要求从键盘输入。,代数表达式5x应写为5*x,不要漏掉“*“ 分母应用“( )“括起来。 C语言没有提供乘方运算符,所以代数表达式x2写为 x*x。 虽然x是整型,但表达式结果不是整型,应使用实型。,编程点拨:,40,程序代码:,#include main() int iX=0;float fY=0.0; printf(“Input an integer x(x2):“); scanf(“%d“, ,41,运行结果:,Input an integer x(x2):10 x=10,y=6.625000,42,程序说明:,数据类型强行转换(数据类型)表达式 iX变量是整型,(iX*iX-5*iX+3)/(iX-2)得到错误的结果。 通过(float)(iX*iX-5*iX+3)先将分子的计算结果强行转换为float型后,再与分母相除,能得到所要结果。,43,程序说明:,编写程序时应考虑错误产生的所有可能情况 如:fY=(float)(iX*iX-5*iX+3)/(iX-2);输入数据后应先判断该数是否是2,44,2.3.2 赋值运算符和表达式,C语言的赋值运算符有: =、+=、-=、*=、/=、%=等,P26,简单赋值运算符,复合赋值运算符,45,赋值表达式,简单赋值表达式的一般形式是: 变量名 = 表达式 处理过程是: 计算“=“右侧表达式的值 将结果的数据类型转换 将转换后的结果赋值,46,注意:,当表达式值的类型转换时,可能会产生数据溢出现象。 如:int iX; iX=5*30000.5 ;,“=”两边的数据类型不一致时一定要谨慎,47,48,【实例2.9】观察下面程序的运行结果。,#include main() int iA=3,iB=0,iC=0; iC=iB=iA*100; printf(“iA=%d,iB=%d,iC=%dn“,iA,iB,iC); iC=(iA=5)+(iB=iA+6); printf(“iA=%d,iB=%d,iC=%dn“,iA,iB,iC); ,运行结果: iA=3,iB=300,iC=300 iA=5,iB=11,iC=16,相当于iC=(iB=iA*100);,49,程序说明:,运算符“=“的结合方向是自右至左,所以iC=iB=iA*100和iC=(iB=iA*100)等价 “=“右侧可以是任何合法的表达式 表达式 (5+iB)=(iA+6)是错误的,50,2.3.3 逗号运算符和表达式,逗号运算符是“,“。 优先级最低。 一般形式是: 表达式1,表达式2,表达式3,表达式n 从左到右的顺序依次处理,以最后一个表达式的值作为整个逗号表达式的结果值。,P30,51,【实例2.10】观察下面程序的运行结果。,#include main() int iA=10,iB=20,iC=30; float fX=0.0; fX=(iA=iB/iC+5,iB-13,iC=iA*iB); printf(“%d %d %d %fn“,iA,iB,iC,fX); ,运行结果:5 20 100 100.000000,52,2.3.4 关系运算符和表达式,P31,53,关系表达式,用关系运算符连接起来的式子 其形式为: 表达式1 关系运算符 表达式2 如: x+1 y+z,54,注意,对于实数x、y,避免使用“x=y“判断相等 如下程序段运行输出结果是0,不是1 float fX=99.9; printf(“%dn“,fX+0.1=100.0); 正确的处理方法是判断fabs(x-y)10e-6,55,2.3.5 逻辑运算符和表达式,C语言的逻辑运算符有3个,P32,56,逻辑表达式,用逻辑运算符连接起来的表达式 其形式为: 表达式1 & 表达式2 表达式1 | 表达式2 !表达式1,57,逻辑表达式的运算规则,逻辑表达式的值只有两个:1或0,58,【实例2.11】运行下面程序,观察输出结果是否和预期结果相符。,#include main() int iA=10,iB=30; printf(“%d “,(iA=0) ,运行结果:0 iA=10 1 iB=30,59,程序说明:,(1)在(iA=0) & (iA=5)中,系统不再处理iA=5,iA的值还是原来的10,(2)在(iB=20) | (iB=15)中,系统不再处理iB=15,iB的值还是原来的30,60,*2.3.6 其他运算符,自增、自减运算符 求字节运算符 条件运算符和表达式 位运算符,P33,61,1自增、自减运算符,+、- 单目运算符 运算量必须是变量 运算量可以出现在运算符右侧或左侧 运算符在前和在后时的两个表达式值不同,62,C语言规定,表达式a+的值是对a增1之前的a值 表达式+a的值是对a增1之后的a值,63,请思考,执行程序段后x的值是多少?,程序段1 int a=5,x=0; x=(a+)+3;,程序段2 int a=5,x=0; x=(+a)+3;,相当于x=a+3;a+;,相当于a+; x=a+3;,x=8,x=9,64,2求字节运算符,sizeof sizeof(long)的值为4 double型变量dX,sizeof(dX)的值为8,65,3条件运算符和表达式,C语言中条件运算符为: ? : 是惟一的一个3目运算符。 条件表达式的形式为: 表达式1 ? 表达式2 :表达式3 条件表达式的处理过程是,先判断表达式1是否成立,若成立,则以表达式2的值作为条件表达式的值;若不成立,则以表达式3的值作为条件表达式的值。,66,对于值为6的整型变量iA,执行语句out=(iA%2=0 )? Y : N; out的结果为Y。,67,4位运算符,位运算符可以直接对二进制的位进行运算,其运算量必须为整型或字符型。,68,00,000,正数的左移、右移,cX=cA3; 将cA的二进制值右移3位后得到的值00000010,执行语句:char cA=16,cX=0,cY=0; cX=cA3; cX的值?cY的值?,010000,00,00010,000,69,负数的左移、右移,负数在内存中以补码形式存放,cB的补码是11111011。 原码转换为补码的过程是 将对应正数原码转换为反码 末尾加1 -5的正数5的原码为00000101 反码为11111010 补码为11111011,执行语句:char cB=-5,cU=0,cV=0; cU=cB1; cV=cB3; cU的值?cV的值?,70,负数的左移、右移,cU=cB1;是将cB的补码(11111011)右移1位后得到的值(11111101,去掉右边1位,左边补1个1)重新转换为原码后赋给cU。 补码转换为原码的过程是:按位求反,末尾加1得到对应的正数,加上负号即可。,执行语句:char cB=-5,cU=0,cV=0; cU=cB1; cV=cB3; cU的值?cV的值?,71,负数的右移( cU=cB1 ),00000101 11111010 11111011 11111011 11111101 00000010 00000011,-cB的原码 cB的反码 cB的补码(+1) 右移1位 右边去掉1位 反码 -cU原码(+1),左边补1,-3,72,对负数的左移( cV=cB3 ),00000101 11111010 11111011 11111011 11011 00100111 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 苏州城市学院《项目融资和投资》2024-2025学年第一学期期末试卷
- 2025年数据分析与挖掘技术面试模拟题集及答案
- 2025年电力行业运行值班员中级实操面试指南与答案解析
- 2025年社区食堂营养健康专家应聘模拟题及解析
- 青岛农业大学海都学院《运动解剖学》2024-2025学年第一学期期末试卷
- 四川司法警官职业学院《建筑信息建模创新实训》2024-2025学年第一学期期末试卷
- 2025年经济贸易委员会公务员笔试备考资料
- 2025年人工智能算法面试专题深度学习模型优化预测题集
- 河北劳动关系职业学院《测量与地图学》2024-2025学年第一学期期末试卷
- 2025年运行值班员中级考试理论知识点梳理与预测题分析
- 证据目录范本
- 标准档案盒脊背(格式已设置好)
- 中式烹调师(高级技师考试资料)
- GB/T 21475-2008造船指示灯颜色
- 园林绿化工高级技师知识考试题库(附含答案)
- 安医大生殖医学课件04胚胎的培养
- 可下载打印的公司章程
- 关于推荐评审高级工程师专业技术职务的推荐意见报告
- Q∕GDW 10356-2020 三相智能电能表型式规范
- 教研工作手册
- CINV化疗相关呕吐课件
评论
0/150
提交评论