IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++学习总结(基础篇) -> 正文阅读

[C++知识库]c++学习总结(基础篇)

一、基础知识

1、注释

单行注释:// 描述信息
多行注释: /* 描述信息 */

2、常量

#define 宏常量:
#define 常量名 常量值 (通常在文件上方定义,表示一个常量)
const修饰的变量:
const 数据类型 常量名 = 常量值 (通常在变量定义前加关键字const,修饰该变量为常量,不可修改)

3、 标识符命名规则

标识符不能是关键字,标识符只能由字母、数字、下划线组成,第一个字符必须为字母或下划线,标识符中字母区分大小写

二、数据类型

1、整形

short(短整型) 2字节
int(整型) 4字节
long(长整形) Windows为4字节,Linux为4字节(32位),8字节(64位)
long long(长长整形) 8字节

2、sizeof()函数

可以查看统计数据类型所占内存大小(数据所占的字节数)

3、浮点型

单精度 ffloat 4字节 7位有效数字
双精度 double 8字节 15~16位有效数字

4、字符型

语法结构:char a='b'
注意:在显示字符型变量时,用单引号将字符括起来,不要用双引号;单引号内只能有一个字符,不可以是字符串

5、字符串型

语法:char a[]="hello world"
注意:c语言风格的字符串要用双引号括起来

6、c++风格字符串

string 变量名 = "字符串值"

注意:头文件要加入 #include

7、布尔类型bool

true — 真(本质是1)
false — 假(本质是0)

8、数据的输入

语法:cin >> 变量
注意:>> 原为右移运算符,在c++进行了重载,用与输出包含在头文件 #include 中,可于后面学到运算符重载了解

三、算术运算符

1、基本运算符:

+、-、*、/、%(取余,只有整数可以进行此运算)、++(自增运算符,有前置和后置区别)、–(自减运算符,也有前置和后置区别)
总结:前置递增先对变量进行++,再计算表达式,后置递增相反

2、赋值运算符

共有以下几个:=、+=、-=、*=、/=、%=
+=:a+=b即a = a + b;其他几个相同

3、比较运算符

**!=:不等于
<=:小于等于
>=:大于等于
>:大于
<:小于
注意:真”用数字“1”来表示, “假”用数字“0”来表示

4、逻辑运算符

!:非(加上之后真值与原本相反)
&&:且(同真则真,其余为假)
||:或(有真则真,无真则假)

四、程序流程结构

C/C++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构

1、顺序结构

按照代码的顺序从前往后执行,不发生任何跳转

2、选择结构

(1)多行格式的if语句

if(条件)
{
     条件满足执行的语句
}
else
{
     不满足上述条件执行的语句
}

示例:

	int max = 0;
	int a = 5, b = 10;
	if (a > b)
	{
		max = a;
	}
	else
	{
		max = b;
	}

(2)多条件的if语句

if(条件1)
{
     满足条件1执行的语句
}
else if(条件2)
{
     满足条件2执行的语句
}
else
{
     上述条件都不满足执行的语句
}

示例:

	int score;
	cin >> score;
	if (score > 90)
	{
		cout << "优秀" << endl;
	}
	else if (score > 60)
	{
		cout << "及格" << endl;
	}
	else
	{
		cout << "不及格" << endl;
	}

(3)条件嵌套的if语句

