1、Teacher teaching designCONTENTS 目 录数据的输出函数输出函数格式说明符明确考点 交流提升案例分析 仿真演练数据的输出函数PART 01数据的输出函数printf函数(称为格式输出函数)printf函数所以称为格式输出函数,按用户指定的格式,把数据输出到显示器屏幕上。其关键字最末一个字母f是format的缩写,即为“格式”的意思。1)printf函数调用的一般形式:printf(“格式控制字符串”,输出表列)功能:按“格式控制字符串”的指定格式,输出对应的变量。说明:(1)格式控制字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串(普通字符)两种组成。
2、格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。如:“%d”表示按十进制整型输出;“%ld”表示按十进制长整型输出;“%c”表示按字符型输出等。(2)非格式字符串在输出时原样照印,在显示中起提示作用。(3)输出表列中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该从左到右一一对应。数据的输出函数2)输出表列(1)变量输出表属于可选内容。如果输出的数据多于1个,相邻之间用逗号分隔。如:printf(How do you do!n);printf(a=%d b=%dn,a,b);(2)变量输出表内容可以是表达式:如:printf(%
3、d,3*a+5);(3)“格式控制字符串”中的格式字符,必须与“输出表列”中输出项的数据类型 一致,否则会引起输出错误。如初学者会无意间出现如下的错误,看着莫名其妙的程序结果却不知道是怎么回事:int a=10;printf(%f,a);输出函数格式说明符PART 02格式说明符格式字符意 义d以十进制形式输出带符号整数(正数不输出符号)o以八进制形式输出无符号整数(不输出前缀0)x,X以十六进制形式输出无符号整数(不输出前缀Ox)u以十进制形式输出无符号整数f以小数形式输出单、双精度实数e,E以指数形式输出单、双精度实数g,G以%f或%e中较短的输出宽度输出单、双精度实数c输出单个字符s输出
4、字符串格式说明符printf 附加格式说明字符(如%m.nf和%m.ns等):标 志意 义-结果左对齐,右边填空格m(正整数)数据最小宽度n(正整数)对实数表示输出n位小数,对字符串表示截取的字符个数字母l用于长整型整数,可以加在格式符d,o,x,u前面。#对c,s,d,u类无影响;对o类,在输出时加前缀0;对x类,在输出时加前缀0 x;对e,g,f 类当结果有小数时才给出小数点空格输出值为正时表示以空格,为负时加以负号明确考点 交流提升PART 03明确考点 交流提升(1)格式字符d以带符号的十进制整数形式输出允许形式:%d、%md、%-md、%ld等。%d按整型数据的实际长度输出;%md-
5、m是正整数,表示输出数据宽度,若m小于数据的实际位数,m不起作用;%-md-数据宽度小于m时,负号”-”要求结果左对齐,右边填空格;%md-数据宽度小于m时,结果右对齐,左边填空格;%ld-字母l用于长整型数据输出,还可以加在格式符o,x,u前面。明确考点 交流提升【例1】格式符d的使用。main()int n1=111;long n2=222222;printf(n1=%d,n1=%4d,n1=%-4d,n1=%2dn,n1,n1,n1,n1);printf(n2=%ld,n2=%9ld,n2=%2ldn,n2,n2,n2);printf(n1=%ldn,n1);运行结果:n1=111,n1
6、=111,n1=111,n1=111n2=222222,n2=222222,n2=222222请思考为什么产生这样的结果?整数还有下面的输出形式:%o(小写字母o)-整数八进制无符号形式输出;%x-整数十六进制无符号形式输出。%u-对于unsigned型数据,以十进制无符号形式输出。明确考点 交流提升(2)、格式字符f以小数形式,输出单精度和双精度实数允许形式:%f、%m.nf、%-m.nf、%mf、%.nf等。%f-按系统默认宽度输出实数:整数部分全部输出,小数部分输出6位。单精度变量的输出有效位是7位;双精度变量的输出有效位是16位。%-m.nf-m是正整数,表示数据最小宽度;n是正整数,
7、表示小数位数,m和负号的用法与前面相同。%g-让系统根据数值的大小,自动选择%f或%e格式、且不输出无意义的零。【例2】输出实数的有效位。main()float x=11111.111,y=33333.333;printf(x+y=%fn,x+y);程序运行结果:x+y=44444.443359,但有效数字只有7位:44444.44。双精度变量的输出与此类似,只是有效位是16位。明确考点 交流提升【例3】思考题:以下输出语句的结果:printf(%fn,12.3);12.300000printf(%2fn,12.3);12.300000printf(%10fn,12.3);12.300000p
8、rintf(%.3fn,12.3);12.300printf(%10.3fn,12.34567);12.346 printf(%5.3fn,12.3)12.300printf(%10.3fn,12.3);12.300printf(%5.3fn,12.34444);12.344明确考点 交流提升(3)、格式字符e以指数形式输出实数允许形式:%e、%m.ne、%-m.ne、%me、%.ne等m限定输出实型数据的总宽度,n-1限定输出的小数位数。%e-以标准指数形式输出:尾数中的整数部分大于等于1、小于10,小数点占一位,尾数中的小数部分占5位;指数部分占4位,其中e占一位,指数符号占一位,指数占2
9、位,共11位(不同系统的规定略有不同)。如,3.33333e-03。【例4】思考题:以下%e的输出格式事例,思考以下输出语句的结果:printf(%en,12.3);1.23000e+01printf(%2en,12.3);1.23000e+01printf(%15en,12.3);1.23000e+01printf(%.3en,12.3);1.23e+01printf(%15.3en,12.3);1.23e+01 printf(%5.3en,12.3);1.23e+01printf(%15.3en,12.345);1.23e+01 明确考点 交流提升4、格式字符c输出一个字符 允许形式:%m
10、c%c-以字符形式输出一个字符。【例5】字符和整数的输出。main()char ch=a;int i=97;printf(ch=%c,ch=%cn,ch,i);/*c,i以字符形式输出*/printf(i=%d,i=%dn,ch,i);/*c,i以整数形式输出*/printf(ch=%2cn,ch);/*m限定输出字符的总宽度,m大于字符宽度则字符左端填充空格*/程序运行结果:ch=a,ch=ai=97,i=97ch=a明确考点 交流提升5、格式符s输出一个字符串允许形式:%s、%m.ns%s-输出一个字符串。%m.ns-m是正整数,表示允许输出的字符串宽度;n是正整数,表示对字符串截取的字符
11、个数。【例6】输出字符串。main()printf(%s,%3s,%-9sn,student,student,student);printf(%8.3s,%-8.3s,%3.4sn,student,student,student);运行结果:student,student,studentstu,stu,stud说明:如果想输出字符%,可以在“格式控制字符串“中连续用两个%表示,如,printf(“%5.2f%”,1.0/2);输出结果为:50.00%。仿真演练 体验探索PART 04案例分析 仿真演练1、以下程序运行后的输出结果是()。main()int x=0210;printf(%Xn,x
12、);2、以下程序运行后的输出结果是()。main()char c;int n=100;float f=10;double x;x=f*=n/=(c=50);printf(%d%fn,n,x);3、有以下程序运行后的输出结果是()main()int m=0256,n=256;printf(%o%on,m,n);A)0256 0400 B)0256 256 C)256 400 D)400 400 4、有以下程序运行后的输出结果是()main()int a=666,b=888;printf(%dn,a,b);A)错误信息 B)666 C)888 D)666,888 5、以下程序段的输出结果是()ma
13、in()int i=9;printf(%on,i);6、以下程序运行后的输出结果是()main()int a,b,c;a=25;b=025;c=0 x25;printf(%d%d%dn,a,b,c);案例分析 仿真演练案例分析 仿真演练7、有以下程序执行后输出结果是()main()int x=102,y=012;printf(%2d,%2dn,x,y);A)10,01 B)02,12 C)102,10 D)02,108、已知字符A的ACSII码值为65,以下语句的输出结果是()main()char ch=B;printf(“%c%dn”,ch,ch);9、有以下程序语句 main()int n
14、1=10,n2=20;printf(,n1,n2);要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空。n1=10n2=20案例分析 仿真演练10、有以下程序运行后的输出结果是()main()int a,b,d=25;a=d/10%9;b=a&(-1);printf(%d,%dn,a,b);A)6,1B)2,1C)6,0 D)2,011、有以下程序运行后的输出结果是()main()int c=35;printf(%dn,c&c);A)0B)70C)35D)112、若有以下程序段运行后的输出结果是()main()int a=2,b=5;printf(a=%d,b=%dn,a,b);A)a=%2,b=%5 B)a=2,b=5 C)a=%d,b=%d D)a=%d,b=%d