B站黑马c++学习笔记 —— 基础入门篇

1. 初识

1.1 常量

在这里插入图片描述

#define day 7

const int month 12;

1.2 关键字

在这里插入图片描述

2. 数据类型

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

2.1 整型

在这里插入图片描述

2.2 sizeof关键字

在这里插入图片描述

2.3 实型(浮点型)

float f1 = 3.14f;
double d1 = 3.14;

在这里插入图片描述

2.4 字符型

在这里插入图片描述

2.5 字符串型

在这里插入图片描述

c风格:
char str[] = "hello word";
c++风格:
string str = "hello word";

c++风格 要加入头文件

#include <string>

2.6 布尔类型

在这里插入图片描述

bool flag = ture;
flag = false;

2.7 数据的输入

在这里插入图片描述

整型:
cin >> a;
浮点型:
cin >> f;
字符型:
cin >> ch;
字符串型:
cin >> str;
布尔型:
cin >> flag;

3. 运算符

在这里插入图片描述

3.1 算术运算符

在这里插入图片描述

只有整型变量才可以进行取模运算

前置递增:先让变量+1,在进行表达式运算
a=2; b=++a;
a=3; b=3;
后置递增
a=2; b=a++;
a=3; b=2;
前置递减
a=2; b=--a;
a=1; b=1;
后置递减
a=2; b=a--;
a=1; b=2;

3.2 赋值运算符

在这里插入图片描述

3.3 比较运算符

在这里插入图片描述

返回值为假值或真值

3.4 逻辑运算符

在这里插入图片描述

返回值为假值或真值

4. 程序流程结构

4.1 选择结构

4.1.1 if语句

单行if语句
if(...){
}

多行if语句
if(...){
}
else{
}

多条件if语句
if(...){
}
else if(...){
}
...
else{
}

嵌套if语句
if(...){
  if(...){
  }
  ...
  else{
  }
}
...

4.1.2 三目运算符

在这里插入图片描述

运算符返回的是变量

int a = 10;
int b = 20;
(a > b ? a : b) = 100;
a=10 b=100

4.1.3 switch语句

switch(){
  case 结果1:
  执行语句;
  break;
  case 结果2:
  执行语句;
  break;
  ...
  default:
  执行语句;
  break;
}

判断只能是整型或是字符型

4.2 循环结构

4.2.1 while循环语句

while(循环条件){
}
猜数:
    #include<ctime>
    
    srand((unsigned int)time(NULL)); //随机数种子,防止每次一样
	int num = rand() % 100 + 1; //随机生成1~100的数
	int num1 = 0; //输入猜测的数
	int num2 = 0; //猜测次数
	cout << "猜测" << endl;
	while (num2<5) {
		num2++;
		cin >> num1;
		if (num1>num) {
			cout << "过大" << endl;
		} 
		else if(num1<num){
			cout << "过小" << endl;
		}
		else {
			cout << "恭喜" << endl;
			break;
		}
	}
	cout << "未猜中" << endl;

4.2.2 do…while循环语句

do{
}
while(...);
	//水仙花数
	int num = 100;
	int num_1 = 0;
	int num_2 = 0;
	int num_3 = 0;
    do{
	//取个位
	num_1 = num % 10;
	//取十位
	num_2 = (num / 10) % 10;
	//取百位
	num_3 = num / 100;
	if(num_1*num_1*num_1+num_2*num_2*num_2+num_3* num_3*num_3 == num ) {
		cout << "水仙花数:" << num << endl;
	}
	num++;
    }
    while (num < 1000);

4.2.3 for循环语句

在这里插入图片描述
在这里插入图片描述

	//敲桌子 1~100的数字 含7和7的倍数
	int num_1 = 0;
	int num_2 = 0;
	int num_3 = 0;
	for (int num = 1;num < 101; num++) {
		//个位有7
		num_1 = num % 10;
		//十位有7
		num_2 = num / 10;
		//7的倍数
		num_3 = num % 7;

		if (num_1==7 || num_2==7 || num_3==0 ) {
			cout << "敲桌子" << endl;
		}
		else {
			cout << num << endl;
		}
	}

4.2.4 嵌套循环

	//乘法表
	for (int i = 1; i < 10; i++) {
		for (int j = 1; j <= i; j++) {
			cout << j << "*" << i << "=" << i * j  <<"\t";
		}
		cout << endl;
	}

