一、基础语法
1、数据类型
基本数据类型:
int | 用于表示整数 |
float | 用于表示单精度浮点数 |
double | 用于表示双精度浮点数 |
char | 用于表示字符 |
bool | 用于表示布尔值,只能取 true 或 false |
void | 表示无类型,通常用于函数返回类型或指针类型 |
复合数据类型:
数组 | 由相同类型的元素组成的集合 |
结构体(struct ) |
由不同类型的成员组成的复合类型 |
枚举(enum ) |
一组具有命名值的常量 |
类(class ) |
一种封装数据和操作的方式,支持面向对象编程 |
指针(pointer ) |
存储内存地址的变量,用于间接访问内存中的数据 |
引用(reference ) |
提供现有变量的别名,用于简化代码和避免复制 |
引例:
int a = 10;
cout<<sizeof(a)<<endl; //统计该变量所占内存大小
//科学计数法
float a = 3e2; //表示3*10^2
float a = 3e-2; //表示3*10^-2
//字符串
a = 'b'
a = "b"
a = "hello" //单个字符时可用''或"",字符串只能用""
//转义字符
cout<<"hello\n"<<endl; \n为换行符
cout<<"aa\thello"<<endl;
cout<<"aaaa\thello"<<endl;
cout<<"a\thello"<<endl; //\t为水平制表符,可整齐输出数据
2、运算符
算数运算符
/可以是两个小数相除,若是两个整数相除则结果向下取整
%为取模
递增递减
++ | 前置递增 | 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 |
所谓前置就是先加1,后置就是先运算
逻辑运算符
运算符 | 术语 | 示例 | 结果 |
! | 非 | !a | 若a为假则!a为真 |
&& | 与 | a&&b | 若a与b都为真则为真,否则为假 |
|| | 或 | a||b | 若a与b有一个为真则为真,否则为假 |
3、数组
一维数组
3种定义方式:
1)数据类型 数组名[数组长度];
2)数据类型 数组名[数组长度] = {值1,值2,……}
注意:若实际值与长度不同时,自动用0补足
3)数据类型 数组名[] = {值1,值2,……}
int arr[10];
arr[0] = 1;
int arr2[4] = {1,2,3,4};
int arr3[] = {1,2,3};
获取首地址
两种方式:arr或&arr[0]
数组长度统计
数组占用内存空间大小:sizeof(arr)
数组单个元素占用内存空间大小:sizeof(arr[0])
数组长度:sizeof(arr) / sizeof(arr[0])
冒泡排序(后文具体介绍)
-
比较相邻元素: 从第一个元素开始,比较相邻的两个元素,如果它们的顺序不正确(比如在升序排序中,前一个元素大于后一个元素),则交换它们。
-
一次遍历完成: 经过一次遍历,最大(或最小)的元素会被移到序列的最后位置。
-
重复步骤1和2: 重复进行上述步骤,直到序列完全有序。在每次遍历中,待排序序列的长度减一,因为每次遍历都会将一个元素放置到了正确的位置上
二维数组
定义方式
二维数组定义的4种方式:
1)数据类型 数组名[ 行数 ][ 列数 ];
2)数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2} ,{数据3,数据4} };
3)数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
4)数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4}
注意:常用第二种,可读性较强
int array2D[3][3] = {
{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
cout << "Array elements:" << endl;
for(int i = 0; i < 3; ++i) {
for(int j = 0; j < 3; ++j) {
cout << array2D[i][j] << " ";
}
cout << endl;
}
Array elements:
1 2 3
4 5 6
7 8 9
计算行数与列数
二维数组的行数:sizeof(arr) / sizeof(arr[0])
二维数组的列数:sizeof(arr[0]) / sizeof(arr[0][0])
地址
二维数组首地址:arr[0]
或 &arr[0][0]
二维数组第1个元素的地址: arr[0]
或 &arr[0][0]
二维数组第 0 行的地址: arr
或arr[0]
或arr + 0
二维数组第 i 行的地址:arr[i]
或arr + i
二维数组第 i 行首元素的地址:arr[i]
或arr + i
或*(arr + i)
或&a[0] + i
二维数组第 i 行第 j 列元素的地址:&arr[i][j]
或*(arr + i) + j
4、循环
for循环
#include<bits/stdc++.h>
using namespace std;
int main ()
{ int sum=0;
for (int i=1; i<=100 ; ++i)
sum+=i;
cout<<sum;
return 0;
}
while循环
while(表达式)语句;
while(表达式){
语句1;
语句2;
}
例:用while打印数组
#include <iostream>
using namespace std;
int main() {
int array[] = {1, 2, 3, 4, 5};
int length = sizeof(array) / sizeof(array[0]); // 计算数组的长度
cout << "Array elements: ";
int i = 0; // 初始化计数器
while (i < length) {
cout << array[i] << " ";
i++; // 更新计数器
}
cout << endl;
return 0;
}
do-while循环
do{
语句1;
语句2;
}
while(条件表达式)
示例:获取输入,直到输入的值为正数为止
#include <iostream>
using namespace std;
int main() {
int num;
do {
cout << "请输入一个正数:";
cin >> num;
} while (num <= 0);
cout << "你输入的正数是:" << num << endl;
return 0;
}
while和do-while的区别:
-
while 循环:
- 在
while
循环中,循环条件会在每次循环开始之前被检查。如果条件为真,循环体会执行,然后再次检查条件。如果条件为假,循环终止。 - 这意味着,如果条件一开始就为假,循环体可能一次都不会执行。
- 在
-
do-while 循环:
- 在
do-while
循环中,循环体会先执行一次,然后再检查循环条件。只要条件为真,循环体会继续执行,否则循环终止。 - 这意味着,
do-while
循环至少会执行一次循环体,即使条件一开始就为假。
- 在
嵌套循环
示例:水仙花数字
#include<bits/stdc++.h>
using namespace std;
int main()
{ for (int a=1; a<=9; ++a)
for (int b=0; b<=9; ++b)
for (int c=0; c<=9; ++c)
{ if (a*a*a+b*b*b+c*c*c==a*100+b*10&