1、C C语言程序设计教程语言程序设计教程编写组编写组20072007年年1 1月月第三讲第三讲 基本数据类型基本数据类型引例引例变量与常量变量与常量预备知识预备知识内储存器的组织内储存器的组织数据类型数据类型基本数据类型基本数据类型整数类型整数类型字符字符浮点类型浮点类型C C语言程序设计语言程序设计2引例引例引例引例问题问题计算任意一个圆的面积。计算任意一个圆的面积。源程序源程序(cw02-01.c)基本数据类型基本数据类型#include void main()float r,area;/定义变量定义变量 scanf(“%f”,&r);/读取输入的半径读取输入的半径 area=3.14*r*
2、r;/计算圆的面积计算圆的面积 printf(“area=%f”,area);/输出输出1area=3.140000areararea=r23变量与常量变量与常量数据数据(Data)程序需要使用数据。程序需要使用数据。数据是信息的载体。数据是信息的载体。数据有多种形式:数、字符、图片等。数据有多种形式:数、字符、图片等。常量常量(Constants)在程序运行之前可以预先设定,并在整个运行过程中没有在程序运行之前可以预先设定,并在整个运行过程中没有变化的数据。变化的数据。例如引例中的圆周率例如引例中的圆周率3.14。变量变量(Variables)在程序运行过程中可能变化或被赋值的数据。在程序运
3、行过程中可能变化或被赋值的数据。例如引例中的半径和面积。例如引例中的半径和面积。基本数据类型基本数据类型4数据类型数据类型数据类型的作用数据类型的作用决定数据的存储方式和占用的存储空间的大小。决定数据的存储方式和占用的存储空间的大小。决定可以进行的操作。决定可以进行的操作。C C语言的数据类型语言的数据类型基本类型基本类型整型整型(integer),字符型,字符型(character),浮点型,浮点型(floating-point),构造类型构造类型结构体结构体(structure),共用体,共用体(union),数组,数组(array),枚举,枚举类型类型(enumeration)指针类型指
4、针类型(pointer)空类型空类型(void)基本数据类型基本数据类型5位、字节和字位、字节和字内存储器的组织内存储器的组织基本数据类型基本数据类型位(位(bitbit):最小的:最小的存储单位,可以容纳存储单位,可以容纳两个值之一,即两个值之一,即0或或1。200020012002字节(字节(ByteByte):基本:基本的存储单位,的存储单位,8位。位。字(字(wordword):自然的:自然的存储单位,包含若干存储单位,包含若干个字节。例如个字节。例如32位机位机的一个字就是的一个字就是32位。位。地址地址:以字节为:以字节为单位从单位从0开始编开始编号。号。6整数的存储方式整数的存储
5、方式有符号的正整数有符号的正整数在内存中以在内存中以二进制补码二进制补码形式存放。形式存放。正整数的补码与原码相同。正整数的补码与原码相同。例如:例如:10基本数据类型基本数据类型符号位符号位0 0 0 0 0 0 0 00 0 0 0 1 0 1 00000000000001010RAM数轴数轴0215-1=32767可表示的数的范围可表示的数的范围-215=-327687整数的存储方式整数的存储方式有符号的负整数有符号的负整数在内存中以在内存中以二进制补码二进制补码的形式存放。的形式存放。例如:例如:-10基本数据类型基本数据类型符号位符号位1 1 1 1 1 1 1 11 1 1 1 0
6、 1 1 01111111111110110RAM-10的原码的原码1 0 0 0 0 0 0 00 0 0 0 1 0 1 01 1 1 1 1 1 1 11 1 1 1 0 1 0 11 1 1 1 1 1 1 11 1 1 1 0 1 1 0按位取反按位取反加一后得到加一后得到 -10的补码的补码符号符号位不位不变变8整数的存储方式整数的存储方式无符号整数无符号整数所有二进制位都存放数值。所有二进制位都存放数值。例如:例如:65535基本数据类型基本数据类型1 1 1 1 1 1 1 11 1 1 1 1 1 1 11111111111111111RAM0216-1=65535可表示的数
7、的范围可表示的数的范围9整数的类型整数的类型C C语言提供多种整数类型语言提供多种整数类型 见例见例 3-33-3为程序员提供了针对不同用途的多种选择。为程序员提供了针对不同用途的多种选择。基本数据类型基本数据类型类型名称类型说明符字节数数值范围基本整型基本整型int4-2147483648 2147483647短整型短整型short int(short)2-3276832767长整型长整型long int(long)4-2147483648 2147483647无符号基本整型无符号基本整型unsigned(int)404294967295无符号短整型无符号短整型unsigned short(
8、int)2065535无符号长整型无符号长整型unsigned long(int)404294967295C标准只规定:标准只规定:short int long最大最小值参考最大最小值参考仅供参考,实际值与所仅供参考,实际值与所使用的操作系统、编译使用的操作系统、编译系统、机器有关。系统、机器有关。10整型常量整型常量整型常量整型常量有三种形式:有三种形式:见例见例 3-2十进制十进制(decimal)整数整数12 65 65535八进制八进制(octal)整数:带前缀整数:带前缀 0(zero)014 0101 0177777十六进制十六进制(hexadecimal)整数:带前缀整数:带前缀
9、 0 x 或或 0X0 xc 0 x41 0 xffff默认类型是默认类型是int,即有符号的基本整型。,即有符号的基本整型。可以加上后缀可以加上后缀 u 或或 U 表示无符号整数,或者表示无符号整数,或者 l 或或 L 表示长表示长整数。整数。0 xb5Lu基本数据类型基本数据类型11RAM整型变量整型变量声明变量声明变量(Declaration)变量在使用之前必须被声明。变量在使用之前必须被声明。声明语句的格式:声明语句的格式:举例举例基本数据类型基本数据类型,.;int counter;int width,height;short x,y;long number;变量声明创建了变变量声明
10、创建了变量:为变量分配了量:为变量分配了存储空间。存储空间。height12整型变量整型变量初始化初始化(Initialize)变量变量为变量赋一个初始值。为变量赋一个初始值。可以在声明语句中初始化变量。可以在声明语句中初始化变量。举例举例变量获得值的方法变量获得值的方法直接赋值直接赋值输入输入初始化初始化基本数据类型基本数据类型int counter=0;int width=352,height=288;初始化式初始化式RAM288height13整型变量整型变量输出变量的值输出变量的值可以使用可以使用printf()函数。函数。与与int类型对应的格式说明符是类型对应的格式说明符是%d。举
11、例举例(cw02-02a.c)基本数据类型基本数据类型#include void main()int a,b;a=32767;b=-32768;printf(a=%d,b=%dn,a,b);a=32767,b=-3276814整数的溢出整数的溢出溢出溢出整数太大,超出了整数类型的数值范围。整数太大,超出了整数类型的数值范围。使用使用printf()时与时与unsigned int类型对应的格式说明符是类型对应的格式说明符是%u。举例举例(cw02-02b.c)见例见例 3-4-1/2基本数据类型基本数据类型#include void main()int a,b;unsigned c,d;a=2
12、147483647;b=a+1;c=4294967295;d=c+1;printf(a=%d,b=%dn,a,b);printf(c=%u,d=%u,c,d);a=2147483647,b=-2147483648c=4294967295,d=0?15整数的溢出整数的溢出溢出溢出结果分析结果分析结论结论a+1 的结果(的结果(2147483648)超出了基本整型变量超出了基本整型变量 b 所能容纳(表所能容纳(表示)的数值范围(示)的数值范围(-21474836482147483647)。)。请分析请分析d的结果。的结果。基本数据类型基本数据类型0 1 1 1 1 1 1 1.1 1 1 1 1
13、 1 11 0 0 0 0 0 0 0.0 0 0 0 0 0 0a(2147483647)1 0 0 0 0 0 0 0.0 0 0 0 0 0 0a+1(2147483648)b(-2147483648)12加正数加正数减正数减正数16字符的存储方式字符的存储方式字符编码字符编码计算机使用一种数字编码(整数)来表示字符,每一个字计算机使用一种数字编码(整数)来表示字符,每一个字符都对应一个特定的整数。符都对应一个特定的整数。常用的编码是常用的编码是ASCII(美国信息交换用标准码)。(美国信息交换用标准码)。7位二进制数,十进制码值范围从位二进制数,十进制码值范围从0到到127。一般用一个
14、字节保存,最高位为一般用一个字节保存,最高位为0。字符的存储方式与整数相同字符的存储方式与整数相同举例举例字母字母A的的ASCII码值为码值为65,那么在内存中以那么在内存中以65的二进制形式存储,的二进制形式存储,且占一个字节。且占一个字节。基本数据类型基本数据类型0100000101000001RAM17字符的类型和字符变量字符的类型和字符变量C语言的字符类型:语言的字符类型:char占一个字节;占一个字节;可视为一个有符号的整数。可视为一个有符号的整数。举例举例(cw02-03.c)见例见例 3-7,3-8基本数据类型基本数据类型#include void main()char c1,c
15、2;/声明字符变量声明字符变量 c1=97;/把一个整数赋值给字符变量把一个整数赋值给字符变量 c2=c1-32;/字符变量可以进行算术运算字符变量可以进行算术运算 printf(c1=%c,c2=%cn,c1,c2);printf(c1=%d,c2=%dn,c1,c2);c1=a,c2=Ac1=97,c2=6518字符常量字符常量字符常量字符常量用单引号括起来的一个字符。用单引号括起来的一个字符。x 9 +C语言将字符常量视为语言将字符常量视为int类型。类型。举例举例(cw02-04.c)如果如果int类型为类型为16位,位,char类型为类型为8位,位,那么对于那么对于bc,将把,将把b
16、和和c的的ASCII码值存储在两个字节码值存储在两个字节中,并把中,并把c赋值给变量赋值给变量c2。注意:不同系统处理方式不同,结果不同。注意:不同系统处理方式不同,结果不同。(如在如在Turbo C中,单引中,单引号中的字符只能是一个字符,则号中的字符只能是一个字符,则ch=ab是错误的。是错误的。基本数据类型基本数据类型char c1,c2;c1=a;c2=bc;0 1 1 0 0 0 0 1c10 1 1 0 0 0 1 1c20 1 1 0 0 0 1 10 1 1 0 0 0 1 0bcLH9799999819字符常量字符常量转义字符转义字符(escape character)指代一
17、些特殊的字符。指代一些特殊的字符。(打印不出来的字符)(打印不出来的字符)举例举例(cw02-05.c)见例见例 3-6-1/2/3基本数据类型基本数据类型a 警报警报 反斜杠(反斜杠()b 退格退格?问号(问号(?)f 走纸走纸 单引号(单引号()n 换行换行“双引号(双引号(”)r 回车回车ddd 1-3位八进制数所代表的字符位八进制数所代表的字符t 水平制表符水平制表符xhh 1-2位十六进制数所代表的字符位十六进制数所代表的字符v 垂直制表符垂直制表符#include void main()printf(atbncbd100 x40n);abd20浮点数的存储方式浮点数的存储方式浮点数
18、浮点数浮点型数据在内存中按指数形式存放。浮点型数据在内存中按指数形式存放。例如:例如:314.15=3.1415102基本数据类型基本数据类型0 (3.14159)10 0 (2)10 数符数符 尾数部分尾数部分 阶符阶符 阶码阶码 +3.14159 10+2由此可见,尾数部分的宽度决定了有效由此可见,尾数部分的宽度决定了有效数字的个数(即精度),阶码部分的宽数字的个数(即精度),阶码部分的宽度决定了数值范围。度决定了数值范围。RAM科学计数法允许使用少量的科学计数法允许使用少量的数字表示很大范围的数和很数字表示很大范围的数和很小的数。小的数。21浮点数的类型浮点数的类型浮点数也有多种类型浮点
19、数也有多种类型类型名称及典型大小类型名称及典型大小基本数据类型基本数据类型类型名称类型名称类型说明符类型说明符字节数字节数有效数字有效数字数值范围数值范围单精度单精度float467(s)10-371038双精度双精度double81516(s)10-30710308长双精度长双精度long double101819(s)10-4931104932S=1参考参考仅供参考,实际值与所仅供参考,实际值与所使用的操作系统、编译使用的操作系统、编译系统、机器有关。系统、机器有关。数轴数轴0可表示的正数可表示的正数可表示的负数可表示的负数22浮点型常量浮点型常量浮点型常量有两种形式:浮点型常量有两种形式
20、:十进制形式十进制形式12.3 .65 0.指数形式:指数形式:N.ME n(由整数部分、小数点、小数部分、字(由整数部分、小数点、小数部分、字母母E(或或e)和整数阶码(指数)组成。和整数阶码(指数)组成。1.2e-2 .1E5 7E01.210-20.11057.0100注:字母注:字母E E或或e e前面必须有数字,即整数部分和小数部分不能同时省前面必须有数字,即整数部分和小数部分不能同时省略,字母略,字母E E或或e e后面的阶码必须为整数,正负号中的正号可以省后面的阶码必须为整数,正负号中的正号可以省略。略。默认类型是默认类型是double。可以加上后缀可以加上后缀 f 或或 F 表
21、示表示float类型,或者类型,或者 l 或或 L 表示表示long double类型,否则该常量是类型,否则该常量是double类型。类型。2.3f 1.2L .1E5f基本数据类型基本数据类型注:实数的小数形式必须有小数点的存在。注:实数的小数形式必须有小数点的存在。23浮点型变量浮点型变量浮点型变量的声明和初始化浮点型变量的声明和初始化举例举例基本数据类型基本数据类型float radius;double x=0.0,y=0.0;不能写成:不能写成:double x=y=0.0;24浮点型变量浮点型变量浮点数的输出浮点数的输出使用使用printf()函数函数float和和double对应
22、的格式说明符为对应的格式说明符为%f。举例举例(cw02-06.c)见例见例 3-5基本数据类型基本数据类型#include void main()float f;double d;f=33333.33333f;d=33333.3333333333;printf(f=%fnd=%f,f,d);f=33333.332031d=33333.333333有效数字位数是有限的,在可有效数字位数是有限的,在可表示的有效位之外的数字被舍表示的有效位之外的数字被舍去。因此可能会产生误差。去。因此可能会产生误差。25浮点数的舍入误差浮点数的舍入误差浮点数的舍入误差浮点数的舍入误差举例举例(cw02-07.c)
23、基本数据类型基本数据类型#include void main()float a,b;a=123456.789e5;b=a+20;printf(a=%fnb=%f,a,b);a=12345678848.000000b=12345678848.000000?26浮点数的舍入误差浮点数的舍入误差浮点数的舍入误差浮点数的舍入误差结果分析结果分析基本数据类型基本数据类型a=123456.789e5;b=a+20;a+20的理论值应该是:的理论值应该是:12345678920但是,一个实型变量能够保证的有效数字是但是,一个实型变量能够保证的有效数字是7位,后面的数字将被舍去,是没有意义的。位,后面的数字将
24、被舍去,是没有意义的。因此,最后得到因此,最后得到b=12345678848.000000应当避免一个很大的数和一个很小的数直接相加或相减,否则就应当避免一个很大的数和一个很小的数直接相加或相减,否则就会会“丢失丢失”较小的数。较小的数。27浮点数的溢出浮点数的溢出上溢上溢举例举例(cw02-08.c)若某系统中的最大若某系统中的最大float值为值为3.4e38,进行如下操作,进行如下操作得到结果得到结果下溢下溢举例:假设举例:假设-10是最小的指数,能够保留四位有效数字是最小的指数,能够保留四位有效数字如果把数如果把数0.1234e-10除以除以10,将得到结果,将得到结果0.0123e-
25、10,但损失了一,但损失了一位有效数字。位有效数字。基本数据类型基本数据类型float toobig=3.4e38*100.0f;printf(“toobig=%f,toobig);inf无穷大(无穷大(infinity)28小结小结C语言有多种数据类型。语言有多种数据类型。基本的数据类型包括两大类:基本的数据类型包括两大类:整数类型整数类型浮点类型浮点类型开发程序时,应当注意所需变量及其类型的选择。开发程序时,应当注意所需变量及其类型的选择。一般使用一般使用int和和float表示数,用表示数,用char表示字符。表示字符。在使用变量的函数的可执行语句之前声明该变量,并为它在使用变量的函数的
26、可执行语句之前声明该变量,并为它选择有意义的名字。选择有意义的名字。初始化变量使用的常量应当与变量的类型相匹配。初始化变量使用的常量应当与变量的类型相匹配。基本数据类型基本数据类型29C C语言程序设计教程语言程序设计教程编写组编写组20072007年年1 1月月第四讲第四讲 输入输出和库函数输入输出和库函数引例引例字符串常量字符串常量符号常量符号常量格式化输入输出格式化输入输出字符输入输出字符输入输出库函数库函数C C语言程序设计语言程序设计31引例引例引例引例问题:计算任意一个球体的体积。问题:计算任意一个球体的体积。源程序源程序(cw03-01.c)见例见例 3-1输入输出和库函数输入输
27、出和库函数#include#include#define PI 3.14159/定义符号常量定义符号常量void main()double r,volume;printf(Please input the radius of a ball:);scanf(%lf,&r);volume=4.0/3.0*PI*pow(r,3.0);/使用数学函数使用数学函数 printf(“Volume=%.5fn”,volume);/按格式输出按格式输出Please input the radius of a ball:1Volume=4.18879volume=4/3r332字符串常量字符串常量字符串常量字符
28、串常量用双引号括起来的字符序列。用双引号括起来的字符序列。this is a string x 12345字符串常量的存储方式字符串常量的存储方式字符串中的字符存放在相邻的存储单元中,每个字符占用字符串中的字符存放在相邻的存储单元中,每个字符占用一个单元,在最后加上一个空字符(一个单元,在最后加上一个空字符(0)作为结束标识符。)作为结束标识符。举例举例输入输出和库函数输入输出和库函数thisisastring0每个字符占一个字节每个字符占一个字节结束标记结束标记33字符串常量字符串常量字符串常量和字符常量的区别字符串常量和字符常量的区别字符字符x是基本型数据。是基本型数据。字符串字符串”x”
29、是构造型数据。是构造型数据。占用的存储空间大小不同。占用的存储空间大小不同。输入输出和库函数输入输出和库函数xx在内存中占一个字节在内存中占一个字节“x”x在内存中占两个字节在内存中占两个字节034符号常量符号常量符号常量符号常量符号常量是用一个标识符表示的常量。符号常量是用一个标识符表示的常量。定义规则定义规则#define 举例举例输入输出和库函数输入输出和库函数#define MAXSIZE 20#define WELCOME Welcome to you!#define PI 3.14编译预处理器将会用编译预处理器将会用3.14替换以后出替换以后出现的现的PI标识符。标识符。35符号常
30、量符号常量为什么需要符号常量为什么需要符号常量名字比数字包含的信息多。名字比数字包含的信息多。便于维护便于维护如果需要在多个地方用到同一个常量,而且必须改变它的值,则只如果需要在多个地方用到同一个常量,而且必须改变它的值,则只需要修改其符号常量的定义。需要修改其符号常量的定义。另一种定义符号常量的方法另一种定义符号常量的方法使用使用const把一个变量声明转换成常量声明。把一个变量声明转换成常量声明。举例举例输入输出和库函数输入输出和库函数const int MAX_NUMBER=30;MAX_NUMBER是只读的。是只读的。36输入输出输入输出输入输出是以计算机主机为主体而言的。输入输出是以
31、计算机主机为主体而言的。输出输出(Output):从主机向外部输出设备输出数据。:从主机向外部输出设备输出数据。输入输入(Input):从外部通过输入设备向主机输入数据。:从外部通过输入设备向主机输入数据。输入输出和库函数输入输出和库函数主主机机键盘键盘磁盘磁盘光盘光盘扫描仪扫描仪显示器显示器打印机打印机磁盘磁盘输入输入输出输出37输入输出流输入输出流流流(stream)按直线排列的字符序列按直线排列的字符序列每个序列包括每个序列包括0个或多个字符,并用换行符结尾个或多个字符,并用换行符结尾ANSI C支持至少支持至少254个字符的序列个字符的序列所有的输入所有的输入/输出都是用流来进行的。输
32、出都是用流来进行的。输入输出和库函数输入输出和库函数S!ci源源目的目的38标准输入输出流标准输入输出流开始执行程序时,开始执行程序时,3个流自动连接到程序上个流自动连接到程序上标准输入流标准输入流(standard input)对应的源端设备:对应的源端设备:keyboard标准输出流标准输出流(standard output)对应的目的端设备:对应的目的端设备:screen标准错误流标准错误流(standard error)对应的目的端设备:对应的目的端设备:screen操作系统允许这些流重定向到其它设备操作系统允许这些流重定向到其它设备输入输出和库函数输入输出和库函数type mypro
33、g.c prn输出重定向符输出重定向符myprog data.txt输入重定向符输入重定向符39输入输出函数输入输出函数C语言中数据的输入、输出是由函数来实现的。语言中数据的输入、输出是由函数来实现的。字符输入函数:字符输入函数:getchar()字符输出函数:字符输出函数:putchar()格式输入函数:格式输入函数:scanf()格式输出函数:格式输出函数:printf()它们都属于标准输入输出库函数,其原型它们都属于标准输入输出库函数,其原型(prototype)都在都在stdio.h头文件头文件(header file)中。中。输入输出和库函数输入输出和库函数40字符输入输出字符输入输
34、出putcharputchar()()函数函数getchargetchar()()函数函数使用说明使用说明程序中必须包含程序中必须包含 stdio.h 头文件头文件输入输出和库函数输入输出和库函数#include 41字符输出字符输出putchar使用形式使用形式putchar(character);向标准输出流输出一个字符向标准输出流输出一个字符character使用说明使用说明character可以是以下数据:可以是以下数据:字符型数据字符型数据整型数据整型数据转义字符转义字符输入输出和库函数输入输出和库函数42字符输出字符输出举例举例(cw0302.c)见例见例 3-12输入输出和库函数
35、输入输出和库函数#include void main()char a;int b;a=B;b=79;putchar(a);putchar(n);putchar(b);putchar(n);putchar(Y);BOY43字符输入字符输入getchar使用形式使用形式variable=getchar();从标准输入流读取一个字符。从标准输入流读取一个字符。使用说明使用说明只只接收单个字符,输入数字也按字符处理;输入多于一个接收单个字符,输入数字也按字符处理;输入多于一个字符时,只接收第一个字符。字符时,只接收第一个字符。该字符可赋给字符变量、整型变量或作为表达式的一部分。该字符可赋给字符变量、整
36、型变量或作为表达式的一部分。输入输出和库函数输入输出和库函数44字符输入字符输入举例举例(cw0303.c)见例见例 3-13输入输出和库函数输入输出和库函数#include void main()char c;c=getchar();putchar(c);aaabca98912345格式输入输出格式输入输出printfprintf()()函数函数scanfscanf()()函数函数使用说明使用说明程序中可以不明确指定包含程序中可以不明确指定包含 stdio.h 头文件头文件输入输出和库函数输入输出和库函数#include 可以省略此命令可以省略此命令46格式输出格式输出printf使用形式使
37、用形式printf(,);按格式控制字符串规定的格式,向指定的输出设备按格式控制字符串规定的格式,向指定的输出设备(一般(一般为显示器)为显示器)输出输出在在输出列表中输出列表中各各输出项输出项的值的值。使用说明使用说明格式控制字符串格式控制字符串由双引号括起来的字符串,用于指定输出格式由双引号括起来的字符串,用于指定输出格式输出列表输出列表需要输出的数据列表,彼此间用逗号分隔需要输出的数据列表,彼此间用逗号分隔输出项可以是任意合法的表达式输出项可以是任意合法的表达式printf()函数也可以无输出表列,只有格式控制字符串。函数也可以无输出表列,只有格式控制字符串。例:例:printf(“th
38、is is a C program.n”);输入输出和库函数输入输出和库函数47格式输出格式输出格式控制字符串用于指定输出格式,它包含两类字符:普通字符和格式控制字符串用于指定输出格式,它包含两类字符:普通字符和格式说明符。格式说明符。1.普通字符包括可显示的字符和转义字符。在执行普通字符包括可显示的字符和转义字符。在执行printf()函数时,包函数时,包含在格式控制字符串中的普通字符按含在格式控制字符串中的普通字符按原样输出原样输出,一般起提示作用。,一般起提示作用。2.格式说明符:是以格式说明符:是以%开头的一个或多个字符。在执行开头的一个或多个字符。在执行printf()函数时,函数时
39、,包含在格式控制字符串的格式说明符用于控制输出项的输出格式。包含在格式控制字符串的格式说明符用于控制输出项的输出格式。举例举例输入输出和库函数输入输出和库函数printf(“n=%5d,f=%5.2fn”,3,6.235)普通字符普通字符原样输出原样输出格式说明符(转换规则)格式说明符(转换规则)%修饰符修饰符 格式字符格式字符指定数据的输出格式指定数据的输出格式n=3,f=6.2448格式输出格式输出格式字符格式字符输入输出和库函数输入输出和库函数格式字符格式字符功功 能能d,i以十进制有符号形式输出整数(正数不输出符号)以十进制有符号形式输出整数(正数不输出符号)o以八进制无符号形式输出整
40、数(不输出前缀以八进制无符号形式输出整数(不输出前缀0 0)x,X以十六进制无符号形式输出整数(不输出前缀以十六进制无符号形式输出整数(不输出前缀0 x0 x)u以十进制无符号形式输出整数以十进制无符号形式输出整数f以小数形式输出单、双精度实数以小数形式输出单、双精度实数e,E以指数形式输出单、双精度实数以指数形式输出单、双精度实数(小数点前有且必须有一位非小数点前有且必须有一位非0 0数数字,小数点占一位,尾数占字,小数点占一位,尾数占6 6位,指数部分占位,指数部分占5 5位,共位,共1313位位)g,G选用选用%f%f和和%e%e格式中输出宽度较短的一种,不输出无意义的零格式中输出宽度较
41、短的一种,不输出无意义的零c以字符形式输出,输出一个字符以字符形式输出,输出一个字符s输出字符串输出字符串49格式输出格式输出格式修饰符格式修饰符输入输出和库函数输入输出和库函数修饰符修饰符意意 义义l用于长整型和长双精度实型数据,可加在格式字符用于长整型和长双精度实型数据,可加在格式字符 d d、o o、x x、u u、f f 前面。前面。m(正整数)(正整数)数据最小宽度。当数据最小宽度。当m大于数据的实际宽度时,左补空格,大于数据的实际宽度时,左补空格,右对齐右对齐;当;当m小于等于数据的实际宽度时,按数据的实小于等于数据的实际宽度时,按数据的实际宽度输出。际宽度输出。.n(正整数)(正
42、整数)对于实数,表示输出对于实数,表示输出n n位小数;位小数;对于字符串,表示截取的字符个数。对于字符串,表示截取的字符个数。输出的数字或字符在域内向左靠,右边填空格。输出的数字或字符在域内向左靠,右边填空格。(左对左对齐齐)#当整数以八进制或十六进制形式输出时,输出前缀。当整数以八进制或十六进制形式输出时,输出前缀。可加在格式字符可加在格式字符o o、x x前面。前面。50格式输出格式输出格式说明符小结格式说明符小结 见例格式说明符见例格式说明符1.c/2.c./6.c输入输出和库函数输入输出和库函数格式字符格式字符形形 式式d,i%d,%md,%-md,%ld,%mld,%-mld,%i
43、,o%o,%mo,%-mo,%lo,%mlo,%-mlo,%#o,x,X%x,%mx,%-mx,%lx,%mlx,%-mlx,%#x,u%u,%mu,%-mu,%lu,%mlu,%-mluf%f,%mf,%m.nf,%lf,e,E%e,%me,%m.ne,g,G%gc%cs%s,%ms,%m.ns,要输出要输出%就用就用%51格式输出格式输出举例举例(cw0304.c)输入输出和库函数输入输出和库函数void main()int a=97,b=-1;float f=123.4;printf(“%d,%cn”,a,a);printf(“%d,%o,%x,%un”,b,b,b,b);printf(
44、“%f,%e,%g”,f,f,f);运行结果:1 1 1 1 1 1 1 11 1 1 1 1 1 1 197,a-1,37777777777,ffffffff,4294967295123.400002,1.234000e+002,123.452格式输出格式输出举例举例(cw0305.c)输入输出和库函数输入输出和库函数void main()int a=1,b=2,c=3;printf(“%d,%d,%d,%dn”,a,b,c);printf(“%d,%d,%dn”,a,b,c,a+b+c);1,2,3,8981,2,3格式说明符和输出项格式说明符和输出项在数量和类型上应该在数量和类型上应该一
45、一对应。一一对应。53格式输入格式输入scanf使用形式使用形式scanf(,);按格式控制字符串规定的格式,从指定的输入设备读入数按格式控制字符串规定的格式,从指定的输入设备读入数据,并存放到地址列表中的各地址项指定的变量中据,并存放到地址列表中的各地址项指定的变量中使用说明使用说明格式控制字符串格式控制字符串由双引号括起来的字符串,用于指定输入格式由双引号括起来的字符串,用于指定输入格式地址列表地址列表由若干个变量的地址组成由若干个变量的地址组成输入输出和库函数输入输出和库函数54格式输入格式输入地址列表地址列表取地址运算符:取地址运算符:&得到变量在内存中的地址。得到变量在内存中的地址。
46、输入输出和库函数输入输出和库函数scanf(“%d,%d”,&a,&b)FF00FF02ab55格式输入格式输入格式字符格式字符输入输出和库函数输入输出和库函数格式字符格式字符功功 能能d,i以十进制形式输入有符号整数以十进制形式输入有符号整数o以八进制形式输入无符号整数以八进制形式输入无符号整数x,X以十六进制形式输入无符号整数以十六进制形式输入无符号整数u以十进制形式输入无符号整数以十进制形式输入无符号整数f以小数形式或指数形式输入实数以小数形式或指数形式输入实数e,E,g,G同同f f,它们之间可以互换,它们之间可以互换c输入单个字符输入单个字符s输入字符串输入字符串56格式输入格式输入
47、格式修饰符格式修饰符输入输出和库函数输入输出和库函数修饰符修饰符意意 义义l用于输入长整型和双精度实型数据,可加在格式字符用于输入长整型和双精度实型数据,可加在格式字符 d d、o o、x x、u u、f f、e e 前面。前面。h用于输入短整型数据。用于输入短整型数据。m(正整数)(正整数)域宽,指定输入数据所占的宽度。域宽,指定输入数据所占的宽度。*表示本输入项读入后不赋给任何变量,即跳过该输入值。表示本输入项读入后不赋给任何变量,即跳过该输入值。57格式输入格式输入例:例:scanf(“%d%*d%d”,&a,&b);若输入:若输入:1 12 23 3 ,则将,则将1 1赋给变量赋给变量
48、a a,2 2输入后没用赋给输入后没用赋给任何变量,被跳过,任何变量,被跳过,3 3赋给变量赋给变量b b,即,即a=1,b=3a=1,b=3例:例:scanf(“%4d”,&i);若输入:若输入:123456789123456789,则因为指定宽度为,则因为指定宽度为4 4,所以只把,所以只把12341234赋予变量赋予变量i i,其余部分部分被截去,即,其余部分部分被截去,即i=1234i=1234注:注:(1)scanf()(1)scanf()函数中无精度控制函数中无精度控制例:例:scanf(“%5.2f”,&a);是无效的是无效的(2)(2)在在scanf()scanf()函数的地址
49、列表中要求给出变量的地址,如函数的地址列表中要求给出变量的地址,如果只给出变量名则会出现错误。果只给出变量名则会出现错误。例:例:scanf(“%d”,a);是非法的。是非法的。格式输入格式输入(3)(3)在输入多个数值数据时,如果在输入多个数值数据时,如果“格式控制字符串格式控制字符串”中没有非空格字符作输入数据之间的间隔,则可用空中没有非空格字符作输入数据之间的间隔,则可用空格符,格符,TabTab水平制表符或回车符作间隔;当碰到空格水平制表符或回车符作间隔;当碰到空格符,符,TabTab水平制表符,回车符或非法数据水平制表符,回车符或非法数据(如对如对”%d”%d”输入输入”135A”1
50、35A”时,时,A A为非法数据为非法数据)时,认为输入结束。时,认为输入结束。见例见例3-11说明:当程序运行到说明:当程序运行到scanf()scanf()函数调用语句时,则会等函数调用语句时,则会等待用户输入数据。如在格式字符待用户输入数据。如在格式字符“%d%d%d”%d%d%d”之间没有之间没有间隔,可以使用一个或多个空格或者回车键作为每两间隔,可以使用一个或多个空格或者回车键作为每两个输入数之间的间隔。个输入数之间的间隔。格式输入格式输入(4)(4)在输入字符数据时,若格式控制串中无非空格字符,在输入字符数据时,若格式控制串中无非空格字符,则认为所有输入的字符均为有效字符;则认为所