C语言2数据类型运算符表达式.ppt

上传人:牧羊曲112 文档编号:6503725 上传时间:2023-11-07 格式:PPT 页数:81 大小:1.08MB
返回 下载 相关 举报
C语言2数据类型运算符表达式.ppt_第1页
第1页 / 共81页
C语言2数据类型运算符表达式.ppt_第2页
第2页 / 共81页
C语言2数据类型运算符表达式.ppt_第3页
第3页 / 共81页
C语言2数据类型运算符表达式.ppt_第4页
第4页 / 共81页
C语言2数据类型运算符表达式.ppt_第5页
第5页 / 共81页
点击查看更多>>
资源描述

《C语言2数据类型运算符表达式.ppt》由会员分享,可在线阅读,更多相关《C语言2数据类型运算符表达式.ppt(81页珍藏版)》请在三一办公上搜索。

1、第 2 章 数据类型、运算符与表达式,1整型数的二进制表示整型数分为有符号的和无符号的两种;有符号的整型数的正负号由字节的最高位来表示:0表示正数,1表示负数。整型数占用的字节数可为8位、16位或者32位。整型数的取值范围:,2.1 用二进制表示的数,2浮点数的二进制表示浮点数分成单精度浮点数和双精度浮点数;单精度浮点数占32位(4个字节),双精度浮点数占64位(8个字节)。浮点型数据的一般表达式:(1)S2em e是实际的阶码值,代表浮点数的取值范围;m是尾数,代表浮点数的精度。,2.1 用二进制表示的数,(1)单精度浮点型数据的字节分配空间:,2.1 用二进制表示的数,S代表符号位,占1位

2、。E称为“移码”,占8位。E的取值范围为0255,E=127+e 因此,e的取值范围为127+128);M代表有效位数或称为“小数”,m2=(1.M)2,(2)双精度浮点型数据的字节分配空间:,2.1 用二进制表示的数,S代表符号位,占1位。E称为“移码”,占11位。E的取值范围为02047,E=1023+e 因此,e的取值范围为1023+1024);M代表有效位数或称为“小数”,m2=(1.M)2,浮点型数据的取值范围:,2.1 用二进制表示的数,1.C语言提供5种基本数据类型。(1)字符型:用char表示。(2)整数型:用int表示。(3)单精度实数型:用float表示。(4)双精度实数型

3、:用double表示。(5)空类型:用void表示。对整数型,有四种修饰:signed(有符号)unsigned(无符号)long(长型)short(短型)数据类型决定了数据的大小、数据可执行的操作以及数据的取值范围。,2.2 基本数据类型及取值范围,数据类型的长度和取值范围会随着机器的CPU类型和编译器的不同而不同。,2.2 基本数据类型及取值范围,例1:验证数据类型的字节长度。见【例2-1】所示的程序:example2_1.c不同字节长度的数据类型和取值范围:见表2-5和表2-6,2.2 基本数据类型及取值范围,2.3常量与变量,标识符:定义:用来标识变量、常量、函数等的字符序列组成:只能

4、由字母、数字、下划线组成,且第一个字母必须是字母或下划线 大小写敏感 不能使用关键字 长度:最长32个字符命名原则:见名知意 不易混淆 如1、l与I,o与0,例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name#33 lotus_1_2_3 char ab _above$123,C语言使用常量和变量来表示程序中使用的数据,常 量,一般用大写字母 是宏定义预处理命令,不是C语句 直接常量:整型常量 实型常量 字符常量 字符串常量,如#define PRICE 30,定义:程序运行时其值不能改变的量(即常数)分类:符号常量:用标识符代表

5、常量 定义格式:#define 符号常量 常量,例 符号常量举例#define PRICE 30main()int num,total;num=10;total=num*PRICE;printf(total=%d,total);,运行结果:total=300,变 量,概念:其值可以改变的量。数据及其存储空间的抽象。变量名与变量值 变量定义的一般格式:数据类型 变量1,变量2,变量n;,变量初始化:定义时赋初值,例:int a,b,c;float data;,决定分配字节数和数的表示范围,合法标识符,例:int a=2,b,c=4;float data=3.67;char ch=A;int x=

