作者:jzcoijawlkmlzkm_307 | 来源:互联网 | 2024-12-13 19:45
【课程大纲】
【知识点回顾】
在本节课程中,我们将复习数组的基本概念及其在C语言中的应用,通过实例加深理解。
【经典例题解析】
例题一:
题目描述:给定一个整数数组,将数组中最大的元素与第一个元素的位置互换,最小的元素与最后一个元素的位置互换,然后输出调整后的数组。
解题思路:此题主要考察数组元素的交换操作。首先需要遍历数组找到最大值和最小值及其索引,然后进行相应的元素交换即可。
例题二:
题目描述:给定一个包含n个整数的数组,将其前n-m个元素向后移动m个位置,最后m个元素移动到数组的最前面。
解题思路:可以通过创建一个新的数组来实现元素的移动。首先将原数组的最后m个元素复制到新数组的开始位置,然后将剩余的元素依次复制到新数组中。
1 #include
2
3 int main()
4 {
5 int n = 10;
6 int m = 3;
7
8 int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
9 int b[10];
10
11 for (int i = 0; i 12 {
13 b[i] = a[n - m + i];
14 }
15
16 for (int i = m; i 17 {
18 b[i] = a[i - m];
19 }
20 // 打印a
21 for (int i = 0; i 22 {
23 printf("%d", a[i]);
24 }
25 printf("\n");
26 // 打印b
27 for (int i = 0; i 28 {
29 printf("%d", b[i]);
30 }
31
32 system("pause>nul");
33 return 0;
34 }
【例题二代码实现】执行结果如下图所示:
解题心得:处理数组时,注意索引的变化,手动模拟过程有助于理解。
例题三:
题目描述:n个人围成一圈,按顺序编号。从第一个人开始报数(1到3),凡是报到3的人离开圈子,问最后留下来的人最初是几号。
解题思路:此题属于经典的约瑟夫环问题。可以通过循环数组或链表的方式解决。每次报到3的人被移除,直到只剩下最后一个人。
1 #include
2 void main()
3 {
4 int num[50], n, *p, j, loop, i, m, k;
5 printf("请输入这一圈人的数量:\n");
6 scanf("%d", &n);
7 p = num;
8 // 给每个人编号
9 for (j = 0; j 10 {
11 *(p + j) = j + 1;
12 }
13 i = 0; // 计数器,用于移动指针
14 m = 0; // 记录已退出的人数
15 k = 0; // 报数1,2,3
16 while (m 17 {
18 if (*(p + i) != 0) // 如果当前人的编号不是0,则开始报数
19 {
20 k++;
21 }
22 if (k == 3)
23 {
24 k = 0; // 报数重置为0
25 *(p + i) = 0; // 将报数为3的人编号重置为0
26 m++; // 已退出人数加1
27 }
28 i++; // 移动指针
29 if (i == n) // 到达队尾时,指针重新指向队首
30 {
31 i = 0;
32 }
33 }
34 printf("现在剩下的人是:");
35 for (loop = 0; loop 36 {
37 if (num[loop] != 0)
38 {
39 printf("%2d号\n", num[loop]);
40 }
41 }
42}
【例题三代码实现】执行结果如下图所示:
解题心得:约瑟夫环问题可以通过多种方式解决,使用数组是一种直观的方法,但链表可能提供更高的效率。
例题四:
题目描述:编写一个函数,计算并返回一个字符串的长度。在主函数中调用该函数,并输出字符串及其长度。
解题思路:利用C语言标准库中的strlen函数可以直接获取字符串的长度。也可以自定义函数实现相同功能。
例题五:
题目描述:设计两个函数input()和output(),分别用于输入和输出5个学生的数据记录。
解题思路:可以使用结构体来存储学生信息,通过模块化设计提高代码的可读性和可维护性。
例题六:
题目描述:创建一个简单的单向链表。
解题思路:链表是一种重要的数据结构,掌握链表的创建、插入、删除等基本操作对于学习更复杂的数据结构非常有帮助。