前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c++期末总结

c++期末总结

作者头像
薄荷冰
发布2024-01-22 21:49:30
970
发布2024-01-22 21:49:30
举报
文章被收录于专栏:后端学习之旅后端学习之旅

0、c++期末总结

0.1、程序的构成

一个C++程序可以由一个程序单位或多个程序单位构成。每一个程序单位作为一个文件。在程序编译时,编译系统分别对各个文件进行编译,因此,一个文件是一个编译单元。

0.2、程序的编写与实践

用高级语言编写的程序称为“源程序”,C++的源程序是以.cpp作为后缀的 对源程序(.cpp)进行编译 ➡ 目标程序(.obj) ➡ 二进制文件(.exe) 编写C++程序一般需要经过的几个步骤是:编辑➡编译➡连接➡调试

0.3、语言程序的结构

(1)一个程序由一个或者多个源程序文件组成 在一个源程序文件中包括3部分 预处理指令、全局声明、函数定义 (2)函数是C语言程序的主要组成部分 (3)一个函数包括两个部分:函数首部和函数体 函数体又包括声明部分和执行部分 (4)程序总是从main函数开始之执行的 (5)程序中对计算机的操作是由函数中的C语句完成的 (6)在每个数据声明和语句的最后必须有一个分号 (7)C语言本身不提供输入输出语句 (8)程序应当包含注释

1、数据类型

1.1、sizeof关键字

作用:利用sizeof关键字可以统计数据类型所占内存大小

1.2、整型

int

作用:整型变量表示的是整数类型的数据 int - 占4个字节 unsigned int - 无符号整型,占4个字节

字符串型常量(char)

作用:用于表示一串字符 存储时存ASCII值,所以是整型。

常考:字符串 “abc” 在内存中占几个字节?

答:占4个字节,而不是3个字节,编译系统会在字符串最后自动加一个′\0′作为字符串结束标志。但′\0′并不是字符串的一部分,它只作为字符串的结束标志

常考: 字符串常量″abc\n″包含几个字符?

答:不是5个而是4个字符,其中“\n”是一个转义字符,但它在内存中占5个字节

布尔类型bool

作用:布尔数据类型代表真或假的值

bool类型只有两个值:

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

bool类型占1个字节大小

1.3、浮点型

作用:用于表示小数

浮点型变量分为两种:

单精度float ➡占4个字节,提供6位有效数组 双精度double ➡占8个字节,提供15位有效数字

1.4、数值型常量

1.4.1数值常量

一个整型常量可以用3种不同的方式表示:

十进制整数。如1357,-432,0等 八进制整数。在常数的开头加一个数字0,就表示这是以八进制数形式表示的常数。 十六进制整数。在常数的开头加一个数字0和一个英文字母X(或x),就表示这是以十六进制数形式表示的常数 1.4.2浮点数的表示方法 一个浮点数可以用两种不同的方式表示:

十进制小数形式。如21.456,-7.98等。 指数形式(即浮点形式)

1.5、字符型常量

作用:字符型变量用于显示单个字符

语法:char ch = ‘a’;

注意1:在显示字符型变量时,用单引号将字符括起来,不要用双引号 注意2:单引号内只能有一个字符,不可以是字符串

C和C++中字符型变量只占用1个字节。

字符常量只能包括一个字符,如′AB′ 是不合法的

字符常量区分大小写字母,如′A′和′a′是两个不同的字符常量

字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元

1.6、数据的输入输出

关键字:cin、cout

语法: cin >> 变量1>>变量2>>…>>变量n 、cout<<表达式1<<表达式2<<…<<表达式n

代码语言:javascript
复制
cout<<a,b,c;     //错误,不能一次插入多项
cout<<a+b+c;     //正确,这是一个表达式,作为一项
cin>>a>>b>>c>>d;

1.7、变量命名规则

  • C++规定标识符只能由字母、数字和下划线3种字符组成,
  • 第一个字符必须为字母或下划线
  • 不能是关键字
  • 区分大小写

1.8、局部变量

  • 在一个函数内部(或者{})定义的变量是局部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的。
  • 形参也是局部变量

1.9、全局变量

  • 在函数之外定义的变量是外部变量,称为全局变量

2、运算符

2.1、算数运算符

作用:用于将表达式的值赋给变量

  • 请详细看表格即可

运算符

术语

示例

结果

+

正号

+3

3

-

负号

-3

-3

+

10 + 5

15

-

10 - 5

5

*

10 * 5

50

/