6、1,y=1,z=1;int x=y=z=1;,例1 int student;stadent=19;/Undefined symbol stadent in function main,变量定义位置:一般放在函数开头,变量的使用:先定义,后使用,Error:expression syntax in function main,变量的赋值,传送数据到变量所代表的存储单元。赋值操作用“=”表示,一般形式为:变量=表达式,如:a=1.0;/*把1.0传送给a*/a=a+1;/*把a的值加上1后传给a*/用赋值号连接变量和表达式的式子称为赋值表达式。赋值符号的运算方向为自右向左。赋值表达式的值是被赋值后

7、的变量的值。如:d=c=b=a=3+5,赋值表达式,整型常量(整常数)三种形式:十进制整数:由数字09和正负号表示.如 123,-456,0 八进制整数:由数字0开头,后跟数字07表示.如0123,011 十六进制整数:由0 x开头,后跟09,af,AF表示.如0 x123,0Xff,例 12 与 12L,例 30000 为int型 65536 为long int 型,整型常量的类型 根据其值所在范围确定其数据类型 在整常量后加字母l或L,认为它是long int 型常量,问题:0123=()100 x123=()100Xff=()10,整型变量分类:有符号数和无符号数。用关键字signed,

8、unsigned指定。基本型、长整型和短整型。用关键字int,long,short指定。字节数和表示范围定义 形式:数据类型 变量名 例子:int x,y;/*定义x,y为整型数*/unsigned short m,n;/*定义m,n为无符号短整型数*/long a;/*定义a为长整型数*/,整型数据的存储方式short int long最高位为符号位,0为正,1为负以二进制补码的形式存放 如:10 的补码-10的补码,例 整型数据溢出include main()int a,b;a=32767;b=a+1;printf(“%d,%dn,a,b);,运行结果:32767,-32768,说明计算机

9、在运算时,出现数据溢出情况,达到最大值后,又从最小值算起。,整型数据的溢出,字符类型,在计算机中字符以ASCII存放以及运算。其存储为1个字节 如:a的ASCII码为97,它在内存中的形式:字符型变量定义方式:char a;表示a为字符型,在内存中占用8位即1个字节,#include main()int a=97;printf(“%c=%dn”,a,a);,输出:a=97,字符常量定义:用单引号括起来的单个普通字符或转义字符.,字符常量的值:该字符的ASCII码值,如 101-A 012-n 376-x61-a 60-0 483-(),例:A-101-x41-65,如 A65,a97,048,

10、n10,如 a A?n 101,转义字符:反斜线后面跟一个字符或一个代码值表示,例 转义字符举例main()printf(101 x42 Cn);printf(I say:How are you?n);printf(C Programn);printf(Turbo C);,运行结果:(屏幕显示)A B CIsay:”How are you?”C ProgramTurbo C,例 main()printf(“Yb=n”);,运行结果:屏幕显示:=,字符常量与字符串常量不同,字符串常量定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个 0 作为字符串结束标志,例:char ch;c

11、h=“A”;,没有字符串变量,用字符数组存放,例/*字符可用于算术运算*/#define PRICE 10 main()int num=3;int total;char ch1,ch2=D;total=num*PRICE;ch1=ch2-A+a;printf(“total=%d,ch1=%cn”,total,ch1);,运行结果:total=30,ch1=d,例/*转义字符的使用*/#include main()printf(“ab ct derftgn”);printf(“htibbj kn”);,f g d e,h j k,a,b,c,d,e,f,g,h,i,j,k,例/*转义字符的使用*

