一.基础语法
(一)常用语法
1.memset:对数组中每一个元素赋相同值
用法:
(1)头文件:#include<string.h>
(2)赋值0:memset(a,0,sizeof(a))
赋值-1:memset(a,-1,sizeof(a))
(3)注意点:memset初学者只建议赋值0,-1
(4)对数组赋值其他数字:fill函数
2.字符数组的输入输出
用法:
(1)字符数组输入输出:
①单个字符输入,能够识别空格与回车:%c
for(int i = 0; i < str.length;i++) {
printf("%c",str[i]);
}
②输入一个字符串,不能识别空格与换行:%s
char str[10];
scanf("%s",str);
printf("%s",str);
③getchar输入,putchar输出:仅限单个字符
1)getchar:可识别换行符空格
// 普通字符输入
char c1 = getchar();
// 二维数组输入
char str[10][10];
for(int i = 0; i < 10; i++) {
for(int j = 0; j < 10; j++) {
str[i][j] = getchar();
}
}
2)putchar:可识别换行符空格
// 普通字符输入
putchar(c1);
// 二维数组输入
char str[10][10];
for(int i = 0; i < 10; i++) {
for(int j = 0; j < 10; j++) {
putchar(str[i][j]);
}
putchar("\n");
}
④gets输入,puts输出
1)gets输入一行字符串,识别\n结束
// 一维数组
char str1[20];
gets(str1);
puts(str1);
// 二维数组
char str2[20][20];
for(int i = 0; i < 3; i++) {
gets(str2[i]);
}
for(int i = 0; i < 3; i++) {
puts(str2[i]);
}
3.sscanf+sprintf(在stdio.h头文件下)
(1)sscanf:string+scanf
// 把str中内容以"%d"格式传输到n中(从左至右)
char str[100];
sscanf(str,"%d",&n);
printf("%d",n);
(2)sprintf:string+printf
// 把n以"%d"格式传输到str中(从右至左)
char str[100];
sprintf(str,"%d",n);
printf("%s",str);
(二)常用方法
1.冒泡排序
int temp = a;
a = b;
b = temp;
(三)常用函数
1.以数组作为函数参数
(1)参数中一维数组不需要填参数,二维数组第一位不需要填参数
2.指针与数组
(1)交换函数
void swap(int* a,int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int a = 1,b = 2;
int *p1 = &a,*p2 = &b;
swap(p1,p2);
printf("%d%d",*p1,*p2);
}
3.引用
(1)交换函数
void swap(int* &a,int* &b) {
int* temp = a;
a = b;
b = temp;
}
int main() {
int a = 1,b = 2;
int *p1 = &a,*p2 = &b;
swap(p1,p2);
printf("%d%d",*p1,*p2);
4.结构体
(1)应用场景
①将若干个不同的数据类型的变量或数组封装在一起,存储自定义结构
(2)定义
①例子:

②注意点:

(3)访问方法
// 定义
struct stuInfo {
int id;
char name[20];
stuInfo* next;
}stu,*p;
// 访问方法
// 访问stu中变量写法
stu.id
stu.name
stu.next
// 访问*p中元素写法一
(*p).id
(*p).name
(*p).next
// 访问*p中元素写法二
p->id
p->name
p->next
(4)结构体初始化
①构造函数:不需写返回类型,且函数名与结构体名相同

(四)补充内容
(1)浮点数比较
①等于运算符
1)定义eps=1e-8 定义方式 :
const double eps = 1e-8
#define Equ(a,b) ((fabs(a)-(b)))<(eps))
2)案例:

②大于/小于运算符
1)定义:
// 大于运算符
const double eps = 1e-8
#define More(a,b) ((a)-(b))>(eps))
// 大于等于运算符
const double eps = 1e-8
#define MoreEqu(a,b) ((a)-(b)>(-eps))
//小于运算符
const double eps = 1e-8
#define Less((a,b) ((a)-(b)<(-eps))
// 小于等于运算符
const double eps = 1e-8
#define Less((a,b) ((a)-(b)<(eps))
③圆周率
const double Pi=acos(-1.0);
(2)复杂度
①时间复杂度
②空间复杂度
(3)黑盒测试
①定义:

②单点测试

③多点测试
(1)区别:相较单点测试,必须结果全部正确。
(2)三种输入方式
①while...EOF
1)使用情况:当题目没有说明有多少数据需要读入时。利用scanf返回值是否为EOF判断是否结束
while (scanf("%d,&n") != EOF) {
...
}
控制台内手动输入Ctrl+z后在Enter后结束while循环

②while...break
1)使用情况:当输入的n个数据数据为n个0表示输入结束
(a)while...EOF内部判断+while...break

(b)退出条件判断放到while循环中
int a,b;
while(scanf("%d%d",&a,&b), a || b) {
printf("%d\n",a+b);
}
③while(T--)
1)使用情况:题目给出测试数据组数,再给出相应数量组数输入数据,用变量T存储组数
int T,a,b;
scanf("%d",&T);
while(T--) {
scanf("%d%d",&a,&b);
printf("%d\n",a+b);
}
(3)三种常见输出类型