4.3 跳转语句

4.3.1 break语句

在这里插入图片描述

for(...){
  if(...){
    break;
   }
}

4.3.2 continue语句

在这里插入图片描述

for(...){
  if(...){
    continue;
   }
}

4.3.3 goto语句

在这里插入图片描述

...
goto FLAG;
...
FLAG:
...

5. 数组

5.1 概述

在这里插入图片描述

5.2 一维数组

5.2.1 一维数组定义方式

在这里插入图片描述

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

5.2.2 一维数组数组名

在这里插入图片描述

sizeof(arr)

在这里插入图片描述

	//称重
	int arr[] = { 300,350,200,400,250 };
	int max = 0;
	for (int i = 0; i < 5; i++) {
		if (arr[i] > max) {
			max = arr[i];
		}
	}
	cout << "最重: " << max << endl;
	//数组倒置
    int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
	int num = sizeof(arr) / sizeof(arr[0]);//数组长度
	int start = 0;//数组起始脚标
	int end = sizeof(arr) / sizeof(arr[0]) - 1;//数组末位脚标
	int temp = 0;//临时存储
	for (int i=0; i<num; i++) {
		temp = arr[start];
		arr[start] = arr[end];
		arr[end] = temp;
		start++;
		end--;
		if (start >= end) {
			break;
		}
	}
	for (int j = 0; j < num; j++) {
		cout << arr[j] << endl;
	}

5.2.3 冒泡排序

