笔记 黑马程序员C++教程从0到1入门编程——基础语法入门

目录

 1.C++初识

02 C++书写helloworld

03 注释 

04 变量

05 常量

06 关键字

 07 标识符命名规则

 2.数据类型

08 整型

09 sizeof关键字

10 实型(浮点型)

11 字符型

12 转义字符

13 字符串型

14 布尔类型bool

15 数据的输入

3.运算符

算术运算符

16 加减乘除运算 +-*/

​17 取模运算% 

18 递增递减

19 赋值运算符

20 比较运算符

逻辑运算符

21 非

22 与

23 或

 4.程序流程结构

选择结构

24 if语句

29 三目运算符

30 switch语句

循环结构

31 while语句

33 dowhile语句 

35 for循环 

37 嵌套循环 

跳转语句 

39 break

40 continue 

41 goto

 5.数组

一维数组

42 一维数组定义方式

43 一维数组数组名

46 冒泡排序

二维数组 

47 二维数组定义方式

 6.函数

 7.指针

56 指针的定义和使用

57 指针所占内存空间

58 空指针

59 野指针

60 const修饰指针

61 指针和数组

62 指针和函数

63 指针配合数组和函数案例

 8.结构体

64 结构体定义和使用

65结构体数组

66 结构体指针

67 结构体嵌套结构体

68 结构体做函参数

69 结构体中const使用场景


1.C++初识

02 C++书写helloworld

#include 
using namespace std;

int main()
{
	cout << "hello world!" << endl;

	system("pause");

	return 0;
}

03 注释 

1.单行注释 //描述信息
2.多行注释 /*描述信息*/

04 变量

作用:给一段指定的内存空间起名,方便操作这段内存空间

创建语法:数据类型 变量名=变量初始值; 

05 常量

记录程序中不可更改的数据

  1. 宏常量:#define 常量名 常量值
  2. const修饰的变量:const 数据类型 常量名=常量值
#define DAY 7
 
int main()
{
	//DAY = 14;//err,DAY不能修改
	cout << "一周总共有:" << DAY << "天" << endl;
    
	const int month = 12;
	//month = 24;//err,const修饰的变量也成为常量
	cout << "一年总共有:" << month << "个月份" << endl;
 
	system("pause");
	return 0;
}

06 关键字

