(可以下载Windows编译器自己尝试一下,如winGW,编写一个源程序然后再命令行测试)
Ctrl+j //代码提示
选中多行注释/取消注释(注:不能使用同一个快捷键进行注释和取消注释的操作)
Ctrl+shift+/ 或者Ctrl +k+u 或者Ctrl+k+c
在内存中占两个字节
表示范围:- (2 的 15 次方) ~ 2 的 15 次方-1 大概正负3万左右
使用最多的整数类型,在内存中占4个字节
表示范围:- (2 的 31 次方) ~ 2 的 31 次方-1 大概在正负21亿左右
在32位系统上,占4个字节,和int一样
在64位系统上,占8个字节和long long int一样
占8个字节,主要是32位系统使用
表示范围:正负大概900亿左右
(不能表示负数-如果是负数是以补码的形式出现(即负数+模值)),用unsigned区别,最大值是对应的有符号数的 2 倍。模值:例如短整型short的模值位2的16次方
(只有四个字节占八位用ASCII码来表示)
单个字符常量 , 要求用‘ ’括起来
char name = '1',表示’1’ , 用 0001 0011表示,他的ASCII码值是49,也就是对应的整数是49
char型括起来的整数并不是直接等于整形,而是得出该整数的ASCII码值
精度:最长 7 位有效数字(7位的十进制位)
float类型的存储方式:(在内存中占4个字节):
带小数的一般默认位double型
精度:最长16位有效数字
double类型的存储方式(在内存中占8个字节):
int类型的字面常量:1,2,3,4;
long类型的字面常量:200L;(建议用大写的L)
long long 类型的字面常量:200LL;
char类型的字面常量:'1','a';
float类型的字面常量:3.14f;
double类型的字面常量:3.14;
16进制的常量:以0x作为前缀(如0x11表示十进制17);数字零不是o
8进制的常量:以0作为前缀(如011表示十进制9);
缺点:可读性差,不易维护
#define宏定义的符号常量(后面是没有分号的,)
#define MAX_SIZE 35 //在预处理阶段,直接把MAX_SIZE替换位35
const修饰的符号常量
又叫只读常量,实质还是一个变量,但是被const限制
变量,是内存中的一块存储空间,即一小块内存。
只能包含三种字符(数字,小/大字母,下划线_)
不能以数字开头
不能和关键字重名,避免和函数名重名
下划线:student_age
小驼峰:studentAge;
大驼峰:StudentAge;
全部大写:STUDENT_AGE(多用于定义宏)
由一个一个"字符",按照特定的顺序组成(注:汉字大部分编码是占2个字节),字符串常量用(" ")引起来
在c语言中没有专门的字符串类型,只能用char型的数组来保存字符串,char name[32];
c++可以用std::string类型表示字符串变量,是可以通过C语言的数组形式对字符串进行修改的
在 C++语言中,字符串的最后并没有字符串结束符!
实际存储时,根据编译器的不同,最后可能存储一个字符串结束符,也可能没有!
先定义字符串变量,然后再用一个字符串常量进行赋值
先定义一个字符串变量,然后再用一个字符串变量进行赋值
在定义的同时,使用字符串常量进行初始化
在定义的同时,使用字符串变量进行初始化
在定义的同时,用数量控制字符个数
std::cin 输入
从第一个非空白字符(空白字符:回车符,空格,制表符[同c语言的scanf])开始,到第一个空白字符结束
std::cout 输出
使用cin连续输入时,如果遇到文件结束符(console结束符Ctrl+z)
涉及函数getline(),empty(),size(),lenght()
从字符串的第一个字符逐个比较,直到遇到不同的为止:
比较运算符:> < <= >= == c语言是使用strcmp()函数
注意与数学中的“加法”不同,相当于拼接:
c语言使用的strcat()函数
“100” + “200” 不等于 “300”
“100” + “200” 等于 “100200”
多个元素的有序"组合"
特点:①相同大小的内存块组成,即数据类型相同
②编号从0开始递增
③数组的"容量"是不可能改变的
相当于定义了8个在内存中连续存储的相同类型数据变量
在定义的时候进行初始化
int a[8] = {1,2,3,4,5,6,7,8};
在定义的时候,不知道数据元素,将所有元素初始化为0(推荐)
int a[8] = {0};
根据初始化列表自动计算数组的"容量"
int a[] = {1,2,3,4};//那么此时的数组容量为4
仅C编译器支持的,给部分数组元素赋值,其余补充为0,C++编译器不支持
C语言字符串和C++字符串唯一的区别,就是尾部多一个结束符'\0',C语言的字符串是通过“字符数组”(元素类型为 char 的数组)来存储的!
在定义字符串数组后,一个一个进行初始化
在定义字符串数组的同时使用字符串常量进行初始化
在定义的同时,用初始化列表自动计算数组的长度
注:使用sizeof()才是获取的该字符数组的长度,和strlen()不同,strlen()函数获取的长度不会计算末尾结束符
输入:scanf();//高版本肯会出现unsafe的问题,可以使用scanf_s();
从第一个非空白字符(空白字符:回车符,空格,制表符[同c语言的scanf])开始,到第一个空白字符结束
输入:gets()函数//高版本不支持该函数(可能会出现越界),可以使用fgets()函数
读取一行字符,遇到回车符结束
输出:printf();
最高优先级:()和[];
最低优先级:逗号运算符
倒数第二低优先级:复合赋值和赋值
! > 算术运算符 > 比较(关系)运算符 > && > || >赋值运算符
内存的基本单元是字节,一个字节就是8位
右边的位用0来补充,移动超出左边的位直接丢弃
移动n位就乘以2的n次方
如果是无符号:左边多出来的位就用0来补充
如果是有符号:左边多出来的位就用符号位(最高位)来填充
移动n位就除以2的n次方
#include
using namespace std;
int main(void) {
//把一个整数的最低四位设置为0001
int x;
cout << "请输入一个整数: " << endl;
cin >> x;
//把 x 的最低 4 位清 0
/*
~15
00001111 -> 11110000
&(~15) -> 每个位置不变
*/
x = x & (~15);
//把 x 的最低 4 位设置为 0001
x = x | 1;
cout << "x=" << x << endl;
return 0;
}
参与运算的两个操作数的数据类型必须相同
为了确保不丢失精度,一般是char-->int-->long-->long long-->float-->double
如:34+5.0 --> 34.0+5.0 = 39.0
赋值转换在算数转换之上:以要得到的数据类型为主
如:
int x;
/*
3与4.0之间会先进行算数转换
最后的结果再进行赋值转换
*/
x = 3 + 4.0; //7
cout << x << endl;
int类型和float(double)类型的数据,不能相互输出,会报错
即int类型以char类型输出:(注:char 类型只占1个字节8位,所有int类型超出8位的部分会丢弃)
按照ASCII码值对应数据进行输出
#include ;
#include
using namespace std;
int main(void) {
int x;
x = 256 + 49;
printf("结果为:%c\n", x);//1的ASCII码值为49
printf("结果为:%d", x);
return 0;
}
将给定的数据按照规定的类型进行转换
#include
using namespace std;
int main(void) {
int x;
x = 257 + 1;
printf("结果为:%d\n", x);
x = (char)257 + 1;
printf("结果为:%d", x);
return 0;
}
#include ;
using namespace std;
int main(void) {
int salary;
cout << "请输入你的工资:" << endl;
cin >> salary;
if (salary < 20000) {//如果该条件为真,那么就执行后面的语句
cout << "还要继续加油啊!" << endl;
}
return 0;
}
#include ;
using namespace std;
int main(void) {
int salary;
cout << "请输入你的工资:" << endl;
cin >> salary;
if (salary < 20000) {//如果该条件为真,那么就执行后面的语句
cout << "还要继续加油啊!" << endl;
}else {
cout << "还可以更上一步楼!" << endl;//前面条件为假,就执行改语句
}
return 0;
}
前面为真之后,就会跳过后面的语句
#include ;
#include
using namespace std;
int main(void) {
int salary;
int age;
string degree;
cout << "请输入你的工资:" << endl;
cin >> salary;
cout << "请输入你的年龄:" << endl;
cin >> age;
cout << "请输入你的学历:" << endl;
cin >> degree;
if (salary <= 20000) {//如果该条件为真,那么就执行后面的语句
cout << "还要继续加油啊!" << endl;
}else if(age<30){
cout << "还可以更上一步楼!" << endl;//前面条件为假,就执行改语句
}else if (degree == "bk") {
cout << "加油" << endl;
}else {
cout << "放弃吧,不要挣扎了!" << endl;
}
return 0;
}
Switch语句类似于if条件句的多支型结构
但是Switch语句的仅支持单点常量判断,int/char/long/long long,不支持float和double型
#include ;
#include
using namespace std;
int main(void) {
int salary;
cout << "请输入你的工资:" << endl;
cin >> salary;
switch (salary) {
case 1:
cout << "菜鸟" << endl;
break;
case 2:
cout << "小鸟" << endl;
break;
case 3:
cout << "老鸟" << endl;
break;
default:
cout << "啥也不是!" << endl;
break;
}
return 0;
}
while(表达式){
循环体
}
for(表达式1;表达式2;表达式3){
循环体
}
break 结束本层循环(跳出循环,不执行循环了)。
continue 结束本次循环,进入一次循环(仅结束这一次循环体)->不会影响这层循环的其他循环
可以跳到本函数体的任意标记位置(会破坏程序的结构性)用bool标记和函数替代
#include
#include
#include
using namespace std;
/*
需求分析:
1.网站404攻击
2.网站篡改攻击
3.网站攻击记录
4.DNS攻击
5.服务器重启
*/
int main(void) {
cout << "1.网站404攻击" << endl;
cout << "2.网站篡改攻击" << endl;
goto happy;
cout << "3.网站攻击记录" << endl;
cout << "4.DNS攻击" << endl;
cout << "5.服务器重启" << endl;
happy:
cout << "6.我直接退出了" << endl;
system("pause");
return 0;
}