C++(4)--初识变量、数据类型


《老九学堂C++课程》《C++ primer》学习笔记。《老九学堂C++课程》详情请到B站搜索《老九零基础学编程C++入门》

-------------简单的事情重复做,重复的事情用心做,用心的事情坚持做(老九君)---------------

程序员通过指令控制计算机
指令和数据在存放在内存中–寄存器,读写速度块。
一般说的内存条,内存条RAM。
内存的基本单位是bit。
变量:计算机中一块特定的内存空间

通过变量的名字快速找到变量,C++中使用命名空间(namespace)来避免重名问题。

1.C++ 命名规则

  1. 首个字符:字母,下划线
  2. 其他字符:字母,下划线,数字
  3. 变量名不能是关键字/保留字

关键字:C++编译器预留出来的76个单词,用户变量名不能与之相同。在IDE中会以特殊的颜色显示出来,例如:int,calss,double

2.C++ 命名规范

一些命名虽然不会有语法错误,但是不好。一个好的程序员,需要掌握一定的命名规范。

  1. 不要使用拼音
  2. 不要使用单个英文单词
  3. 使用有含义的英文单词,注重日常积累;mokey_sun vs houzi_sun

1.本地变量:小写,下划线连接
2.全局变量:以g_作为前缀,建议尽量少用全局变量
3.预处理指令: #defined 后全大写,不加语句结束符号;
4.函数名:单词首字母大写,无下划线连接
5.命名空间名字:全小写
6.类名称:单词首字母大写,无下划线连接
7.注释:文档注释,在文件的开头,包括版本,许可,作者,日期,功能;函数注释,注释于函数之前,描述函数功能以及用法‘
8.括号:大括号放在函数,类名称的下一行

3.C++ 数据类型

(20201106-25 数据类型小节)
–数值型
----整型-int, short, long, long long, bool, long bool
----非整型-float, double long double
–非数值型-string,

数据类型类型符号说明符位数取值范围
整型int32位-4个字节
短整型short int16位-2个字节
长整形long int32位(用int 和long么啥区别)
长整形long long64位(C++11的标准)
单精度浮点型float32位
双精度浮点型double64位(存储位数较多的小数)
字符型char8位(C++中隶属于整型)[-128,127]

英文字符用char,中文字符要用W char(宽字符)

c++ 中的其他常用数据类型: ,枚举类型,自定义类型,指针类型(少用指针,多用引用),空类型(void)

size_t # 其实是一个无符号的整形,通过别名定义出来的

typedef unsigned int size_t

输出int 数据类型的上界 INT_MAX:

INT_MAX输出报错的话,可以引入一个头文件

# include <climits>

INT_MAX其实是一个宏定义常量,标识符号是一个

#define INT_MAX 21247XXXXX //

sizeof ()

用来测量数据类型的长度,单位是字节。c++中默认的小数是double型,后面+ 一个f变成浮点型.

#include <iostream>
using namespace std;
int main(){
	// sizeof 用来测量数据类型的长度
	cout << sizeof(double) << endl;
	cout << sizeof(long double) << endl;
	cout << sizeof(3.14) << endl;
	cout << sizeof(3.14f) << endl;
	return 0;
}

4.声明和使用变量

变量声明即定义一个变量,声明的格式如下。可以在声明的同时赋初值(建议使用这种方式);也可以仅声明,后面再赋值。(变量第一次被赋予值的操作叫变量的初始化)

数据类型 变量名; // 仅声明
数据类型 变量名=value; //声明并初始化

4.1使用整型变量

一条声明语句可以声明多个相同类型的变量,编码规范建议一行代码只做一件事情。

int salary1, salary2, salary3;
int num1 = 10, num2 = 8;

使用变量,打印出来

cout << “小明的收入是:” << salary << endl;

4.2使用单精度浮点型变量

浮点型变量:32位,4个字节,6-7位有效数字,可以在数值的末尾加一个f

输出超出有效位float 数会产生自动截断:

int main(){
	float num = 12345.12345678;
	std::cout << num << std::endl;
	return 0;
}

12345.1

使用float类型变量的例子: 计算一个圆柱体的体积

#include <iostream>
#include <cmath>
int main(){
	// 已知圆柱体的半径和高,求圆柱体的体积
	const float PI = 3.14;  //定义了一个float 类型的常量,无法改变 
	float radius = 4.5f;
	float height = 90.9f;
	//double volume = PI * radius * radius * height;
	double volume = PI * pow(radius, 2) * height;
	std::cout << "体积是:" << volume << std::endl;
	return 0;
}

体积是:5779.88

4.3使用双精度浮点型变量

直接输出

int main(){
	// 输出double类型的数字
	// 直接输出的是6 位有效数字 3.33333
	std::cout << doublenum << std::endl;
	return 0;
}

