资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,浙江科技学院教信系计算机基础教学网站:,www.Goit.Net,第,3,章 数据输入,/,输出,数据的输出和输入,输出,:把数据从计算机内部,(,内存,),送到计算机外部设备,(,磁盘、显示器等,),的操作。,输入,:从计算机外部将数据送入计算机内部的操作。,注意,:,C,语言本身没有提供输入输出语句,但可以通过标准库函数中提供的输入和输出函数来实现输入和输出,一般需要包含头文件,stdio.h,即:,#include ,第三章 顺序结构,格式:,printf,(,“,格式控制串,”,,输出表),功能:按指定格式向显示器输出数据,返值:正常,返回输出字节数;出错,返回,EOF(-1),格式输出函数,输出表:要输出的数据(可以没有,多个时以“,”分隔),格式控制串:包含两种信息,格式说明,:,%,修饰符,格式字符,,用于指定输出格式,普通字符或转义序列:原样输出,格式字符,一般形式为:,printf(“,格式控制字符串”,输出表列,),例如:,printf(%3dn,x),%,格式说明起始符,3,输出数据的宽度,d,输出数据的类型,x,输出项,格式输出函数,printf,(),可见,双引号中的字符除了格式说明的字符外,其它非格式说明的普通字符按原样输出。,例如,:,a=3;,b=4;,printf(,%d%d,a,b,);,格式说明,输出表列,输出结果,:3 4,普通字符,printf(,a=,%d,b=,%d,a,b,);,输出结果,:a=3,b=4,printf(a,=%d,b,=%d,a,b,);,输出,结果,:,a=3 b=4,格式输出函数,printf(),说明:格式字符串的一般形式为:,%,标志,输出最小宽度,精度,长度,类型字符,其中方括号,中的项为可选项。,类型字符,用以表示输出数据的类型:,C,语言中输出不同数据,使用不同的类型字符,,例如:输出整型数据,使用的类型符,d,,,i(,小写,),格式输出函数,printf(),表示输出类型的格式字符及 意义,d,i,以十进制形式输出带符号整数,(,正数不输出符号,),o,以八进制形式输出无符号整数,(,不输出前缀,O),x,X,以十六进制形式输出无符号整数,(,不输出前缀,OX),u,以十进制形式输出无符号整数,f,以小数形式输出单、双精度实数,e,E,以指数形式输出单、双精度实数,g,G,以,%f%e,中较短的输出宽度输出单、双精度实数,c,输出单个字符,s,输出字符串,格式输出函数,printf(),d,i,x,X,o,u,c,s,e,E,f,g,%,格式字符:,十六进制无符号整数,不带符号十进制整数,十进制整数,指数形式浮点小数,单一字符,字符串,八进制无符号整数,小数形式浮点小数,e,和,f,中较短一种,百分号本身,int,a=567;printf(“%d”,a);,int,a=255;printf(“%x”,a);,int,a=65;printf(“%o”,a);,int,a=567;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,(“%”);,567,ff,101,567,A,ABC,5.677890,e+002,567.789000,567.789,%,说明,格式字符要用小写,(,除,X,、,E,、,G),格式字符与输出项个数应相同,按先后顺序一一对应,输出转换,:,格式字符与输出项类型不一致,自动按指定格式输出,例,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,11,11,11,11,11,11,11,11,65535,附加格式说明符(修饰符),.n,对实数,指定小数点后位数,(,四舍五入,),对字符串,指定实际输出位数,修饰符,功 能,m,输出数据域宽,数据长度,m,左补空格,;,否则按实际输出,输出数据在域内左对齐(缺省右对齐,),-,指定在有符号数,的正数前显示正号(+),+,输出数值时指定左面不使用的空位置自动填,0,0,在八进制和十六进制数前显示前导0,0,x,#,在,d,o,x,u,前,指定输出精度为,long,型,在,e,f,g,前,指定输出精度为,double,型,l,例,int,a=1234;,float f=123.456;,char,ch,=a;,printf(“%8d,%2dn”,a,a);,printf(“%f,%8f,%8.1f,%.2f,%.2en”,f,f,f,f,f);,printf(“%3cn”,ch);,运行,1234,1234,结果:,123.456000,123.456000,123.5,123.46,1.23e+02,a,例,m.n,例,int,a=1234;,float f=123.456;,char c=“Hello,world!”;,printf(“%8d,%-8dn”,a,a);,printf(“%10.2f,%-10.1fn”,f,f);,printf(“%10.5s,%-10.3sn”,c,c);,运行结果:,1234,,,1234,123.46,123.5,Hello,Hel,例,-,例,int,a=1234;,float f=123.456;,printf(“%08dn”,a);,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,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,/00001234,/0000123.46,/000+1234,/000+123.56,/173,0173,7B,0X7B,/0,65536,注意:,1.,非格式字符串在输出时原样照印,在显示中起提示作用。,4.,输出表列中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。,格式输出函数,printf(),int,a=1,b=2;,printf(“a,=%,d,b,=%,d”,a,);,a=1,b=877,(,b,为一个不确定的数),int,a=1,b=2,c=3;,printf(“a,=%,d,b,=%,d,c,=”,a,b,c,),a=1,b=2,c=,c,未告之以何种形式输出,故不输出任何值,格式输入函数,格式,:,scanf,(,“,格式控制串,”,,地址表),功能:按指定格式从键盘读入数据,存入地址表指定的,存储单元中,并按回车键结束,返值:正常,返回输入数据个数,地址表:变量的地址,常用取地址运算符,&,格式字符,:d,i,o,x,u,c,s,f,e,例,scanf(“%d”,&a,);,输入:10,则,a=10,例,scanf(“%x”,&a,);,输入:11,则,a=17,格式字符串,格式字符串的一般形式为:,%*,输入数据宽度,长度,类型字符,其中有方括号,的项为任选项。各项的意义如下:,类型字符,表示输入数据的类型,其格式符和意义如下所示:,d,输入十进制整数,o,输入八进制整数,x,输入十六进制整数,u,输入无符号十进制整数,f,或,e,输入实型数,(,用小数形式或指数形式,),c,输入单个字符,s,输入字符串,格式输入函数,scanf(),“*”,符,用以表示该输入项读入后不赋予相应的变量,跳过该输入值。,如,scanf(%d%*d%d,输入为:,1 2 3,把,1,赋予,a,,,2,被跳过,,3,赋予,b,。,宽度,用十进制整数指定输入的宽度,(,即字符数,),。,例如:,scanf(%5d,输入:,12345678,只把,12345,赋予变量,a,,,其余部分被截去。,又如:,scanf(%4d%4d,输入:,12345678,将把,1234,赋予,a,,,而把,5678,赋予,b,。,格式输入函数,scanf(),长度,长度格式符为,l,和,h,,,l,表示输入,长整型数据,(,如,%ld),和,双精度浮点数,(,如,%lf),。,h,表示输入短整型数据。,例如:,main(),int,a;,long b;,double x;,scanf(“%d%ld%lf”,printf(“a=%d,b=%ld,x=%lf”,a,b,x);,格式输入函数,scanf(),附加格式说明符(修饰符),l,修饰符,功 能,h,m,*,用于,d,o,x,前,指定输入为,short,型整数,用于,d,o,x,前,指定输入为,long,型整数,用于,e,f,前,指定输入为,double,型实数,指定输入数据宽度,遇空格或不可转换字符则结束,抑制符,指定输入项读入后不赋给变量,例,scanf(“%4d%2d%2d”,输入 19991015,则1999,yy,10 mm,15,dd,例,scanf(“%3d%*4d%f”,输入 12345678765.43,则123,k,8765.43f,例,scanf(“%2d,%*3d,%2d”,输入 12,345,67,则12,a,67b,例,scanf(“%3c%2c”,输入,abcde,则,ac1,d c2,3.,使用,scanf,函数还必须注意以下几点:,(1),scanf,函数中没有精度控制。,如:,scanf(“%5.2f”,是非法的。,(,2,),scanf,中要求给出变量地址,,如:,scanf,(“,%d”,a);,是非法的。,(,3,),在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格、,TAB,或回车作间隔。,例如:,scanf(“%d%d”,输入:,12 10,或,12,10,格式输入函数,scanf(),(,4,),在输入字符数据时,若格式控制串中无非格式字符,则认为所有 输入的字符均为有效字符。,例如:,scanf(%c%c%c,输入为:,d e f,则把,d,赋予,a,赋予,b,e,赋予,c,。,只有当输入为:,def,时,把,d,赋于,a,e,赋予,b,f,赋予,c,。,如果在格式控制中,加入空格作为间隔,即,%c,前加一个以上的空格。,如,scanf(%c%c%c,输入时各数据之间可加空格。,格式输入函数,scanf(),(,5,),如果格式控制串中有非格式字符则输入时也要输入该非格式字符。,例如:,scanf(%d,%d,%d,其中用非格式符“,”,作间隔符,,故输入时应为:,5,6,7,又如:,scanf(a=%d,b=%d,c=%d,则输入应为:,a=5,b=6,c=7,格式输入函数,scanf(),(,6,),如输入的数据与输出的类型不一致时,虽然编译能够通过,但结果可能不正确。,main(),short a;,printf(input a numbern);,scanf(“%hd”,&a,);/*vc6,中短整型必须用,hd,*/,printf(%d,a,);,/*vc6,中短整型必须用,hd,*/,由于输入数据类型为短整型,而输出语句的格式串中说明为整型,(VC6,中,整型与长整型一致,),,因
展开阅读全文