C++基础入门

系列文章目录



前言

该系列文章作为学习C++的记录,由浅入深,若文章中出现错误请指正。


提示:以下是本篇文章正文内容,下面案例可供参考

重点掌握内容

  • C++初识
  • 数据类型
  • 运算符
  • 程序流程结构
  • 数组
  • 函数
  • 指针
  • 结构体

一、C++初识?

1、第一个C++程序

注意:这里以vs2019做演示
打开vs程序看到以下界面,点击创建新项目,进入新页面选择空项目,点击下一步,配置新项目,为项目命名并选择包存放的地址(最好将包存放在一个专属的位置,以后都在此存储),点击创建,进入程序编辑窗口,在源文件处右击—>创建—>新建项—>选择C++文件命名并创建。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在文件编辑窗口中添加如下代码,分别是引入库函数,创建一个主函数,并打印输出一个字符串。
在这里插入图片描述

#include<iostream>
using namespace std;

int main() {
	cout << "Hello World!";

	system("pause");
	return 0;
}

点击本地windows调制器运行程序,其中system("pause")是让命令行窗口驻足,可以看到打印输出了字符串
在这里插入图片描述
在这里插入图片描述


2、注释

作用:对一段代码解释说明,或者暂时将某段程序注释掉以便对其他程序进行调试,方便其他程序员阅读代码。 如下代码块,//就是单行注释的符号,/**/可以注释多行。

#include<iostream>
using namespace std;

int main() {
	//单行注释 只能注释一行
	
	/*
	* 多行注释  可以将一段文字或代码注释
	*/
	cout << "Hello World!";

	system("pause");
	return 0;
}

3、变量

作用:给一段指定的内存空间起名,方便操作这段内存。
语法数据类型 变量名 = 初始值;
示例
在这里插入图片描述
注意:创建变量时必须赋初始值,否则直接调用会出错。


4、常量

作用:记录不可更改的数据,即常量一旦赋值之后不能再进行修改。

C++常量有两种:
1.#define 宏常量:#define 常量名 常量值 在最上方定义
2.const修饰的变量 const 数据类型 常量名 = 常量值

示例

#include<iostream>
using namespace std;

//[1]宏常量
#define MONTH 12

int main() {
	cout << "一年有:" << MONTH << "个月" << endl;

	//MONTH = 13;  不可以修改  会报错

	//[2]const修饰的变量
	const int day = 7;
	cout << "一周有:" << day << "天" << endl;

	//day = 8; 也不可修改

	

	system("pause");
	return 0;
}

5、标识符命名规则

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

示例:

#include<iostream>
using namespace std;


int main() {
	int int = 1;  //错误 关键字不能作为标识符
	int 1qq = 9; //错误 第一个字符必须是字母或下划线
	int w%e = 10; //错误 标识符只能由字母、数字、下划线组成

	int _abc = 1;//正确 
	int ab1 = 2;//正确
	int a_b_1 = 3;//正确
	int AaA = 1;//正确  标识符严格区分大小写
	int aaa = 2;  //正确 AaA与aaa不冲突,是两个变量

	system("pause");
	return 0;
}

二、数据类型

1.整型

数据类型占用空间取值范围
short2字节(-2^15 ~ 2^15-1)
int4字节(-2^31 ~ 2^31-1)
longwindows为4字节,linux为4字节,8字节(-2^31 ~ 2^31-1)
long long8字节(-2^63 ~ 2^63-1)

2.sizeof关键字

作用:获取数据类型或变量所占内存大小
语法sizeof(数据类型 / 变量)
示例
在这里插入图片描述

3.实型(浮点型)

作用:记录小数

数据类型占用空间有效数字范围
float4字节7位有效数字
double8字节15~16位有效数字

示例
在这里插入图片描述

4.字符型

注意:用单引号括起单个字符,不能是多个字符,仅占1个字节

#include<iostream>
using namespace std;

int main() {

	char ch = 'a';
	cout << ch << endl; 
	cout << sizeof(char) << endl; //所占内存空间大小
	
	int n = (int)ch;
	cout << "a对应的ascii编号是:" << n << endl;


	system("pause");
	return 0;
}

5.字符串型

注意:需要加入头文件 #include<string>
示例

#include<iostream>
using namespace std;
#include<string>

int main() {

	string str = "hello world";
	cout << str << endl;

	system("pause");
	return 0;
}

