第一站:c/c++基础

1: c语言的执行过程

(可以下载Windows编译器自己尝试一下,如winGW,编写一个源程序然后再命令行测试)

第一站:c/c++基础_第1张图片

2:vs的注释快捷键

Ctrl+j //代码提示

选中多行注释/取消注释(注:不能使用同一个快捷键进行注释和取消注释的操作)

Ctrl+shift+/ 或者Ctrl +k+u  或者Ctrl+k+c 

3: 数据类型和变量

数据类型

第一站:c/c++基础_第2张图片

整数类型:

short类型

在内存中占两个字节

表示范围:- (2 的 15 次方) ~ 2 的 15 次方-1 大概正负3万左右

int类型

使用最多的整数类型,在内存中占4个字节

表示范围:- (2 的 31 次方) ~ 2 的 31 次方-1 大概在正负21亿左右

long int类型

在32位系统上,占4个字节,和int一样

在64位系统上,占8个字节和long long int一样

long long int类型

占8个字节,主要是32位系统使用

表示范围:正负大概900亿左右

有符号和无符号

(不能表示负数-如果是负数是以补码的形式出现(即负数+模值)),用unsigned区别,最大值是对应的有符号数的 2 倍。模值:例如短整型short的模值位2的16次方

第一站:c/c++基础_第3张图片

单个字符类型:char

(只有四个字节占八位用ASCII码来表示)

单个字符常量 , 要求用‘ ’括起来

char name = '1',表示’1’ , 用 0001 0011表示,他的ASCII码值是49,也就是对应的整数是49

char型括起来的整数并不是直接等于整形,而是得出该整数的ASCII码值

浮点型:

单精度浮点类型(float)

精度:最长 7 位有效数字(7位的十进制位)

float类型的存储方式:(在内存中占4个字节):

第一站:c/c++基础_第4张图片

双精度浮点类型(double)

带小数的一般默认位double型

精度:最长16位有效数字

double类型的存储方式(在内存中占8个字节):

第一站:c/c++基础_第5张图片

浮点数据的输出控制

第一站:c/c++基础_第6张图片

两种不同类型的常量

字面常量:

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限制

变量

变量,是内存中的一块存储空间,即一小块内存。

第一站:c/c++基础_第7张图片

变量名的命名规范:

只能包含三种字符(数字,小/大字母,下划线_)

不能以数字开头

不能和关键字重名,避免和函数名重名

命名风格:

下划线:student_age

小驼峰:studentAge;

大驼峰:StudentAge;

全部大写:STUDENT_AGE(多用于定义宏)

变量和数据类型的关系

第一站:c/c++基础_第8张图片

4:字符串string

概念

由一个一个"字符",按照特定的顺序组成(注:汉字大部分编码是占2个字节),字符串常量用(" ")引起来

在c语言中没有专门的字符串类型,只能用char型的数组来保存字符串,char name[32];

c++可以用std::string类型表示字符串变量,是可以通过C语言的数组形式对字符串进行修改的

第一站:c/c++基础_第9张图片

在 C++语言中,字符串的最后并没有字符串结束符!

实际存储时,根据编译器的不同,最后可能存储一个字符串结束符,也可能没有!

string变量的定义,初始化

先定义字符串变量,然后再用一个字符串常量进行赋值

第一站:c/c++基础_第10张图片

先定义一个字符串变量,然后再用一个字符串变量进行赋值

第一站:c/c++基础_第11张图片

在定义的同时,使用字符串常量进行初始化

第一站:c/c++基础_第12张图片

在定义的同时,使用字符串变量进行初始化

第一站:c/c++基础_第13张图片

在定义的同时,用数量控制字符个数

第一站:c/c++基础_第14张图片

string变量的输入输出

std::cin 输入

从第一个非空白字符(空白字符:回车符,空格,制表符[同c语言的scanf])开始,到第一个空白字符结束

std::cout 输出

使用cin连续输入时,如果遇到文件结束符(console结束符Ctrl+z)

第一站:c/c++基础_第15张图片

输入读取一行

涉及函数getline(),empty(),size(),lenght()

第一站:c/c++基础_第16张图片

字符串比较:同c语言

从字符串的第一个字符逐个比较,直到遇到不同的为止:

比较运算符:>   <   <=   >=   ==  c语言是使用strcmp()函数

