入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

70 对C语言数组的总结以及实例讲解

创建时间:2017-06-03 投稿人: 浏览次数:1480

C学习网:链接->C学习网

C训练网:链接->C训练网

数组(Array)是一系列相同类型的数据的集合,可以是一维的、二维的、多维的;最常用的是一维数组和二维数组,多维数组较少用到。

对数组的总结

1) 数组的定义格式为:
type arrayName[length]
type 为数据类型,arrayName 为数组名,length 为数组长度。 需要注意的是:
  • 数组长度 length 最好是整数或者常量表达式,例如 10、20*4 等,这样在所有编译器下都能运行通过;如果 length 中包含了变量,例如 n、4*m 等,在某些编译器下就会报错,我们已在《C语言变长数组》一节专门讨论了这点。
  • 数组在内存中占用一段连续的空间,数组名表示的是这段内存空间的首地址。

2) 访问数组中某个元素的格式为:
arrayName[index]
index 为数组下标。注意 index 的值必须大于等于零,并且小于数组长度,否则会发生数组越界,出现意想不到的错误,我们已在《C语言数组的静态性、越界以及溢出》一节重点讨论过。

3) 可以对数组中的单个元素赋值,也可以整体赋值,例如:
  1. // 对单个元素赋值
  2. int a[3];
  3. a[0] = 3;
  4. a[1] = 100;
  5. a[2] = 34;
  6. // 整体赋值(不指明数组长度)
  7. float b[] = { 23.3, 100.00, 10, 0.34 };
  8. // 整体赋值(指明数组长度)
  9. int m[10] = { 100, 30, 234 };
  10. // 字符数组赋值
  11. char str1[] = "http://c.biancheng.net";
  12. // 将数组所有元素都初始化为0
  13. int arr[10] = {0};
  14. char str2[20] = {0};

数组应用举例

【示例1】求一个整型数组中的最大值和最小值。
  1. #include <stdio.h>
  2. int main(){
  3. int a[10] = {0}, max, min, i;
  4. //从控制台获取用户输入并赋值给数组元素
  5. for(i=0; i<10; i++){
  6. scanf("%d", &a[i]);
  7. }
  8. //假设a[0]是最大值也是最小值
  9. max = a[0], min = a[0];
  10. for(i=1; i<10; i++){
  11. if(a[i] > max){
  12. max = a[i];
  13. }
  14. if(a[i] < min){
  15. min = a[i];
  16. }
  17. }
  18. printf("The max is %d, The min is %d ", max, min);
  19. return 0;
  20. }
运行结果:
2 123 45 100 575 240 799 710 10 90↙
The max is 799, The min is 2

这段代码有两点需要说明:
1) 从控制台获取数组元素时,我们一次性输入10个整数才按下回车键,而不是每输入一个整数就按一次回车键,这正是利用了标准输入缓冲区。

关于缓冲区的知识,我们已在《C语言缓冲区(缓存)详解》和《结合C语言缓冲区谈scanf()函数》两节进行了详细讲解。

2) 要想求得数组中的最大值和最小值,就得循环比较数组中的所有元素,并设置两个变量 max 和 min 来接收。以最大值为例,开始循环之前,先假设第0个元素是最大值(当然你也可以假设第1、2、3 个元素),然后用 max 和数组中剩余的元素进行比较,如果某个元素的值比 max 大,就用这个元素的值替换 max 的值,等把所有元素遍历完了,max 中就是最大值了。

关于排序和查找

学完了数组,有两个重要的知识点要求大家掌握,那就是排序(Sort)和查找(Search),比如:
  • 给你 10 个打乱顺序的整数,要能够按照从小到大或者从大到小的顺序输出;
  • 给定一个字符串 str1,以及一个子串 str2,要能够判断 str2 是否在 str1 中。

排序和查找的方法有很多种,我们把它们设置成了单独的一章进行讲解,请查看:C语言排序和查找

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。