12、/#include main()printf(“ABbCDEFrGHn”);,在屏幕上显示结果为:?,GHDEF,实数类型,实数在C语言中又称为浮点数。浮点数有且只有两种表示形式:1、十进制形式。这种形式的数由整数部分、小数点和小数部分组成。如:1.24,0.345,.222,234.0,333.,0.0等。2、指数形式。这种形式用来表示一些比较大的数值,它们是实数部分、字母E或e、整数部分。表示形式:e要注意:1 字母E或e之前之后必须有数字 2 之后的数字必须为整数 3 没有八进制或十六进制实数表示法规范化浮点数:在字母e(E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零数字。

13、,实型常量(实数或浮点数)表示形式:十进制数形式:(必须有小数点)如0.123,.123,123.0,0.0,123.指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3,123E2,1.23e4,e-5,实型常量的类型 默认double型 在实型常量后加字母f或F,认为它是float 型,实型变量 单精度(4字节,67位有效数字):float a;双精度(8字节,1516位有效数字):double a;,x被赋值了一个有效位数为11位的数字。在printf语句中使用%20.18f指示printf语句在输出x时总长度应为20位,小数点位数占18位。输出的结果表明float型的数据只

14、接收7位有效数字。,sizeof运算符,用途:测定某一数据类型所占存储空间的长度。格式:sizeof(类型标识符)例子:,#include main()short s;long l;float f;char c;printf(short is%d bytesn,sizeof(s);/*short is 2*/printf(long is%d bytesn,sizeof(l);/*long is 4*/printf(float is%d bytesn,sizeof(f);/*float is 4*/printf(“char is%d bytesn,sizeof(c);/*char is 1*/,

15、2.4 运算符和表达式,运算符(操作符)是表述最基本的运算形式的符号。表达式由运算符(操作符)和运算量(操作数)组成,用以描述对什么数据以什么顺序进行什么操作。任何有值的东西都可以称为表达式。,C语言中的运算符(13类),算术运算符:+-*/%+-关系运算符:=!=逻辑运算符:!&|位运算符:|&赋值运算符:=及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数:sizeof强制类型转换:(类型)分量运算符:.-下标运算符:其它:(),学习运算符应注意:,与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型,1 算术运算符和表达式,基本算术运算符:+-*

16、/%结合方向:从左向右优先级:-高于*/%高于+-说明:“-”可为单目运算符时,右结合性两整数相除,结果为整数%要求两侧均为整型数据+-*/中任意数类型为实型,结果均为实型,例 5/2=-5/2.0=,例 5%2=-5%2=1%10=5%1=5.5%2,例 5/2=2-5/2.0=-2.5,例 5%2=1-5%2=-1 1%10=1 5%1=0 5.5%2(),int a,b,c;float d;a*b/c-1.5(a*b)/c*1.5,自增、自减运算符+-,作用:使变量值加1或减1 优先级与相同,右结合种类:前置+i,-i(先执行i+1或i-1,再使用i值相当于i=i+1)后置 i+,i-(

17、先使用i值,再执行i+1或i-1),例 j=3;k=+j;j=3;k=j+;j=3;printf(“%d”,+j);j=3;printf(“%d”,j+);a=3;b=5;c=(+a)*b;a=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/4,/3,/c=20,a=4,/c=15,a=4,说明:+-不能用于常量和表达式,如5+,(a+b)+-结合方向:自右向左优先级:-+-*/%-+-(2)(3)(4),例-i+i=3;printf(“%d”,-i+);,例-i+-(i+)i=3;printf(“%d”,-i+);/-3,2赋值运算符和表达式,简单赋值运算符 符号:=格

18、式:变量标识符=表达式 作用:将一个数据(常量或表达式)赋给一个变量,例 a=3;d=func();c=d+2;,复合赋值运算符 种类:+=-=*=/=%=&=|=,说明:结合方向:自右向左 优先级:2 左侧必须是变量,不能是常量或表达式,例 3=x-2*y;a+b=3;,例 int i;i=2.56;/结果i=2;,例:a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2),/表达式值11,c=6,a=11,/表达式值10,a=10,b=4,c=6,/表达式值5,a=5,b=10,c=2,赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型 赋值表达式的值与变量值相

