1-4 +实数类型printf()

发布时间:

1. 实数型​

作用:用于表示小数 浮点型变量分为两种: 1.单精度float 2. 双精度double 两者的区别在于表示的有效数字范围不同。

数据类型占用空间有效数字范围取值范围
float4字节7位有效数字1.17549e-38 ~ 3.40282e+38
double8字节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位小数的浮点数:

js

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
   double x = 3.1415926;
   cout << fixed << setprecision(2) << x << endl;
   return 0;
}
   

输出结果为:

js
3.14
   

在上面的代码中,使用了fixed操作符,这是为了保证小数点后输出的数字位数不变。如果不使用fixed操作符,则程序会自动根据数字位数进行截断,输出结果可能不符合预期。需要注意的是,setprecision(n)仅影响接下来输出的浮点数,而不影响之前已经输出的浮点数。因此,如果要在程序中多次使用setprecision(n)来设置小数位数,需要在每次输出浮点数之前都设置一次。

示例:

js
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;
}
   

作业
1 计算分数的浮点数值
2 甲流疫情死亡率

​

1. printf("字符串\n"); ​

js
# include <iostream>
using namespace std;
int main()
{
    printf("Hello World!\n");     // \n表示换行
    return 0;
}
   

输出结果为:

js
Hello World!

   

2. printf("输出控制符",输出参数); ​

js
# 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;
}
   

输出结果为:

js
10
1.23.0000
10 10
i=10,m=1.230000

   

3. 如何输出 %、\ 和双引号 ​

js
# include <stdio.h>
int main(void)
{
    printf("%%  \n");
    printf("\\  \n");
    printf("\"\"  \n");
    return 0;
}
   

输出结果为:

js
%d
\
""
   
格式控制符说明
%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 计算并联电阻的阻值