6.布尔类型bool

bool只有真 true或假false
示例

#include<iostream>
using namespace std;

int main() {

	bool flag = true;
	cout << flag << endl;

	flag = false;
	cout << flag << endl;


	system("pause");
	return 0;
}

7.数据的输入

作用:从键盘获取数据
关键字cin
示例

clude<iostream>
using namespace std;

int main() {

	int a = 0;
	cout << "请输入变量a的值" << endl;
	cin >> a;

	cout << a << endl;

	system("pause");
	return 0;
}

三、运算符

1.算数运算符

运算符术语示例结果
+正号+33
-负号-3-3
+10+515
-10-55
*10*550
/10/52
%取模(取余)10%31
++前置递增a=2;b=++aa=3;b=3
++后置递增a=2;b=a++a=3;b=2
前置递减a=2;b=–aa=1;b=1
后置递减a=2;b=a–a=1;b=2

注意:在除法运算中,除数不能为0;两个整型除法运算,除不尽时自动向下取整;只有整型变量才能取余

2.赋值运算符

运算符术语示例结果
=赋值a=2;b=3a=2;b=3
+=加等于a=0;a+=2a=2
-=减等于a=5;a-=3a=2
*=乘等于a=2;a*=2a=4
/=除等于a=4;a/=2a=2
%=取模等于a=3;a%=2a=1

3.比较运算符

运算符术语示例结果
==相等于4 == 30
!=不等于4 != 31
<小于4 < 30
>大于4 > 31
<=小于等于4 <= 30
>=大于等于4 >= 11

注意:C++中比较运算中,“真”用数字“1”表示,“假”用数字“0”表示

4.逻辑运算符

运算符术语示例结果
!!a如果a为假,则!a为真; 如果a为真,则!a为假。
&&a && b如果a和b都为真,则结果为真,否则为假。
||a || b如果a和b有一个为真,则结果为真,二者都为假时,结果为假。

四、程序流程结构

1.选择结构

1.1 if结构

if语句得三种形式

  • 单行格式if语句
  • 多行格式if语句
  • 多条件的if语句

单行if示例

#include<iostream>
using namespace std;

int main() {

	//选择结构-单行if语句
	int i = 10;

	if (i > 10) {
		cout << "i大于10" << endl;    //当i大于10时才会进入结构并执行打印输出。
	}
	
	//当结构内只需要执行一条语句时可以省略{} 
	if (i < 10) cout << "i小于10" << endl;


	system("pause");
	return 0;
}

多行if示例

#include<iostream>
using namespace std;

int main() {

	//选择结构-单行if语句
	int i = 10;

	if (i > 10) {
		cout << "i大于10" << endl;    //当i大于10时才会进入结构并执行打印输出。
	}
	else {
		cout << "i小于等于10" << endl;  //当不满足上面条件时就会自动执行下面else引导的操作
	}
	
	//当结构内只需要执行一条语句时可以省略{} 
	if (i < 10) cout << "i小于10" << endl;
	else cout << "i大于等于10" << endl;

	system("pause");
	return 0;
}

多条件if结构示例

#include<iostream>
using namespace std;

int main() {

	//选择结构-单行if语句
	int i = 10;

	if (i > 10) {
		cout << "i大于10" << endl;    //当i大于10时才会进入结构并执行打印输出。
	}
	else if (i < 10) {
		cout << "i小于10" << endl;  
	}
	else {
		cout << "i等于10" << endl;  //当不满足上面条件时就会自动执行下面else引导的操作
	}
	
	//当结构内只需要执行一条语句时可以省略{} 
	if (i < 10) cout << "i小于10" << endl;
	else if (i > 10) cout << "i大于10" << endl;
	else cout << "i等于10" << endl;

	system("pause");
	return 0;
}

嵌套if示例

#include<iostream>
using namespace std;

int main() {

	//选择结构-单行if语句
	int i = 17;

	if (i > 10) {
		
		if (i > 15) {
			cout << "优秀" << endl;

			if (i > 17) {
				cout << "非常优秀" << endl;
			}
			else {
				cout << "有点优秀" << endl;
			}
		}
		else {
			cout << "良好" << endl;
		}
	
	}
	
	system("pause");
	return 0;
}

1.2 三目运算符

作用:实现简单的判断(是或不是)
语法:表达式1 ? 表达式2 : 表达式3