19、等,且可嵌套,例:a=12;a+=a-=a*a,/a=-264 等价于a=a+(a=a-(a*a),3逗号运算符和表达式,形式:表达式1,表达式2,表达式n结合性:从左向右 优先级:1逗号表达式的值:等于表达式n的值用途:求多个表达式的连续计算,常用于循环for语句中,例 a=3*5,a*4 a=3*5,a*4,a+5例 x=(a=3,6*3)x=a=3,6*a例 a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);,/a=15,表达式值60,/a=15,表达式值20,/赋值表达式,表达式值18,x=18,/逗

20、号表达式,表达式值18,x=3,/1,2,3,/3,2,3,例:#include main()int x,y=7;int z=4;x=(y=y+6,y/z);printf(x=%dn,x);,运行结果:x=3,4关系运算符和表达式,关系运算符 种类:=!=结合方向:自左向右 优先级别:9-10 运算结果为:1 或 0,例 int a=3,b=2,c=1,d,f;ab;c=ab;b+cb;f=abc;,/表达式值1,/表达式值1,/表达式值0,/d=1,/f=0,关系运算注意事项:,例 若a=0;b=0.5;x=0.3;则 a=x=b的值为,0,例 int i=1,j=7,a;a=i+(j%4!

21、=0);则a=,2,例 a0 结果为 A100 结果为,1,0,例 注意区分“=”与“=”int a=0,b=1;if(a=b)printf(“a equal to b”);else printf(“a not equal to b”);,a equal to b,(a=b),a not equal to b,5逻辑运算符和表达式,逻辑运算符种类:!&|逻辑运算真值表,C语言中,运算量:0表示“假”,非0表示“真”,运算结果:0表示“假”,1表示“真”,例 ab&xy a=b|x=y!a|ab,优先级:14 5 4,结合方向:,/*(a=x)&(x=b)*/,/*(ab)&(xy)*/,/*(

22、a=b)|(x=y)*/,/*(!a)|(ab)*/,例 a=4;b=5;!a a&b a|b!a|b 4&0|2 53&2|84-!0 c&d,值为1,值为0,值为1,值为1,值为1,值为1,(53)&2|(8(4-(!0)值为1,逻辑运算的短路特性:,逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符,例 a(m=ab)&(n=cd),/*结果m=0,n=1*/,6条件运算符与表达式,一般形式:expr1?expr2:expr3执行过程功能:相当于条件语句,但不能取代一般if语句,条件运算符可嵌套 如 x0?1:(x0?-1:

23、0)优先级:3,结合方向:自右向左 如 ab?a:cd?c:d ab?a:(cd?c:d)expr1、expr2、expr3类型可不同,例 x?a:b/x=0,表达式值为b;x0,表达式值为a xy?1:1.5/xy,值为1.0;xy,值为1.5,良好的源程序书写习惯:表达式中,在双目运算符的左右两侧各加一个空格,可增强程序的可读性。比较:“(x+y)/2 1”与“(x+y)/21”尽量把复杂的表达式分成多个表达式来写。尽量使用圆括号显式指明哪部分先运算,而不是依赖运算符的优先级。,#include main()int x,y=7;int z=4;x=(y=y+6,y/z);printf(x=

24、%dn,x);,#include main()int x;int y=7;int z=4;y+=6;x=y/z;printf(x=%dn,x);,知识提示:结合性是语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外,其它运算符都是左结合性。,不同类型数据间的转换,三种形式 同一类型但长度不同的数据间的转换 如:int x=1;long y=50000;x+y=50001 定点方式与浮点方式间的转换 如:int x=1,float y=1.0;x+y=2.0 整型数中有符号数和无符号数间的转换 如:unsigned int x=1;int y=-2;x+y=?,65535,注意有符

25、号与无符号之转换由有符号负数转为同长度的无符号数时,最高位不再被当作符号位,结果相当于216或232加上该负值由无符号数(超出表示范围)转为同长度的无符号数时,最高位被当作符号位,结果相当于该数减去216或232。实数转整数,小数被截取。double转float,超出有效数字范围的四舍五入。数据转换可能丢失精度。在截取与四舍五入及long型转实型时可能发生。数据转换结果具有不确定性。将较长整数转为较短整数时,只低字节有效。double转float,实数转整数时,如值超过目标类型的取值范围,则结果是不确定的。,#include main()long a=80000,b=3200L;short i

26、,j;double d=123456.789098765;float f;short s;i=a;j=b;f=d;s=d;printf(%ld=%hdn,a,i);printf(%ld=%hdn,b,j);printf(%16.9lf=%f=%16.9hdn,d,f,s);,输出80000=14464/*80000=0 x1 3880,0 x3880=14464*/3200=3200123456.789098765=123456.789062500=-7616,隐式转换 什么情况下发生运算转换-不同类型数据混合运算时赋值转换-把一个值赋给与其类型不同的变量时输出转换-输出时转换成指定的输出格式

27、函数调用转换-实参与形参类型不一致时转换 运算转换规则不同类型数据运算时先自动转换成同一类型,转换结果使表达式中只有5种类型,即:int,unsigned int,long,unsigned long,double“向高看齐”原则。,显式转换(强制转换)一般形式:(类型名)(表达式)例(int)(x+y)(int)x+y(double)(3/2)(double)3/2(int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变 优先级为15,右结合,例 main()float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);结果:x=3.

28、600000,i=3,精度损失问题,1*-2+3/4,Back,(int)x+y,(int)x+y,扫描方向,假设:x=-2.6y=3,-2,TC 规则:向零取整,1,Back,-i+,-i+,扫描方向,假设:i=1,1,-1,(1)表达式的值:-1(2)i 的值:2,Back,i+j,i+j,扫描方向,假设:i=1j=2,1,3,(1)表达式的值:3(2)i 的值:2,Back,a+=a-=a*a,a+=a-=a*a,扫描方向,4,-2,(1)表达式的值:-4(2)a 的值:-4,-4,假设:a=2,注:a=-2,Back,printf(“%d,%d”,i,i+);,printf(“%d,%

29、d”,i,i+);,扫描方向,假设:i=3,3,注:i=4,4,注:C 函数参数的传递方向 自右向左,printf(“%d,%d”,i,i=30);,Back,习题,1、有两个整型变量a和b,下面a除以b的余数的表达式是()A.a/b B.a%b C.b%a D.a%=b2、若原a的值为3,b的值为2,则执行a+=b+后,a与b的值为()A.a的值为3,b的值为2 B.a的值为5,b的值为3C.a的值为5,b的值为2 D.a的值为3,b的值为3 3、数学上的“ab?b:a C.c=ab?a:b D.以上都不对5、与表达式“a!=b|bc”等价的表达式是()A.!(a=b&b=c)D.以上都不对

30、,!(a=b&b=c),6、设有说明:char w;int x;float y;double z;则表达式w*x+z-y值的数据类型为()A.float B.char C.int D.Double7、设x和y都是int类型,且x=100,y=200,则printf(“%d”,(x,y);的输出结果是()A.200 B.100 C.100 200 D.输出格式符不够,输出值不确定8、设有以下变量均为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.(x=6,y+1,x=y,x+1)9、在C语言中,要求

31、运算符必须是整型的运算符是()A./B.+C.!=200 D.%10、下列运算符中优先级最低的是(),优先级最高的是()A.?:B.&C.+D.!=11、以下关于运算符优先顺序的描述中正确的是()A.关系算术赋值逻辑 B.逻辑关系算术赋值C.赋值逻辑关系算术 D.算术关系赋值逻辑,数据的输入和输出,C语言中I/O操作由函数实现#include 使用较多的函数:格式输出printf()格式输入scanf()字符输出函数putchar()字符输入函数getchar()字符串输出函数puts()字符串输入函数gets(),1 字符数据的输入和输出,格式:putchar(c)参数:c为字符常量、变量或

32、表达式,不能少功能:把字符c输出到显示器上(一个字符的输出),#include 或#include“stdio.h”字符输出函数,putchar(A);/*将大写字母A输出到屏幕*/putchar(48);/*将ASCII码为48的字符输出到屏幕*/putchar(x);/*将变量X的值当成ASCII码值,并将此ASCII码对应的字符输出到屏幕,这里X可以是字符型或整型变量*/,#include main()int c;char a;c=65;a=B;putchar(c);putchar(n);putchar(a);,运行结果:A B,例,1)putchar每次只能输出1个字符;2)可以为字符

33、变量、字符常量、转义字符3)在程序最前必须包含一条预编译指令:#include stdio.h“这条预编译指令的作用是告诉编译器,putchar()函数是在stdio.h这个头文件中进行了说明。如果不进行事先说明的话,一个函数是不会被编译器所识别的,除了printf()函数和scanf()函数。,字符输入函数:,格式:getchar()功能:从终端(键盘)读入一字符参数:无注意:只接受一个字符,空格、回车符为有效字符需读入 读入操作终止于ENTER的键入。,例,#include main()int c;printf(Enter a character:);c=getchar();printf(

34、%c,c);,运行结果:Enter a character:AA,putchar(getchar();,#include main()int c;printf(Enter a character:);c=getchar();printf(%c-%dn,c,c);,运行结果:Enter a character:AA-65,2 格式输出函数,格式:printf(“格式控制串”,输出表)功能:按指定格式向显示器输出数据,输出表:要输出的数据(可以没有,多个时以“,”分隔)格式控制串:包含两种信息格式说明:%修饰符格式字符,用于指定输出格式普通字符或转义序列:原样输出,printf(%c-%dn,c,

35、c);,A-65,int a=65;printf(“%d”,a);,int a=65;printf(“%x”,a);,int a=65;printf(“%o”,a);,int a=65;printf(“%u”,a);,char a=65;printf(“%c”,a);,printf(“%s”,“ABC”);,float a=567.789;printf(“%e”,a);,float a=567.789;printf(“%f”,a);,float a=567.789;printf(“%g”,a);,printf(“%”);,65,41,101,65,A,ABC,5.677890e+02,567.