在这里插入图片描述

	//冒泡排序
	int arr[] = { 4,2,8,0,5,7,1,3,9,6,3 };
	int num = sizeof(arr) / sizeof(arr[0]);
	int temp = 0;
	for (int i = 0; i < num-1; i++){
		for (int j = 0; j < num-i-1; j++){
			if (arr[j] > arr[j + 1]){
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
	for (int k = 0; k < num; k++) {
		cout << arr[k] << endl;
	}

5.3 二维数组

5.3.1 二维数组定义方式

在这里插入图片描述

int arr[2][3];
int arr[2][3]={{1,2,3},{4,5,6}};
int arr[2][3]={1,2,3,4,5,6};
int arr[][3]={1,2,3,4,5,6};

在这里插入图片描述

5.3.2 二维数组数组名

在这里插入图片描述

二维数组的行数:
sizeof(arr)/sizeof(arr[0])

二维数组的列数:
sizeof(arr[0])/sizeof(arr[0][0])

在这里插入图片描述

5.3.3 二维数组应用案例

	//成绩统计
	int scores[3][3] = {
		{100,100,100},
		{90,50,100},
		{60,70,80}	
	};
	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;
	}

6. 函数

6.1 概述

在这里插入图片描述

6.2 函数的定义

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

int add(int num_1,num_2){
   int sum = num_1 + num_2;
   return sum;
}

6.3 函数的调用

int a=10;
int b=20;
int c = add(a,b);

定义函数的num_1,num_2为形参
调用函数的a,b为实参

6.4 值传递

在这里插入图片描述

如果函数不需要返回值,声明时可以写void
//换值函数
void swap(int num_1,num_2){
    int temp = num_1;
	num_1 = num_2;
	num_2 = temp;
	return;
}

int a=10;
int b=20;
swap(a,b);

值传递中,实参的值不会发生变化,只影响形参

6.5 函数的常见样式

在这里插入图片描述

1.无参无返
void test1(){
	cout << "..." << endl;
}
test1();

2.有参无返
void test1(int a){
	cout << "..." << endl;
	return;
}
test2(10000);

3.无参有返
int test3(){
	cout << "..." << endl;
	return 10000;
}
int num1=test3();

4.有参有返
int test4(int a){
	cout << "..." << endl;
	return a;
}
int num2=test4(10000);

6.6 函数的声明

在这里插入图片描述

6.7 函数的分文件编写

在这里插入图片描述

函数声明:swap.h
	#include<iostream>
	using namespace std;
	void swap(int num_1, int num_2);

函数定义:swap.cpp 
	#include"swap.h"
	void swap(int num_1, int num_2) {
		int temp = num_1;
		num_1 = num_2;
		num_2 = temp;
		cout << "a=" << num_1 << endl;
		cout << "b=" << num_2 << endl;
	}
	
函数调用:main() 
	int a = 10, b = 20;
	swap(a, b);

下篇:

7. 指针

7.1 指针的基本概念

在这里插入图片描述

7.2 指针变量的定义和使用

int a = 10;
1、指针的定义:数据类型 * 变量名
int * p;
p = &a; //指针指向变量a的地址

2、指针的使用:通过 * 进行解引用,找到指针指向地址中的数据
cout << " *p = " << *p << endl;

7.3 指针所占内存空间

在这里插入图片描述

指针所占内存:32位操作系统4位,64位操作系统8位。

7.4 空指针和野指针

在这里插入图片描述

1、空指针:指针初始化
int * p = NULL;

在这里插入图片描述

2、野指针:尽量避免
int * p = (int *)0x1100;

7.5 const修饰指针

在这里插入图片描述

1、常量指针:指针的指向可以修改,但指向的值不可以修改
const int * p = &a;
*p = 100;	(×)
p = &b;		()

2、指针常量:指针的指向的值可以修改,但指向不可以修改
int * const p = &a;
*p = 100;	()
p = &b;		(×)

3、既修饰指针,又修饰常量:指针指向及其指向的值都不可以修改
const int * const p = &a;
*p = 100;	(×)
p = &b;		(×)

在这里插入图片描述

7.6 指针和数组

在这里插入图片描述

	//指针访问数组
	int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
	int * p = arr;
	for (int i=0; i < 10; i++){
		cout << *p << endl;
		p++;
	}

7.7 指针和函数

在这里插入图片描述

****值传递不改变实参值,地址传递可以修改实参的值****
void swap1(int * p1 , int * p2) {
	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

main(){
...
int a = 10;
int b = 20;
swap1(&a, &b);
cout << a << endl;
cout << b << endl;
...
}

7.8 指针、数组、函数

在这里插入图片描述

	//指针、数组、函数的冒泡排序
void maopao(int * adr,int num) {
	int temp = 0;
	for (int i = 0; i < num - 1; i++) {
		//存下数组首地址
		int * p = adr;
		for (int j = 0; j < num - i - 1; j++) {
			if (*p > *(p+1)) {
				temp = *p;
				*p = *(p+1);
				*(p+1) = temp;
			}
			p++;
		}
	}
}
	
main(){
...
	int arr[] = { 4,2,8,0,5,7,10,1,3,9,6 };
	int num = sizeof(arr) / sizeof(arr[0]);
	//传入数组的首地址和长度
	maopao(&arr[0], num);
	for (int k = 0; k < num; k++) {
		cout << arr[k] << endl;
	}
...
}

8. 结构体

8.1 结构体基本概念

在这里插入图片描述

8.2 结构体定义和使用

在这里插入图片描述

//三种创建结构体变量方式
struct student{
	string name;
	int age;
	int score;
};

main(){
...
	// 1
	struct student s1;
	s1.name = "zhangsan";
	s1.age = 18;
	s1.score = 99;
	// 2
	struct student s2 = {"lisi", 19, 95}; 
...
}

	// 3
struct student{
	string name;
	int age;
	int score;
}s3;

main(){
...
	s3.name = "wangwu";
	s3.age = 20;
	s3.score = 90;
...
}

在这里插入图片描述

8.3 结构体数组

在这里插入图片描述

struct student {
	string name;
	int age;
	int socre;
};

main(){
	...
	struct student stuarr[3] = {
		{"zhangsan", 18, 99},
		{"lisi", 19, 95},
		{"wangwu", 20, 90},
	
	};
	stuarr[0].name = "张三";
	for (int i = 0; i < 3; i++) {
		cout << "姓名:" << stuarr[i].name << "\t年龄:" << stuarr[i].age << "\t成绩:" << stuarr[i].socre << endl;
	}
	...
}

8.4 结构体指针

在这里插入图片描述

struct student {
	string name;
	int age;
	int socre;
};

main(){
	...
	struct student s1 = {"张三", 18, 95};
	struct student * p = &s1;
	cout << "姓名:" << p->name << "\t年龄:" << p->age << "\t成绩:" << p->socre << endl;
	...
}

8.5 结构体嵌套结构体

在这里插入图片描述

struct student {
	string name;
	int age;
	int score;
};
struct teacher {
	int id;
	string name;
	int age;
	struct student s1;
};

main(){
	...
	struct teacher t1;
	t1.id = 1;
	t1.age = 40;
	t1.name = "老张";
	t1.s1.name = "小张";
	t1.s1.age = 20;
	t1.s1.score = 90;
	cout 
		<< " 老师编号:" << t1.id
		<< " 老师姓名:" << t1.name
		<< " 老师年龄:" << t1.age
		<< endl
		<< " 学生姓名:" << t1.s1.name
		<< " 学生年龄:" << t1.s1.age
		<< " 学生成绩:" << t1.s1.score
		;
	...
}

8.6 结构体做函数参数

在这里插入图片描述

struct student {
	string name;
	int age;
	int socre;
};
//值传递
void printstu1(struct student s1) {
	cout << "姓名:" << s1.name << "\t年龄:" << s1.age << "\t成绩:" << s1.socre << endl;
}
//地址传递
void printstu2(struct student * p) {
	cout << "姓名:" << p->name << "\t年龄:" << p->age << "\t成绩:" << p->socre << endl;
}

main(){
	...
	struct student s1 = { "张三", 18, 95 };
	printstu1(s1);//值传递
	printstu2(&s1);//地址传递
	...
}

8.7 结构体中的const使用场景

在这里插入图片描述

struct student {
	string name;
	int age;
	int socre;
};
void printstu(const struct student * p) {
	//p->age = 100; 加入const,不能改变其赋值
	cout << "姓名:" << p->name << "\t年龄:" << p->age << "\t成绩:" << p->socre << endl;
}

main(){
	...
	struct student s1 = { "张三", 18, 95 };
	printstu(&s1);
	...
}

8.8 结构体案例

8.8.1 案例1

在这里插入图片描述

struct student {
	string name;
	int score;
};
struct teacher {
	string name;
	struct student stu_arr[5];
};
//赋值函数
void allocateSpace(struct teacher tea_arr[],int len) {
	string tea_name = "ABC";
	for (int i = 0; i < len; i++) {
		tea_arr[i].name += tea_name[i];
		string stu_name = "abcde";
		for (int j = 0; j < 5; j++) {
			int num = rand() % 69 + 31;
			tea_arr[i].stu_arr[j].name += stu_name[j];
			tea_arr[i].stu_arr[j].score = num;
		}
	}
}
void printstu(teacher tea_arr[],int len) {
	for (int i = 0; i < len; i++) {
		cout << tea_arr[i].name << "带的学生:" << endl;
		for (int j = 0; j < 5; j++) {
			cout << "\t" << tea_arr[i].stu_arr[j].name << "的成绩:" << tea_arr[i].stu_arr[j].score << endl;
		}
		cout << endl;
	}
}

main(){
	...
	struct teacher tea_arr[3];
	struct student stu_arr[5];
	int len = sizeof(tea_arr) / sizeof(tea_arr[0]);
	srand((unsigned int)time(NULL));
	allocateSpace(tea_arr, len);//赋值函数
	printstu(tea_arr,len);//打印函数
	...
}

8.8.2 案例2

在这里插入图片描述

struct hero {
	string name;
	int age;
	string sex;
};
void maopao(struct hero * hero_arr,int len) {
	for (int i = 0; i < len - 1; i++) {
		struct hero temp;
		for (int j = 0; j < len - i - 1; j++) {
			if (hero_arr[j].age > hero_arr[j + 1].age) {
				temp = hero_arr[j];
				hero_arr[j] = hero_arr[j + 1];
				hero_arr[j + 1] = temp;
			}
		}
	}
}

main(){
	...
	struct hero hero_arr[7] = {
		{"刘备", 18, "男"},
		{"关羽", 22, "男"},
		{"张飞", 20, "男"},
		{"赵云", 21, "男"},
		{"李白", 17, "男"},
		{"貂蝉", 19, "女"},
		{"西施", 16, "女"}

	};
	int len = sizeof(hero_arr) / sizeof(hero_arr[0]);
	maopao(&hero_arr[0], len);
	for (int i = 0; i < len; i++) {
		cout << hero_arr[i].name << "\t" << hero_arr[i].age << "\t" << hero_arr[i].sex << endl;
	}
	...
}
  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值