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

C++变量

  • 1.C++ 命名规则
  • 2.C++ 命名规范
  • 3.C++ 数据类型
    • sizeof ()
  • 4.声明和使用变量
    • 4.1使用整型变量
    • 4.2使用单精度浮点型变量
    • 4.3使用双精度浮点型变量
  • 5.附送-cout 设置宽度,对齐方式
  • 6.算术运算符和表达式
    • 6.1除法、取余
    • 6.2自加、自减
  • 7.强制类型转换

《老九学堂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.33333std::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 % 30cout << 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.0double num3 = num1 / num2;cout << num3 << endl;// 先将整型5转换成double 类型的5.0,然后进行浮点型的除法运算,运算结果是2.5double num4 = (double)num1 / num2;cout << num4 << endl;return 0;
}

输出

2
2.5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444891.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我对STL的一些看法(四)认识deque容器

Deque(双向队列) 是一种优化了的、对序列两端元素进行添加和删除操作的基本序列容器。它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结构中保存对这些块及其顺序的跟踪。向deque 两端添加或删除元…

我对STL的一些看法(五)初识关联容器

3关联容器 pair类型 这个是一个简单的标准库类型,该类型在utility头文件中定义,我们来看看他主要的操作: pair<T1 ,T2> p1; 创建一个空的pair对象 pair<T1,T2> p1(v1,v2);创建一个pair对象,他的两个元素分别为T1类型的v1,T2类型的v2 make_pair(v1,v2…

关系数据库——mysql数据类型大总结

整数类型&#xff1a; 实数类型&#xff1a; 定点数&#xff1a;DECIMAL和NUMERIC类型在MySQL中视为相同的类型。它们用于保存必须为确切精度的值。 DECIMAL(M,D)&#xff0c;其中M表示十进制数字总的个数&#xff0c;D表示小数点后面数字的位数。 如果存储时&#xff0c;整…

学点数学(5)--线性规划对偶形式的理解

线性规划对偶问题的理解1.弱对偶2.强对偶曾在上课的时候多次遇到这个求一个问题的对偶形式&#xff0c;大多是硬套公式。记一次&#xff0c;忘一次。后来在苏大佬的博客中看到了相关阐述&#xff0c;感觉豁然开朗&#xff0c;&#xff08;可以记得就一些了&#xff09;遂做笔记…

关系数据库——视图/存储过程/触发器

视图 视图是虚拟的表&#xff0c;与包含数据的表不同&#xff0c;视图只包含使用时动态检索数据的查询,主要是用于查询。 为什么使用视图 重用sql语句简化复杂的sql操作&#xff0c;在编写查询后&#xff0c;可以方便地重用它而不必知道他的基本查询细节。使用表的组成部分而…

C++(5)--运算符、表达式、条件结构(if, switch)

C运算符、表达式 条件结构1.表达式与运算符1.1赋值运算符1.2算术运算符1.3关系运算符1.4逻辑运算符1.5位运算符1.6 sizeof()1.7 三目运算符1.8 运算符的优先级2.条件结构2.1--if2.2 --switch结构2.3 switch 和 多重if 结构的对比条件结构)《老九学堂C课程》《C primer》学习笔记…

关系数据库——mysql常用函数总结

文本处理函数 Left(x,len) – 返回串左边的字符&#xff08;长度为len&#xff09; Right(x,len) Length(x) – 返回串的长度 Locate(x,sub_x) – 找出串的一个子串 SubString(x, from, to) – 返回字串的字符 Lower(x) Upper(x) LTrim(x) RTrim(x) Soundex(x) – 读…

setsockopt()用法(参数详细说明)

先来看看函数的原型: int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen); 然后我们来看看参数: s(套接字): 指向一个打开的套接口描述字 level:(级别): 指定选项代码的类型。

再议libcurl编程

那是2年前用libcurl了,我肯定好久不用的知识,放置久了就会遗忘,现在我又重拾起这个知识点,重头再来,至于前面的基础知识,可以参考我的 http://blog.csdn.net/pbymw8iwm/article/details/6675754 假设你要获取URL所表示的远程主机上的资源。你需要写一段程序用来完…