36、789000,567.789,%,说明 格式字符要用小写 格式字符与输出项个数应相同,按先后顺序一一对应 输出转换:格式字符与输出项类型不一致,自动按指定格式输出,例 main()unsigned int u=65535;printf(u=%dn,u);输出结果:u=-1,例 int a=3,b=4;printf(“%d%dn”,a,b);printf(“a=%d,b=%dn”,a,b);,例 int a=3,b=4;printf(“%d%dn”,a,b);printf(“a=%d,b=%dn”,a,b);输出结果:3 4 a=3,b=4,附加格式说明符(修饰符),格式指示符1类型转换字符d以

37、带符号的十进制整数形式输出。案例 类型转换字符d的使用。,#include main()int num1=123;long num2=123456;printf(num1=%d,num1=%5d,num1=%-5d,num1=%2dn,num1,num1,num1,num1);,运行结果:num1=123,num1=123,num1=123,num1=123,#include main()int num1=123;long num2=123456;printf(num2=%ld,num2=%8ld,num2=%5ldn,num2,num2,num2);,运行结果:num2=123456,num

38、2=123456,num2=123456,#include void main()int x=-1;printf(x=%o,x=%d,x,x);,运行结果:x=177777,x=-1,2%o格式符。它的作用是将其对应的表达式的值按照八进制整数方式输出。这个格式符不会输出负数形式。它将符号位也做为八进制的一部分输出。,附加的格式说明符也可以和%o一起使用,看下面几个例子。例子:printf(“x=%5o”,077);运行结果:77printf(“x=%lo”,0 xFFFFF);运行结果:3777777printf(“x=%11lo”,0 xfffff);运行结果:3777777printf(“