说明:当表达式满足条件即为真时,执行表达式2,否则执行表达式3

示例

#include<iostream>
using namespace std;

int main() {

	//选择结构-三目
	int i = 17;
	bool flag;
	flag=i > 10 ? true : false;
	cout << i << endl;
	
	system("pause");
	return 0;
}

1.3 switch结构

作用:执行多条件分支语句

语法

switch(表达式)

{

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

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

	...

	default:执行语句;break;

}

示例:

int main() {

	//请给电影评分 
	//10 ~ 9   经典   
	// 8 ~ 7   非常好
	// 6 ~ 5   一般
	// 5分以下 烂片

	int score = 0;
	cout << "请给电影打分" << endl;
	cin >> score;

	switch (score)
	{
	case 10:
	case 9:
		cout << "经典" << endl;
		break;
	case 8:
		cout << "非常好" << endl;
		break;
	case 7:
	case 6:
		cout << "一般" << endl;
		break;
	default:
		cout << "烂片" << endl;
		break;
	}

	system("pause");

	return 0;
}

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

2.循环结构

2.1 while循环语句

作用:满足循环条件,执行循环语句
语法:while(循环条件){循环语句块}
只要循环条件的结果的真,就执行循环语句

示例:

int main() {

	int num = 0;
	while (num < 10)
	{
		cout << "num = " << num << endl;
		num++;
	}
	
	system("pause");

	return 0;
}

注意:在执行循环语句时,程序必须提供跳出循环的出口,否则出现死循环

2.2 do……while循环语句

与while相比,do……while会先执行一次,不论是否满足while循环条件

示例

int main() {

	int num = 0;

	do
	{
		cout << num << endl;
		num++;

	} while (num < 10);
	
	
	system("pause");

	return 0;
}

2.3 for循环语句

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

示例

int main() {

	for (int i = 0; i < 10; i++)
	{
		cout << i << endl;
	}
	
	system("pause");

	return 0;
}

嵌套循环

示例

int main() {

	//外层循环执行1次,内层循环执行1轮
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			cout << "*" << " ";
		}
		cout << endl;
	}

	system("pause");

	return 0;
}

3.跳转语句

3.1 break语句

作用:跳出选择结构或者循环结构

break使用的时机:

  • 出现在switch条件语句中,作用是终止case并跳出switch
  • 出现在循环语句中,作用是跳出当前的循环语句
  • 出现在嵌套循环中,跳出最近的内层循环语句

示例

int main() {
	//1、在switch 语句中使用break
	cout << "请选择您挑战副本的难度:" << endl;
	cout << "1、普通" << endl;
	cout << "2、中等" << endl;
	cout << "3、困难" << endl;

	int num = 0;

	cin >> num;

	switch (num)
	{
	case 1:
		cout << "您选择的是普通难度" << endl;
		break;
	case 2:
		cout << "您选择的是中等难度" << endl;
		break;
	case 3:
		cout << "您选择的是困难难度" << endl;
		break;
	}

	system("pause");

	return 0;
}

3.2 continue语句

作用:在循环语句中,跳出本次循环中余下尚未执行的语句(即存在于同级循环内continue之后的语句),继续执行下一次循环。

示例

#include<iostream>
using namespace std;

int main() {

	for (int i = 0; i < 10; i++) {
		if (i % 2 == 0) {
			continue;
		}
		cout << i << endl;
	}

	system("pause");
	return 0;
}

五、数组

1.概念

所谓数组,就是一个集合,集合中的每个数据元素都是相同的数据类型;数组是由连续的内存位置组成的

2.一维数组

以下为数组定义的三种方式:

  • 数据类型 数组名[ 数组长度 ];
  • 数据类型 数组名[ 数组长度 ] ={值1,值2,值3……};
  • 数据类型 数组名[ ] = {值1,值2……};

示例

int main() {

	//定义方式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;


	//第二种定义方式
	//数据类型 数组名[元素个数] =  {值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;
	}

	system("pause");

	return 0;
}

数组下标是从0开始索引的

3.二维数组

二维数组的定义方式

  • 数据类型 数组名[ 行数 ] [ 列数 ];
  • 数据类型 数组名[ 行数 ] [ 列数 ] = { {数据1,数据2},{数据3,数据4}};
  • 数据类型 数组名[ 行数 ] [ 列数 ] = {数据1,数据2,数据3,数据4}
  • 数据类型 数组名 [ ] [ 列数 ]={数据1,数据2,数据3}