预先保留的单词(标识符

不要用关键字给变量或者常量起名称

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第1张图片

 07 标识符命名规则

  • 标识符不可以是关键字
  • 标识符字母、数字、下划线组成
  • 标识符第一个字符只能是字母、下划线
  • 标识符区分大小写

//建议:给变量起名时,最好能够做到见名知意

    //1.标识符不可以是关键字
	int int = 10;//err
	//3.标识符第一个字符只能是字母、下划线
	int 123acd = 10;//err
	//4.标识符区分大小写
	int AAA = 10;
	cout << aaa << endl;//err:未定义标识符aaa

 2.数据类型

创建一个变量或常量时,必须要指定相应的数据类型,否则无法给变量分配内存

数据类型存在意义:给变量分配合适的内存空间  

08 整型

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第2张图片

09 sizeof关键字

可以统计数据类型所占内存的大小

sizeof(数据类型/变量名)

10 实型(浮点型)

  • float单精度,4字节,7位有效数字
  • double双精度,8字节,15-16位有效数字

(小数点前整数部分也算有效数字)

(编译器默认小数是double,float类型数字的后面加一个f)


//默认情况下,输出一个小数,会显示出6位有效数字

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第3张图片

// 统计float,double所占用内存空间

 科学计数法

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第4张图片

11 字符型

字符型变量用于显示单个字符,只占用1个字节,将对应的ASCII编码放入到存储单元
单引号' '括起来,单引号内只能有一个字符

	//创建方式
	char ch = 'a';
	cout << ch << endl;
	//所占内存大小
	cout << "char字符型变量所占内存:" << sizeof(char) << endl;//1
	//对应的ASCII码
	cout << (int)ch << endl;//97

//a-97 A-65

12 转义字符

用于表示一些不能显示出来的ASCII字符

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第5张图片

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第6张图片

	//		1./n换行
	cout << "hello world\n";
	//		2./t水平制表;跳到下一个TAB位置,宽度一共占8个位置;整齐地输出后面的数据
	cout << "aaa\tbbb" << endl;
	cout << "aaaaaa\tbbb" << endl;
	cout << "aaaa\tbbb" << endl;
	//      3.//一个反斜杠"/"
	cout << "\\" << endl;

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第7张图片

13 字符串型

字符串型:用于表示一串字符

//1.C风格:char 字符串名[]="";(注意事项:要加中括号[],要用双引号“ ”引起来)
char str1[] = "hello world";
cout << str1 << endl;
//2.C++风格字符串:string 变量名="";
//得引用头文件#include
string str2 = "hello world";
cout << str2 << endl;

14 布尔类型bool

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第8张图片

//布尔类型bool,占一个字节大小
//true——真(本质1)
//false——假(本质0)
	bool flag = true;
	cout << flag << endl;
	flag = false;
	cout << flag << endl;

	cout << "bool所占内存空间大小为" << sizeof(flag) << endl;

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第9张图片

15 数据的输入

用于从键盘获取数据
cin>>变量;

    //整型
	int a = 0;
	cout << "请给整型变量a赋值:" << endl;
	cin >> a;
	cout << "整型变量a=" << a << endl;
	//浮点型
	float f = 0;
	cout << "请给浮点型变量f赋值:" << endl;
	cin >> f;
	cout << "浮点型变量f=" << f << endl;
	//字符型
	char ch = 'a';
	cout << "请给字符变量ch赋值:" << endl;
	cin >> ch;
	cout << "字符型变量ch=" << ch << endl;
	//字符串型
	string str = "hello";
	cout << "请给z字符串str赋值:" << endl;
	cin >> str;
	cout << "字符串变量str=" << str<< endl;
	//布尔型
	//布尔类型的非0都为1
	bool flag = 1;
	cout << "请给布尔变量flag赋值:" << endl;
	cin >> flag;
	cout << "布尔变量flag=" << flag << endl;

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第10张图片

3.运算符

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第11张图片

算术运算符

16 加减乘除运算 +-*/

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第12张图片

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第13张图片

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第14张图片

17 取模运算% 

  1. 小数不可以做取模运算 

  2. 除数不能为0,所以也做不了取模运算
	int a3 = 10;
	int a4 = 0;
	cout << a3 % a4 << endl;
    //err,有未经处理的异常: 0xC0000094: Integer division by zero。

18 递增递减

前置递增:先让变量+1,然后进行表达式运算

后置递增:先进行表达式运算,后让变量+1

	int a1 = 10;
	int b1 = ++a1 * 20;
	cout << "a1=" << a1 << endl;//11
	cout << "b1=" << b1 << endl;//220

	int a2 = 10;
	int b2 = a2++ * 20;
	cout << "a2=" << a2 << endl;//11
	cout << "b2=" << b2 << endl;//200

	int a3 = 10;
	int b3 = --a3 * 20;
	cout << "a3=" << a3 << endl;//9
	cout << "b3=" << b3 << endl;//180

	int a4 = 10;
	int b4 = a4-- * 20;
	cout << "a4=" << a4 << endl;//9
	cout << "b4=" << b4 << endl;//200

19 赋值运算符

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第15张图片

20 比较运算符

用于表达式的比较,并返回一个真值或假值

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第16张图片

逻辑运算符

用于根据表达式的返回真值或假值

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第17张图片

在C++中,除了0都为真

21 非

取反操作,真变假,假变真

22 与

同真为真,其余为假

23 或

同假为假,其余为真

4.程序流程结构

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第18张图片

选择结构

24 if语句

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第19张图片

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第20张图片笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第21张图片

4.嵌套if语句:在if语句中,可以嵌套使用if语句 

	int score = 0;
	cout << "请输入一个分数:" << endl;
	cin >> score;
	cout << "您输入的分数为:" < 600)
	{
		cout << "恭喜您考上一本大学" << endl;
		if (score > 700)
		{
			cout << "恭喜您考上北京大学" << endl;
		}
		else if (score > 650)
		{
			cout << "恭喜您考上清华大学" << endl;
		}
		else
		{
			cout << "恭喜您考上人民大学" << endl;
		}
	}
	else if (score > 500)
	{
			cout << "恭喜您考上二本大学" << endl;
	}
	else if (score > 400)
	{
		cout << "恭喜您考上了三本大学" << endl;
	}
	else
	{
		cout << "未考上大学" << endl;
    }