10 / 5

2

%

取模(取余)

10 % 3

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;

注意:

  • 两个整数相除结果依然是整数(这里不进行四舍五入,直接舍去小数点后面数字)
  • C++中两个小数可以相除
  • 运算的两个数中有一个数为float型数据,则运算的结果是double型,因为C++在运算时对所有float型数据都按double型数据处理
  • 只有整型变量可以进行取模运算,两个小数不可以取模
  • 在除法运算中,除数不能为0
  • -取模运算时,除数也不能为0

常考:

  • 前置后置运算符单独使用没有什么区别
  • 前置递增先对变量进行++,再计算表达式
  • 后置递增先计算表达式,后对变量进行++
代码语言:javascript
复制
//递增
int main() {

	//后置递增
	int a = 10;
	a++; //等价于a = a + 1
	cout << a << endl; // 11

	//前置递增
	int b = 10;
	++b;
	cout << b << endl; // 11

	//区别
	//前置递增先对变量进行++,再计算表达式
	int a2 = 10;
	int b2 = ++a2 * 10;
	cout << b2 << endl; //110

	//后置递增先计算表达式,后对变量进行++
	int a3 = 10;
	int b3 = a3++ * 10;
	cout << b3 << endl; //100

	system("pause");

	return 0;
}
————————————————
版权声明:本文为CSDN博主「生命是有光的」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Augenstern_QXL/article/details/117572644

2.2、赋值运算符

作用:用于将表达式的值赋给变量

运算符

术语

示例

结果

=

赋值

a=2; b=3;

a=2; b=3;

+=

加等于

a=0; a+=2;

a=2;

-=

减等于

a=5; a-=3;

a=2;

*=

乘等于

a=2; a*=2;

a=4;

/=

除等于

a=4; a/=2;

a=2;

%=

模等于

a=3; a%2;

a=1;

2.3、比较运算符

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

请详细看表格即可

运算符

术语

示例

结果

==

相等于

4 == 3

0

!=

不等于

4 != 3

1

<

小于

4 < 3

0

>

大于

4 > 3

1

<=

小于等于

4 <= 3

0

>=

大于等于

4 >= 1

1

注意:C和C++ 语言的比较运算中,“真”用数字“1”来表示, “假”用数字“0”来表示。

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

2.4、逻辑运算符

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

请详细看表格即可

运算符

术语

示例

结果

!

!a

如果a为假,则!a为真; 如果a为真,则!a为假。

&&

a && b

如果a和b都为真,则结果为真,否则为假。

||

a ||b

如果a和b有一个为真,则结果为真,二者都为假时,结果为假。

!非为三者中运算符最高的

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

3.算法

3.0判断闰年

代码语言:javascript
复制
int runyear(int x)

{
	if ((x % 4 == 0) && (x % 100 != 0) || x % 400 == 0)
	{
		return 1;
	}
	return 0;
}

3.1素数判断应用

代码语言:javascript
复制
//素数判断
int  sunum(int a)
{
	int c = (int)sqrt(a);//强制转换类型加开方#include <math.h>
	int b = 2;
	for (b = 2; b < c+1; b++)
	{
		if (a % b == 0)
			break;
	}
	if (b == c+1)
	{
		return 1;
	}
	else
		return 0;		
}

3.2求最大公约数最小公倍数

最大公约数和最小公倍数:两个自然数的最大公约数与它们的最小公倍数的乘积等于这两个数的乘积

代码语言:javascript
复制
int main()
{
	int a = 0, b = 0;
	cout << "请输入两个整数:\n";
	cin >> a >> b;
	int min = a < b ? a : b;
	for (;; min--)
	{
		if (a % min == 0 && b % min == 0)
			break;
	}
	printf("最大共因数是%d\n", min);

	return 0;
}

辗转相除法:求两个自然数的最大公约数的一种方法,也叫欧几里德算法 377 ÷ 319 =1…58 319 ÷ 58 =5…29 58 ÷ 29 =2 ∴(319,377)=29 用辗转相除法求几个数的最大公约数,可以先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止。 最后所得的那个最大公约数,就是所有这些数的最大公约数

代码语言:javascript
复制
int main()
{
	int a = 0, b = 0;
	cout << "请输入两个整数:\n";
	cin >> a >> b;
	int min = a < b ? a : b;
	int max = a > b ? a : b;
	while (1)
	{
		if (max % min == 0)
			break;
		int c = max % min;
		max = min > c ? min : c;
		min = min < c ? min : c;

	}
	printf("最大共因数是%d\n", min);

	return 0;
}

