一、字面常量
cpp
//
// Created by wxj05 on 2024/7/13.
//
#include <iostream>
using namespace std;
int main()
{
//整形、实型、字符、字符串
//1.整形(整数)
cout<<12<<endl;
//2.实型(小数)
cout<<12.12<<endl;
//3.字符(''包围的,单个字符)
cout<<'V'<<endl;
//4.字符串(""包围的,任意个字符)
cout<<"Hello C++"<<endl;
return 0;
}
整型字面常量(Integer literals):表示整数值,可以是十进制、八进制(以0开头)、十六进制(以0x或0X开头)的数字序列。
浮点型字面常量(Floating-point literals):表示浮点数值,包括普通的浮点数和科学计数法表示。
布尔型字面常量(Boolean literals) :表示真或假的值,只有两个取值:true
和false
。
字符字面常量(Character literals):表示单个字符,用单引号括起来。
字符串字面常量(String literals):表示一个字符序列,用双引号括起来。
空字面常量(Null literal) :表示空指针或无效值,用nullptr
表示。
字面常量在程序中直接使用,不需要额外的变量或声明,可以直接作为表达式的一部分使用。
在C++中,字面常量的类型由其形式来确定,例如带小数点的是浮点型,带引号的是字符或字符串型,等等。字面常量在编译时直接替换为其具体的值,因此效率较高,且在编程中经常被用来表示固定的数值或者文本信息。
二、标识符和关键字
标识符(Identifiers)
标识符是程序员定义的名称,用来标识变量、函数、类、对象等各种实体。标识符的命名规则如下:
组成规则:
- 可以包含字母(大小写敏感)、数字和下划线
_
。 - 必须以字母或下划线开头,不能以数字开头。
- 不能使用C++中的关键字作为标识符。
- 标识符中不允许出现空格或标点符号。
命名规范:
- 命名要有意义,能够反映出其所代表的内容。
- 使用驼峰命名法(camelCase)或者下划线分隔命名法(snake_case)等命名规范,以提高可读性。
- 不能使用关键字命名。
示例合法标识符:
myVariable
_count
ClassName
isValid
关键字
java
and and_eq asm auto bitand bitor bool
break case catch char class compl const
constexpr const_cast continue decltype default delete do
double dynamic_cast else enum explicit export extern
false float for friend goto if inline
int long mutable namespace new noexcept not
not_eq nullptr operator or or_eq private protected
public register reinterpret_cast return short signed
sizeof static static_assert static_cast struct switch
template this thread_local throw true try typedef
typeid typename union unsigned using virtual void
volatile wchar_t while
三、符号常量
在C++中,符号常量通常是通过预处理指令 #define
或者 const
关键字来定义的。它们是用于代表固定值或者特定意义的常量,可以在程序中多次使用而不必重复写出其值,提高了代码的可维护性和可读性。
使用 #define
定义符号常量
使用 #define
预处理指令可以定义符号常量,形式为:
cpp
#define CONSTANT_NAME value
其中 CONSTANT_NAME
是符号常量的名称,value
是其对应的值。注意,在使用 #define
定义符号常量时,不需要指定数据类型,它们只是简单的文本替换。
cpp
#define PI 3.14159 #define MAX_SIZE 100
使用 const
关键字定义符号常量
另一种定义符号常量的方式是使用 const
关键字,这种方式更加类型安全,而且能够利用编译器的类型检查。
cpp
const double PI = 3.14159; const int MAX_SIZE = 100;
在这里,const
关键字声明了一个常量,并且指定了它的数据类型。与 #define
相比,使用 const
关键字可以避免宏定义的一些潜在问题,如无法提供类型安全性和作用域控制。
比较 #define
和 const
- 作用域 :
#define
定义的符号常量没有作用域,它们在定义点之后的整个文件中可见。而使用const
定义的常量有与其所在作用域相同的作用域。 - 类型安全 :
#define
是简单的文本替换,不具有类型信息,容易导致意外的副作用。const
常量具有明确的类型信息,编译器可以进行类型检查。 - 调试和可读性 :
const
常量会保留其名称和类型信息,有助于提高代码的可读性和可维护性。#define
宏常量只是简单的文本替换,在调试时可能会导致一些困难。
四、变量
在C++中,变量是程序中用于存储和操作数据的基本单元。变量可以通过指定类型、名称和可选的初始值来定义。
变量的声明
语法:变量类型 变量名;
示例:int num;
变量的赋值
语法:变量名 = 变量值
示例:num = 10;
变量类型
C++支持多种基本数据类型和复合数据类型,包括但不限于:
- 整型(Integer types) :如
int
,short
,long
,long long
等。 - 浮点型(Floating-point types) :如
float
,double
,long double
等。 - 字符型(Character types) :如
char
。 - 布尔型(Boolean type) :如
bool
,只能存储true
或false
。 - 复合数据类型 :如
数组(array)
,结构体(struct)
,类(class)
等。
示例
cpp
#include <iostream>
using namespace std;
int main() {
int age = 25; // 整型变量
double pi = 3.14159; // 双精度浮点型变量
char initial = 'J'; // 字符型变量
bool isValid = true; // 布尔型变量
// 输出变量的值
cout << "Age: " << age << endl;
cout << "Pi: " << pi << endl;
cout << "Initial: " << initial << endl;
cout << "isValid: " << isValid << endl; // 输出 true 作为 1
return 0;
}
在这个示例中,我们定义了几种不同类型的变量,并且使用 cout
来输出它们的值。
变量的快速定义
快捷形式一:声明变量的同时进行赋值。
cpp
int age = 18;
string name = "VON";
cout<<"我的名字是"<<name<<"今年"<<age<<"岁"<<endl;
快捷方式二:一次性声明多个变量。
cpp
int a,b,c;
a=1;
b=2;
c=3;
cout<<a<<b<<c<<endl;
快捷方式三:一次声明多个变量并进行赋值
cpp
int a=1,b=2,c=3;
cout<<a<<b<<c<<endl;
五、解决clion中汉字编码问题
这就是典型的中文乱码,可见输出的并不是我们想要的东西。那么如何去解决这类问题呢?
法一:可以直接导入头文件"Windows.h"
法二、在主函数中加入system("chcp 65001");
注:使用这种方法会有Active code page: 65001,这个完全不影响。
六、标识符的命名规范
1. 见名知意
标识符的命名应当有具体的某种含义,例如:
cpp
string name = "VON";
int age = 18;
name表示的是姓名
age代表的是年龄
2. 下划线命名法
为了区别每一个单词,可以用下划线进行区分。例如:
cpp
string student_name = "张三";
string teacher_name = "李四";
int student_age = 18;
int teacher_age = 48;
注:下划线命名法,英文单词一般全小写
3. 小驼峰法
- 大小写首字母区分
- 简短的单词可以全大写
例如:
cpp
string studentName = "张三";
string teacheNname = "李四";
int studentAge = 18;
int teacherAge = 48;
4. 大驼峰法
一般用于类的命名
cpp
string studentName = "张三";
string teacheNname = "李四";
int studentAge = 18;
int teacherAge = 48;
七、数据类型
在C++中,数据类型是指定变量或函数可以存储的数据的种类和范围的一种特定方式。C++提供了多种内置的数据类型,这些数据类型可以分为以下几类:
数据类型-整型
cpp
//
// Created by wxj05 on 2024/7/13.
//
#include "iostream"
#include "windows.h"
using namespace std;
int main() {
SetConsoleOutputCP(CP_UTF8);
//类型:short、int、long、long long
short num1 = 1;
int num2 = 2;
long num3 = 3;
long long num4 = 4;
cout << num1 << num2 << num3 << num4 << endl;
//sizeof()函数,会告知数据所占用的字节数
cout << "short" << sizeof(num1) << endl;
cout << "int" << sizeof(num2) << endl;
cout << "long" << sizeof(num3) << endl;
cout << "long long" << sizeof(num4) << endl;
return 0;
}
注:long类型在Windows系统中占4个字节,在linux系统重占8个字节。
快捷键:ctrl+alt+l,对代码进行格式化。
无符号和有符号数字
注:无符号类型的取值范围是大于0的部分。
数据类型-实型
注:实型数据没有singed和unsinged,默认全部有符号
c++中常量类型的确定
在c++中,对于常量类型的确定遵循最小原则
按照所书写的字面量的值,来确定类型
按照指定后缀确定
数据类型-字符型
char类型可存储内容:cascii码表
转义字符
转义字符:将普通的字符使用\作为开头,将其含义进行转换,对照得到ASCII表的控制字符功能。
常用的转义字符就这四种,其余的量力而行去记忆。
数据类型-字符串
C语言风格字符串
cpp
char a[]="hello";//字符数组形式
char *b="hello"; //指针形式
c++风格字符串
cpp
string c="hello";
注:字符数组的模式,不可更改变量值
字符串拼接
- 使用加号连接
注:该方法只适用于纯字符串的格式
- 使用to_string方法
数据类型-布尔型
八、cin
cin数据输入
cin会自动识别接收的变量类型,完成类型适配。
使用的时候符号一定不要用返了!!!
cin中文乱码解决
第一步:按住键盘ctrl+shift+alt+/
第二步:取消勾选
测试
注:使用SetConsoleOutputCP,只能解决cout输出乱码。
进行上述操作之后,cin,cout中的中文问题都会被解决。
九、运算符
1. 算术运算符
在C++中,算术运算符用于执行基本的数学运算,如加法、减法、乘法、除法等。
加法运算符 +
:用于将两个操作数相加。
cpp
int sum = 10 + 5; // sum 等于 15
减法运算符 -
:用于从左操作数中减去右操作数。
cpp
int difference = 10 - 5; // difference 等于 5
乘法运算符 *
:用于计算两个操作数的乘积。
cpp
int product = 10 * 5; // product 等于 50
除法运算符 /
:用于将左操作数除以右操作数,得到商。
cpp
int quotient = 10 / 5; // quotient 等于 2
注:整数除法会向零取整,即舍弃小数部分。
取模运算符 %
:用于获取左操作数除以右操作数的余数。
cpp
int remainder = 10 % 3; // remainder 等于 1 (10 除以 3 的余数)
递增运算符 ++
:用于增加操作数的值。
cpp
int a = 5; a++; // 等同于 a = a + 1; 现在 a 等于 6
递减运算符 --
:用于减少操作数的值。
cpp
int b = 10; b--; // 等同于 b = b - 1; 现在 b 等于 9
2. 赋值运算符
在C++中,赋值运算符(Assignment Operators)用于将右侧的值赋给左侧的操作数。赋值运算符是编程中最基本和最常用的运算符之一,主要用于给变量赋值。
简单赋值运算符 =
:
cpp
int x = 5; // 将整数值 5 赋给变量 x
这里,=
是简单的赋值运算符,用于将右侧的值(这里是 5
)赋给左侧的变量 x
。
复合赋值运算符:
加法赋值 +=
:
cpp
int a = 10; a += 5; // 等同于 a = a + 5;
这将把 a
的值增加 5
,结果 a
等于 15
。
减法赋值 -=
:
cpp
int b = 20; b -= 3; // 等同于 b = b - 3;
这将从 b
的值中减去 3
,结果 b
等于 17
。
乘法赋值 *=
:
cpp
int c = 4; c *= 2; // 等同于 c = c * 2;
这将 c
的值乘以 2
,结果 c
等于 8
。
除法赋值 /=
:
cpp
int d = 15; d /= 3; // 等同于 d = d / 3;
这将 d
的值除以 3
,结果 d
等于 5
。
取模赋值 %=
:
cpp
int e = 17; e %= 4; // 等同于 e = e % 4;
这将 e
的值除以 4
并取余数,结果 e
等于 1
。
3. 比较运算符
在C++中,比较运算符用于比较两个值或表达式,并根据比较结果返回一个布尔值(true
或 false
)。
相等运算符 ==
:
检查左右操作数是否相等。
cpp
int a = 5;
int b = 10;
bool isEqual = (a == b); // isEqual 等于 false,因为 a 不等于 b
不等运算符 !=
:
检查左右操作数是否不相等。
cpp
int a = 5;
int b = 10;
bool isNotEqual = (a != b); // isNotEqual 等于 true,因为 a 不等于 b
大于运算符 >
:
检查左操作数是否大于右操作数。
cpp
int a = 5;
int b = 10;
bool isGreater = (b > a); // isGreater 等于 true,因为 b 大于 a
小于运算符 <
:
检查左操作数是否小于右操作数。
cpp
int a = 5;
int b = 10;
bool isLess = (a < b); // isLess 等于 true,因为 a 小于 b
大于等于运算符 >=
:
检查左操作数是否大于或等于右操作数。
cpp
int a = 5;
int b = 10;
bool isGreaterOrEqual = (b >= a); // isGreaterOrEqual 等于 true,因为 b 大于等于 a
小于等于运算符 <=
:
检查左操作数是否小于或等于右操作数。
cpp
int a = 5;
int b = 10;
bool isLessOrEqual = (a <= b); // isLessOrEqual 等于 true,因为 a 小于等于 b
4. 逻辑运算符
在C++中,逻辑运算符用于对布尔类型的操作数执行逻辑运算,并返回布尔值结果。
逻辑与运算符 &&
:
如果两个操作数都为 true
,则返回 true
;否则返回 false
。
cpp
bool a = true;
bool b = false;
bool result = (a && b); // result 等于 false,因为 b 是 false
逻辑或运算符 ||
:
如果至少有一个操作数为 true
,则返回 true
;如果两个操作数都是 false
,则返回 false
。
cpp
bool a = true;
bool b = false;
bool result = (a || b); // result 等于 true,因为 a 是 true
逻辑非运算符 !
:
对操作数进行取反操作,如果操作数为 true
,则返回 false
;如果操作数为 false
,则返回 true
。
cpp
bool a = true;
bool result = !a; // result 等于 false,因为 !true 是 false
5. 三元运算符
在C++中,三元运算符是一种特殊的条件运算符,也称为条件运算符(Conditional Operator)。它允许根据条件的真假选择不同的值。
cpp
condition ? value_if_true : value_if_false
condition
是一个表达式,它的结果会被解释为布尔值(true 或 false)。- 如果
condition
为true
,则返回value_if_true
; - 如果
condition
为false
,则返回value_if_false
。
示例:
cpp
int a = 5;
int b = 10;
// 使用三元运算符来比较 a 和 b 的大小
int max_value = (a > b) ? a : b; // 因为 a 不大于 b,所以 max_value 等于 b,即 10
在上面的示例中,a > b
是条件表达式,如果条件为真,则选择 a
的值作为结果,否则选择 b
的值作为结果。
注意事项:
- 三元运算符可以嵌套使用,但是需要注意代码可读性和复杂性。
- 三元运算符在一些情况下可以使代码更简洁和清晰,特别是在赋值语句中,可以代替一些简单的
if-else
结构。 - 尽管三元运算符具有简洁的语法,但过度使用可能会降低代码的可读性,因此应适度使用。