int main() {

	//方式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 
	//数据类型 数组名[行数][列数] = { {数据1,数据2 } ,{数据3,数据4 } };
	int arr2[2][3] =
	{
		{1,2,3},
		{4,5,6}
	};

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

	//方式4 
	//数据类型 数组名[][列数] = { 数据1,数据2 ,数据3,数据4  };
	int arr4[][3] = { 1,2,3,4,5,6 };
	
	system("pause");

	return 0;
}

六、函数

1.概述

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

2.函数的定义

一个函数由五个部分组成:

  • 返回值类型:一个函数可以不回则用void,如果返回值则根据返回的类型写类型,比如返回一个整数2,则用int
  • 函数名:给函数起名,注意同一个类里面不要有两个或多个相同函数名的函数。
  • 参数列表:调用该函数时传入的数据
  • 函数体语句:函数被调用后,内部完成的操作。
  • return 表达式:当有返回值时返回。

语法

返回值类型 函数名(参数列表)
{
	函数体结构
	return表达式
}

示例:定义一个加法函数,实现两个数相加

//函数定义
int add(int num1,int num2){
	int sum=num1+num2;
	return sum;
}

3.函数的调用

语法函数名(参数)
示例

#include<iostream>
using namespace std;

//函数定义
int add(int num1,int num2){
    int sum = num1 + num2;
    return sum;
}

int main(){
    int a=10;
    int b=10;
    //调用add函数
    int sum=add(a,b);
    cout<<"sum="<<sum<<endl;

    a=100;
    b=100;

    sum=add(a,b);

    cout<<"sum="<<sum<<endl;
    
    
    system("pause");
    return 0;
}

4 值传递

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

示例:

void swap(int num1, int num2)
{
	cout << "交换前:" << endl;
	cout << "num1 = " << num1 << endl;
	cout << "num2 = " << num2 << endl;

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

	cout << "交换后:" << endl;
	cout << "num1 = " << num1 << endl;
	cout << "num2 = " << num2 << endl;

	//return ; 当函数声明时候,不需要返回值,可以不写return
}

int main() {

	int a = 10;
	int b = 20;

	swap(a, b);

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

	system("pause");

	return 0;
}

总结: 值传递时,形参是修饰不了实参的

5. 函数的常见样式

常见的函数样式有4种

  1. 无参无返
  2. 有参无返
  3. 无参有返
  4. 有参有返

示例:

//函数常见样式
//1、 无参无返
void test01()
{
	//void a = 10; //无类型不可以创建变量,原因无法分配内存
	cout << "this is test01" << endl;
	//test01(); 函数调用
}

//2、 有参无返
void test02(int a)
{
	cout << "this is test02" << endl;
	cout << "a = " << a << endl;
}

//3、无参有返
int test03()
{
	cout << "this is test03 " << endl;
	return 10;
}

//4、有参有返
int test04(int a, int b)
{
	cout << "this is test04 " << endl;
	int sum = a + b;
	return sum;
}

6. 函数的声明

作用: 告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。

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

示例:

//声明可以多次,定义只能一次
//声明
int max(int a, int b);
int max(int a, int b);
//定义
int max(int a, int b)
{
	return a > b ? a : b;
}

int main() {

	int a = 100;
	int b = 200;

	cout << max(a, b) << endl;

	system("pause");

	return 0;
}

七、指针

1.指针的基本概念

指针的作用:可以通过指针间接访问内存(通过变量是直接访问)

2.指针变量的定义和使用

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

示例

#include<iostream>
using namespace std;

int main() {
	//1.指针的定义
	int a = 10;

	//指针定义语法
	int* p;

	//指针变量赋值
	p = &a;  // & 在这里是取地址符
	cout << &a << endl; 
	cout << p << endl;

	//2.指针的使用
	//通过 *  操作指针变量指向的内存 *是解引用 
	cout << "*p=" << *p << endl;

	system("pause");
	return 0;
}

3.const修饰指针

const修饰指针有三种情况

  1. const修饰指针 ----常量指针
  2. const修饰常量 ----指针常量
  3. const既修饰指针,又修饰常量

示例

#include<iostream>
using namespace std;