if (条件1)
	{
		if(条件2{
			满足条件1且满足条件2执行的语句
		}
	    else
	    { 
		    满足条件1不满足条件2执行的语句
	    }
	}
	else
		不满足条件1执行的语句

示例:

	int score;
	cin >> score;
	if (score >= 60)
	{
		if (score >= 90)
		{
			cout << "优秀" << endl;
		}
		else if (score >= 70)
		{
			cout << "良好" << endl;
		}
		else
		{
			cout << "及格" << endl;
		}
	}
	else
	{
		cout << "不及格" << endl;
	}

(4)三目运算符
语法:表达式1 ? 表达式2 :表达式3
解释:如果表达式1结果为真,执行表达式2,并返回表达式2的结果;如果表达式1结果为假,执行表达式3,并返回表达式3的结果
示例:

	int a = 2, b = 3, c = 0;
	c = a > b ? a : b;
	cout << c;

(5)switch语句

switch(表达式)

{

	case 结果1:执行语句;break;

	case 结果2:执行语句;break;

	...

	default:执行语句;break;

}

注意:switch语句中表达式类型只能是整型或者字符型;case里如果没有break,那么程序会一直向下执行

与if语句比,对于多条件判断时,switch的结构清晰,执行效率高,缺点是switch不可以判断区间
示例:

	int score;
	cin >> score;
	switch (score)
	{
	case(10):
		cout << "满分" << endl;
		break;
	case(9):
	case(8):
	case(7):
		cout << "优秀" << endl;
		break;
	case(6):
	case(5):
		cout << "合格" << endl;
		break;
	default:
		cout << "不合格" << endl;
		break;
	}

3、循环结构

(1)while语句
语法:

while(循环条件)
{
     循环语句
}

如果循环条件为真,则循环语句会一直执行
示例:

int i = 0;
	while(i<5)
	{
		cout << "第" << i + 1 << "次" << endl;
		++i;
	}

(2)do…while语句
语法:

do
{
     循环语句
}
while(循环条件)

实例:

int i = 0;
	do
	{
		cout << "第" << i + 1 << "次" << endl;
		++i;
	} while (i < 5);

与while语句不同的是,本语句会先执行一次,再去判断是否满足条件
(3)for语句
语法:

for(起始表达式;条件表达式;末尾循环体) 
{ 
     循环语句; 
}

示例:

for (int i = 0; i < 5; i++)
	{
		cout << "第" << i +1<< "次执行" << endl;
	}

4、跳转语句

(1)break语句
用于跳出选择结构或者循环结构
使用时机
[1]出现在switch条件语句中,作用是终止case并跳出switch

int score;
	cin >> score;
	switch (score)
	{
	case(10):
		cout << "满分" << endl;
		break;
	case(9):
	case(8):
	case(7):
		cout << "优秀" << endl;
		break;
	case(6):
	case(5):
		cout << "合格" << endl;
		break;
	default:
		cout << "不合格" << endl;
		break;
	}

[2]出现在循环语句中,作用是跳出当前的循环语句
示例:

for (int i = 0; i < 5; i++)
	{
		if (i == 2)
		{
			break;
		}
		cout << "第" << i +1<< "次执行" << endl;
	}
int i = 0;
	while(i<5)
	{
		if (i == 2)
		{
			break;
		}
		cout << "第" << i +1<< "次执行" << endl;
		++i;
	}

[3]
(2)continue语句
在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环

for (int i = 0; i < 5; i++)
	{
		if (i == 3)
		{
			continue;
		}
		cout << i << endl;
	}

(3)goto语句
可以无条件跳转语句
语法: goto 标记;

cout << "1" << endl;
	goto FLAG;
	cout << "2" << endl;
	cout << "3" << endl;
	cout << "4" << endl;
FLAG:
	cout << "5" << endl;

五、数组

数组就是一个集合,里面存放了相同类型的数据元素
特点:数组中的每个数据元素都是相同的数据类型,数组是由连续的内存位置组成的

1、一维数组

(1)定义方式

数据类型 数组名[ 数组长度 ];
数据类型 数组名[ 数组长度 ] = {1,值2 ...};
数据类型 数组名[ ] = {1,值2 ...};
//定义方式1
	//数据类型 数组名[元素个数];
	int score[10];

	score[0] = 100;
	score[1] = 99;
	score[2] = 85;
	
	cout << score[0] << endl;
	cout << score[1] << endl;
	cout << score[2] << endl;
//定义方式2
	//数据类型 数组名[元素个数] =  {值1,值2 ,值3 ...};
	//如果{}内不足10个数据,剩余数据用0补全
	int score2[10] = { 100, 90,80,70,60,50,40,30,20,10 };

	cout << score2[0] << endl;
	cout << score2[1] << endl;

	for (int i = 0; i < 10; i++)
	{
		cout << score2[i] << endl;
	}
//定义方式3
	//数据类型 数组名[] =  {值1,值2 ,值3 ...};
	int score3[] = { 100,90,80,70,60,50,40,30,20,10 };
	for (int i = 0; i < 10; i++)
	{
		cout << score3[i] << endl;
	}

数组中下标是从0开始索引,数组名的命名规范与变量名命名规范一致,不要和变量重名
(2)一维数组名
一维数组名称的用途:
可以统计整个数组在内存中的长度

int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
cout << sizeof(arr) << endl;
cout << sizeof(arr[0]) << endl;
cout << sizeof(arr) / sizeof(arr[0]) << endl;

可以获取数组在内存中的首地址

int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
cout << "数组首地址为: " << (int)arr << endl;
cout << "数组中第一个元素地址为: " << (int)&arr[0] << endl;
cout << "数组中第二个元素地址为: " << (int)&arr[1] << endl;

(3)冒泡排序法

int arr[9] = { 4,2,8,0,5,7,1,3,9 };

	for (int i = 0; i < 9 - 1; i++)
	{
		for (int j = 0; j < 9 - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}

2、二维数组

二维数组的定义方式:

数据类型 数组名[ 行数 ][ 列数 ];
数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 }{数据3,数据4 } };
数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};
//方式1 
	int arr[2][3];
	arr[0][0] = 1;
	arr[0][1] = 2;
	arr[0][2] = 3;
	arr[1][0] = 4;
	arr[1][1] = 5;
	arr[1][2] = 6;

	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			cout << arr[i][j] << " ";
		}
		cout << endl;
	}

	//方式2 
	int arr2[2][3] =
	{
		{1,2,3},
		{4,5,6}
	};

	//方式3
	int arr3[2][3] = { 1,2,3,4,5,6 }; 

	//方式4 
	int arr4[][3] = { 1,2,3,4,5,6 };