3.33333

控制位数输出,强制以数字的方式显示

#include <iomanip>
using namespace std;
int main(){
	cout << fixed;           //强制以小数的方式显示,
	cout << setprecision(2);  // 控制小数点后两位数字
	double doublenum = 10.0 / 3.0;
	cout << doublenum << endl;
	return 0;
}

3.33

控制输出宽度

int main(){
	//设置输出宽度
	cout << setw(8) << "|" << 3.14 << "|";
	return 0;
}

输出

|3.14|
       |3.14|
|    3.14|

注意单精度浮点型的有效数字只有6-7位,在数字较大市,会产生截断误差

演示单精度浮点型和双精度浮点型的精度问题。

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;
int main(){
	// 演示单精度浮点型和双精度浮点型精度问题
	float numFloat = 10 / 3.0;
	double numDouble = 10 / 3.0;
	cout << fixed;
	cout << "numFloat: " << numFloat << endl;
	cout << "numDouble: " << numDouble << endl;
	cout << "numFloat: " << numFloat * 10000 << endl;
	cout << "numDouble: " << numDouble * 10000 << endl;
	cout << "numFloat: " << numFloat * 1000000000 << endl;
	cout << "numDouble: " << numDouble * 1000000000 << endl;
	return 0;
}
numFloat: 3.333333
numDouble: 3.333333
numFloat: 33333.332031
numDouble: 33333.333333
numFloat: 3333333248.000000  //精度损失严重
numDouble: 3333333333.333333

5.附送-cout 设置宽度,对齐方式

#include <iostream>
#include <iomanip>

// #include <windows.h>
// SetConsoleTile("控制台标题")
// 在window系统之下才好用
using namespace std;
int main(){
	
	// 转义字符
	cout << "\a" << endl; //警报声,没听到

	double attack1 = 272;
	double attack2 = 250;
	double attack3 = 240;
	// 默认输出右对齐
	cout << setw(8) << attack1 <<
			setw(8) << attack2 <<
		    setw(8) << attack3 << endl;
	// 设定输出左对齐
	cout << left;
	cout << setw(8) << attack1 <<
			setw(8) << attack2 <<
			setw(8) << attack3 << endl;
	// 设定填充方式
	cout << setfill('_');        // 单引号和双引号右区别,双引号是要报错的。
	cout << setw(8) << attack1 <<
			setw(8) << attack2 <<
			setw(8) << attack3 << endl;
	return 0;
}

输出

     272     250     240
272     250     240     
272_____250_____240_____

6.算术运算符和表达式

算术运算符:
一元运算符:++,–
二元运算符:+,-,*,、,%‘
表达式:运算符+操作数组成表达式

6.1除法、取余

#include <iostream>
using namespace std;
int main(){
	// 运算符和表达式
	int num1 = 5, num2 = 2;
	cout << num1 / num2 << endl;
	// 取模结果的符号和第一个操作数相匹配
	// 取模的应用场景: 取摸个数字的个位 15 % 10,45天式一个月零几天 45 % 30
	cout << num1 % num2 << endl;
	cout << (-1 * num1) % num2 << endl;
	cout << num1 % (-1 * num2) << endl;
}

输出

2
1
-1
1

6.2自加、自减

其实自加和自减再单独使用的时候前置和后置都没有区别,但是在和其他算子连用时才会体现出这个区别。

#include <iostream>
using namespace std;
int main(){
	// 运算符和表达式
	// 自加++和自减--
	// 放在后面的就是,先参与运算,自己再加; 放在前面就是自己先加,然后再参与运算。都是从自己出发
	// int num3 = (num2++) - (--num2);  // num3 = (2)- (1) = 1,这个分析是错的,这个编译器页过不去,会报错
	//  warning: unsequenced modification and access to 'num2' [-Wunsequenced]
	int num4 = num1 - (--num2);     // 至少这样是可以的
	cout << num2 << "\t" << num4 << endl;
	return 0;
}

输出

1       4

7.强制类型转换

类型转换原则:把表示范围小的类型值, 转换到表示范围大的类型值
short -> int -> long -> float -> double

强制类型转换语法
(类型名) 变量或数值

#include <iostream>
#include <cmath>
#include <iomanip>

// #include <windows.h>
// SetConsoleTile("控制台标题")
// 在window系统之下才好用
using namespace std;
int main(){
	// 类型转换
	int num1 = 5, num2 = 2;
	// 两个整型相除的结果就是整型,将其赋值给一个double类型的变量,num3 = 2.0
	double num3 = num1 / num2;
	cout << num3 << endl;
	// 先将整型5转换成double 类型的5.0,然后进行浮点型的除法运算,运算结果是2.5
	double num4 = (double)num1 / num2;
	cout << num4 << endl;
	return 0;
}

输出

2
2.5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值