嵌入式软件--C语言高级 DAY 7数组

一、概念

数组 array:是多个相同类型数据按一定顺序排列的集合,并使用一个标识符命名。并通过编号(索引,亦称为下标或角标)的方式对这些数据进行统一管理。

数组的长度 = 元素的个数

标号角标是从0开始。

二、define_array.c

定义数组的三种形式:

1.定义数组,可以先确定数组的元素个数、类型,再进行赋值。

int(数组内元素类型) arr(数组名字)  [3](元素个数)

int arr[ 3 ];

int arr[0]=100;

int arr[1]=200;

int arr[2]=300;

通过编号访问赋值。

2.直接赋值。

double arr1[5]={1.1,2.2,3.3,4.4,5.5}

3.与第二种相似,但不指定数组的元素长度。

float arr2[ ]={   },元素个数上不封顶

三、访问数组的元素

(1)通过角标进行访问

printf("数组的第0号元素:%d\n",arr[0]);

代码示例:

#include <stdio.h>

int main()
{
    int arr[5]={10,20,30,40,50};
    printf("第一号元素是%d",arr[1]);
    return 0;
}

(2)数组内对应元素数值进行修改

代码示例:

#include <stdio.h>

int main()
{
    int arr[5]={10,20,30,40,50};
    printf("第一号元素是%d\n",arr[1]);
    arr[1]=999;
    printf("第一号元素是%d",arr[1]);
    return 0;
}

四、越界操作不允许

数组下标必须在指定范围内使用,超出范围视为越界。

代码示例:

#include <stdio.h>
int main()
{
    int arr[5]={10,20,30,40,50};
    printf("第6号元素是%d",arr[5]);
    return 0;
}

显而易见,越界操作系统会给垃圾值,一定不允许!!!

五、计算数组长度

重申知识点:数组长度也就是数组内元素的个数。

数组内的元素都是同一类型,因此用sizeof( )寻求数组的字节长度,再除以类型字节长度,可得元素个数。

#include <stdio.h>
int main()
{
    int arr[5]={10,20,30,40,50};
    int length=sizeof arr/(sizeof arr[0]);//用整个数组的字节长度除以单个元素的字节长度
//sizeof(arr)/sizeof(int)
    printf("%d",length);// printf("%zu",sizeof(arr)/sizeof(int))
    return 0;
}

六、遍历数组

遍历数组是指按顺序访问数组中的每个元素,以便读取或修改它们,编程中一般使用循环结构对数组进行遍历。

案例:循环遍历数组[0--5]

#include <stdio.h>
int main()
{
    //定义数组
    int arr[5]={10,20,30,40,50};
    //算出长度
    int length=sizeof(arr)/(sizeof(int));//用整个数组的字节长度除以单个元素的字节长度
    for(int a=0;a<=length-1;a++)
    {
        printf("%d\n",arr[a]);
    }
    return 0;
}

七、计算数组中所有元素的和以及平均数

//计算数组中所有元素的和以及平均数
#include <stdio.h>
int main()
{
    //定义数组
    int arr[5]={10,20,30,40,50};
    double sum=0;
    //算出长度
    int length=sizeof(arr)/(sizeof(int));//用整个数组的字节长度除以单个元素的字节长度
    for(int a=0;a<=length-1;a++)
    {
    
        sum=sum+arr[a];
    }
    printf("和为%.2f\n",sum);
    printf("平均数为%.2f",sum/length);
}

八、取出数组中最大/最小元素


#include <stdio.h>

int main()
{
    int arr[]={10,20,30,40,50,-21,1234,89,1};
    int max;//定义最大值
    int min;//定义最小值
    int len=sizeof(arr)/sizeof(int);
    for(int a=0;a<=len-1;a++)
    {
        if(max<arr[a])//遇到大的值便抢过来为自己赋值
        {
          max=arr[a];
        }
    }
    for(int a=0;a<=len-1;a++)
    {
        if(min>arr[a])
        {
          min=arr[a];//遇到小的值便抢过来为自己赋值
        }
    }
    printf("最大为:%d  最小为:%d",max,min);
    return 0;
}

九、字符数组(字符串)

1.介绍

用来存放字符的数组称为字符数组,也可以称为字符串。字符串的输入输出格式占位符是%s

字符串结尾,会自动添加一个 \0 作为字符串结束的标志,所以字符数组最后一个元素必须是 \0

\0 是ASCII码表中的第0个字符,用NUL表示,称为空字符,该字符既不能显示,也不是控制字符,输出该字符不会有任何效果,它在C语言中仅作为字符串的结束标志。

2.定义

(1)char str[12]={'H','e','l','l','o',',','w','o','r','l','d','!','\0'}

(2)char str1[4]={'a','b','c'};这种方式会在最后自动添置上\0。

(3) char str2[4]={'J','a','c','k'};没有结束标志\0,就会找最近的\0。

字符串的简写方式:

char str[12]={"hello,world!"}  不常用!

char str[ ]="hello,kity!"; 常用!

3.遍历

#include <stdio.h>

int main()
{
    char str[]="hello!";
    int len=sizeof(str)/sizeof(char);//字符串数组长度
    for(int a=0;a<=len-1;a++)
    {
        printf("%c\n",str[a]);
    }
    return 0;
}

4.课后练习

(1)从终端循环输入5个成绩,保存到double数组,并输出。

#include <stdio.h>
int main()
{
    double arr[5];
    for(int a=0;a<5;a++)
    {
       scanf("%lf",&arr[a]);//循环输入

    }
    for(int b=0;b<5;b++)
    {
        printf("%lf\n",arr[b]);//循环输出
    }
    
   
    return 0;
}

