Skip to content

第3课 赋值运算符+实数类型

发布时间:

1. 赋值运算符

1.1 “=”运算符

C++中的赋值运算符是“=”号,它用于将右侧的值赋给左侧的变量。赋值运算符是一种二元运算符,因为它需要两个操作数,一个在左侧,一个在右侧。 举例说明:

js
int a = 10;
int b = 20;
a = b;
   

1.2复合算数赋值运算符

作用:用于将表达式的值赋给变量 赋值运算符包括以下几个符号:

运算符术语示例結果
=赋值a=2;b=3;a=2;b=3;
+=加等于a=0; a+=2;a=2;
-=减等于a=5; a-=3;a=2;
*=乘等于a=2; a*=2;a=4;
/=除等于a=4; a/=2;a=2;
%=模等于a=3; a%2;a=1;

示例:

js
x += 2;  // 等价于 x = x + 2;
x -= 3;  // 等价于 x = x - 3;
x *= 4;  // 等价于 x = x * 4;
x /= 2;  // 等价于 x = x / 2;
x %= 3;  // 等价于 x = x % 3;
   

使用复合算数赋值运算符可以使代码更加简洁、易读,并且能够提高代码的效率。

1.3 测试题

下列代码的运行结果是?
第一题

js
#include <iostream>

using namespace std;

int main()
{
    int a = 5;
    int b = 3;
    int c = 7;

    a += b;
    c *= b;

    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "c = " << c << endl;

    return 0;
}
   

结果:
a = 8
b = 3
c = 21

第二题

js
#include <iostream>

using namespace std;

int main()
{
    int a = 5;
    int b = 10;

    a += b;
    b *= a;
    a /= 2;
    b %= 3;
    a -= b;

    cout << "a = " << a << endl;
    cout << "b = " << b << endl;

    return 0;
}
   

结果:
a = 7
b = 0

2. 自增运算符

自增运算符是一种C中的算术运算符,它可以将操作数的值加1。在C中,有两种自增运算符:前缀自增运算符x和后缀自增运算符x。 它们的区别在于:

  • 前缀自增运算符会先将操作数加1,然后再将结果返回;
  • 而后缀自增运算符会先返回操作数的原始值,然后再将操作数加1。

下面是使用自增运算符的示例代码:

js

#include <iostream>

using namespace std;

int main()
{
    int x = 5;
    int y = ++x;    // 前缀自增运算符,将x的值加1,再将结果赋给y
    int z = x++;    // 后缀自增运算符,先将x的值赋给z,再将x的值加1

    cout << "x = " << x << endl;
    cout << "y = " << y << endl;
    cout << "z = " << z << endl;

    return 0;
}
   

输出结果为:

js
x = 7
y = 6
z = 6
   

练习题1:

js
#include <iostream>

using namespace std;

int main()
{
    int x = 3;
    int y = ++x;
    int z = x++;

    cout << "x = " << x << endl;
    cout << "y = " << y << endl;
    cout << "z = " << z << endl;

    return 0;
}
   

练习题2:

js
#include <iostream>

using namespace std;

int main()
{
    int x = 3;
    int y = ++x;
    int z = x++;

    cout << "x = " << x << endl;
    cout << "y = " << y << endl;
    cout << "z = " << z << endl;

    return 0;
}
   

3. 三变量交换算法

给定两个变量a,b,交换后输出a,b。 三变量交换法是在对两个变量交换值的时候需要引用第三个变量而得名的。在这种方法中,我们需要使用一个临时变量来存储其中一个变量的值,以便在交换过程中不会丢失任何值。具体步骤如下:

  1. 定义三个变量a、b、temp。
  2. 将a的值赋给temp。
  3. 将b的值赋给a。
  4. 将temp的值赋给b。

下面是用使用三变量交换法交换两个变量的值的例子:

js
#include <iostream>
using namespace std;

int main(){
    int a,b;
    cin>>a>>b;
    int t=a;
    a=b;
    b=t;
    cout<<a<<" "<<b;
    return 0;
}
   

输入输出结果为:

js
1 2
2 1
   

在这个例子中,我们使用了三个变量a、b和temp来进行交换。首先输出了变量a和b的值,然后使用temp变量来存储a的值,接着将b的值赋给a,将temp中存储的值赋给b。最后,输出了交换后的结果。 三变量交换模板为:

js
int a=1,b=2;
int t=a;
a=b;
b=t;
   

不使用第三变量交换两个变量的值还有一种数值算法:

js
int a=1,b=2;
a+=b;
b=a-b;
a-=b;
   

请思考上述代码的实现原理,以及有何弊端。 通常我们在算法题中,如果题目要求是给定两个变量,让你交换两个变量的值后顺序输出这两个变量,你可以这么做:

js
#include <iostream>
using namespace std;

int main(){
    int a,b;
    cin >> a >> b;
    cout<< b << a;
    return 0;
}
   

使用位逻辑运算符异或^(了解即可)
a=a^b;
b=a^b;
a=a^b;

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 甲流疫情死亡率