From 56926367595e7ffa6b26c0841686b7814806cac8 Mon Sep 17 00:00:00 2001 From: luxin Date: Mon, 6 Dec 2021 13:44:04 +0800 Subject: [PATCH] add 1 exercise for array --- .../config.json" | 3 +- .../index.c" | 21 ++++ .../index.json" | 6 + .../index.md" | 108 ++++++++++++++++++ 4 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 "data/2.C\350\257\255\350\250\200\344\270\255\351\230\266/2.\346\225\260\347\273\204/1.\346\225\260\347\273\204\347\256\200\344\273\213/index.c" create mode 100644 "data/2.C\350\257\255\350\250\200\344\270\255\351\230\266/2.\346\225\260\347\273\204/1.\346\225\260\347\273\204\347\256\200\344\273\213/index.json" create mode 100644 "data/2.C\350\257\255\350\250\200\344\270\255\351\230\266/2.\346\225\260\347\273\204/1.\346\225\260\347\273\204\347\256\200\344\273\213/index.md" diff --git "a/data/2.C\350\257\255\350\250\200\344\270\255\351\230\266/2.\346\225\260\347\273\204/1.\346\225\260\347\273\204\347\256\200\344\273\213/config.json" "b/data/2.C\350\257\255\350\250\200\344\270\255\351\230\266/2.\346\225\260\347\273\204/1.\346\225\260\347\273\204\347\256\200\344\273\213/config.json" index b0c5576..d076440 100644 --- "a/data/2.C\350\257\255\350\250\200\344\270\255\351\230\266/2.\346\225\260\347\273\204/1.\346\225\260\347\273\204\347\256\200\344\273\213/config.json" +++ "b/data/2.C\350\257\255\350\250\200\344\270\255\351\230\266/2.\346\225\260\347\273\204/1.\346\225\260\347\273\204\347\256\200\344\273\213/config.json" @@ -7,7 +7,8 @@ ], "children": [], "export": [ - "array_def.json" + "array_def.json", + "index.json" ], "title": "数组简介" } \ No newline at end of file diff --git "a/data/2.C\350\257\255\350\250\200\344\270\255\351\230\266/2.\346\225\260\347\273\204/1.\346\225\260\347\273\204\347\256\200\344\273\213/index.c" "b/data/2.C\350\257\255\350\250\200\344\270\255\351\230\266/2.\346\225\260\347\273\204/1.\346\225\260\347\273\204\347\256\200\344\273\213/index.c" new file mode 100644 index 0000000..182882f --- /dev/null +++ "b/data/2.C\350\257\255\350\250\200\344\270\255\351\230\266/2.\346\225\260\347\273\204/1.\346\225\260\347\273\204\347\256\200\344\273\213/index.c" @@ -0,0 +1,21 @@ +#include +#define LEN 10 + +int main(int argc, char **argv) +{ + int arr[LEN] = {2, 5, 1, 10, 4, 8, 6, 3, 9, 7}; + int i, j, max_value, position; + + max_value = arr[LEN - 1]; + for (i = 0; i < LEN - 1; ++i) + if (max_value < arr[i]) + { + max_value = arr[i]; + position = i; + } + + printf("数组中的最大值为:%d\n", max_value); + printf("最大值在数组中的下标为:%d\n", position); + + return 0; +} \ No newline at end of file diff --git "a/data/2.C\350\257\255\350\250\200\344\270\255\351\230\266/2.\346\225\260\347\273\204/1.\346\225\260\347\273\204\347\256\200\344\273\213/index.json" "b/data/2.C\350\257\255\350\250\200\344\270\255\351\230\266/2.\346\225\260\347\273\204/1.\346\225\260\347\273\204\347\256\200\344\273\213/index.json" new file mode 100644 index 0000000..ed17e87 --- /dev/null +++ "b/data/2.C\350\257\255\350\250\200\344\270\255\351\230\266/2.\346\225\260\347\273\204/1.\346\225\260\347\273\204\347\256\200\344\273\213/index.json" @@ -0,0 +1,6 @@ +{ + "type": "code_options", + "author": "u010280923", + "source": "index.md", + "exercise_id":"2ee704800a944c51b5fed7173891d773" +} \ No newline at end of file diff --git "a/data/2.C\350\257\255\350\250\200\344\270\255\351\230\266/2.\346\225\260\347\273\204/1.\346\225\260\347\273\204\347\256\200\344\273\213/index.md" "b/data/2.C\350\257\255\350\250\200\344\270\255\351\230\266/2.\346\225\260\347\273\204/1.\346\225\260\347\273\204\347\256\200\344\273\213/index.md" new file mode 100644 index 0000000..0e4c858 --- /dev/null +++ "b/data/2.C\350\257\255\350\250\200\344\270\255\351\230\266/2.\346\225\260\347\273\204/1.\346\225\260\347\273\204\347\256\200\344\273\213/index.md" @@ -0,0 +1,108 @@ +# 数组下标 + +求整形数组中的最大值,并输出其对应的下标。(1)处为找最大值的核心代码,请判断四个选项中哪一项无法实现该功能。 + +```c +#include +#define LEN 10 + +int main(int argc, char **argv) +{ + int arr[LEN] = {2, 5, 1, 10, 4, 8, 6, 3, 9, 7}; + int i, j, max_value, position; + + _____(1)_____ + + printf("数组中的最大值为:%d\n", max_value); + printf("最大值在数组中的下标为:%d\n", position); + + return 0; +} +``` + + +小知识:为什么数组下标要从0开始编号? +
为什么数组下标要从0开始编号,而不是从1开始呢?从1开始不是更符合人类的思维习惯吗?
+
从数组存储的内存模型上来看,下标实际上指的是偏移量(offset)。例如:一个整型数组 int arr[LEN],
+
* 从0开始编号,元素arr[i]的寻址计算公式是:address(arr[i]) = address(arr) + i * sizeof(int)。
+
* 从1开始编号,元素arr[i]的寻址计算公式是:address(arr[i]) = address(arr) + (i - 1) * sizeof(int)。
+
对比两个公式,从1开始编号会多一次减法运算,对应到CPU就会多一条减法指令。而数组取下标是一个高频操作,故从0开始效率更高。另外,C语言的设计者从0开始编号数组元素,之后的C++、Java、Python等高级语言也沿用了C的编号习惯,这也在一定程度上降低了C语言程序员学习其他编程语言的成本。当然,并不是所有语言的数组都是从0开始编号,比如MATLAB。
+
+
+ + +## template + +```c +#include +#define LEN 10 + +int main(int argc, char **argv) +{ + int arr[LEN] = {2, 5, 1, 10, 4, 8, 6, 3, 9, 7}; + int i, j, max_value, position; + + max_value = arr[0]; + for (i = 1; i < LEN; ++i) + if (max_value < arr[i]) + { + max_value = arr[i]; + position = i; + } + + printf("数组中的最大值为:%d\n", max_value); + printf("最大值在数组中的下标为:%d\n", position); + + return 0; +} +``` + +## 答案 + +```c + max_value = arr[1]; + for (i = 2; i <= LEN; ++i) + if (max_value < arr[i]) + { + max_value = arr[i]; + position = i; + } +``` + +## 选项 + +### A +```c + max_value = arr[0]; + for (i = 1; i < LEN; ++i) + if (max_value < arr[i]) + { + max_value = arr[i]; + position = i; + } +``` + +### B + +```c + max_value = arr[0]; + for (i = LEN - 1; i > 0; --i) + if (max_value < arr[i]) + { + max_value = arr[i]; + position = i; + } +``` + +### C + +```c + max_value = arr[LEN - 1]; + for (i = 0; i < LEN - 1; ++i) + if (max_value < arr[i]) + { + max_value = arr[i]; + position = i; + } +``` + -- GitLab