29 三目运算符

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第22张图片

在C++中三目运算符返回的是变量可以继续赋值 

	int a = 10;
	int b = 5;
	int c = 0;
	c = (a > b ? a : b);
	(a > b ? a : b) = 100;
	cout << "c=" << c << endl;//10
	cout << "a=" << a << endl;//100
	cout << "b=" << b << endl;//5

30 switch语句

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第23张图片

case里如果没有break,程序会一直向下执行 

if和switch区别:

switch缺点:判断时候只能是整型或字符型不可以是一个区间

switch优点:结构清晰,执行效率高 

循环结构

31 while语句

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第24张图片

在写循环语句时候,必须提供跳出循环的出口 

//猜数游戏的实现

//time系统时间头文件包含
#include	

int main()
{
	//添加随机种子,利用当前系统时间生成随机数,防止每次随机数都一样
	srand((unsigned int)time(NULL));

	//1.生成随机数
	//2.玩家进行猜测
	//3.判断玩家的猜测

	int num = rand() % 100 + 1;//rand()%100生成0-99随机数
	//cout << num << endl;
	int val = 0;
	while (1)
	{
		cin >> val;

		if (val > num)
		{
			cout << "猜测过大" << endl;
		}
		else if (val < num)
		{
			cout << "猜测过小" << endl;
		}
		else
		{
			cout << "恭喜您猜对了" << endl;
			break;//猜对了退出循环
		}
	}
	system("pause");
	return 0;
}

//生成1-100随机数 

//time系统时间头文件包含
#include	

	//添加随机种子,利用当前系统时间生成随机数,防止每次随机数都一样
	srand((unsigned int)time(NULL));

	int num = rand() % 100 + 1;//rand()%100生成0-99随机数

33 dowhile语句 

 笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第25张图片

//输出所有三位数中的水仙花数

	int num = 100;
	do {
		int a = num % 10;//个位
		int b = num / 10 % 10;//十位
		int c = num / 100;//百位
		if ((a * a * a + b * b * b + c * c * c) == num)
		{
			cout << num << endl;
		}
		num++;
	} while (num < 1000);

35 for循环 

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第26张图片

//1-100逢7过的实现(逢N过)

#define N 7  //逢N过
int main()
{
	for (int i = 1; i <= 100; i++)
	{
		
		if ((i %10 == N) || (i / 10 == N) || (i % N == 0))
			cout << "PASS\t";
		else
			cout << i << "\t";

		if (i % 5 == 0)
		{
			cout << endl;
		}
	}
	system("pause");
	return 0;
}

37 嵌套循环 

在循环中再嵌套一层循环

外层执行一次,内层执行一周

跳转语句 

39 break

跳出选择结构循环结构

1.出现在switch条件语句中,作用是终止case并跳出switch

	cout << "请选择副本难度" << endl;
	cout << "1.普通" << endl;
	cout << "2.中等" << endl;
	cout << "3.困难" << endl;

	int select = 0;
	cin >> select;
	switch (select)
	{
	case 1:
		cout << "您选择的是普通难度" << endl;
		break;
	case 2:
		cout << "您选择的是中等难度" << endl;
		break;
	case 3:
		cout << "您选择的是困难难度" << endl;
		break;
	default:
			break;
	}