第一站:c/c++基础_第17张图片

字符串的加法:

注意与数学中的“加法”不同,相当于拼接:

c语言使用的strcat()函数

“100” + “200” 不等于 “300”

“100” + “200” 等于 “100200”

5:数组

概念:

多个元素的有序"组合"

特点:①相同大小的内存块组成,即数据类型相同

        ②编号从0开始递增

        ③数组的"容量"是不可能改变的

相当于定义了8个在内存中连续存储的相同类型数据变量

第一站:c/c++基础_第18张图片

数组的定义和初始化

在定义的时候进行初始化

        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++基础_第19张图片

6:C语言的字符串

概念

C语言字符串和C++字符串唯一的区别,就是尾部多一个结束符'\0',C语言的字符串是通过“字符数组”(元素类型为 char 的数组)来存储的!

第一站:c/c++基础_第20张图片

字符串数组的定义和初始化

在定义字符串数组后,一个一个进行初始化

第一站:c/c++基础_第21张图片

在定义字符串数组的同时使用字符串常量进行初始化

第一站:c/c++基础_第22张图片

在定义的同时,用初始化列表自动计算数组的长度

注:使用sizeof()才是获取的该字符数组的长度,和strlen()不同,strlen()函数获取的长度不会计算末尾结束符

第一站:c/c++基础_第23张图片

C语言字符串的输入和输出

输入:scanf();//高版本肯会出现unsafe的问题,可以使用scanf_s();

从第一个非空白字符(空白字符:回车符,空格,制表符[同c语言的scanf])开始,到第一个空白字符结束

输入:gets()函数//高版本不支持该函数(可能会出现越界),可以使用fgets()函数

读取一行字符,遇到回车符结束

输出:printf();

第一站:c/c++基础_第24张图片

7:C/C++运算符和位运算

运算符的优先级

最高优先级:()和[];

最低优先级:逗号运算符

倒数第二低优先级:复合赋值和赋值

! > 算术运算符 > 比较(关系)运算符 > && > || >赋值运算符

操作硬件的位运算

什么是位

内存的基本单元是字节,一个字节就是8位

位与运算:&  //(相当于上下位乘)

第一站:c/c++基础_第25张图片

位或运算: |  //(相当于上下位加)

第一站:c/c++基础_第26张图片

位非运算:~  //(按位取反)

第一站:c/c++基础_第27张图片

异或运算:^  //(相同为0,不同为1)

第一站:c/c++基础_第28张图片

<<:左移

右边的位用0来补充,移动超出左边的位直接丢弃

移动n位就乘以2的n次方

第一站:c/c++基础_第29张图片

>>:右移

如果是无符号:左边多出来的位就用0来补充

如果是有符号:左边多出来的位就用符号位(最高位)来填充

移动n位就除以2的n次方

第一站:c/c++基础_第30张图片

应用:把一个整数的最低四位设置为0001

#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;
}

8:数据类型之间的转换

参与运算的两个操作数的数据类型必须相同

隐式类型转换

算数转换

为了确保不丢失精度,一般是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;

输出转换(C语言)

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;
}

第一站:c/c++基础_第31张图片

强制类型转换

简单的强制类型转换

将给定的数据按照规定的类型进行转换


#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;
}

第一站:c/c++基础_第32张图片

高级强制类型转换

static_cast
dynamic_cast
const_cast
reinterpert_cast

9:条件结构

if的三种形态

单支型:如果...那么...
#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;
}
if语句的嵌套:

Switch语句

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;

}

10:循环结构

while循环

while(表达式){

        循环体

}

第一站:c/c++基础_第33张图片

for循环:适用于已知循环次数

for(表达式1;表达式2;表达式3){

        循环体

}

第一站:c/c++基础_第34张图片

do..while循环:至少执行一次

第一站:c/c++基础_第35张图片

循环的特殊控制手段break和continue

break 结束本层循环(跳出循环,不执行循环了)。

continue 结束本次循环,进入一次循环(仅结束这一次循环体)->不会影响这层循环的其他循环

第一站:c/c++基础_第36张图片第一站:c/c++基础_第37张图片

goto语句

可以跳到本函数体的任意标记位置(会破坏程序的结构性)用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;
}

第一站:c/c++基础_第38张图片

你可能感兴趣的:(c语言,c++,开发语言,visual,studio)