39、x=%-11lo”,0 xfffff);运行结果:3777777,3%x格式符。它的作用是将其对应的表达式的值按照十六进制整数方式输出。,printf(x=%x,0 xffff);运行结果:x=ffffprintf(x=%8x,0 xffff);运行结果:x=ffffprintf(x=%lx,0 x7ffff);运行结果:x=7ffffprintf(x=%8lx,0 x7ffff);运行结果:x=7ffffprintf(x=%-8lx,0 x7ffff);运行结果:x=7ffff,4.%u格式符。它的作用是将其对应的表达式的值按照十进制无符号整数方式输出。也可以和上面的m,l,-三种附加格式符

40、组合使用。,printf(x=%u,-1);运行结果:x=65535 printf(x=%d,%o,%x,%un,-2,-2,-2,-2);运行结果:x=-2,177776,fffe,65534 printf(y=%d,%o,%x,%u,(unsigned int)65535,-1,-1,-1);运行结果:y=-1,177777,ffff,65535,(-2)=1111 1111 1111 1110(65535)=1111 1111 1111 1111,5%c格式符。它的作用是将其对应的表达式的值按照字符方式进行输出。如果一个整数的数值范围在0到255之间,也可以用字符方式输出 其对应的ASC

41、II码字符。可以和附加格式符组合,printf(x=%c,A);运行结果:x=A printf(x=%c,66);运行结果:x=Bprintf(x=%5c,66);运行结果:x=B,6s输出一个字符串。案例 类型转换字符s的使用。#include main()printf(%s,%5s,%-10sn,Internet,Internet,Internet);printf(%10.5s,%-10.5s,%4.5sn,Internet,Internet,Internet);程序运行结果如下:Internet,Internet,InternetInter,Inter,Inter,7f以小数形式、按系统