3.3字符串中提取数

虽然我很想说去了解一下atoi,但是这个在这不太适用

代码语言:javascript
复制
#include <iostream>
using namespace std;
int main()
{
	char p[20] = "qwhu3123ifhcv1qfc";
	int i = 0,j=0;
	char arr[20];

	while (p[i])
	{
		if (p[i] > '0' && p[i] < '9')
		{
			arr[j] = p[i];
			j++;
		}
		i++;

	}
	arr[j] = '\0';
	cout << arr;
	return 0 ;

}

3.4矩阵的旋转

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main()
{
	int i, j;
	int n, m;
	int arr1[10][10];
	int arr2[10][10];
	cin >> n >> m;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			cin >> arr1[i][j];
		}
	}
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			arr2[j][i] = arr1[i][j];
		}
	}
	for (i = 0; i < m; i++)
	{
		for (j = 0; j < n; j++)
		{
			cout << arr2[i][j];

		}
		printf("\n");
	}

	return 0;
}

3.5字符串加密

说实话,这题我是没想到的。因为这个加密就是直接加个数, 但是要注意的是char类型是有范围的

3.6逆序输出

代码语言:javascript
复制
#include <iostream>
using namespace std;
int main()
{
	int num = 0;
	int a = 0;
	cin >> num;
	while (num)
	{
		a = a * 10 + num % 10;
		num /= 10;
	}
	cout << a;
	return 0;
}

3.7选择排序

代码语言:javascript
复制
#include <iostream>
using namespace std;
void Sort(int arr[], int sz)
{
	//趟数
	int i = 0;
	int temp = 0;
	for (i = 0; i < sz - 1; i++)
	{
		int j = 0;
		int max = 0;
		for (j =1 ; j < sz - 1 - i; j++)
		{
			if (arr[max] < arr[j])
				max =j;
		}
		if (j == 1)
		  break;
		temp = arr[j];
		arr[j] = arr[max];
		arr[max] = temp;
	}
}
int main()
{
	int arr[] = { 5,7,9,5,1,2,0,3,6,4 };
	int sz = sizeof(arr) / sizeof(arr[0]);

	Sort(arr, sz);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		cout<<arr[i]<<endl;//打印数组
	}

	return 0;
}

3.8冒泡排序

代码语言:javascript
复制
#include <iostream>
using namespace std;

void Sort(int arr[], int sz)
{
	//趟数
	int i = 0;
	for (i = 0; i < sz - 1; i++)
	{
		//一趟冒泡排序,决定了一趟排序进行多少对比较
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
}
int main()
{
	//整型数据
	int arr[] = { 5,7,9,5,1,2,0,3,6,4 };
	//写一个函数对数组进行排序
	int sz = sizeof(arr) / sizeof(arr[0]);

	Sort(arr, sz);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		cout << arr[i] << endl;//打印数组
	}

	return 0;
}

3.9 插入法排序

代码语言:javascript
复制
#include <iostream>
using namespace std;

#define N 8   //设定待排序序列中的元素个数

void insertion_sort(int list[]) {
    int insert;//存放要插入的数
    int p;//存放要插入的位置下标position
    int i=0;

    //从第 2 个元素(下标为 1)开始遍历
    for (i = 1; i < N; i++) {
        insert = list[i];
        // 记录目标元素所在的位置,从此位置向前开始遍历
        p = i;

        // 从 position 向前遍历,找到目标元素的插入位置
        while (p > 0 && list[p - 1] > insert) {
            //position 处的元素向后移动一个位置
            list[p] = list[p - 1];
            p--;
        }
        //将目标元素插入到指定的位置
        if (p != i) {
            list[p] = insert;
        }
    }
}

int main() {
    int i;
    int list[N] = { 94,949,49,64,6,16,311,151};
    insertion_sort(list);
    //输出 list 数组中已排好序的序列
    for (i = 0; i < N; i++) {
        cout<<list[i]<<endl;
    }
}

3.10二分查找

代码语言:javascript
复制
#include <iostream>
using namespace std;
const int num= 10;
int erfind(int arr[],int n ,int k)
{
	int left = 0;
	int right = n - 1;
	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			return mid;
		}
	}
	if (left > right)
		return -1;
}
int main()
{
	int arr[num] = { 1,2,3,4,5,6,7,8,9,10 };
	int n = num;
	int k = 7;
	int a = erfind(arr, n, k);
	if (a >= 0)
	{
		cout << "要找到的数的下标为:" << a << endl;
	}
	else
	{
		cout << "找不到" << endl;
	}
	return 0;
}