2.出现在循环语句中,作用是跳出当前的循环语句

for (int i = 0; i < 10; i++)
		{
			if (i == 5)
			{
				break;//退出循环
			}
			cout << i << endl;
		}
// 0 1 2 3 4

3.出现在嵌套语句中,跳出最近的内层循环语句(不影响外层循环)

for (int i = 0; i < 5; i++)
	{
		for (int j = 0; j < 5; j++)
		{
			if (j == 3)
			{
				break;
			}
			cout << "*";
		}
		cout << endl;
	}
***
***
***
***
***

40 continue 

在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环

for (int i = 0; i < 100; i++)
{
	if (i % 2 == 0)
	{
		continue;//可以筛选条件,执行到此就不再向下执行,执行下一次循环
		//break;会退出循环。写break的结果一个数也不打印
	}
	cout << i << endl;
}
//写continue的结果只打印0-99中的奇数 不打印偶数

41 goto

可以无条件跳转语句

(不推荐频繁使用,不方便阅读,影响代码结构)

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第27张图片

 5.数组

一个集合,里面存放了相同类型的数据元素

特点1:数组中每个元素都是相同的数据类型

特点2:数组是连续的内存位置组成的

一维数组

42 一维数组定义方式

 笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第28张图片

第二种定义方式时,如果在初始化数据时,没有全部填写完,会用0填补剩余数据

定义数组的时候,必须有初始的长度

数组中的下标,从0开始索引

43 一维数组数组名

  1. 可以统计整个数组在内存中的长度  sizeof(数组名)
  2. 可以获取数组在内存中的首地址  cout<

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第29张图片

 数组名是常量,不可以进行赋值操作

//数据元素逆置

1 记录起始下标位置 2 记录结束下标位置3 起始下标与结束下标元素互换

4 起始位置++,结束位置-- 5 循环执行直到起始位置>=结束位置

	int arr[5] = { 1,2,3,4,5 };
	cout << "数组逆置前:" << endl;
	for (int i = 0; i < 5; i++)
	{
		cout << arr[i] << endl;
	}
	int start = 0;
	int end = sizeof(arr) / sizeof(arr[0]) - 1;
	while (start < end)
	{
		int temp = arr[start];
		arr[start] = arr[end];
		arr[end] = temp;
		end--;
		start++;
	}
	cout << "数组逆置后:" << endl;
	for (int i = 0; i < 5; i++)
	{
		cout << arr[i] << endl;
	}

46 冒泡排序