42、默认的宽度,输出单精度和双精度实数。,#include main()float f=123.456;double d1,d2;d2=2222222222222.222222222;printf(%f,%12f,%12.2f,%-12.2f,%.2fn,f,f,f,f,f);printf(d1+d2=%lfn,d1+d2);,运行结果:123.456001,123.456001,123.46,123.46,123.46 d1+d2=3333333333333.333010,m:显示数据占有的列宽;.n:保留小数位数,存在四舍五入,(1)这个格式符将对应表达式的值的整数部分全部输出,并且输出6位小

43、数。,本案例程序的输出结果中,数据123.456001和3333333333333.333010中的01和010都是无意义的,因为它们超出了有效数字的范围。,16位有效位,8%e格式符。它的作用是将其对应的表达式的值按照指数方式进行输出。,(1)这种方式输出的数据,以规范化浮点数形式输出,尾数(7位含小数点):整数部分只有1位且不能为0,小数位数占6 位;指数(4位):字母e占1位,指数的符号位占1位,指数占2位。例如:Printf(“x=%e”,123.456);运行结果:x=(1.23456e+02)(2)这个格式符也可以和m,.n,-三种附加格式符一起使用。含义与%f格式符中这三种附加格

44、式符的含义一样。例如:printf(x=%7e,123.456);运行结果:x=(1.23456e+02)printf(x=%8.1e,123.456);运行结果:x=(1.2e+02)printf(x=%-8.1e,123.456);运行结果:x=(1.2e+02),m:表示以m列宽显示;.n:取的是尾数部分除小数点外的数据位数。,使用说明(1)printf()可以输出常量、变量和表达式的值。但格式控制中的格式说明符,必须按从左到右的顺序,与输出项表中的每个数据一一对应,否则出错。例如,printf(“str=%s,f=%d,i=%fn”,“Internet”,1.0/2.0,3+5,“CH

45、INA”);是错误的。(2)格式字符x、e、g可以用小写字母,也可以用大写字母。使用大写字母时,输出数据中包含的字母也大写。除了x、e、g格式字符外,其它格式字符必须用小写字母。例如,%f不能写成%F。(3)格式字符紧跟在“%”后面就作为格式字符,否则将作为普通字符使用(原样输出)。例如,“printf(”c=%c,f=%fn“,c,f);”中的第一个c和f,都是普通字符。,例 m.n,例 float f=123.456;char ch=a;printf(“%f,%8f,%8.1f,%.2f,%.1en”,f,f,f,f,f);printf(“%3cn”,ch);,运行结果:123.45600

