A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tingyuyisheng 中级黑马   /  2015-7-22 21:10  /  481 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

学习目标
1.【掌握】数组的声明

2.【掌握】数组元素的赋值和调用

3.【掌握】数组的初始化

4.【掌握】数组的遍历

5.【掌握】数组在内存中的存储

6.【掌握】数组长度计算

7.【掌握】数组的常见应用

8.【掌握】数组作为函数的参数

一、数组的声明
作用:

可以存储指定数据类型指定个数的数据,数组与我们之前学习的变量最大的不同就是我们之前的变量只能存储一个数据,而我们的数组可以存储多个数据。

特点:

1.可以存储多个数据

2.虽然数组可以存储多个数据,但是并不是什么类型的数据都可以存储的。要求存储在数组中的数据的类型要一致,在创建数组的时候指定可以存储的多个数据的类型。

3.虽然数组可以存储多个数据,但不是任意个都能直接往里面存储的,数组之中可以存储的数据的个数是固定的,也是在创建数组的时候指定的,一旦指定,不能改变。

4.存储在数组之中的数据非常方便管理,拿到数组就可以很方便的拿到数组之中的数据

术语:

1.元素:数组中的每一个小空间,就叫做数组的元素。

2.下标/索引:数组之中有很多元素,为了区分每一个元素,C语言就为每一个元素编了一个号,这个号就叫这个元素的下标/索引。下标/索引从0开始递增。

3.长度:元素的个数。

语法:数组元素的数据类型 数组名[数组长度];


1
2
3
4
5
6
7
8
9
10
#include <stdio.h>

int main() {
   
    int arr1[5];       //可以存储5个int类型的数据
    float arr2[8];     //可以存储8个float类型的数据
    double arr3[29];   //可以存储29个double类型的数据
    char arr4[3];      //可以存储3个char类型的数据
    return 0;
}
注意:

1.声明数组的时候必须要指定数组的长度!

2.数组的长度可以为0,表示一个数据都不能存储,数组长度也可以为1,表示只能存储一个数据,但长度不能给负数和小数。

3.数组长度可以是常量,变量,宏,表达式。但是长度一旦声明,长度就不能改了。

4.当数组长度为变量的时候,是不能在声明数组的同时为数组元素初始化值的。只能先声明数组,然后再为元素赋值。

二、数组元素的赋值和调用
数组真正用来存储数据的是数组中的元素,而不是数组本身,数组指的是整个数组,所以我们不能直接为数组赋值。所以我们应该将数据赋值给数组中的元素。数组之中有多个元素,元素的本质其实就是一个普通类型的变量。那我们如何确定是为哪个元素赋值呢?

赋值语法:数组名[元素的下标] = 数据;


1
2
3
4
5
int arr[3];     //声明一个int类型的数组
arr = 10;       //错误,不能直接为数组赋值
arr[0] = 10;    //正确,为数组第一个元素赋值1
arr[0] = 11;    //正确,元素本质就是普通变量,可以重复赋值
arr[3] = 10;    //错误,元素个数是3,但下标最大才2.数组下标不能越界
调用语法:数组名[元素下标];


1
2
3
4
int arr[3];         //声明一个int类型的数组
arr[0] = 10;        //为元素赋值
int num = arr[0];   //将第一个元素的值取出赋值给int类型的变量num
int num1 = arr[3];  //下标越界,取不到想要的值
三、数组的初始化
在声明数组的同时就初始化数组之中的每一个元素的值。


1
2
3
4
5
int arr[3] = {1,2,3};       //注意不要越界
int arr1[] = {1,2,3};       //如果没有指定元素个数,初始化的时候,后面有多少个数据,C语言就自动确定数组个数
int arr2[3] = {1};          //部分初始化.将第一个元素初始化为1,其他元素初始化为0
int arr3[3] = {1,2};        //部分初始化,依次从第一个元素初始化,不够的元素初始化为0
int arr4[3] = {[1] = 100};  //指定下标初始化,其他元素初始化为0
注意:

在声明数组的时候初始化元素,如果元素个数使用变量,就不能初始化。在编译的时候,编译器是不知道数组的长度的,所以没法初始化。


