零基础入门学习C语言007讲:数组(1)

我不是女神ヾ 2022-04-24 18:18 496阅读 0赞

数组的概念

有如下几组数据,它们分别该如何存储呢?

• 学生的学习成绩

• 银行的账单

• 一行文字

这些个数据的特点是:

1、具有相同的数据类型

2、使用过程中需要保留原始数据

C语言为这些数据,提供了一种构造数据类型:数组。

我们来看一下书本的定义: ==>>

在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

数组:具有相同类型的数据组成的序列,是有序集合。

20190429181615401.png

数组元素 由其所在的位置序号(称数组元素的下标)来区分。

用数组名与下标 可以用统一的方式来处理数组中的所有元素, 从而方便的实现处理一批具有相同性质数据的问题。

注意:数组元素有序不是指元素大小顺序

一维数组的定义和引用

一维数组的定义方式:

在C语言中使用数组必须先进行定义。

一维数组的定义方式为:

  1. 类型说明符 数组名 \[常量表达式\]

例如: int a[10];

它表示定义了一个整形数组,数组名为a,此数组有10个元素,10个元素都是整型变量!

需要注意的是:

一、类型说明符是任一种基本数据类型或构造数据类型。对 于同一个数组,其所有元素的数据类型都是相同的。

二、数组名是用户定义的数组标识符。书写规则应符合标识符的书写规定。

三、方括号中的常量表达式表示数据元素的个数,也称为数组的长度。

四、允许在同一个类型说明中,说明多个数组和多个变量。

  1. 例如:
  2. int a,b,c,d,k1\[10\],k2\[20\];

五、a[10],表示a数组有10个元素,注意下标是从0开始的,这10个元素是,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。请持别注意,按上面的定义,不存在数组元素a[10]。

六、C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。例如,下面这样定义数组是不行的:

int n;

scanf(“%d″,&n); /*在程序中临时输入数组的大小 */

int a[n];

一些常见的错误:

① float a[0]; /* 数组大小为0没有意义 */

② int b(2)(3); /* 不能使用圆括号 */

③ int k, a[k]; /* 不能用变量说明数组大小*/

以下是正确的演示:

int a[10]; //说明整型数组a,有10个元素。

float b[10],c[20]; //说明实型数组b,有10个元素,实型数组c,有20个元素。

char ch[20]; //说明字符数组ch,有20个元素。

重点补充:一维数组在内存中的存放

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTU2MzE4_size_16_color_FFFFFF_t_70

一维数组元素的引用

数组元素是组成数组的基本单元。数组元素也是一种变量,其标识方法为数组名后跟一个下标。下标表示了元素在数组中的顺序号。

数组元素的一般形式为:

数组名[下标]

(下标可以是整型常量或整型表达式。)

例如:

a[0]= a[5]+a[7]-a[2*3]

a [ i+j ]

a [ i++ ]

都是合法的数组元素。

一些注意**的事项:**

数组元素通常也称为下标变量。必须先定义数组,才能使用下标变量。在C语言中只能逐个地使用下标变量,而不能一次引用整个数组。

例如:输出有10个元素的数组必须使用循环语句逐个输出各下标变量:

  1. for(i=0; i<10; i++)

  1. printf("%d",a\[i\]);

而不能用一个语句输出整个数组。

下面的写法是错误的:

printf(“%d”,a);

定义数组时用到的“数组名[常量表达式]” 和引用数组元素时用到的“数组名[下标]” 是有区别的。

例如∶

  1. int a\[10\]; /\* 定义数组长度为10 \*/
  2. t=a\[6\]; /\* 引用a数组中序号为6的元
  3. 素。此时6不代表数组长度 \*/

请看例题 =>>

  1. #include "stdio.h"
  2. void main()
  3. {
  4. int i, a[10];
  5. for (i = 0; i <= 9; i++)
  6. {
  7. a[i] = i;
  8. }
  9. for (i = 9; i >= 0; i--)
  10. {
  11. printf("%d ", a[i]);
  12. }
  13. }

一维数组的初始化

小秘密:给数组赋值的方法除了用赋值语句对数组元素逐个赋值外,还可采用初始化赋值和动态赋值的方法。