(2)一个养鸡场有6只鸡,它们的体重分别是3kg,5kg,1kg,3.4kg,2kg,50kg。请问这六只鸡的总体重是多少?平均体重是多少?

//一个养鸡场有6只鸡,它们的体重分别是3kg,5kg,1kg,3.4kg,2kg,50kg。请问这六只鸡的总体重是多少?平均体重是多少?
#include <stdio.h>
int main()
{
    //定义鸡体重的数组
    double arr[6]={3,5,1,3.4,2,50};
    //定义总体重和平均值
    double sum=0;
    for(int a=0;a<=5;a++)
    {
        sum=sum+arr[a];
    }
    printf("总体重:%f\n",sum);
    printf("平均体重:%f",sum/6);

    return 0;
}

(3)创建一个char类型的26个元素的数组,分别放置'A'-'Z‘。使用for循环访问所有元素并打印出来。

//创建一个char类型的26个元素的数组,分别放置'A'-'Z‘。使用for循环访问所有元素并打印出来。
#include <stdio.h>
int main()
{
    //定义
    char arr[26];
    for(int a=0;a<=25;a++)
    {
        arr[a]='A'+a;
        printf("%c\n",arr[a]);
    }

    return 0;
}

(4)请求出一个数组的最小值,并得到对应的索引。

//请求出一个数组的最小值,并得到对应的索引。
#include <stdio.h>
int main()
{
    double arr[]={};
    double min;
    int len=sizeof(arr)/sizeof(double);
    for(int a=0;a<=len-1;a++)
    {
        if(min>arr[a])
        {
            min=arr[a];
        }
    }
    printf("%f\n",min);
    for(int b=0;b<=len-1;b++)
    {
        if(min==arr[b])
        {
            printf("%d",b);
        }
    }

    return 0;
}
//请求出一个数组的最小值,并得到对应的索引。
#include <stdio.h>
int main()
{
    int arr[7]={90,30,20,40,50,60,100};
    int min=arr[0];
    int min1=0;
    int len=sizeof(arr)/sizeof(int);
    for(int a=0;a<len;a++)
    {
        if(min>arr[a])
        {

            min=arr[a];
            min1=a;
        }
    }
    printf("%d\n",min);
    printf("%d\n",min1);

    return 0;
}

十、多维数组

1.二维数组

2.二维数组的定义方式

(1)先定义行数、列数,再进行赋值

int arr[3][4];//定义

arr[0][1]=100;

``````//赋值

(2)先定义行列,同时赋值

int arr1[3][4]={ {10,20,30,40},{50,60,70,80},{90,100,110,120} };

(3)编译器自动给出行与列

int arr2[3][4]={ 10,20,30,40,50,60,70,80,90,100,110,120 };

(4)能在整除的情况下省略行

int arr3[ ][4]={10,20,30,40,50,60,70,80,90,100,110,120};

3.二维数组的访问与遍历

使用两个下标。

#include <stdio.h>

int main()
{
    int arr[2][3]={1,2,3,4,5,6};
    printf("%d",arr[0][2]);
    return 0;
}

遍历:

外层遍历行数,内层遍历列数。

二维数组的行占字长,row=sizeof(arr)/sizeof(arr[0])

列占字长,col=sizeof(arr[0])/sizeof(int)

#include <stdio.h>

int main()
{
    int arr[2][3]={1,2,3,4,5,6};
    //二维数组的长度
    int row=sizeof(arr)/sizeof(arr[0]);
    int col=sizeof(arr[0])/sizeof(int);
    for(int i=0;i<row;i++)
    {
        for(int j=0;j<col;j++)
        {
            printf("第%d行,第%d列的%d\n",i+1,j+1,arr[i][j]);
        }
    }
   
    return 0;
}

4.二维数组的内存分析

用矩阵形式(如3行4列形式)表示二维数组,是逻辑上的概念,能形象地表示出行列关系。而在内存中,各元素是连续存放的,不是二维的,是线性的。

C语言中,二维数组中元素排列的顺序是按行存放的。即:先顺序存放第一行的元素,再存放第二行的元素。

比如,举例,数组a[3][4] 在内存中的存放:

5.二维数组应用案例

现在有三个班,每个班五名同学,用二维数组保存他们的成绩,并求出每个班级平均分、以及所有班级平均分,数据要求从控制台输入。

思路分析:(1)三个班五名同学,要求用二位数组保存他们的成绩。可以说明有15组成绩,三行五列的数组。定义为arr[3][5]。

(2)可设成绩:arr[3][5]={ {67,78,87,89,98},{67,78,68,89,59},{34,45,67,89,99} }

(3)要求计算每个班级的平均分、以及所有班级的平均分。

//arr[3][5]={ {67,78,87,89,98},{67,78,68,89,59},{34,45,67,89,99} }
#include <stdio.h>
int main()
{
    double arr[3][5];
    double sum=0;
    double sum1=0;//班级平均分的和
    for(int a=0;a<3;a++)
    {
        for(int b=0;b<5;b++)
        {
            printf("请输入成绩:");
            scanf("%lf",&arr[a][b]);
            sum+=arr[a][b];
        }
         printf("第%d个班级的平均分是%lf\n",a+1,sum/5);
         sum1+=sum/5;
    }
   printf("所有班级的平均分是%lf\n",sum1/3);
    return 0;
}

十一、今日测试

1.输出结果。

输出:7

2.如何计算数组的长度

数组的字节长度/元素字节长度

3.字符数组的最后一个元素

\0

4.算出程序结果

break终止就近的循环语句,外层继续进行。

结果:1 1

           2 1

           3 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值