第五课 C 语言的格式化输入和输出
C++语言是在 C 语言基础上开发而来,兼容 C 语言中的基本语句语法。
C 语言的输入输出语句分别是 scanf()和 printf(),在 C++中也可以使用。scanf()和 printf()
是标准库函数,对于不同类型数据的输入和输出有严格对应的格式要求,见后面的介绍。
在使用前需要在头文件部分把头文件
#incude
scanf()和 printf()的输入/输出效率较之 C++中的字符输入输出流 cin 和 cout 的效率要高
不少,所以在输入输出数据量大的时候最好采用 C 语言的格式化输入输出。
一、数据格式化输入
1. 格式化输入函数的形式
scanf(输入格式控制串,变量地址列表)
示例:
3) 输入格式控制串,包括两类字符:
一是由“%”开头后跟格式符,如“%d”,“%f”等,表示对应的输入必须是相应类
型的数据;;
二是普通字符,这是输入数据中必须原样输入的。如“a=%d,b=%d”中的”a=”、”,”、”b =”都是普通字符,输入时必须原样输入。
4) 变量地址列表
由若干个地址组成,与变量对应,每个地址对应一个相应类型数据的存储空间。对简
单变量,在变量名前冠以“&”就是变量地址,若是字符数组(串变量),因为数组名就是
该数组空间的首地址,所以不必在字符数组名前加运算符&。
如:
int a,b;
float r;
char s[100];
scanf(“%d%d%f%s”,&a,&b,&r,s);
2. 格式字符说明
scanf(”a=%d,b=%d”,&a,&b);
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 44
格式输入中,格式控制串的格式符用来把输入数据转换成相应类型数据存放到对应的
类型变量中。常用的输入格式说明符有:
格式字符 说 明
d 用来输入十进制整数
o 用来输入八进制整数
x 用来输入十六进制整数
c 用来输入单个字符
s
用来输入字符串,将字符串送到一个字符数组中,输入时以非空
字符开始,以第一个空格字符结束。输入完毕系统自动在串尾加
结束标记“\0”。
f 用来输入实数,可以用小数形式或指数形式输入
e 与 f 格式作用相同,e 与 f 格式对输入来说可以相互替换。
3. 附加格式说明符
附加格式说明符不单独作为格式符使用,而是加在格式说明符的前面,如“%lld”等。
常见的附加说明字符见下表:
附加说明字符 说 明
l 用于输入长整型(32 位,long int)数(用%ld)、64 位整型(long
long int)数(用%lld)、double 型实数(用%lf 或%le)
h 用于输入短整型(16 位,short int)数据(用%hd)
正整数(域宽) 指定输入数据所占宽度(列数),如%3d
* 表示输入流中对应数据将被忽略。
4. 格式化输入使用注意事项
1)一般情况下,输入格式控制串中只包含格式控制符,而不加入普通字符,这样可以
减少程序执行后输入数据的麻烦。这时,各输入数据用空白符(空格、回车、Tab)或“非
法”字符结束。
示例:
#include
#include
using namespace std;
int main(){
int a,b,c;
char ch;
scanf("%d%c%d%d",&a,&ch,&b,&c);
cout< return 0;
}
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 45
执行时输入
123*678 9876
则有输出
123 678 9876 * 同学们细心体会一下。
2)格式化输入字符型数据时,空格符也是作为有效字符输入,而不是作为输入数据之
间的分隔符。
#include
#include
using namespace std;
int main(){
int a,b;
char c1,c2;
scanf("%d%c%c%d",&a,&c1,&c2,&b);
cout<<"a="< cout<<"c1="<
}
执行时输入:
123 567(两数间有一个空格)
则输出:
a=123
c1=
c2=5
b=67
第二行输出的“=”后应该有一个空格,只是不可见而已,这从 c2 读到字符“5”可以看
出来。
3)下列程序,对输入的两个双精度实数求和。
#include
#include
using namespace std;
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 46
int main(){
double x,y,z;
scanf("%lf%lf",&x,&y);
z=x+y;
cout<
}
执行时输入
123.567 2.95e+03
则有输出
123.567+2950=3073.57
二、数据格式化输出
1. 格式化输出函数的形式
printf(格式控制串,输出列表)
示例:
3) 格式控制串
与格式输入函数中的格式控制串类似,输出格式控制串也包括两类字符:
一是输出格式控制符,由“%”开始后跟格式符,如“%d”,“%f”等,表示将输出
列表中对应输出项转换为相应类型格式输出;
二是普通字符,即需要原样输出的字符。如示例中的“*”、“=”等,输出时将原样输出。
反过来说,若需要在输出中包含特定字符,则应该把这些字符以普通字符形式放在输出格
式串中。
输出格式串中的普通字符也可以是转义符。所有字符都可以用"\"加字符的 ASCII 码(整
数,一般用八进制形式)来表示,这就把一个整数(ASCII)转换成一个字符;C 语言还允许在
一些字母前加"\"来表示常见的那些不能显示的 ASCII 字符,如"\0","\t","\n"等,这些就是通
常所说的转义字符,因为后面的字符,都不是它本来的 ASCII 字符意义了。
4) C/C++中的转义字符和所对应的意义:
转义字符 scanf()和 printf()意 义 ASCII 码
\a 响铃(BEL) 7
\b 退格(BS),将当前位置移到前一列 8
\f 换页(FF),将当前位置移到下页开头 12
printf(“%d*%d=%d\n”,a,b,a*b);
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 47
\n 换行(LF),将当前位置移到下一行开头 10
\r 回车(CR),将当前位置移到本行开头 13
\t 水平制表(HT)(跳到下一个 TAB 位置) 9
\v 垂直制表(VT) 11
\\ 代表一个反斜线字符''\' 92
\' 代表一个单引号(撇号)字符 39
\" 代表一个双引号字符 34
\? 代表一个问号 63
\0 空字符(NUL) 0
\ddd 1 到 3 位八进制数所代表的任意字符 3 位八进制
\xhh 1 到 2 位十六进制所代表的任意字符 2 位十六进制
注意:区分,斜杠:"/" 与 反斜杠:"\" ,此处不可互换
5) 输出列表
由若干个表达式(包括常量、变量等特殊表达式)组成。具体输出的是各表达式的值
而非表达式本身。
示例
#include
int main(){
int a=3,b=5;
float r=3.14;
printf("a=%d,b=%d,a+b=%d\n",a,b,a+b);
printf("r=%f\n",r);
return 0;
}
执行结果为:
a=3,b=5,a+b=8
r=3.140000
2. 格式字符说明
格式字符控制输出列表中对应数据的输出形式。常用的输出格式说明符见下表:
格式字符 说 明
d 用十进制形式输出对应输出项中的数据(整数)
i 与 d 格式相同
u 用来输出无符号十进制整数
o 用八进制形式输出对应输出项中的数据(整数)
x 用十六进制形式输出对应输出项中的数据(整数)
c 用字符形式输出对应输出项中的数据(字符)
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 48
s 用来输出字符串,将输出列表中对应的字符串输出
f 用日常记数形式,即小数点形式输出对应的输出项,默认 6 位小数
e 以指数形式输出实数
g 以%f、%e 格式中较短形式输出,并且不输出无意义的零“0” p 用来输出指针(地址)
3. 附加格式说明符
附加格式说明符配合格式说明符使用,放在格式说明符前,如“%8d%9.2f%-10s”等。常
见附加格式说明符见下表(m,n 分别代表一个非负整数):
附加说明字符 说 明
l 用于输出长整型数据(如%ld),双精度(double)实数
ll 用于输出 64 位整数(如%lld)
m 规定输出数据占的宽度(如%6d,%10f 等)
.n
对实数,表示输出 n 位小数;对字符串,表示截取字符串的
前 n 个字符输出。
- 输出的数据在域内向左靠(即当数据宽度小于指定宽度时,
数据向左靠齐,右补空格。没有“-”时默认右对齐,左补空
格)
示例:
#include
int main(){
int a=168;
long int b=123456;
long long int c=12345678;
float x=3.1415926535;
double y=3.1415926535;
printf("a=%d\nb=%ld\nc=%lld\n",a,b,c);
printf("x=%.10f\ny=%.10lf\n",x,y);
return 0;
}
4. 两点说明
1)格式符是以%开头的,出现在其它位置上的有关字符只能算是普通字符,如:
char c;
float f;
char s[15];
printf(“ c=%cf=%f%6s”,c,f,s);
格式控制串中的前两个%后的字符 c 和 f 是格式说明符,%6 后的 s 也是格式说明符,
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 49
而其它处的 c、f、s 都是普通字符,会原样输出的。
2)如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示,如:
printf("%f%%", 1.0/3);
输出
0.333333%。
习题五
编程解题(要求:输入输出采用 C 语言格式化输入输出 scanf()、printf())。
1、输出保留 12 位小数的浮点数
描述
读入一个双精度浮点数,保留 12 位小数,输出这个浮点数。
输入
只有一行,一个双精度浮点数。
输出
也只有一行,保留 12 位小数的浮点数。
样例输入
3.1415926535798932
样例输出
3.141592653580
2、空格分隔输出
描述
读入一个字符,一个整数,一个单精度浮点数,一个双精度浮点数,然后按顺序输出
它们,并且要求在他们之间用一个空格分隔。输出浮点数时保留 6 位小数。
输入
共有四行:第一行是一个字符;第二行是一个整数;第三行是一个单精度浮点数;第
四行是一个双精度浮点数。
输出
一行,分别为读入的字符、整数、单精度浮点数和双精度浮点数,两两间用一个空格
分隔。
青少年信息学奥林匹克竞赛
©程老师信息学奥赛课堂 50
样例输入
a
12
2.3
3.2
样例输出
a 12 2.300000 3.200000
3、温度转换
题目描述
将输入的华氏温度转换为摄氏温度。
由华氏温度 F 与摄氏温度 C 的转换公式为:F=C×9/5+32。
输入
输入一个实数,表示华氏温度。
输出
输出对应的摄氏温度,答案保留 4 位小数。
样例输入
50
样例输出
10.0000
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
