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