(1)二维数组名
查看二维数组所占内存空间;获取二维数组首地址

//二维数组数组名
	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 << arr << endl;
	cout << arr[0] << endl;
	cout << arr[1] << endl;

	cout << &arr[0][0] << endl;
	cout  << &arr[0][1] << endl;

二维数组名就是这个数组的首地址;对二维数组名进行sizeof时,可以获取整个二维数组占用的内存空间大小
示例:

int scores[3][3] =
	{
		{1,1,1},
		{2,2,2},
		{3,3,3},
	};

	string names[3] = { "张三","李四","王五" };

	for (int i = 0; i < 3; i++)
	{
		int sum = 0;
		for (int j = 0; j < 3; j++)
		{
			sum += scores[i][j];
		}
		cout << names[i] << "同学总成绩为: " << sum << endl;
	}

六、函数

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

返回值类型 函数名 (参数列表)
{

       函数体语句

       return表达式

}

示例:

int add(int num1, int num2)
{
	int sum = num1 + num2;
	return sum;
}

1、函数调用

语法:函数名(参数)
示例:

int add(int num1, int num2) //定义中的num1,num2称为形式参数,简称形参
{
	int sum = num1 + num2;
	return sum;
}

int main() {

	int a = 10;
	int b = 10;
	//调用add函数
	int sum = add(a, b);//调用时的a,b称为实际参数,简称实参
	cout << "sum = " << sum << endl;

	a = 1;
	b = 1;

	sum = add(a, b);
	cout << "sum = " << sum << endl;
	
	return 0;
}

2、值传递

所谓值传递,就是函数调用时实参将数值传入给形参;值传递时,如果形参发生,并不会影响实参

void swap(int num1, int num2)
{
	cout << "num1 = " << num1 << endl;
	cout << "num2 = " << num2 << endl;

	int temp = num1;
	num1 = num2;
	num2 = temp;

	cout << "num1 = " << num1 << endl;
	cout << "num2 = " << num2 << endl;
}

int main() {

	int a = 10;
	int b = 20;

	swap(a, b);

	cout << "main中的 a = " << a << endl;
	cout << "main中的 b = " << b << endl;

	system("pause");

	return 0;
}

3、函数的常见样式

[1]无参无返

void test01()
{
	cout << "this is test01" << endl;
}

[2]有参无返