3.11鞍点

代码语言:javascript
复制
//鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。
//例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。
//11 3 5 6 9
//12 4 7 8 10
//10 5 6 9 11
//8 6 4 7 2
//15 10 11 20 25
#include <iostream>
#include <array>
using namespace std;
int main()
{
    int i, j, k;
    int m1, n1, max, min;
    array<array<int,6>, 6>a = {0};
    int flag, s = 0;
    for (i = 0; i < 5; ++i) {//输入二维数组 
        for (j = 0; j < 5; ++j) {
            cin>>a[i][j];
        }
    }
    for (i = 0; i < 5; ++i)
    {
        max = a[i][0];//先取每行第一个数为最大值
        for (j = 0; j < 5; ++j)
        {
            if (a[i][j] >= max)//找到该行的最大值a[m1][n1] 
            {
                max = a[i][j];
                m1 = i;
                n1 = j;
            }
        }
        min = a[m1][n1];//假设每行的最大值为每列的最小值 
        flag = 0;
        for (k = 0; k < 5; ++k)
        {
            if (a[k][n1] < min)//如果发现该值不是所在列的最小值,flag置1; 
                flag = 1;
        }
        if (flag == 0)//所在列没有值比该值小,即为所在列的最小值 
        {
           cout<<"行:" << m1 + 1 <<"列:" << n1 + 1<<"值为" << a[m1][n1];
            s++;//鞍点数加1;
        }
    }
    if (s == 0)//如果鞍点数为0
        cout<<"not found";
    return 0;
}

3.12字符串相关函数

1 strlen 字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包 含 ‘\0’ )。 2 strcpy 将指向的字符串复制到目标指向的字符串中,包括终止的 null 字符(并在该点停止)

  • 源字符串必须以 ‘\0’ 结束。
  • 会将源字符串中的 ‘\0’ 拷贝到目标空间。
  • 目标空间必须足够大,
  • 以确保能存放源字符串。
  • 目标空间必须可变。

3 strcmp 比较字符串大小

  • 第一个字符串大于第二个字符串,则返回大于0的数字
  • 第一个字符串等于第二个字符串,则返回0
  • 第一个字符串小于第二个字符串,则返回小于0的数字

简单递归

汉诺塔

代码语言:javascript
复制
#include <stdio.h>
int b = 0;

void move(char pos1, char pos3)
{
	printf("%c-->%c     ", pos1, pos3);
	b++;
	if (b % 5 == 0)
		printf("\n");
}
//post1:起始位置,post2:中转位置,post3:终点位置
void Hannuo(int n, char pos1, char pos2, char pos3)
{
	if (n==1)
	{
		move(pos1, pos3);
	}
	else 
	{
		Hannuo(n - 1, pos1, pos3, pos2);//借助c将a上除最大的都移动到b上
		move(pos1, pos3);
		Hannuo(n - 1, pos2, pos1, pos3);//借助a将b上的都移动到c上
	}

}

int main()
{
	Hannuo(5, 'A', 'B', 'C');
	return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0、c++期末总结
    • 0.1、程序的构成
      • 0.2、程序的编写与实践
        • 0.3、语言程序的结构
        • 1、数据类型
          • 1.1、sizeof关键字
            • 1.2、整型
              • int
              • 字符串型常量(char)
              • 布尔类型bool
            • 1.3、浮点型
              • 1.4、数值型常量
                • 1.4.1数值常量
              • 1.5、字符型常量
                • 1.6、数据的输入输出
                  • 1.7、变量命名规则
                    • 1.8、局部变量
                      • 1.9、全局变量
                      • 2、运算符
                        • 2.1、算数运算符
                          • 2.2、赋值运算符
                            • 2.3、比较运算符
                              • 2.4、逻辑运算符
                              • 3.算法
                                • 3.0判断闰年
                                  • 3.1素数判断应用
                                    • 3.2求最大公约数最小公倍数
                                      • 3.3字符串中提取数
                                        • 3.4矩阵的旋转
                                          • 3.5字符串加密
                                            • 3.6逆序输出
                                              • 3.7选择排序
                                                • 3.8冒泡排序
                                                  • 3.9 插入法排序
                                                    • 3.10二分查找
                                                      • 3.11鞍点
                                                        • 3.12字符串相关函数
                                                          • 简单递归
                                                          领券
                                                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档