选择结构
不需要加大括号
循环语句
注意do……while的while的末尾是有分号的
数组
数组大小必须是整型变量
冒泡排序
本质在于交换
void BubbleSort(int arr[], int n)
{
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
注意这一点:如果数组的很大,就可以把数组定义到主函数的外面
memset — 对数组中每一个元素赋相同的值
赋相同值的俩种方法:①memset 头文件(string.h)
②fill 头文件(algorithm)
如果赋值为1的话:
#include<stdio.h>
#include<string.h>
int main() {
int a[5];
memset(a, 1, sizeof(a));
for (int i = 0; i < 5; i++) {
printf("%d ", a[i]);
}
}
结果:
字符数组
注意:
- gets识别换行符\n作为输入结束
- scanf完一个整数之后,如果要使用gets,需要先用getchar接收整数之后的换行符
注意下面的俩点(易错)
尤其是第二点,当不是使用scanf的%s格式或者gets函数输入字符串的时候,要在每个字符串之后加’\0’,否则printf和puts输出字符串的时候会乱码。因为printf和puts输出字符串的时候是以’\0’为结束的标志的。
string.h头文件
注意strcmp的结果
注意:
是把字符数组2复制给字符数组1,这里的复制包括结束符’\0’。
注意:
是把字符数组2接到字符数组1后面
sscanf与sprintf
函数
注意:
- 数组作为参数的时候:
参数中数组的第一维不需要填写长度(如果是二维数组,那么第二维需要填写长度) - 实际调用的时候也只需要填写数组名
- 数组不可以作为返回类型出现,如果想要返回数组,只能把想要返回的数组做为参数传入
指针
注意:
指针实际上是一个整数,指针是一个unsigned类型的整数
星号是类型的一部分
基类型必须和指针变量存储的地址类型相同
a+i 和 &a[i] 等价的
注意理解这俩种情况
引用相当于给变量起了一个别名
引用的&和取地址的&是不同的
引用的变量的别名,常量不可以进行引用
结构体
结构体内可以定义自身类型的指针变量
结构体的构造函数:
不需要写返回值类型,且函数名和结构体名相同
cin与cout
char str[100];
cin.getline(str,100);
string str;
getline(cin,str);
cout<<setiosflags(ios::fixed)<<setprecision(2)<<123.4567<<endl;
//结果为123.46
尽可能使用scanf和printf
浮点数的比较
极小数取10^(-8)
注意浮点数之间的大于是上面的形式
const double Pi=acos(-1.0);
注意下面的俩点:
复杂度
当n为100000的时候O(n^2)的算法是不行的
平台可以的10^7~10 ^8
黑盒测试
可以重复处理
while(scanf("%d",&n)!=EOF){
}
注意:
读入字符串的时候的形式:
while(scanf("%s",str)!=EOF){
}
while(gets(str)!=NULL){
}