Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a049858

Browse files
authored
Add files via upload
1 parent 1c6c83b commit a049858

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+4591
-0
lines changed

notes/进阶/1.计数排序.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
## 计数排序(Counting Sort)
2+
3+
- 计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在`对一定范围内的整数排序`时,快于任何比较排序算法。
4+
- 排序思路:
5+
6+
+ 1.找出待排序数组最大值
7+
+ 2.定义一个索引最大值为待排序数组最大值的数组
8+
+ 3.遍历待排序数组, 将待排序数组遍历到的值作新数组索引
9+
+ 4.在新数组对应索引存储值原有基础上+1
10+
![](https://img-blog.csdnimg.cn/img_convert/eaed8e0890b2a50353ec24850941e789.png)
11+
12+
13+
- 简单代码实现:
14+
15+
```c
16+
int main()
17+
{
18+
// 待排序数组
19+
int nums[5] = {3, 1, 2, 0, 3};
20+
// 用于排序数组
21+
int newNums[4] = {0};
22+
// 计算待排序数组长度
23+
int len = sizeof(nums) / sizeof(nums[0]);
24+
// 遍历待排序数组
25+
for(int i = 0; i < len; i++){
26+
// 取出待排序数组当前值
27+
int index = nums[i];
28+
// 将待排序数组当前值作为排序数组索引
29+
// 将用于排序数组对应索引原有值+1
30+
newNums[index] = newNums[index] +1;
31+
}
32+
33+
// 计算待排序数组长度
34+
int len2 = sizeof(newNums) / sizeof(newNums[0]);
35+
// 输出排序数组索引, 就是排序之后结果
36+
for(int i = 0; i < len2; i++){
37+
for(int j = 0; j < newNums[i]; j++){
38+
printf("%i\n", i);
39+
}
40+
}
41+
/*
42+
// 计算待排序数组长度
43+
int len2 = sizeof(newNums) / sizeof(newNums[0]);
44+
// 还原排序结果到待排序数组
45+
for(int i = 0; i < len2; i++){
46+
int index = 0;
47+
for(int i = 0; i < len; i++){
48+
for(int j = 0; j < newNums[i]; j++){
49+
nums[index++] = i;
50+
}
51+
}
52+
}
53+
*/
54+
return 0;
55+
}
56+
```
57+
58+
##
59+
60+
最后,如果有任何疑问,请加微信 **leader_fengy** 拉你进学习交流群。
61+
62+
开源不易,码字不易,如果觉得有价值,欢迎分享支持。
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
## 二维数组与函数
2+
3+
- 值传递
4+
5+
```c
6+
#include <stdio.h>
7+
8+
// 和一位数组一样, 只看形参是基本类型还是数组类型
9+
// 如果是基本类型在函数中修改形参不会影响实参
10+
void change(char ch){
11+
ch = 'n';
12+
}
13+
int main()
14+
{
15+
char cs[2][3] = {
16+
{'a', 'b', 'c'},
17+
{'d', 'e', 'f'}
18+
};
19+
printf("cs[0][0] = %c\n", cs[0][0]); // a
20+
change(cs[0][0]);
21+
printf("cs[0][0] = %c\n", cs[0][0]); // a
22+
return 0;
23+
}
24+
```
25+
26+
- 地址传递
27+
28+
```c
29+
#include <stdio.h>
30+
31+
// 和一位数组一样, 只看形参是基本类型还是数组类型
32+
// 如果是数组类型在函数中修改形参会影响实参
33+
void change(char ch[]){
34+
ch[0] = 'n';
35+
}
36+
int main()
37+
{
38+
char cs[2][3] = {
39+
{'a', 'b', 'c'},
40+
{'d', 'e', 'f'}
41+
};
42+
printf("cs[0][0] = %c\n", cs[0][0]); // a
43+
change(cs[0]);
44+
printf("cs[0][0] = %c\n", cs[0][0]); // n
45+
return 0;
46+
}
47+
```
48+
49+
```c
50+
#include <stdio.h>
51+
52+
// 和一位数组一样, 只看形参是基本类型还是数组类型
53+
// 如果是数组类型在函数中修改形参会影响实参
54+
void change(char ch[][3]){
55+
ch[0][0] = 'n';
56+
}
57+
int main()
58+
{
59+
char cs[2][3] = {
60+
{'a', 'b', 'c'},
61+
{'d', 'e', 'f'}
62+
};
63+
printf("cs[0][0] = %c\n", cs[0][0]); // a
64+
change(cs);
65+
printf("cs[0][0] = %c\n", cs[0][0]); // n
66+
return 0;
67+
}
68+
```
69+
70+
- 形参错误写法
71+
72+
```c
73+
void test(char cs[2][]) // 错误写法
74+
{
75+
printf("我被执行了\n");
76+
}
77+
78+
void test(char cs[2][3]) // 正确写法
79+
{
80+
printf("我被执行了\n");
81+
}
82+
83+
void test(char cs[][3]) // 正确写法
84+
{
85+
printf("我被执行了\n");
86+
}
87+
```
88+
89+
- 二维数组作为函数参数,在被调函数中不能获得其有多少行,需要通过参数传入
90+
91+
```c
92+
void test(char cs[2][3])
93+
{
94+
int row = sizeof(cs); // 输出4或8
95+
printf("row = %zu\n", row);
96+
}
97+
```
98+
99+
- 二维数组作为函数参数,在被调函数中可以计算出二维数组有多少列
100+
101+
```c
102+
void test(char cs[2][3])
103+
{
104+
size_t col = sizeof(cs[0]); // 输出3
105+
printf("col = %zd\n", col);
106+
}
107+
```
108+
109+
##
110+
111+
最后,如果有任何疑问,请加微信 **leader_fengy** 拉你进学习交流群。
112+
113+
开源不易,码字不易,如果觉得有价值,欢迎分享支持。

notes/进阶/11.二维数组练习.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
## 作业
2+
3+
- 玩家通过键盘录入 w,s,a,d控制小人向不同方向移动,其中w代表向上移动,s代表向 下移动,a代表向左移动,d 代表向右移动,当小人移动到出口位置,玩家胜利
4+
5+
- 思路:
6+
- 1.定义二维数组存放地图
7+
8+
```c
9+
######
10+
#O #
11+
# ## #
12+
# # #
13+
## #
14+
######
15+
```
16+
17+
- 2.规定地图的方向
18+
![](https://img-blog.csdnimg.cn/img_convert/7331a7700b09543cef73fa0bbddc3c16.png)
19+
- 3.编写程序控制方向
20+
21+
+ 当输入w或者W, 小人向上移动. x-1
22+
+ 当输入s 或者S, 小人向下. x+1
23+
+ 当输入a或者A, 小人向左. y-1
24+
+ 当输入d或者D, 小人向右. y+1
25+
26+
- 4.移动小人
27+
28+
+ 用变量记录小人当前的位置
29+
+ 1)如果小人将要移动的位置是墙,则无法移动
30+
+ 2)如果小人将要移动的位置是路,则可以移动
31+
32+
- 5.判断是否走出迷宫
33+
34+
##
35+
36+
最后,如果有任何疑问,请加微信 **leader_fengy** 拉你进学习交流群。
37+
38+
开源不易,码字不易,如果觉得有价值,欢迎分享支持。
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
## 字符串的基本概念
2+
3+
- 字符串是位于双引号中的字符序列
4+
5+
+ 在内存中以“\0”结束,所占字节比实际多一个
6+
![](https://img-blog.csdnimg.cn/img_convert/e0f0831ff1b110569a7e34440ab62e9e.png)
7+
8+
## 字符串的初始化
9+
10+
- 在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。
11+
- 当把一个字符串存入一个数组时,会把结束符‘\0’存入数组,并以此作为该字符串是否结束的标志。
12+
- 有了‘\0’标志后,就不必再用字符数组 的长度来判断字符串的长度了
13+
- 初始化
14+
15+
```c
16+
char name[9] = "lnj"; //在内存中以“\0”结束, \0ASCII码值是0
17+
char name1[9] = {'l','n','j','\0'};
18+
char name2[9] = {'l','n','j',0};
19+
// 当数组元素个数大于存储字符内容时, 未被初始化的部分默认值是0, 所以下面也可以看做是一个字符串
20+
char name3[9] = {'l','n','j'};
21+
```
22+
23+
- 错误的初始化方式
24+
25+
```c
26+
//省略元素个数时, 不能省略末尾的\n
27+
// 不正确地写法,结尾没有\0 ,只是普通的字符数组
28+
char name4[] = {'l','n','j'};
29+
30+
// "中间不能包含\0", 因为\0是字符串的结束标志
31+
// \0的作用:字符串结束的标志
32+
char name[] = "c\0ool";
33+
printf("name = %s\n",name);
34+
输出结果: c
35+
```
36+
37+
---
38+
39+
## 字符串输出
40+
41+
- 如果字符数组中存储的是一个字符串, 那么字符数组的输入输出将变得简单方便。
42+
43+
+ 不必使用循环语句逐个地输入输出每个字符
44+
+ 可以使用printf函数和scanf函数一次性输出输入一个字符数组中的字符串
45+
46+
- 使用的格式字符串为“%s”,表示输入、输出的是一个字符串 字符串的输出
47+
48+
---
49+
50+
- **输出**
51+
52+
+ %s的本质就是根据传入的name的地址逐个去取数组中的元素然后输出,直到遇到\0位置
53+
54+
```c
55+
char chs[] = "lnj";
56+
printf("%s\n", chs);
57+
```
58+
59+
- 注意点:
60+
61+
+ \0引发的脏读问题
62+
63+
```c
64+
char name[] = {'c', 'o', 'o', 'l' , '\0'};
65+
char name2[] = {'l', 'n', 'j'};
66+
printf("name2 = %s\n", name2); // 输出结果: lnjcool
67+
```
68+
69+
---
70+
71+
- **输入**
72+
73+
```c
74+
char ch[10];
75+
scanf("%s",ch);
76+
```
77+
78+
- 注意点:
79+
80+
+ 对一个字符串数组, 如果不做初始化赋值, 必须指定数组长度
81+
+ ch最多存放由9个字符构成的字符串,其中最后一个字符的位置要留给字符串的结尾标示‘\0’
82+
+ 当用scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的结束符
83+
84+
最后,如果有任何疑问,请加微信 **leader_fengy** 拉你进学习交流群。
85+
86+
开源不易,码字不易,如果觉得有价值,欢迎分享支持。

0 commit comments

Comments
 (0)