//冒泡排序:实现升序序列

	int arr[9] = { 4,2,8,0,5,7,1,3,9 };
	cout << "排序前:" << endl;
	for (int i = 0; i < 9; i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;

	//排序总轮数=元素个数-1;
	//每轮对比次数=元素个数-排序轮数-1;

	//外层循环 排序总轮数
	for (int i = 0; i < 9 - 1; i++)
	{
        //内层循环 对比次数
		for (int j = 0; j < 9 - i - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
	cout << "排序后:" << endl;
	for (int i = 0; i < 9; i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;

二维数组 

47 二维数组定义方式

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第30张图片

 行数可以省略,列数不可以省略

48 二维数组数组名

  • 查看二维数组所占内存空间
  • 可以查看二维数组的首地址
	int arr[2][3] =
	{
		{1,2,3},
		{4,5,6}
	};
	cout << "二维数组占用的内存空间为:" << sizeof(arr) << endl;
	cout << "二维数组第一行占用内存为:" << sizeof(arr[0]) << endl;
	cout << "二维数组第一个元素占用内存为" << sizeof(arr[0][0]) << endl;
	cout << "行数:" << sizeof(arr) / sizeof(arr[0]) << endl;
	cout << "列数:" << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;

	cout << "二维数组首地址" << int(arr) << endl;
	cout << "二维数组第一行首地址" << int(arr[0]) << endl;
	cout << "二维数组第二行首地址" << int(arr[1]) << endl;
	cout << "第一个元素首地址" << (int)&arr[0][0] << endl;
	cout << "第二个元素首地址" << (int)&arr[0][1] << endl;

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第31张图片

6.函数

将一段经常使用的代码封装起来,减少重复代码

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第32张图片

7.指针

56 指针的定义和使用

以通过指针,间接访问内存

  • 内存编号是从0开始记录的,一般用十六进制数字表示
  • 可以利用指针变量保存地址

指针定义:数据类型* 指针变量名;

让指针记录变量a的地址:指针变量名=&变量名;

使用指针:通过解引用的方式来找到指针指向的内存

指针前加 * 代表解引用,找到指针指向的内存中的数据

57 指针所占内存空间

指针存的是地址

无论是什么数据类型,32位操作系统下,指针占4字节空间;64位操作系统下,指针占8字节

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第33张图片

58 空指针

空指针:指针变量指向内存中编号为0的空间

作用:初始化指针变量

空指针指向的内存是不可以访问的

int* p = NULL;
//*p = 100;//引发了异常: 写入访问权限冲突。p 是 nullptr。

(0~255之间的内存标号是系统占用的,因此不可以访问)

59 野指针

指针变量指向非法的内存空间

(空指针和野指针都不是我们申请的空间,不要访问)

60 const修饰指针

const修饰指针——常量指针 const int* p = &a;
指针的指向可以修改,但是指针指向的值不可以改

常量指针本质是指针,常量修饰它,表示这个指针是一个指向常量的指针(变量)。指针指向的对象是常量,那么这个对象不能被更改。

const修饰常量——指针常量 int* const p = &a;
指针的指向不可以修改,指针指向的值可以改

指针常量的本质是一个常量,指针常量的值是指针,所以不能被赋值。

const即修饰指针,又修饰常量——const int* const p=&a;
指针的指向和指针指向的值都不可以改

61 指针和数组

 //利用指针访问数组中的元素

int* p = arr;//arr是整形数组名,就是数组首地址
p++;//让指针向后偏移4个字节,访问数组中下一个元素

62 指针和函数

利用指针作函数参数,可以通过地址传递修改实参的值

63 指针配合数组和函数案例

 //冒泡排序(通过指针实现)

void bubbleSort(int * arr,int len)
{
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = 0; j < len - i - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}
void printArr(int* arr, int len)
{
	for (int i = 0; i < len; i++)
	{
		cout << *arr << " ";
		arr++;
	}
	cout << endl;
}

int main()
{
	//创建数组
	int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };
	int len = sizeof(arr) / sizeof(arr[0]);
	//创建函数实现
	bubbleSort(arr, len);
	//打印排序后数组
	printArr(arr, len);

	system("pause");
	return 0;
}

8.结构体

结构体属于用户自定义的数据类型,允许用户存储不同的数据类型

自定义数据类型,一些类型集合组成的一个类型

64 结构体定义和使用

 笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第34张图片

//创建变量 

Student s1;
s1.name = "张三";


struct Student s2 = { "李四",19,80 };


struct Student
{
	//成员列表
	string name;
	int age;
	int score;
}s3;
s3.name = "张三";

定义结构体的时候struct关键字不可以省略

创建变量时struct关键字可以省略

结构体变量利用操作符 . 来访问成员

65结构体数组

66 结构体指针

  笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第35张图片

struct Student s2 = { "李四",19,80 };
Student* p = &s2;
p->age;

67 结构体嵌套结构体

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第36张图片

68 结构体做函参数

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第37张图片

69 结构体中const使用场景

笔记 黑马程序员C++教程从0到1入门编程——基础语法入门_第38张图片

将函数中的形参改为指针,可以减少内存空间,而且不会复制新的副本出来

加入const之后,一旦有修改的操作就会报错,可以防止我们的误操作 

你可能感兴趣的:(C++,c++,开发语言,数据结构)