1-4 +实数类型printf()
1. 实数型
作用:用于表示小数 浮点型变量分为两种: 1.单精度float 2. 双精度double 两者的区别在于表示的有效数字范围不同。
| 数据类型 | 占用空间 | 有效数字范围 | 取值范围 |
|---|---|---|---|
| float | 4字节 | 7位有效数字 | 1.17549e-38 ~ 3.40282e+38 |
| double | 8字节 | 15~16位有效数字 | 2.22507e-308 ~ 1.79769e+308 |
实数类型在C++以浮点数的形式来储存。浮点数由一个整数部分和一个小数部分组成,中间用小数点隔开。由于实数的范围非常大,因此计算机需要将其进行近似表示,以便在有限的内存空间内存储和计算。浮点数采用科学计数法来表示实数,即用一个小数位数固定的数来表示实数的尾数,再用一个指数来表示实数的大小,这种表示方法被称为浮点表示法。
float类型采用23位小数位和8位指数,double类型采用52位小数位和11位指数。具体来说,表示一个浮点数的二进制数可以分为三个部分:
● 符号位:用1位二进制数表示,0表示正数,1表示负数。
● 小数部分:用n位二进制数表示,表示实数的小数部分,其中n由类型决定。
● 指数部分:用m位二进制数表示,表示实数的指数部分,其中m由类型决定。
2. 保留小数位
在C++中,可以使用iostream库提供的格式化输出操作符来控制输出的小数位数。具体而言,可以使用 ★setprecision(n) [prɪˈsɪʒn] 来设置浮点数输出的小数位数为n位,同时需要包含iomanip头文件。例如,以下代码将输出一个保留2位小数的浮点数:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double x = 3.1415926;
cout << fixed << setprecision(2) << x << endl;
return 0;
}
2
3
4
5
6
7
8
9
输出结果为:
3.14
在上面的代码中,使用了fixed操作符,这是为了保证小数点后输出的数字位数不变。如果不使用fixed操作符,则程序会自动根据数字位数进行截断,输出结果可能不符合预期。需要注意的是,setprecision(n)仅影响接下来输出的浮点数,而不影响之前已经输出的浮点数。因此,如果要在程序中多次使用setprecision(n)来设置小数位数,需要在每次输出浮点数之前都设置一次。
示例:
int main() {
float f1 = 3.14f;
double d1 = 3.14;// 不表明默认为双精度
cout << f1 << endl;
cout < d1<< endl;
//统计float和double 占用的内存空间.
cout << "float 占用的内存空间为:" << sizeof(float) << endl;
cout << "double 占用的内存空间为:" << sizeof(double) << endl;
//科学计数法.
float f2= 3e2;//3*10^2;
float f2= 3e-2;//3*0.1^2;
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
1. printf("字符串\n");
# include <iostream>
using namespace std;
int main()
{
printf("Hello World!\n"); // \n表示换行
return 0;
}
2
3
4
5
6
7
输出结果为:
Hello World!
2. printf("输出控制符",输出参数);
# include <iostream>
using namespace std;
int main()
{
int i = 10;
float m=1.23;
printf("%d\n", i); // %d是输出控制符,d 表示十进制,后面的 i 是输出参数
printf("%f\n",m); // %f是输出控制符,f 表示十进制浮点数,后面的 m是输出参数
printf("%.3f",m); // %f 输出控制符,f 十进制浮点数,.3 小数点后保留3位, m是输出参数
printf("%d %d\n", i, i);
printf("i = %d, m = %f\n", i, m);
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
输出结果为:
10
1.23.0000
10 10
i=10,m=1.230000
2
3
4
3. 如何输出 %、\ 和双引号
# include <stdio.h>
int main(void)
{
printf("%% \n");
printf("\\ \n");
printf("\"\" \n");
return 0;
}
2
3
4
5
6
7
8
输出结果为:
%d
\
""
2
3
| 格式控制符 | 说明 |
|---|---|
| %c | 输出一个单一的字符 |
| %hd、%d、%ld | 以十进制、有符号的形式输出 short、int、long 类型的整数 |
| %hu、%u、%lu | 以十进制、无符号的形式输出 short、int、long 类型的整数 |
| %ho、%o、%lo | 以八进制、不带前缀、无符号的形式输出 short、int、long 类型的整数 |
| %#ho、%#o、%#lo | 以八进制、带前缀、无符号的形式输出 short、int、long 类型的整数 |
| %hx、%x、%lx %hX、%X、%lX | 以十六进制、不带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字也小写;如果 X 大写,那么输出的十六进制数字也大写。 |
| %#hx、%#x、%#lx %#hX、%#X、%#lX | 以十六进制、带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字和前缀都小写;如果 X 大写,那么输出的十六进制数字和前缀都大写。 |
| %f、%lf | 以十进制的形式输出 float、double 类型的小数 |
| %e、%le %E、%lE | 以指数的形式输出 float、double 类型的小数。如果 e 小写,那么输出结果中的 e 也小写;如果 E 大写,那么输出结果中的 E 也大写。 |
| %g、%lg %G、%lG | 以十进制和指数中较短的形式输出 float、double 类型的小数,并且小数部分的最后不会添加多余的 0。如果 g 小写,那么当以指数形式输出时 e 也小写;如果 G 大写,那么当以指数形式输出时 E 也大写。 |
| %s | 输出一个字符串 |
作业 初级篇:
| 1 使用printf输出"Hello, World!" |
| 2 定义一个整数变量a=100,使用printf输出"The number is: 100" |
| 3 定义一个双精度浮点数pi=3.14159265358979,使用printf输出,保留2位小数 |
| 4 定义一个字符变量ch='A',使用printf输出该字符及其ASCII码值 |
| 5 定义一个字符串name="Alice",使用printf输出"Name: Alice" |
进阶篇
| 1 使用printf同时输出整数、浮点数和字符串,格式为"ID: 5, Score: 98.50, Name: Bob" |
| 2 输出整数123,要求占10个字符宽度,右对齐 |
| 3 输出字符串"Hello",要求占15个字符宽度,左对齐 |
| 4 输出整数42,要求占6位宽度,不足部分用0填充 printf("%06d\n", num); |
| 5 将十进制数255分别以十六进制(小写和大写)、八进制形式输出 |
高级篇
| 1 输出3.1415926535,分别保留1位、3位、6位小数 |
| 2 制作一个简单的成绩表,包含姓名(左对齐,10字符宽)、分数(右对齐,6字符宽,2位小数) |
| 3 定义unsigned int变量,并分别以有符号和无符号形式输出,观察差异 |
| 4 输出"Progress: 75%",注意printf中如何输出%字符 |
| 5 创建一个学生信息输出程序,要求: 学生ID:整数,占6位,前导零填充 姓名:字符串,左对齐,占12字符宽 年龄:整数,占3字符宽 GPA:浮点数,保留2位小数,占5字符宽 输出格式美观对齐 |
作业
1 将整数2保留3位小数输出; |
2 将小数3.14159265358979保留3位小数,6位宽度左对齐输出; |
3 将小数3.14159265358979保留3位小数,6位宽度右对齐输出; |
4 将整数2,6位宽度右对齐输出; |
5 第一行将整数2,25,105,第二行将整数118,5,33别6位宽度左对齐输出; |
6 第一行将整数2,25,105,第二行将整数118,5,33别6位宽度右对齐输出; |
| 7 输出整数42,要求占6位宽度,不足部分用0填充 |
题库练习
| 练习1 a*b问题计算分数的浮点数值 |
| 练习2 温度表达转化 |
| 练习3 算分数的浮点数值 |
| 练习3 计算并联电阻的阻值 |