1
2
3
4
5
int main(){
    int length = 4;
    int arr[length];//不初始化就不会报错
    //int arr1[length] = {1,2,3};  这样就不行,会报错
}
四、数组的遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main(){
    //声明数组并为每个元素赋值
    int arr[3];
    arr[0] = 1;
    arr[1] = 2;
    arr[2] = 3;
   
    //将每一个元素的下标遍历出来,当做数组的下标就能遍历数组了
    //下标 == 数组长度-1
    for(int i = 0;i < 3;i++){
        printf("%d\n",arr[i]);
    }
    return 0;
}
五、数组在内存中的存储
111111111111111

数组其实就是由指定个数的连续的变量组合成的,存储方式和普通变量存储方式相同,把每一个元素当做一个普通变量。分配内存空间的时候,只是分配多个连续空间分别存储每个元素,而且也是从高地址向低地址连续分配的。每个元素的地址,就是他占用字节的最低字节的地址。


1
2
3
4
int arr[3];
arr[0];//低地址,数组的地址就是第一个元素的地址
arr[1];
arr[2];//高地址
数组的地址:数组之中第1个元素的地址,就是数组的地址。也就是下标为0的元素的地址。

六、数组长度计算
sizeof(数组名)计算出这个数组在内存中占用的总字节数。

sizeof(数据类型)计算出每个元素在内存中占用的字节数。

元素个数 = sizeof(数组名)/sizeof(数据类型);


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main(){
    int scores[5] = {0};
    int length = sizeof(scores) / sizeof(int);//元素个数 = 数组总字节 / 每个元素字节;
   
    //讲用户输入数据存储到数组
    for (int i = 0; i < length; i++) {
        printf("请输入第%d个同学的年龄:",i+1);
        scanf("%d",&scores[i]);
    }
   
    //遍历打印出数组
    for (int i = 0; i < length; i++) {
        printf("scores[%d] = %d\n",i,scores[i]);
    }
   
    return 0;
}
七、数组的常见应用
1.求最大值


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>

int main(){
    //随便整一个int类型的数组
    int scores[] = {232,545,23,325,4,657,684,5322,64765,8799,45453,34232,345};
   
    //计算数组长度
    int length = sizeof(scores)/sizeof(int);
   
    //假设第一个元素为最大值
    int max = scores[0];
   
    for (int i = 1; i < length; i++) {
        //将max和每个元素相比,大的就赋值给max
        if (max < scores[i]) {
            max = scores[i];
        }
    }
    printf("max = %d\n",max);
   
    return 0;
}
2.求最小值


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>

int main(){
    //随便整一个int类型的数组
    int scores[] = {232,545,23,325,4,657,684,5322,64765,8799,45453,34232,345};
   
    //计算数组长度
    int length = sizeof(scores)/sizeof(int);
   
    //假设第一个元素为最小值
    int min = scores[0];
   
    for (int i = 1; i < length; i++) {
        //将max和每个元素相比,小的就赋值给max
        if (min > scores[i]) {
            min = scores[i];
        }
    }
    printf("min = %d\n",min);
   
    return 0;
}
3.求累加和


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main(){
    //随便整一个int类型的数组
    int scores[] = {232,545,23,325,4,657,684,5322,64765,8799,45453,34232,345};
   
    //计算数组长度
    int length = sizeof(scores)/sizeof(int);
   
    //sum存储累加和
    int sum = 0;
   
    for (int i = 0; i < length; i++) {
        sum += scores[i];
    }
    printf("sum = %d\n",sum);
   
    return 0;
}
4.求平均值


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>

int main(){
    //随便整一个int类型的数组
    int scores[] = {232,545,23,325,4,657,684,5322,64765,8799,45453,34232,345};
   
    //计算数组长度
    int length = sizeof(scores)/sizeof(int);
   
    //sum存储累加和
    int sum = 0;
   
    //平均值
    float avg = 0;
   
    for (int i = 0; i < length; i++) {
        sum += scores[i];
    }
    avg = (float)sum / length;
    printf("avg = %.2f\n",avg);
   
    return 0;
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马