跳转至

输入输出的应用

有格式的输入

// 读入时间格式 12:09
int h, m;
scanf("%d:%d", &h, &m);

有格式的输出

// 输出1+2=3
int a = 1, b = 2;
printf("%d+%d=%d", a, b, a + b);

printf 保留小数位数

题目要求保留两位小数,就用 %.2lf。

double x = 3.14159;
printf("%.2lf", x); // 输出3.14

.2 表示小数点后两位,换成 .3 就是三位。

别漏掉小数点,%2lf 不是保留两位小数。

下面三行 printf 分别运行,观察各自的输出。

double x = 2.6;
printf("%.0lf", x); // 输出3
printf("%.2lf", x); // 输出2.60
printf("%.3lf", x); // 输出2.600

不足的位数会补 0,多出的位数会舍入,不是直接截去。

输出格式不会改变变量的值。

浮点数有精度限制,末位舍入有时与手算不同,这里先不展开。

输出多个小数,也是一一对应:

double x = 1.23, y = 4.56;
printf("%.2lf %.2lf", x, y); // 输出1.23 4.56

注意:保留小数位数,只管怎么显示,不会把整数除法变成小数除法。

int a = 5, b = 2;
printf("%.2lf", 1.0 * a / b); // 输出2.50

不能写成 printf("%.2lf", a / b),整数除法已经丢了小数,结果类型也与 %lf 不匹配。

cout 保留小数位数

除了 <iostream>,还需要头文件 <iomanip>。

cout << fixed << setprecision(2) << 2.5; // 输出2.50

fixed 配合 setprecision(2),表示小数点后两位。

默认输出格式下,只写 setprecision(2),表示两位有效数字,别混了。

这个设置会影响后续的浮点输出,不用每次都写。