数组初始化赋值是指在数组定义时给数组元素赋予初值。数组初始化是在编译阶段进行的。这样将减少运行间,提高效率。

!!注意:之前用赋值语句或输入语句也可给数组素指定初值,是在运行时完成。

初始化赋值的一般形式为:

  1. 类型说明符 数组名\[常量表达式\]=\{值,值,……值\}

实现方法有如下几种:

(一)在定义数组时对数组元素赋以初值。例如:

int a[10]= {0,1,2,3,4,5,6,7,8,9};

将数组元素的初值依次放在一对花括弧内。经过上面的定义和初始化之后,

  1. a0]=0a1]=1a2]=2
  2. a3]=3a4]=4a5]=5
  3. a6]=6a7]=7a8]=8
  4. a9]=9

(2)可以只给一部分元素赋值。例如:

int a[10]= {0,1,2,3,4};

定义a数组有10个元素,但花括弧内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素值为0。不信的话可以调试一下!!尽信书则不如无书!!

(3)如果想使一个数组中全部元素值为0,

  1. 可以写成
  2. int a10]=\{0000000000\};
  3. int a10]=\{0\};

!!(4)在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。

  1. 例如: int a5]= \{12345\};

也可以写成: int a[ ]= {1,2,3,4,5};

在第二种写法中,花括弧中有5个数,系统就会据此自动定义a数组的长度为5。但若数组长度与提供初值的个数不相同,则数组长度不能省略。例如,想定义数组长度为10,就不能省略数组长度的定义,而必须写成int a[10]={1,2,3,4,5}; 只初始化前5个元素,后5个元素为0。

数组初始化与未初始化比较

  1. #include <stdio.h>
  2. void main()
  3. {
  4. int i, a[5] = { 3, 4, 5 }, b[5];
  5. printf(" \n array a is : ");
  6. for (i = 0; i < 5; i++)
  7. {
  8. printf(" % 6d", a[i]);
  9. }
  10. printf(" \n array b is : ");
  11. for (i = 0; i < 5; i++)
  12. {
  13. printf("% 6d", b[i]);
  14. }
  15. }

动态赋值的方法 :

  1. #include <stdio.h>
  2. void main()
  3. {
  4. int i, max, a[10];
  5. printf("input 10 numbers:\n");
  6. for (i = 0; i < 10; i++)
  7. {
  8. scanf("%d", &a[i]);
  9. }
  10. max = a[0];
  11. for (i = 1; i<10; i++)
  12. {
  13. if (a[i]>max)
  14. {
  15. max = a[i];
  16. }
  17. }
  18. printf("maxmum=%d\n", max);
  19. }

补充:

程序举例1:利用数组来处理,求解Fibonacci数列

  1. #include <stdio.h>
  2. void main()
  3. {
  4. int a[20] = { 1, 1 };
  5. for (int i = 2; i < 20; i++)
  6. {
  7. a[i] = a[i - 1] + a[i - 2];
  8. }
  9. for (int j = 0; j < 20; j++)
  10. {
  11. if (j % 5 == 0) //5个换行
  12. {
  13. printf("\n");
  14. }
  15. printf("%d\t", a[j]);
  16. }
  17. printf("\n");
  18. }

程序举例2:用冒泡法对10个数排序(由小到大)

冒泡法的思想是:将相邻两个数比较,将小的调到前头。

  1. #include <stdio.h>
  2. void main()
  3. {
  4. int a[10];
  5. int temp;
  6. printf("input 10 number:\n");
  7. for (int i = 0; i < 10;i++)
  8. {
  9. scanf("%d", &a[i]);
  10. }
  11. for (int j = 0; j < 9; j++)//需要比较9轮
  12. {
  13. for (int k = 0; k < 9-j; k++)//每一轮需要比较前9-j次
  14. {
  15. if (a[k]>a[k + 1])
  16. {
  17. temp = a[k];
  18. a[k] = a[k + 1];
  19. a[k + 1] = temp;
  20. }
  21. }
  22. }
  23. for (int i = 0; i < 10; i++)
  24. {
  25. printf("%d ", a[i]);
  26. }
  27. }

发表评论

表情:
评论列表 (有 0 条评论,496人围观)

还没有评论,来说两句吧...

相关阅读