《C语言程序设计CPD03更多课件请进我文库.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计CPD03更多课件请进我文库.ppt(24页珍藏版)》请在三一办公上搜索。
1、第3章 格式化输入输出,北京工商大学计算机学院何 渝,计算机程序设计基础,2,本章主要内容,输入输出(Input/Output)格式化输出格式化输入,3,3.1 引言,对数据的一种重要操作是输入输出(I/O),没有输出的程序是没有用的,而没有输入的程序缺乏灵活性。前面通过cin,cont和printf,scanf已初步接触了C+和C的I/O,它们的格式都是“隐含”或“缺省(default)”的,即事先设计或定义好的一种格式,而本章介绍的“格式化”I/O是可由用户根据需要,自己设计或定义。,4,3.2 几个概念,输入输出设备 标准输入输出设备 流(Stream)交互式程序 批处理程序,5,3.3
2、语言数据的输入与输出,语言没有专门的I/O语句,它是由函数来实现的。提供了多种I/O函数,使其灵活、多样、方便,功能强。标准I/O函数库中有一些公用的信息写在头文件stdio.h中,因此使用标准I/O函数库中的函数时,一般在程序开头先写下面的命令:#include 以便把I/O函数要使用的信息包含到程序中来。,6,3.3.1 getchar与putchar函数,getchar()与putchar()函数是语言的标准函数,其函数库中已有,可直接使用。getchar()函数是从标准输入设备(一般是用户终端)上读入一个字符。putchar(c)函数是将变量c中的字符输出到标准设备(一般也是用户终端)
3、上。注意:前一函数没有参数,后一函数有一个形式参数。,7,例 输入三个字母,若是小写转换成大写输出,#include void main()char ch1,ch2,ch3;ch1=getchar();ch2=getchar();ch3=getchar();if(ch1=a运行情况如下:boyBOY,8,3.3.2 printf 函数,该函数是格式输出函数,功能是按指定的格式、将指定的控制参数的值在标准设备上输出,包括两种参数:格式控制参数和输出项参数,一般形式为:printf(格式控制参数,输出项1,输出项2,);格式控制参数以字符串的形式描述,也称为格式控制字符串。由2部分组成:格式说明和
4、普通字符。普通字符(包括转义符序列)将被简单地复制显示(或执行)。一个格式说明项将引起一个输出参数项的转换与显示,它由%引出并以一个类型描述符结束的字符串,中间是一些可选的附加说明项。输出项1、输出项2等可有要无,由格式控制参数决定。,9,格式说明由不同的格式字符组成,格式字符的作用是指定输出数据类型,它包括:,%格式说明的起始符号-指定是否左对齐输出 0 指定空位是否填0 m.n 指出输出域宽及精度 l/n 输出长度修正符,10,1.格式字符,格式字符用以指定输出项的数据类型和输出格式.,如d(i),x(X),o,u,c,s,e(E),f,g(G),%等。一般情况下,格式字符要与对应的输出项
5、类型一致,如不应用%f去输出整数。,11,2.长度修正符,整型的格式字符没有区分int,short,long,实型的格式字符也没有区分float 与double。对整型来说,d,x,o,u是指int型;对 实型来说e,f,g是指float型。为了能适应不同长度的数据,可格式字符前面加一个长度修正符:l:整型指long型,如%ld;实型指double型,如%lf。h:只用于将整型的格式修正为short型,如%hd等。,12,3.域宽及精度符m.n,m:指域宽。即对应输出项在输出设备上所占的字符数。n:指精度。用于说明输出的实型的小数位数。不指定n时,隐含的精度为n=6位。,13,例:,int a
6、=123;char ch=69;float f=123.456;long k=98123;printf(%d,a);/*输出:123*/printf(%x,a);/*输出:7B*/printf(%o,a);/*输出:173*/printf(%c,ch);/*输出:E*/printf(%e,f);/*输出:1.234560e+002*/printf(%f,f);/*输出:123.456000*/printf(%8.1f,f);/*输出:123.5*/printf(%g,f);/*输出:123.456*/printf(%);/*输出:%*/printf(%ld,k);/*输出:98123*/,14
7、,注意:,输出数据的实际精度并不主要决定于格式项中的域宽与精度,也不决定于输入的数据精度,而主要决定于数据在机器内的存储精度。因此,格式项中指定的域宽再大,精度再长,所得到的多余位数上的数字是无意义的。所以增加域宽与精度并不能提高输出数据的实际精度。,15,4.数0用以指定数字前的空位是否用0填补。有此项则空位以0填补,无此项则空位用空格填补。,如:float a=1.23;printf(%08.1f,a);输出结果为:000001.2,16,2.7.3 scanf 函数,scanf函数的功能是进行输入数据,也是按格式参数的要求,从终端上把数据传送到地址参数所指定的内存空间中。其一般形式为:s
8、canf(格式控制参数,地址1,地址2,.);1.地址参数是指变量的地址,它通过对变量名求地址运算得到。求地址运算符为&,得到的地址是一种符号地址,不是真正的机器内存地址。如:&a,&b。2.格式控制参数与printf函数类似,不完全相同。它的格式参数有两种成分:,17,1).格式说明项,格式字符有:%*m l/h 输入抑制字符 m 域宽说明符 l/n 长度修正符 格式字符 输入数据类型和格式,18,2).输入流分隔,scanf函数从输入数据中接收到的非空字符,再转换成格式项描述的格式,传送到与格式项对应的地址中去。具体有:(1)当输入流中数据类型与格式字符要求不符时,就认为这一项数据项结束。
9、(2)根据格式项中指定的域宽分隔出数据项。(3)用隐含的分隔符。,19,3.scanf函数的停止与返回,scanf函数在遇到下面两种情况后结束:(1)格式参数中的格式项用完,正常结束。(2)发生格式项与输入域不匹配是,非正常结束。如从键盘输入的数据数目不足。scanf也是一个函数,它也有返回值,这个值就是成功匹配的项数。,20,4.scanf函数与输入,scanf函数在输入数据时,是在键入一行字符并按回车键之后才被输入,这一行字符先放在一个缓冲区中,然后按格式说明的要求从缓冲区中读数据。如果输入的数据多于所要求的个数时,余下的数据可以为下一个scanf函数接着使用。例:printf(Input
10、 a b c:);scanf(%d%c%f,输出为:Input a b c:1234r1234.567(下划线为输入流)a=1234,b=r,c=1234.567017,21,3.4 流的定向输入输出,C+中标准输入输出是定向流,并预先定义了四种标准输入输出流:标准输入流 cin 标准输出流 cout 标准错误输出流 cerr 标准错误输出流 clog,22,3.5 标准输出流,标准流定向输出语句最简形式如下:cout OutputExpression;其中 OutputExpression 为常量、变量、表达式、函数调用或格式控制符;为“插入操作符”,它是被重载的操作符。可同时输出多个值。,23,3.6 标准输入流,标准流定向输入语句最简形式如下:cin InputVariable;其中 InputVariable 为变量;为“提取操作符”,它是被重载的操作符。可以同时输入多个数据,如:cin variable1 variable2;输入时variable1和variable2用分隔符分开,24,第3章 家庭作业,1.复习本章内容 2.教材P85学习测试题 3.上机时多多操作本章介绍的各种输入输出函数。4.预习后面章节,