-
1
-
2 第二章 数据...
标准的输出函数
算法特点之一,任何一个算法可以有0个或多个输入,但必须有一个或多个输出,以反映对输入数据加工后的结果。
C语言程序中没有输入输出语句,用户与计算机进行数据交流是通过基本输出函数printf()和输入函数scanf()完成的。
在具有输入或输出要求的程序中,必须在程序的开头使用编译预处理命令“#include<stdio.h>”将C语言中scanf输入函数与printf输出函数包含进来。这就是为什么每个程序的第一行要有头文件“#include<stdio.h>”的原因。
1. 格式输出函数printf()
一般形式:
printf("格式控制字符串", 输出表项 );
功能:格式化输出函数的作用是按格式控制字符串中指定的格式向标准输出设备(即显示器)输出指定的输出项。
2.相关规则
(1)格式控制字符串:用一对双撇号括起来,它用于说明输出表项所采用的输出格式。它包括两种符号:
①格式说明符:用于说明输出数据格式的符号,总是以%开头,后面紧跟如d,f,c这样的字母。如%d、%f、%c等。
② 普通字符:在格式控制字符串中除格式说明符外若还有其它字符,这些字符统称为普通字符,输出时按原样输出。
如:printf(" a=%d,b=%f,c=%c", a,b,c);
"a=%d,b=%f,c=%c" 称为格式控制字符串,其中的%d,%f,%c是格式控制符,控制输出项a,b,c的输出格式,其余符号为普通字符。
常用的几种输出格式字符
格式字符 | 意义 | 格式字符 | 意义 |
%d | 按十进制整型数输出 | %c | 按字符型输出 |
%ld或%Ld | 按十进制长整型数输出 | %s | 按字符串输出 |
%u | 按无符号整型数输出 | %e | 按科学计数法输出 |
%lu或%Lu | 按无符号长整型数输出 | %o | 按八进制整数输出 |
%f | 按浮点型小数输出,默认保留6位小数 | %x | 按十六进制整数输出 |
%lf或%Lf | 按双精度浮点数输出 |
%g | 按e和f格式中较短的一种输出 |
③修饰符:若格式字符中含有修饰符时,其作用是确定数据输出的宽度、精度、小数位数、对齐方式等,使得输出更加规范整齐,当没有修饰符时,按系统默认形式输出。
修饰符
修饰符 |
格式说明 |
意 义 |
实例 |
m |
%md |
以宽度m输出整型数,数据宽度大于m时,按实际数值输出。数据宽度小于m时,右对齐,左补齐空格。 |
输出: 123,123,□□123,123□ |
-m |
%-md |
同上,不足m列左对齐,右补齐空格。 | |
m.n |
%m.nf |
指定输出的数据共占m列(包括整数部分、小数点和小数位部分),其中小数位为n位。如果数值长度小于m,则左端补齐空格。即右对齐。如果数值长度大于m,则按实际数值输出。 |
输出: 125.738205,125.74, □□125.74,125.74□□ |
-m.n |
%-m.nf |
同上,不足m列,左对齐,右端补齐空格。 | |
m |
%ms |
按m列输出字符串。如果字符串的长度大于m,则将字符串全部输出。若字符串长度小于m,则在m列范围内,左补齐空格,即右对齐。 |
printf("s1=%s,s2=%3s,s3=%6s,s4=%5.2s,s5=%-5.2s","abcd","abcd","abcd","abcd","abcd"); 输出: s1=abcd,s2=abcd,s3=□□abcd, s4=□□□ ab,s5=ab□□□ |
m.n |
%m.ns |
左起截取指定字符串中前n个字符输出,共占m列。不足m列,左端补齐空格,右对齐。 | |
-m.n |
%-m.ns |
同上。不足m列,右端补齐空格,左对齐。 |
3. 格式输入函数scanf()
一般形式:
scanf("格式控制字符串", 地址表列);
如:scanf( "%d%d%d",&a,&b,&c);
其中,"%d%d%d"为格式控制字符串,&a,&b,&c为地址表列。
4. 相关规则
(1) 格式控制字符串无任何普通字符:在程序运行中输入非字符型数据时,各数据项之间通常以一个或多个空格间隔,也可以用回车键、制表键(Tab)间隔。
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
以下方式都是正确的输入方式:
3<空格>4<空格>5<回车> /*用空格间隔,常用格式*/
或
3<回车>4<回车>5<回车> /*用回车间隔,不常用*/
或
3<Tab>4<空格>5<回车> /*用空格、Tab键、回车间隔*/
(2) 格式控制字符串有普通字符:在输入时必须按照普通字符的原样从键盘输入。如果输入的内容与格式控制字符串的普通字符内容不一致,则scanf函数立即结束,变量不能正确获得数据,这种错误属逻辑错误,编译时不会报错,但程序运算时结果异常。
int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
则从键盘上输入数据时,不能再用空格隔开数据,而必须原样输入格式符中的逗号。这里的逗号属普通字符。
即 3,4,5<回车> /*也是常用格式,符号我们的习惯*/。



