首页 > 其他分享 >嵌入式软件--C语言高级 DAY 7数组

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

时间:2024-08-02 20:57:02浏览次数:10  
标签:arr -- 元素 C语言 int 嵌入式软件 数组 sizeof include

一、概念

数组 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

标签:arr,--,元素,C语言,int,嵌入式软件,数组,sizeof,include
From: https://blog.csdn.net/zx18831955136/article/details/140831124

相关文章

  • 函数指针和指针函数的使用
    指针函数1:本质函数,返回值为指针1.2:格式:数据数据*函数名(形参){函数体return地址;//失败一般会返回NULL}#include<stdio.h>#include<stdlib.h>char*yue(){//chara[32]="hello";//栈区,函数调用结束后空间被释放//char*s="hello";//常量区,不会被释......
  • github是什么?
    gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git作为唯一的版本库格式进行托管,故名gitHub。作为开源代码库以及版本控制系统,Github拥有超过900万开发者用户。随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法。如......
  • 基于STM32的智能交通监控系统教程
    目录引言环境准备智能交通监控系统基础代码实现:实现智能交通监控系统车辆检测模块交通流量分析模块通信与网络系统实现用户界面与数据可视化应用场景:交通管理与优化常见问题与解决方案收尾与总结引言随着城市化进程的加快,交通拥堵问题日益严重。智能交通监控系统通过实......
  • driver. findElement()vs Selenium中的Webelement. findElement()
    Selenium是一个开源工具,可以自动化Web浏览器并帮助测试Web应用程序。它是Web应用程序测试中使用最广泛的工具之一。在Selenium中,两种常用的查找Web元素的方法是driver.findElement和WebElement.findElement。本文将讨论它们之间的差异。findElement()方法声明WebElementfindE......
  • 【数据结构】大根堆和小根堆
    大根堆实现逻辑从整棵树的最后一颗子树开始调整,每次都让根节点和左右孩子去比较,如果根节点比左右孩子的最大值要小,那么就将这两个值进行交换,然后此时这颗子树变成了大根堆,再看下一颗树然后对下一颗树进行相同的处理方法,后面的子树依次交换:当每棵子树都是大根堆的情况......
  • 基于Java养老院管理系统设计和实现(源码+LW+调试文档+讲解等)
    详细视频演示:请联系我获取更详细的演示视频系统技术介绍:后端框架SpringBootSpringBoot内置了Tomcat、Jetty和Undertow等服务器,这意味着你可以直接使用它们而不需要额外的安装和配置。SpringBoot的一个主要优点是它的自动配置功能。它可以根据你的项目中的依赖关......
  • 求奖金总数
    题目描述企业发放的奖金根据利润提成。I≤100000元的,奖金可提10%;100000<I≤200000时,低于100000 元的部分按10% 提成,高于100000 元的部分,可提成 7.5%200000<I≤400000时,低于200000 元部分仍按上述办法提成(下同),高于200000 元的部分按 5% 提成;400000<I≤600000......
  • charles教程与篡改接口数据
    charles简介Charles是一款常用的网络代理工具,可以用来监控、调试和分析网络请求和响应数据。它可以截取HTTP和HTTPS流量,在代理服务器和目标服务器之间建立连接,允许用户便捷地查看和记录网络通信数据,包括请求URL、请求头部、请求体、响应头部、响应体等信息。使用Ch......
  • 28.x86游戏实战-初探XXX发包
    免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!本次游戏没法给内容参考于:微尘网络安全工具下载:链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3提取码:6tw3复制这段内容后打开百度网盘手机App,操作更方便哦上一个内容:27.x86游戏实战-线程......
  • 【C#】ref参数
    1.概述能够将一个变量带入一个方法中进行改变,改变完成后,再将改变后的值带出方法。2.示例usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceConsoleApp1{classProgram{......