首页 百科知识 和格式输出函数(

和格式输出函数(

时间:2022-10-17 百科知识 版权反馈
【摘要】:“参数”是需要输出的一些数据,也可以是表达式。对long型数据应用%ld格式输出,也可指定数据的输出宽度,如printf函数中的"%ld"可改为"%10ld",则输出为:第8行,printf()函数输出两个变量a、b的值。第4个数据按%.2e格式输出,只指定n=2,未指定m,自动使m等于数据应占的长度,为8列。③g格式符,用来输出浮点型数,它根据数值的大小,自动选f格式或e格式,且不输出无意义的零。在计算各参数值时,Turbo C采用自右至左的顺序求值。

2.7.1 字符输出函数putchar()和格式输出函数printf()

1.字符输出函数putchar()

putchar()函数的作用是向终端输出一个字符。

例如:

img140

运行结果:

a

A

也可以输出其他转义字符,如:

putchar('\101');   /*输出字符′A′*/

2.格式输出函数printf()

printf()函数的一般格式为:

  printf(“格式控制串”,参数1,参数2,…);

作用是按指定的格式控制要求把相应的参数值在标准输出设备(通常是终端)上输出来。例如:

  printf("a=%d,b=%d\n",a,b);

其中,“格式控制串”是用双引号括起来的字符串,也称为“转换控制字符”,如上式中的“a=%d,b=%d\n”。它包括两种信息:一种是格式说明,由“%”和格式字符组成,如上式中的“%d”等,其作用是将输出的数据转换为指定的格式输出;格式说明总是由“%”字符开始的;一种是普通字符,如上式中的“a=,b= ”,它们是需要按原样输出的字符。

“参数”是需要输出的一些数据,也可以是表达式。每个格式说明都对应一个参数,如上式中的第一个“%d”对应参数a,第二个“%d”对应参数b。

表2.7.1列出了常用的格式字符及其作用。

表2.7.1 printf()中常用的格式字符及其作用

img141

在格式说明中,在%和上述格式字符间可以插入以下几种附加符号(又称修饰符)。如表2.7.2所示。

表2.7.2 printf()中的附加格式说明符及其说明

img142

例如:

%ld —— 输出十进制长整型数;

%m.nf ——输出m位浮点型数。

其中,m为域宽(整数位数+小数位数+小数点),n为小数位数(自动对n位后小数进行四舍五入)或n个字符;若输出数本身的长度小于m,则左边补空格,即为右对齐的方式。

%−m.nf ——m、n意义同上。只是若输出数本身的长度小于m,则右边补空格,即为左对齐的方式。

(1)整型数据的输出

①d格式符。用来输出十进制整数。有以下几种用法:

a.%d,按整型数据的实际长度输出。

b.%md,m为指定的输出数据的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出,例如:

  printf("%4d,%4d",a,b);

若a=20,b=12 321,则输出结果为

  −−20,12 321

c.%ld,输出长整型数据。例如:

  long a=12 345 678;

  printf("%ld",a);

如果用%d输出,就会发生错误,因为整型数据的范围为−32 768~32 767。对long型数据应用%ld格式输出,也可指定数据的输出宽度,如printf函数中的"%ld"可改为"%10ld",则输出为:

  −−12 345 678

一个int型数据可以用%d或%ld格式输出。

②o格式符。以无符号八进制数形式输出整数。例如:

  int i=−5;

  printf("%d,%o",i,i);

−5在内存单元中的存放形式(以补码形式存放)如下:

img143

输出结果为

  −5,177773

对于长整型数(long型)可以用“%lo”格式输出。同样也可指定输出宽度,例如:

  printf("%8o",i); 输出为_177773。

③x格式符,以无符号十六进制数形式输出整数。例如:

  int i=−5;

  printf("%d,%o,%x",i,i,i);

输出结果为

  −5,177773,fffb

同样可以用“%lx”输出长整型数,也可指定输出数据的宽度。

④u格式符,以十进制形式输出无符号整型数。

例2-8 整型数据的输出。

img144

程序分析:

第5行定义了两个整型变量a、b,并分别赋值为11、22。

第6行定义了一个整型变量m并且赋值为−1。

第7行定义了一个长整型变量n并且赋值为123 456 789。

第8行,printf()函数输出两个变量a、b的值。其中a按实际宽度输出,b指定其输出宽度为3,输出结果为11 _22(_表示空格)。

第9行,printf()函数仍然输出两个变量a、b的值,只是在格式控制字符串中包含有普通字符,把普通字符原样输出即可。

第10行,printf()函数以不同的格式(十进制、八进制、十六进制、无符号整型)输出m的值。由于m=−1,在内存中存放时是按其补码的形式存放的,如下所示:

img145

输出结果为m:−1,177777,ffff,65535。

第11行,printf()函数以普通整型输出n的值。由于n是一个长整型变量,其值为123 456 789,在输出时取出其低16位输出。其在内存中的存放形式如下:

img146

由于其低16位中的最高位为1,所以根据补码知识知道它是一个负数,输出结果为n=−13035。

第12行printf()函数以长整型形式输出n的值。输出结果为:n=123456789。

程序的运行结果为:

11 22

a=11,b=22

m:−1,177777,ffff,65535

n=−13035

n=123456789

(2)浮点型数据的输出

①f格式符。用来输出浮点型数(包括单、双精度),以小数形式输出。有以下几种用法:

a.%f,不指定输出宽度,由系统自动指定,使整数部分全部输出,并输出6位小数。注意,并非全部数字都是有效数字。单精度型浮点数的有效位数一般为7位。

b.%m.nf,指定输出的数据的宽度占m位,其中有n位小数。如果数值长度小于m,则左端补空格。

c.%−m.nf与%m.nf基本相同,只是如果数值长度小于m,输出的数值向左端靠齐,右端补空格。

例如:

#include 〈stdio.h〉

img147

输出结果如下:

234.567001**234.567001**  234.57**234.57**234.57

②e格式符。以指数形式输出浮点型数。有以下几种形式:

a.%e,不指定输出数据所占的宽度及小数位数,有的C编译系统默认给出5位小数,指数部分占4位(如e+02),其中“e”占1位,指数符号占1位,指数占2位。数值按规范化指数形式输出(即小数点前必须有且仅有1位非零数字)。例如:

printf(″%e″,456.783);

输出:4.56783e+02。输出的数据共占11列宽度(注:不同系统的规定略有不同)。

b.%m.ne和%−m.ne,m、n和“−”字符的意义同前。此处n指拟输出数据的小数部分的小数位数。若f=456.783,则:

printf("%e %10e %10.2e %.2e %−10.2e",f,f,f,f,f);

输出如下:

img148

第2个输出项按%10e输出,即只指定了m=10,未指定n,凡未指定n,默认使n=5,整个数据长11列,超过给定的10列,就突破10列的限制,按实际长度输出。第3个数据应占10列,其中小数部分占2列,而数值本身为8列,所以数值向右端靠,左边补2个空格。第4个数据按%.2e格式输出,只指定n=2,未指定m,自动使m等于数据应占的长度,为8列。第5个数据应占10列,数值只有8列,由于是%−10.2e,数值向左端靠,右边补2个空格(注:不同系统的规定略有不同)。

③g格式符,用来输出浮点型数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的零。如i=234.896,则:

img149

输出如下:

  234.895996 2.34896e+02 234.896

例2-9 浮点型数据的输出。

img150

img151

程序输出结果:

x=1234.560059,y=1.234568

z=1234567.123457

z=1.23457e+06

z=1234570

z= 1234567.12345679

x= 1234.560

x=1234.560

x=1234.560

读者自己分析。

(3)字符型数据的输出

①c格式符,用来输出一个字符。例如:

  char c='b';

  printf("%c",c);

输出字符'b'。注意:"%c"中的c是格式符,而逗号右边的c是变量名,不要搞混淆了。

也可以指定输出的字符所占宽度。例如:

  printf("%4c",c);

则输出: b,即c变量输出共占4列,前3列补空格。

②s格式符,用来输出一个字符串。有以下几种用法:

a.%s,原样输出一个字符串。例如:

  printf("%s\n","Hello");

输出"Hello"字符串(不包括双引号)。

b.%ms,输出的字符串占m列,如果字符串本身长度大于m,则突破m的限制,将字符串全部输出;若字符串本身长度小于m,则左端补空格。

c.%−ms与%ms基本相同,只是若字符串本身长度小于m,则右端补空格。

d.%m.ns,输出共占m列,但只取字符串中左端n个字符。这n个字符输出在m列范围的右侧,左端补空格。如果n〉m,则m自动取n的值,即保证n个字符正常输出。

e.%−m.ns,m、n意义同上。只是n个字符输出在m列范围的左侧,右端补空格。

例2-10 字符串的输出。

1 //2-10.cpp字符和字符串的输出

img152

程序输出:

img153

在使用printf()函数输出时,注意以下几点:

(1)printf函数格式控制中的格式说明符与输出参数的个数和类型必须一一对应,否则将会出现错误。

(2)格式说明中的 %和后面的格式字符之间不能有空格,除了X、E、G格式字符外,其他格式字符必须用小写字母,如%c不能写成%C。

(3)长整型数应该用%ld(或%lo、%lx、%lu)格式输出,否则会出现输出错误。

(4)printf函数的参数可以是常量、变量或表达式。在计算各参数值时,Turbo C采用自右至左的顺序求值。

(5)可以在printf()函数中的“格式字符串”内包含2.2.3节中的“转义字符”,如'\n'、'\t'、'\r'、'\b'等。

(6)如果想输出字符“%”,则应该在“格式控制字符串”中连续用两个%表示,例如:

  printf("%f%%",2.0/3);

输出:0.666666%

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