文章目录
一 、C++ 变量与常量
变量(variable)即在程序中被定义,可以被改变的一个抽象概念。
常量 (constant) 即在程序中被定义,不可以改变的一个抽象概念。
1.变量
在程序中广泛使用,一般用于存储各种数据。
定义变量
[数据类型] 变量名;
上述语句是定义一个变量的基本方法。例如
int var;
我们可以在定义一个变量的时候,给与它一个值,这通常被称为变量的初始化(initialization)。如
int var = 100;
合法的变量名
一个变量名是合法的必须遵循以下规则:
- 以字母或下划线_开头。
- 不能使用C++的保留字,如int,double,const 等1
遵守下列规则的是一个优雅的变量名:
1.使用驼峰写法或使用下划线分割意义。
例如
string yourNeckName;
string your_neck_name;
第一个就是驼峰写法,首字母小写,其后每个单词首字母大写。
第二个是用下划线分割的写法。
2.保证可读性,不要过长,可以使用各种显而易见的缩写。
例如
int _______,____;
string myMothersFathersFathersFathersname,myFathersMothersMothersName;
都不是优雅的变量名。
3.不要使用拼音。
例如
int shuzi;
string mingzi;
都是很low的变量名。
2.常量
常量在程序中运用较少,其最大的优点在于不可被修改,(如果被修改就不能通过编译。)
常量的定义有两种方式
1.C语言宏定义
#define [标识符] [字符串]
例如
#define PI 3.14159
2.c++ 使用const标识符定义
const [数据类型] [常量名] = [值];
例如
const double PI = 3.14159;
常量名的定义同样要遵循变量名的定义方法,不过常量名一般使用全大写的写法,方便和变量区分。
二、数据类型
c++的数据类型大致可以分为四种
- 整(数)形 int,long int
- 实型 double
- 字符型 char
- 自定义类型
以下只介绍常用的几个类型2
- 整形
数据类型 | 名称 | 占用字节 | 取值范围 |
---|---|---|---|
short(int) | 短整型 | 2~4 | 32768 |
int | 整形 | 占用字节4 | 2,147,483,647(21亿多) |
long (int) | 长整形 | 占用字节 4~8 | 9,223,372,036,854,775,807(1019数量级) |
long long (int) | 超长整形 | 占用字节 8 | 同上 |
还有类似 unsigned int的无符号型,占用字节相同,取值范围*2(去掉负数部分)
提示: 如果忘记了数据类型的内存占用量,可以使用以下形式查询:
cout << sizeof(类型名称) << endl;
2.实型
数据类型 | 名称 | 占用字节 | 有效位数 |
---|---|---|---|
float | (单精度)浮点数 | 4 | 6~7位 |
double | 双精度浮点数 | 8 | 15~16 |
long double | 长双精度浮点数 | 16 | 18~19位 |
bool | 布尔型 | 1 |
布尔值只有True(1) 或 False(0)
- 字符型
普通字符又叫字符常量,采用ASCII编码方式,例如A对应位65,0对应的是48。3
4.自定义类型
自定义类型是面向对象编程的概念。
class MyType{
//something
}
这个概念我们以后再讲。
三、数据类型的转换。
隐式转换
这种转换通常发生在变量赋值,或者计算的时候。
例如
double a;
a = 1;
此时a实际上就转化成了1.0;
int a = 1;
double b = 2.5;
cout << a+b << endl;
程序输出:
3.5
也就是说,在计算过程中,int类型数据转换为double类型数据。
上述转换关系可以概括为:
(short,char)→int →unsigned → long →unsigned long →[(float)→double ]→ long double
但是存在某些情况,会导致精度降低。例如:
int a;
a = 2+1.2;
这时a的值为3。(int类型,默认向下取整)
显式转换
C语言的转换方式
(double)5;
上述语句实际上相当于5.0(double类型)。
C++新的方式
int(2.5+3);
上述语句实际上和C语言的一样,但是更为美观。
注意 显示转换如果要不至于数据损失,应当向更高精度的类型转换,和上面的转换关系一样。如果是上述语句,会导致精度降低,舍去了0.5。
四、操作符。
操作符即运算符。
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 杂项运算符
1.算术运算符
算术运算符提供了基本数学操作。
C++的运算符包括:
符号 | 名称 |
---|---|
+ | 加运算符 |
- | 减运算符 |
* | 乘运算符 |
/ | 除运算符 |
% | 模(取余)运算符 |
++ | 自增运算符 |
– | 自减运算符 |
注意:
- 乘方操作可以通过在<cmath>库中的函数Pow(x,y);实现。 Pow函数返回的是double类型;
- 严格的说,模运算和取余运算有细微的区别。这种区别体现在对一个负数取余(或模)时的。取余运算是像负无穷舍入的,而取模运算是向0舍入的。
C++中的取模运算实际上是取余预算,而Python的取模运算就是取模运算,从下列运算结果可以发现。
cout << -3%4 << endl;
输出
-3
print(-3%4);
输出
1
2.关系运算符
关系运算符用以比较两个值的大小关系,它的“返回值”是布尔值。
符号 | 名称 |
---|---|
> | 大于运算符 |
< | 小于运算符 |
== | 等于运算符 |
>= | 大于等于运算符 |
<= | 小于等于运算符 |
!= | 不等于运算符 |
需要注意,等于运算符是两个等号。如果写成一个等号,则是赋值运算符。这在编译程序的时候通常不会报错,因此极易发生错误。
3.逻辑运算符
逻辑运算符用以进行逻辑运算,“返回”布尔值。
符号 | 名称 |
---|---|
&& | 且 |
|| | 或 |
! | 非(取反) |
逻辑运算是高中数学选修2-1的内容。这里有简单的介绍。
4.位运算符
位运算符可以在二进制位的层次进行数据操作。
二进制就是逢二进一,这是高中数学必修三的内容。
例如十进制数
10
10
10的二进制表示就是
101
0
(
2
)
1010_{(2)}
1010(2)
符号 | 名称 |
---|---|
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
~ | 按位非 |
<< | 二进制左移 |
>> | 二进制右移 |
二进制左右移:
原数(二进制) | 操作 | 结果(二进制) |
---|---|---|
101 | 100<<1 | 1000 |
101 | 100>>1 | 010 |
注意
二进制左移的一个常见的操作是求
2
n
2^n
2n
2
n
2^n
2n 相当于
1
<
<
n
1<<n
1<<n
cout << (1<<2) << endl;
5.赋值运算符
下列符号并不全(其实是我懒)
符号 | 名称 |
---|---|
= | 赋值 |
+= | 加且赋值 |
其余算术运算符、位运算符都以此类推。
6.杂项运算符
杂项运算符最主要的是三目(三元)运算符:
a = b ? a : b;
巧记:a = b 吗? 如果真 则 a : 如果假 则 b;
这个运算符有时候能够节约很多时间。
程序的顺序结构
if-else语句
以下是if-else语句的基本格式(单条件)。
if(条件){
如果为真
语句...
}else{
如果为假
语句...
}
如果if后只有一句话,可以省略花括号
if(条件)
语句;
如果有多种情况出现(双条件),则可以使用if - else if-else 语句,如下。
if(条件一)
语句;
else if(条件二)
语句;
else
语句;
可以看出 三目运算符 有时可以代替if-else语句。这样写常常显得优雅而美观。
switch 语句
switch语句可以对多种状况进行不同处理。其形式如下
switch(表达式)
{
case 值1:
语句1;
break;
case 值2:
语句2;
break;
}
需要注意:
- case后的冒号
- 写break。
为什么必须有break?使用break可以在执行完一个case后直接跳出,而不是接着向下执行。
但有的时候不能写break。
其他的一些东西
- 一个题库(oj)的推荐:
洛谷 - 万能头文件
#include <bits/stdc++.h>
练习题
- 请说明以下变量名的合法性
name
1name
_myName
______
double - 请说明下列程序输出的值
#include <iostream> using namespace std; int main(){ cout << int(3.6+5.9) << endl; cout << double(3.6+5.9) << endl; return 0; }
3.请编写一个c++程序,实现下面的需求:
要求输入一个整数n,若这个数是奇数,则输出"odd",否则(是偶数)输出"even"。
输入样例:
3
输出样例:
odd
习题参考答案
- 合法、不合法、合法、合法、不合法。
- 输出:
9
9.5
- A probable version
#include <bits/stdc++.h>
using namespace std;
int n;
int main() {
cin >> n;
switch(n%2) {
case 1:
cout << "odd";
break;
case 0:
cout << "even";
break;
}
return 0;
}