void test02(int a)
{
	cout << "this is test02" << endl;
	cout << "a = " << a << endl;
}

[3]无参有返

int test03()
{
	cout << "this is test03 " << end;
	return 11;
}

[4]有参有返

int test04(int a, int b)
{
	cout << "this is test04 " << endl;
	int sum = a + b;
	return sum;
}

4、函数的声明

函数的声明可以多次,但是函数的定义只能有一次

//声明
int max(int a, int b);
int max(int a, int b);
//定义
int max(int a, int b)
{
	return a > b ? a : b;
}

5、函数的分文件编写

函数分文件编写一般有4个步骤

1、创建后缀名为.h的头文件
2、创建后缀名为.cpp的源文件
3、在头文件中写函数的声明
4、在源文件中写函数的定义
示例:

//swap.h文件
#include<iostream>
using namespace std;

//实现两个数字交换的函数声明
void swap(int a, int b);
//swap.cpp文件
#include "swap.h"

void swap(int a, int b)
{
	int temp = a;
	a = b;
	b = temp;

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
}
//main函数文件
#include "swap.h"
int main() {

	int a = 100;
	int b = 200;
	swap(a, b);

	system("pause");

	return 0;
}

七、结构体

1、定义和使用

语法:

struct 结构体名 
{ 
     结构体成员列表 
}

通过结构体创建变量的方式有三种:
1、struct 结构体名 变量名
2、struct 结构体名 变量名 = { 成员1值 , 成员2值…}
3、定义结构体时顺便创建变量
示例:
方式一:struct student stu1;
方式二:struct student stu2 = { "李四",19,60 };
方式三:

struct student
{
	//成员列表
	string name;  //姓名
	int age;      //年龄
	int score;    //分数
}stu3; 

注意:定义结构体时的关键字是struct,不可省略;创建结构体变量时,关键字struct可以省略;结构体变量利用操作符 ‘’.’’ 访问成员

2、结构体数组

语法:struct 结构体名 数组名[元素个数] = { {} , {} , ... {} }
示例:

struct student arr[3]=
	{
		{"张三",18,80 },
		{"李四",19,60 },
		{"王五",20,70 }
	};

3、结构体指针

利用操作符 ->可以通过结构体指针访问结构体属性

struct Student
{
	string name;
	int age;
};
int main()
{
	Student s = { "xiaoming",18 };
	Student* p = &s;
	cout << p->name <<"\t"<< p->age << endl;
	return 0;
}

4、结构体中嵌套结构体

结构体中的成员可以是另一个结构体

struct Student
{
	string name;
	int age;
};
struct Teacher
{
	string name1;
	int age1;
	Student s;
};
int main()
{
	Teacher t;
	t.name1 = "laoshi";
	t.age1 = 25;
	t.s.name = "xiaoming";
	t.s.age = 18;
	cout << t.name1 << endl << t.age1 <<endl<< t.s.name <<endl<< t.s.age << endl;
	return 0;
}

5、结构体做函数参数

将结构体作为参数向函数中传递
传递方式有两种:
1、值传递

struct Student
{
	string name;
	int age;
};
void print(Student p)
{
	cout << p.name <<endl<< p.age << endl;
}
int main()
{
	Student s;
	s = { "xiaoming",18 };
	print(s);
	return 0;
}

2、地址传递

struct Student
{
	string name;
	int age;
};
void print(Student *p)
{
	cout << p->name <<endl<< p->age << endl;
}
int main()
{
	Student s;
	s = { "xiaoming",18 };
	Student* p = &s;
	print(p);
	return 0;
}

注意:如果不想修改主函数中的数据,用值传递,反之用地址传递

6、结构体中 const使用场景

用const来防止误操作

struct Student
{
	string name;
	int age;
};
void print(const Student *p)
{
	//p->age = 100;  //代码错误,提示表达式必须是可修改的措置
	cout << p->name <<endl<< p->age << endl;
}
int main()
{
	Student s;
	s = { "xiaoming",18 };
	Student* p = &s;
	print(p);
	return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 11:28:13  更:2021-07-25 11:30:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 12:19:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码