在C程序中为实现输入/输出功能使用最多的是scanf()函数和printf()函数,这两个函数是格式输入输出函数,用这两个函数时,程序员必须指定输入输出数据的格式,也就是说根据数据类型的不同需指定不同的格式。
printf()函数用来向终端输出若干个任意类型的数据。
1.printf()函数的一般形式
printf("格式控制字符串",输出表列);
函数参数包括两部分:格式控制字符串和输出表列。
例如:
“printf("a=%d,b=%c\n",a,b);”是将输出表列中的a以格式控制字符串指定的十进制整型输出,b以字符型输出。
(1)格式控制字符串
格式控制字符串指定输出数据的类型和格式,它由格式声明和普通字符组成。
①格式声明是以“%”和格式字符组成,它的作用是将输出的数据项转换为指定的格式输出。例如“printf("a=%d,b=%c\n",a,b);”中的“%d”表示按十进制整型输出,“%c”表示按字符型输出。
②普通字符是需要在输出时按原样输出的字符,如逗号、空格、换行符等在显示时起提示说明或注释作用的字符。例如“printf("a=%d,b=%c\n",a,b);”中的“a=”“,”“b=”“\n”均是普通字符,输出时会原样输出。
(2)输出表列
输出表列是C程序需要输出的一些数据,可以是常量、变量或表达式。
①输出表列中的各数据项之间需要用“,”隔开。
②输出表列中的各数据项在数量和类型上要与格式控制字符串中的格式声明一一对应,否则将会出现错误。例如“printf("a=%d,b=%c\n",a,b);”中的变量a和变量b分别对应于%d和%c。
2.格式字符
在调用printf()函数输出时,对不同类型的数据要指定不同的格式声明,而格式声明是以“%”和格式字符组成,为了更好地使用printf()函数,接下来我们将要对常用的几种格式字符进行介绍。
(1)d格式符
d格式符是以十进制有符号形式输出整数,输出时按照数据的实际长度输出,正数的符号不输出。
例如:
“printf("a=%d",a);”是将输出表列中的a以十进制整型输出。
(2)c格式符
c格式符用来输出一个字符。
例如:
char ch=′a′;
printf("%c",ch);
在运行时输出的结果为a。“printf("%c",ch);”与前面介绍的“putchar(ch);”作用相同。
一个整数只要它的值在0~255范围内,也可以用字符形式输出;反之,一个字符数据也可以用整数形式输出,为该字符的ASCII值。
【例3.3】字符数据的输出。
程序内容如下:
1 #include<stdio.h>
2 int main()
3 {
4 char ch=′a′;
5 int i=97;
6 printf("ch=%c,ch=%d\n",ch,ch);
7 printf("i=%c,i=%d\n",i,i);
8 return 0;
9 }
程序结果如图3.9所示:
图3.9 例3.3程序结果图
【例题中关键问题说明】
(1)使用printf()函数时必须包含头文件“stdio.h”。
(2)printf()函数可以输出若干个任意类型的数据,输出表列中的各数据项之间需要用“,”隔开,输出表列中的各数据项在数量和类型上要与格式控制字符串中的格式声明一一对应。
(3)在0~255范围内,整型数据与字符型数据是通用的。
()此程序是一个顺序结构的程序。
(3)s格式符
s格式符用来输出一个字符串。
例如:
“printf("%s","hello");”是输出一个字符串“hello”,其作用与以下5条语句共同起的作用相同。
putchar(′h′);
putchar(′e′);
putchar(′l′);
putchar(′l′);
putchar(′o′);
(4)f格式符
f格式符用来输出浮点数(单双精度格式符相同),以小数形式输出,用%f可以使浮点数的整数部分全部输出,并输出6位小数。(www.xing528.com)
例如:
“printf("%f",1.0/3);”执行后得到的结果为0.333333。
需要注意:并非全部数字都是有效数字,单精度浮点数的有效位数一般为7位,双精度浮点数的有效位数为16位。
(5)e格式符
e格式符以指数形式输出浮点数。%e不指定输出数据所占的宽度和小数位数,由系统自动指定6位小数,指数部分占5位,如e+003,其中e占1位,指数符号占1位,指数占3位。数值按照规范化指数形式输出(即小数点前必须有且只有1位非0数字)。
例如:
“printf("%e",123.456);”输出结果为1.234560e+002。
C语言还提供了一些不是太常用的输出格式符,详见表3-1。
表3-1 格式字符表
3.格式附加字符
格式附加字符,又称为“修饰符”,在“%”与格式字符之间还可以加入附加字符,对指定的格式起补充声明的作用,其一般形式如下:
%附加字符 格式字符
例如:
(1)x=123;y=45678;
printf("%4d,%-4d,%4d",x,x,y);
格式控制字符串中的“%4d”,m的值为4,指定输出数据所占宽度为4。输出结果是:123,123,45678。在第1个123前有一个空格,即输出数据右对齐,左端补空格;在第2个123后有一个空格,即输出数据左对齐,右端补空格;45678的实际宽度大于m的值4,数据按实际位数输出。
(2)printf("%.3s","hello");
格式控制字符串中的“%3s”,n的值为3。输出结果是:hel。输出了hello字符串的前3个字符。
(3)double x=3.14159;
printf("%8.2lf",x);
输出结果是: 3.14。3.14前面有4个空格,输出数据所占位数为8位,输出2位小数。
表3-2 格式附加字符表
【例3.4】用printf输出各种数据。
程序内容如下:
1 #include<stdio.h>
2 int main()
3 {
4 char c;
5 int a=1234,i;
6 float f=3.141592653589;
7 double x=0.12345678987654321;
8 i=12;
9 c=′\x41′;
10 printf("a=%d\n",a); //输出十进制整数a= 1234
11 printf("a=%6d\n",a);//输出6位十进制整数a= 1234
12 printf("a=%2d\n",a);//a超过2位,按实际值输出a=1234
13 printf("i=%4d\n",i);//输出4位十进制整数i= 12
14 printf("i=%-4d\n",i);//输出左对齐4位十进制整数i=12
15 printf("f=%f\n",f);//输出浮点数f=3.141593
16 printf("f=%6.4f\n",f);//输出6位,其中小数点后4位的浮点数f=3.1416
17 printf("x=%lf\n",x);//输出双精度浮点数x=0.123457
18 printf("x=%18.16lf\n",x);//输出18位,其中小数点后16位的双精度浮点数x=0.1234567898765432
19 printf("c=%c\n",c);//输出字符c=A
20 printf("c=%x\n",c);//以十六进制形式输出字符的ASCII码值c=41
21 return 0;
22 }
程序结果如图3.10所示:
图3.10 例3.4程序结果图
【例题中关键问题说明】
(1)使用printf()函数前必须包含头文件“stdio.h”。
(2)在“%”与格式字符之间还可以加入附加字符,对指定的格式起补充声明的作用。
()此程序是一个顺序结构的程序。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。