格式化输出与输入专题
一、格式化输出 printf
1. 基本语法
printf 用于按指定格式输出数据,由格式控制字符串 与输出项两部分组成:
- 格式控制字符串:包含普通字符(直接输出)和格式说明符(以
%开头,指定输出类型与格式) - 输出项:需要输出的变量或常量,数量与类型必须和格式说明符一一对应
cpp
printf("格式控制字符串", 输出项1, 输出项2, ...);
2. 常用格式说明符
| 格式说明符 | 含义 | 适用类型 | 示例 |
|---|---|---|---|
| %d | 十进制整数 | int | printf("%d",123); → 输出123 |
| %f | 浮点数 | float | printf("%f",3.14); → 输出3.140000 |
| %lf | 双精度浮点数 | double | printf("%lf",3.1415926535); → 输出3.141593 |
| %c | 单个字符 | char | printf("%c",'A'); → 输出A |
| %lld | 长整型整数 | long long | printf("%lld",10000000000LL); → 输出10000000000 |
| %% | 输出百分号% | 无 | printf("占比:%d%%",50); → 输出占比:50% |
| %s | 字符串 | char[] | printf("%s","Hello"); → 输出Hello |
3. 扩展用法
(1)指定小数位数
%.nf 表示保留n位小数,自动四舍五入。
cpp
printf("%.2f",3.1415); // 输出3.14
(2)控制输出宽度与对齐
%nd:总宽度为n,右对齐,不足补空格%-nd:总宽度为n,左对齐,不足补空格%0nd:总宽度为n,不足补前导零
cpp
printf("%5d\n", 42); // 右对齐,占5位: 42
printf("%-5d\n", 42); // 左对齐,占5位:42
printf("%05d\n", 42); // 补前导零:00042
4. 常用转义字符
\n 表示换行,是最常用转义字符;其他常用转义字符:
\':输出单引号\":输出双引号\\:输出反斜杠
cpp
#include <stdio.h>
int main() {
printf("输出单引号:\'\n");
printf("输出双引号:\"\n");
printf("输出反斜杠:\\\n");
return 0;
}
二、格式化输入 scanf
1. 基本语法
scanf 用于按指定格式读取输入数据,变量前必须加取地址符&(字符串数组除外)。
cpp
scanf("格式控制字符串", &变量1, &变量2, ...);
2. 常用格式说明符
| 格式说明符 | 含义 | 适用类型 | scanf 读取示例 |
|---|---|---|---|
| %d | 十进制整数 | int | int x; scanf("%d", &x); |
| %f | 浮点数 | float | float x; scanf("%f", &x); |
| %lf | 双精度浮点数 | double | double x; scanf("%lf", &x); |
| %c | 单个字符 | char | char ch; scanf("%c", &ch); |
| %lld | 长整型整数 | long long | long long x; scanf("%lld", &x); |
| %s | 字符串 | char[] | char str[105]; scanf("%s", str); |
三、例题详解
例题1:打印字符
题目描述
输入一个ASCII码,输出对应的字符。
输入格式
一个整数,即字符的ASCII码,保证存在对应的可见字符。
输出格式
一行,包含相应的字符。
输入样例1
65
输出样例1
A
输入样例2
55
输出样例2
7
参考代码
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
int c;
cin >> c;
printf("%c", c);
return 0;
}
例题2:打印ASCII码
题目描述
输入一个除空格以外的可见字符(保证在函数scanf中可使用格式说明符%c读入),输出其ASCII码。
输入格式
一个除空格以外的可见字符。
输出格式
一个十进制整数,即该字符的ASCII码。
输入样例1
A
输出样例1
65
输入样例2
7
输出样例2
55
参考代码
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
char c;
cin >> c;
printf("%d", c);
return 0;
}
例题3:格式化输出1
题目描述
本题练习 printf 的基本格式化输出,请你读入一组不同类型的数据,并按指定格式输出。
需要使用的格式控制符:
- %d:十进制整数(int)
- %f:浮点数(float)
- %lf:双精度浮点数(double)
- %c:单个字符(char)
- %lld:长整型整数(long long)
- %%:输出百分号 %
输入格式
一行六个数据,依次为:
- 一个 int 类型的数字 a
- 一个 float 类型的数字 b
- 一个 double 类型的数字 c
- 一个 char 类型的字符 d
- 一个 long long 类型的数字 e
- 一个表示百分比数值的 int 类型的数字 p
输出格式
输出六行,格式如下:
int:a
float:b (保留6位小数)
double:c (保留6位小数)
char:d
longlong:e
rate:p%
输入样例1
12 3.5 2.125 A 1234567890123 80
输出样例1
int:12
float:3.500000
double:2.125000
char:A
longlong:1234567890123
rate:80%
参考代码
cpp
#include<bits/stdc++.h>
using namespace std;
int a, p;
float b;
double c;
char d;
long long e;
int main() {
cin >> a >> b >> c >> d >> e >> p;
printf("int:%d\n", a);
printf("float:%.6f\n", b);
printf("double:%.6lf\n", c);
printf("char:%c\n", d);
printf("longlong:%lld\n", e);
printf("rate:%d%%\n", p);
return 0;
}
例题4:格式化输入2
题目描述
本题练习 scanf 的格式化输入,给你一段固定格式的英文句子,请从中提取出不同类型的数据,并输出。
英文句子固定格式:
My id is [int], score is [float], ratio is [double], grade is [char], coins are [long long], progress is [int]%.
需要提取的数据:[int]、[float]、[double]、[char]、[long long]、[int]
输入格式
一行英文句子,格式与题目描述完全一致。
输出格式
输出 6 行,每行 1 个数据。
- 第 2 行(score,float)保留 5 位小数;
- 第 3 行(ratio,double)保留 15 位小数。
输入样例1
My id is 12, score is 3.5, ratio is 2.125, grade is A, coins are 1234567890123, progress is 80%.
输出样例1
12
3.50000
2.125000000000000
A
1234567890123
80%
参考代码
cpp
#include <bits/stdc++.h>
using namespace std;
int id, p;
float s;
double r;
char g;
long long c;
int main() {
scanf("My id is %d, score is %f, ratio is %lf, grade is %c, coins are %lld, progress is %d%%.",
&id, &s, &r, &g, &c, &p);
printf("%d\n", id);
printf("%.5f\n", s);
printf("%.15lf\n", r);
printf("%c\n", g);
printf("%lld\n", c);
printf("%d%%\n", p);
return 0;
}
致读者的一段话:
【以代码筑基,用思维破局,学遍有用新知】
告别枯燥啃书,和我一起轻松学 C++!
加入知识星球【编程思维社】,解锁:
✅从基础语法到算法入门,手把手带你学
✅专属答疑通道,学习难题不再卡壳
✅持续更新的干货资料 + 专属练习
目前,您觉得学习 C++ 最头疼的是哪部分?最想获得什么学习资料或服务?
您的反馈将直接决定我接下来的内容规划!
欢迎在知识星球【编程思维社】中与我分享,或者在评论区留言,我会尽快回复您。