46、1,123.456001,123.5,123.46,1.2e+02 a,例 static char a=“Hello,world!”printf(“%sn%15sn%10.5sn%2.5sn%.3sn”,a,a,a,a,a);,运行结果:Hello,world!Hello,world!Hello Hello Hel,例 float f=123.456;static char c=“Hello,world!”;printf(“%10.2f,%-10.1fn”,f,f);printf(“%10.5s,%-10.3sn”,c,c);,运行结果:123.46,123.5 Hello,Hel,例-,例

47、int a=1234;float f=123.456;printf(“%010.2fn”,f);printf(“%0+8dn”,a);printf(“%0+10.2fn”,f);,例 0、+,例 int a=123;printf(“%o,%#o,%X,%#Xn”,a,a,a,a);,例#,例 long a=65536;printf(“%d,%8ldn”,a,a);,例 l,/0000123.46,/+0001234,/+000123.46,/173,0173,7B,0X7B,/0,65536,3 格式输入函数,格式:scanf(“格式控制串”,地址表)功能:按指定格式从键盘读入数据,存入地址表

48、指定的 存储单元中,并按回车键结束,(1)格式字符串。格式字符串可以包含3种类型的字符:格式指示符、空白字符(空格、Tab键和回车键)和非空白字符(又称普通字符)。格式指示符与printf()函数的相似,空白字符作为相邻2个输入数据的缺省分隔符,非空白字符在输入有效数据时,必须原样一起输入。(2)输入项首地址表由若干个输入项首地址组成,相邻2个输入项首地址之间,用逗号分开。输入项首地址表中的地址,可以是变量的首地址,也可以是字符数组名或指针变量。变量首地址的表示方法:&变量名 其中“&”是地址运算符。,例 scanf(“%d”,输入:10 则 a=10,例 scanf(“%x”,输入:11 则

49、 a=17,附加格式说明符(修饰符),例 scanf(“%4d%2d%2d”,输入 20090303 则2009yy,3 mm,3 dd,例 scanf(“%3d%*4d%f”,则123k,8765.43f,例 scanf(“%3c%2c”,输入 abcde 则ac1,d c2,输入分隔符的指定一般以空格、TAB或回车键作为分隔符其它字符做分隔符:格式串中两个格式符间字符,例 scanf(“%d%o%x”,输入 123 123 123 输出 a=123,b=83,c=291,例 scanf(“%d:%d:%d”,输入 12:30:45 则12 h,30 m,45 s,例 scanf(“%d,%

50、d”,&a,&b)输入 3,4 则3a,4 b,例 scanf(“a=%d,b=%d,c=%d”,输入 a=12,b=24,c=36,1.输入数据时,遇到以下情况,系统认为该数据结束:(1)遇到空格,或者回车键,或者Tab键。(2)遇到输入域宽度结束。例如“%3d”,只取3列。(3)遇到非法输入。例如,在输入数值数据时,遇到字母等非数值符号(数值符号仅由数字字符0-9、小数点和正负号构成)。,如 scanf(“%c%c%c”,若输入abc 则ac1,c2,b c3,如 scanf(“%d%c%f”,若输入1234a123o.26 则 1234 a,a b,123 c,End Of The Ch

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号