int main() {
	int a = 10;
	int b = 10;

	//const修饰指针,指针指向可以改,指针指向的值不可以更改
	const int* p1 = &a;
	p1 = &b; //正确
	//*p1=100 //错误

	//const修饰常量,指针指向不可以改,指针指向的值可以改
	int* const p2 = &a;
	//p2 = &b; //错误
	*p2 = 100; //正确

	//const既修饰指针又修饰常量
	const int* const p3 = &a;
	// p3=&b; //错误
	// *p3=100; //错误



	system("pause");
	return 0;
}

1.常量指针(const int *p):指向可以改,值不可以改
2.指针常量(int * const p):指向不可以改,值可以改

4.指针和数组

作用:利用指针访问数组中元素
示例

#include<iostream>
using namespace std;

int main() {

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

	int* p = arr; //指向数组的指针

	cout << "第一个元素是:" << arr[0] << endl;
	cout << "指针访问第一个元素:" << *p << endl;

	for (int i = 0; i < 10; i++) {
		//利用指针遍历数组
		cout << *p << endl;
		p++; //因为一个数组在内存中是连续的内存空间,所以地址连续,p++就是地址加1

	}

	system("pause");
	return 0
}

5.指针和函数

作用:利用指针函数作为参数,可以修改实参的值

示例

#include<iostream>
using namespace std;

//值传递
void swap1(int a, int b) {
	int temp = a;
	a = b;
	b = temp;
}

//地址传递
void swap2(int* p1, int* p2) {
	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

//引用传递
void swap3(int& a, int& b) {
	int temp = a;
	a = b;
	b = temp;
}
int main() {
	int a = 10;
	int b = 20;
	swap1(a, b); //值传递不会改变实参
	cout << "值传递后:a= " << a << ";b= " << b << endl;
	
	swap2(&a, &b); //地址传递会改变实参
	cout << "地址传递后:a= " << a << ";b= " << b << endl;

	swap3(a, b); //引用传递会改变实参
	cout << "引用传递后:a= " << a << ";b= " << b << endl;

	system("pause");
	return 0;
}

八、结构体

1. 结构体基本概念

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

2. 结构体定义和使用

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

#include<iostream>
using namespace std;
#include<string.h>

//结构体定义
struct student {
	//成员列表
	string name;
	int age;
	int score;
};
int main() {
	struct student stu1;
	stu1.name = "张三";
	stu1.age = 19;
	stu1.score = 100;

	system("pause");
	return 0;
}

3. 结构体数组

作用:将自定义的结构体放入到数组中方便维护

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

示例

#include<iostream>
using namespace std;
#include<string>

//结构体定义
struct student {
	//成员列表
	string name;
	int age;
	int score;
};
int main() {
	//结构体数组
	struct student arr[3] =
	{
		{"张三",19,100},
		{"李四",18,90},
		{"王五",20,70}
	};

	for (int i = 0; i < 3; i++) {
		cout << "姓名:" << arr[i].name << "年龄:" << arr[i].age << "成绩:" << arr[i].score << endl;
	}

	system("pause");
	return 0;
}

4. 结构体指针

利用->访问结构体属性

示例

#include<iostream>
using namespace std;
#include<string>

//结构体定义
struct student {

	//成员列表
	string name;
	int age;
	int score;
};

int main() {
	struct student stu1 = { "张三",19,100 };

	struct student* p = &stu1;
	
	p->name = "李四";
	cout << "姓名:" << p->name << endl;


	system("pause");
	return 0;
}

5. 结构体嵌套结构体

实际使用中经常遇到嵌套结构体
例如:一个老师首先有自己的属性然后还要包含学生,学生又有自己的属性。

示例

#include<iostream>
using namespace std;
#include<string>

//学生结构体定义
struct student {
	//成员列表
	string name;
	int age;
	int score;

};

//教师结构体定义
struct teacher {
	//成员列表
	int id;
	string name;
	int age;
	struct student stu[3]; //子结构体 学生
};
int main() {
	struct teacher t1;
	t1.id = 10001;
	t1.name = "老王";
	t1.age = 40;

	t1.stu[0] = { "张三",19,100 };
	t1.stu[1] = { "李四",18,80 };
	t1.stu[2] = {"王五", 17, 70};
	

	
	system("pause");
	return 0;
}

总结

本文删去了一些很少用到的内容,只是在入门阶段对每一部分的内容过一遍手,后续会进行更详细深度的拓展。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值