关系数据库——并发控制

并发控制 多用户数据库&#xff1a;允许多个用户同时使用的数据库&#xff08;订票系统&#xff09; 不同的多事务执行方式&#xff1a; 1.串行执行&#xff1a;每个时刻只有一个事务运行&#xff0c;其他事务必须等到这个事务结束后方能运行。 2.交叉并发方式&#xff1a; …

C++(6)--初识循环while,do-while

初识循环1.使用while 循环结构2.使用do-while 循环3.python中的while循环《老九学堂C课程》《C primer》学习笔记。《老九学堂C课程》详情请到B站搜索《老九零基础学编程C入门》-------------简单的事情重复做&#xff0c;重复的事情用心做&#xff0c;用心的事情坚持做(老九君…

map类的erase方法的在Linux与Windows中的差异

这次的代码是跨平台的,尼玛在win32上通过,但是在linux上不通过了,查找了一下原来是平台linux不支持。 有人举了例子: std::map< int , float > i_f_map; i_f_map[1] = 1.2f; i_f_map[23] = 1.4f;

C++(7)--for循环,break,continue语句

for循环1.for循环2.break 语句3.continue语句4.while,do-while,for 循环的异同5.for循环demo 嵌套循环-打印图形6.python 中的for循环《老九学堂C课程》《C primer》学习笔记。《老九学堂C课程》详情请到B站搜索《老九零基础学编程C入门》-------------简单的事情重复做&#x…

关系数据库——数据库恢复

实现技术 恢复操作的基本原理&#xff1a;冗余 恢复机制涉及的两个关键问题 如何建立冗余数据 数据转储&#xff08;backup&#xff09;登录日志文件&#xff08;logging&#xff09; 如何利用这些冗余数据实施数据库恢复数据转储 数据转储定义&#xff1a; 转储是指DBA将整个数…

Lua语言中pairs和ipairs的区别

tbl = {"alpha", "beta", ["one"] = "uno", ["two"] = "dos"} for key, value in ipairs(tbl) do print(key, value) end --pairs() --pairs()函数基本和ipairs()函数用法相同, 区别在于pairs()可以遍历整个table…

算法(22)-leetcode-剑指offer6

leetcode-剑指offer-545.面试题55- 二叉树的深度46.面试题55-2-平衡二叉树47.面试题57-1-和为s的两个数字-双指针48.面试题57-2-和为s 的连续正数序列-双指针49.面试题56-数组中出现数字的次数-位运算leetcode-136 只出现一次的数字Ileetcode-137 只出现一次的数字IIleetcode-2…

leetcode160 相交链表

编写一个程序&#xff0c;找到两个单链表相交的起始节点。 如下面的两个链表&#xff1a; 在节点 c1 开始相交。 示例 1&#xff1a; 输入&#xff1a;intersectVal 8, listA [4,1,8,4,5], listB [5,0,1,8,4,5], skipA 2, skipB 3 输出&#xff1a;Reference of the node…

lua的一些api文档总结吧

打算记录一些我认为重要的常用的api: 1. 建一个新表 void lua_createtable (lua_State *L, int narr, int nrec) 创建一个新的table, 并把它放在栈顶. narr和nrec分别指定该table的array部分和hash部分的预分配元素数量 无返回值 栈高度+1, 栈顶元素是新table #define l…

关于mysql的一些时间格式和字符的问题

最近在做一些游戏的数据分析&#xff0c;需要对大量数据的用户行为进行处理存库&#xff0c;其中有个数据库字段是datetime类型的&#xff0c;这个以前都没用过&#xff0c;我以前都喜欢用int来存放时间戳&#xff0c;但这次这样用&#xff0c;我就得在数据库中转换了&#xff…

算法(17)-leetcode-剑指offer1

leetcode-剑指offer-11.面试题3-数组中的重复数字2.面试题04-二维数组中的查找3.面试题05-替换空格4.面试题06-从尾到头打印链表5.面试题07-重建二叉树6.面试题09-两个堆栈实现队列7.面试题10-1-斐波那契数列8.面试题10-2-青蛙跳台阶问题9.面试题11-旋转数组的最小数字10.面试题…