C语言自学完备手册(14)——数组

自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理


探索Android软键盘的疑难杂症
深入探讨Android异步精髓Handler
详解Android主流框架不可或缺的基石
站在源码的肩膀上全解Scroller工作机制


Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南


版权声明


数组

数组是相同类型数据的集合。换言之,只有类型相同的数据才可以放到同一个数组中。

数组的声明

数组的声明需要指定:元素类型、变量名、元素个数;例如:
int a [5];
在此声明一个int类型的数组a,数组长度为5。

请看如下示例:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a [5];
    a[0]=1;
    a[1]=2;
    a[2]=3;
    a[3]=4;
    a[4]=5;
    int length=sizeof(a)/sizeof(a[0]);
    printf("数组长度为%d\n",length);
    puts("遍历数组");
    for(int i=0;i<5;i++){
        printf("a[%d]=%d\n",i,a[i]);
    }

}

运行结果:

数组长度为5
遍历数组
a[0]=1
a[1]=2
a[2]=3
a[3]=4
a[4]=5

Process returned 0 (0x0)   execution time : 0.472 s
Press any key to continue.

在该示例中声明一个变量,然后为数组中每个元素赋值;最后再对数组进行遍历。有个小东西需要注意一下:在Java里面求数组的长度直接a.length就可以了。但是,在C里面是不一样的,在此采用的是sizeof(a)/sizeof(a[0])的方式。

刚才的示例中是先声明数组,后初始化数组。其实,也可以声明的同时对其进行初始化。例如:
int a[5]={1,2,3,4,5};
也可以在声明的时候不指明元素个数,例如:
int a[ ]={1,2,3,4,5};
也可以只对部分元素进行初始化,例如:
int a[5]={1,2,};等价于int a[5]={1,2,0,0,0};
但是要注意:不能通过赋值语句对数组进行初始化,例如:
int a[5];
a={1,2,3,4,5};
而且C语言中不支持使用=为数组赋值,例如:
int a[5]={1,2,3,4,5};
int b[5];
b=a;

数组的练习

1 数组的复制

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[5]={1,2,3,4,5};
    int b[5];
    int i;
    int length=sizeof(a)/sizeof(a[0]);
    for(i=0;i<length;i++){
        b[i]=a[i];
    }
    for(i=0;i<length;i++){
        printf("b[%d]=%d\n",i,b[i]);
    }
    return 0;
}

2 接收键盘的输入为数组元素赋值

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    int a[5];
    for(i=0;i<5;i++){
        printf("a[%d]:",i);
        scanf("%d",&a[i]);
    }
    puts("遍历数组:");
    for(i=0;i<5;i++){
        printf("a[%d]=%d\n",i,a[i]);
    }
    return 0;
}

3 数组的逆置

#include <stdio.h>
#include <stdlib.h>

//逆置数组
int main()
{
    int a[]={1,3,5,7,9,11};
    int i;
    int length=sizeof(a)/sizeof(a[0]);
    for(i=0;i<length/2;i++){
        int temp=0;
        temp=a[i];
        a[i]=a[length-1-i];
        a[length-1-i]=temp;
    }
    puts("遍历数组:");
    for(i=0;i<length;i++){
        printf("a[%d]=%d\n",i,a[i]);
    }
    return 0;
}

4 获取数组的最大值与最小值

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[]={8,3,5,7,9,11};
    int i;
    int max=a[0];
    int min=a[0];
    int length=sizeof(a)/sizeof(a[0]);
    for(i=0;i<length;i++){
        if(a[i]>max){
            max=a[i];
        }
        if(a[i]<min){
            min=a[i];
        }
    }
    printf("数组中最大值为:%d\n",max);
    printf("数组中最小值为:%d\n",min);
    return 0;
}

二维数组

所谓二维数组就是多个一维数组集合在一起形成的数组,即二维数组的每个元素是一个一维数组。例如: int a[4][3]表示该二维数组有4个元素,每个元素是一个一维数组并且该一维数组中有3个元素。

关于二维数组的遍历,请看如下示例:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    int j;
    int a[4][3]={{1,2,3},{4,5,6},{7,8,9},{0,5,8}};
    for(i=0;i<4;i++){
        for(j=0;j<3;j++){
            int temp=a[i][j];
            printf("a[%d][%d]=%d\n",i,j,temp);
        }
    }

    return 0;
}

二维数组练习题

4个学生参加3门课的期末考试,请求出每门课程的平均成绩

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    int j;
    int a[4][3]={{71,82,93},{64,75,76},{77,78,89},{70,65,78}};
    int chineseSum=0;
    int mathSum=0;
    int englishSum=0;
    for(i=0; i<4; i++)
    {
        for(j=0; j<3; j++)
        {
            if(j==0)
            {
                chineseSum+=a[i][j];
            }
            if(j==1)
            {
                mathSum+=a[i][j];
            }
            if(j==2)
            {
                englishSum+=a[i][j];
            }
        }
    }

    printf("语文平均成绩%d\n",chineseSum/4);
    printf("数学平均成绩%d\n",mathSum/4);
    printf("英语平均成绩%d\n",englishSum/4);

    return 0;
}

猜你喜欢

转载自blog.csdn.net/lfdfhl/article/details/81036210