(四)C语言之数组

讲一下数组的相关知识,数组在以后的编程还是很重要的,希望大家认真学习,同时也勉励自己。
欢迎加入嵌入式学习群:559601187

在C语言中使用数组必须先进行定义,数组属于构造数据类型的一种,它是一组相同数据类型的集合,数组的每个元素都是该类型的空间。

(一)维数组

**数组的定义:**数据类型 数组名[元素个数]
其中,类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度,必须是常量。例如:

int a[10];  /* 定义一个整型数组a,有10个元素 */
float b[10], c[20];  /* 说明实型数组b,有10个元素,实型数组c,有20个元素 */
char ch[20];  /* 说明字符数组ch,有20个元素 */

数组的作用: 向CPU申请一段连续的空间
数组的初始化:

//(1)部分初始化:
int str[10]={1,2,3,4,6=5};//这个初始化初始化了5个元素,没有初始化的空间为0 
//(2)完全初始化:
int str[5]={1,2,3,4,5};  
//(3)数组只有在定义时可以全部初始化,之后只能单个元素的赋值。 

数组的调用: 数组名 [下标]
注意数组元素是从0开始的, 例如:

int str[5]={1,2,3,4,5}
//该str数组有5个元素,当我们进行调用时str[0]=1,str[1]=2,str[2]=3,
str[3]=4,str[4]=5,该数组没有str[5]。

重点: 数组在定义时一定要写元素的个数,否则就必须完全初始化

数组首地址表示的两种方法:

(1)数组名表示首地址
(2)数组的第0个元素加&
只需要知道数组的首地址就可以访问数组的所有元素
字符数组:存放字符的数组,通常用字符型
字符串数组:存放字符串的数组,字符串以’\0’结束

一维数组应用举例

//【例1】输入10个数字并输出最大值。 
01.#include <stdio.h>
02.int main(void){
03.    int i,max,a[10];
04.    printf("input 10 numbers:\n");
05.    for(i=0;i<10;i++)
06.        scanf("%d",&a[i]);
07.    max=a[0];
08.    for(i=1;i<10;i++)
09.        if(a[i]>max) max=a[i];
10.    printf("maxmum=%d\n",max);
11.    return 0;
12.}
//输出结果是:
//1
//2
//3
//4
//5

a 表示数组的名字,[5] 表示这个数组有 5 个元素,并分别用 a[0]、a[1]、a[2]、a[3]、a[4] 表示。并分别把花括号内的 1、2、3、4、5 赋给变量 a[0]、a[1]、a[2]、a[3]、a[4]。再次强调,下标从 0 开始,即从 a[0] 开始,而不是 a[1]。

(二)二维数组

二维数组实际就是多个一维数组 ,一维数组只有一个下标,称为一维数组,其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的,因此C语言允许构造多维数组。
二维数组定义如下:数据类型 数组名[行下标][列下标]
行下标:行的个数,表示有多少个一维数组
列下标:列的个数,表示一维数组的元素
二维数组的地址增长方向:从左往右,从上往下
二维数组在概念上是二维的,即是说其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是象一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。
在C语言中,二维数组是按行排列的。即,先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四个元素也是依次存放。由于数组a说明为int类型,该类型占两个字节的内存空间,所以每个元素均占有两个字节。
二维数组的初始化:二维数组的赋值和地址的增长方向一样

//(1)部分初始化:
int str[3][3]={1,2,3,4,5};
//初始化的结果为str[0][0]=1,str[0][1]=2,str[0][2]=3,str[1][0]=4,str[1][1]=5,其余的元素为0
//(2)完全初始化  
Int str[3][3]={1,2,3,4,5,6,7,8,9};
Int str[3][3]={{1,2,3},{4,5,6},{7,8,9}};

二维数组在定义时可以不写行下标,但一定不能不写列下标
char str[][3]={1,2,3,4,5,6,7,8,9};//写列下标
二维数组的引用:数组名[下标][下标]
其中下标应为整型常量或整型表达式

二维数组实例

//例【2】求各科平局分和总成绩平均分。 
01.#include <stdio.h>
02.int main(void){
03.    int i,j,s=0, average,v[3];
04.    int a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};
05.    for(i=0;i<3;i++){
06.        for(j=0;j<5;j++)
07.            s=s+a[j][i];
08.        v[i]=s/5;
09.        s=0;
10.    }
11.    average=(v[0]+v[1]+v[2])/3;
12.    printf("math:%d\nc languag:%d\ndFoxpro:%d\n",v[0],v[1],v[2]);
13.    printf("total:%d\n", average);
14.    return 0;
15.}

(三)相关函数

(1)gets()输入字符串
使用gets函数输入时,空格并不会结束输入

char str[21]={0};
gets(str);

(2)scanf()
在使用scanf以%s进行输入时,空格会结束输入,这一点要和gets()函数区分开来。
(3)strlen()
求字符串的长度,但是不包含字符串末尾的’\0’

char c="hello"
printf("%d\n",strlen(c);
//输出5

本文章仅供学习交流用禁止用作商业用途,文中内容来水枂编辑,如需转载请告知,谢谢合作

微信公众号:zhjj0729

微博:文艺to青年

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

平衡二叉树AVL插入

平衡二叉树(Balancedbinary tree)是由阿德尔森-维尔斯和兰迪斯(Adelson-Velskiiand Landis)于1962年首先提出的&#xff0c;所以又称为AVL树。 定义&#xff1a;平衡二叉树或为空树,或为如下性质的二叉排序树: &#xff08;1&#xff09;左右子树深度之差的绝对值不超过1; &…

C语言练习(一)

今天来讲解一下数组相关的习题&#xff0c;巩固昨天的知识 欢迎加入嵌入式学习群&#xff1a;559601187 1.对于二维数组首地址偏移。 二维数组数组名偏移一个数&#xff0c;地址偏移一行&#xff0c;针对这个问题后面会做一个详细的讲解 #include <stdio.h> int main() …

(五)C语言之二维数组

今天的第二个内容单独拿出来讲一下&#xff0c;对于初接触C语言的人来说&#xff0c;这个知识点比较难懂&#xff0c;后面在讲指针的时候我还会提到这部分的内容&#xff0c;看不懂的同学可以看后面的内容。 指针变量可以指向一维数组中的元素&#xff0c;当然也就可以指向二维…

平衡二叉树AVL删除

平衡二叉树的插入过程: http://www.cnblogs.com/hujunzheng/p/4665451.html 对于二叉平衡树的删除采用的是二叉排序树删除的思路: 假设被删结点是*p&#xff0c;其双亲是*f&#xff0c;不失一般性&#xff0c;设*p是*f的左孩子&#xff0c;下面分三种情况讨论&#xff1a;  ⑴…

(六)C语言之函数

本篇文章分为三个部分讲解&#xff0c;分别为函数、局部变量和全局变量、c语言存储分区 &#xff08;一&#xff09;函数的定义和调用 函数&#xff1a;工程中最小的单位&#xff0c;为了实现某一功能的 函数的定义&#xff1a; 数据类型 函数名(数据类型 形参1&#xff0c;…

堆排序算法---属于选择排序

1.堆 堆实际上是一棵完全二叉树&#xff0c;其任何一非叶节点满足性质&#xff1a; Key[i]<key[2i1]&&Key[i]<key[2i2]或者Key[i]>Key[2i1]&&key>key[2i2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆…

(七)C语言之指针

c语言相比其他高级语言来说&#xff0c;更接近于对计算机硬件的操作&#xff0c;而指针的应用更是为我们对硬件的操作插上了翅膀&#xff0c;所以指针是嵌入式编程不可少的一部分&#xff0c;在一定意义上说&#xff0c;指针是c语言的精髓。 一、 什么是指针 在计算机中&#…

各种排序(数据结构复习之内部排序算法总结)

1.三种选择排序&#xff08;简单选择排序&#xff0c;树形选择排序&#xff0c;堆排序&#xff09; #include<iostream> #include<cstring> #include<string> #include<queue> #include<map> #include<cstdlib> #include<cstdio> c…

(八)C语言之结构

今天来说一下C语言里的结构体(struct)、共用体(l联合体)union、枚举。 &#xff08;一&#xff09;结构体&#xff1a;struct 1.1 概念 是一种自定义的数据类型结构体是构造类型的一种不同数据类型的集合地址空间连续&#xff0c;每次分配最大数据类型的宽度占用内存为所有变…

插入排序之表插入排序

1.表插入排序只是求得一个有序的链表&#xff0c;它是修改指针的值来代替移动记录&#xff0c;操作过程如下 2.但是这样只能进行顺序查找&#xff0c;不能进行随机查找&#xff0c;为了能实现有序表的折半查找&#xff0c;需要对记录进行重新排列。操作过程如下&#xff1a; 3.…

电容降压LED驱动电路

电容降压电路具有体积小、成本低、电流相对稳定等优点&#xff0c;可应用于小功率的LED驱动电路中&#xff0c;本文主要介绍了电容降压电路的基本电路 图一&#xff1a; 电容降压式简易电源的基本原理如图一所示&#xff0c;C3为降压电容器&#xff1b;D4为半波整流二极管&…

延时电路分析

延时电路经常会用到&#xff0c;RC电路是比较简单的电路。在电路设计中经常会用到将电阻和电容正极连接&#xff0c;电阻另一端接上电源&#xff0c;电容负极接地。 简单的延时电路 上面就是延时的电路图了&#xff0c;延时的时间为T-ln((VCC-Vout)/VCC)RC&#xff0c;公式中的…

恒流电路的分析(一)

在这里分析一个简单的LED恒流电路&#xff0c;软件采用Multisim进行波形采集 一、元器件 R1为80KΩ左右的金属膜电阻&#xff1b;Q选取耐压值超过350V的VPN三极管&#xff1b;D选取2V左右的稳压二极管(如1N4680)&#xff1b;C2选取10V、100UF以上的电解电容&#xff1b;R2选择…

ST-LINK USB communication error解决方法

今天在用stlink-v2下载程序时出现ST-LINK USB communication error&#xff0c;突然就出现了这个问题&#xff0c;在网上找了好多解决办法都不可以用&#xff0c;下面给出我的解决方案&#xff0c;文章末尾给出了网上的几种解决办法&#xff0c;仅供参考。 第一步&#xff1a;找…

ajax实现上传文件

1.html部分 <input style"width: 280px" type"file" name"upLoadProjectPlan" id"upLoadProjectPlan" value"<%taskAppend.getTaskAllocationDoc()%>"/><a style"float: right; margin-right: 40px&qu…

利用STM32制作红外测温仪之硬件设计

最近受疫情的影响详细大家都在家里没事干&#xff0c;这里利用stm32最小系统做一个红外测温仪 这篇教程里我们来制作红外测温仪需要用到的硬件&#xff0c;关于PCB的工程文件&#xff0c;后文会给出。 &#xff08;一&#xff09;系统分析 由于我们的功能比较单一&#xff0c;…

如何在博客中插入背景音乐

1.首先进入网音乐官方网站&#xff1b; 2.查找自己喜欢的歌&#xff0c;看到如下界面 3.点击"生成外链播放器" 4.看到下面的html代码了吗&#xff1f;将代码进行复制。 5.进入博客园&#xff0c;点击 "管理" ->"设置"&#xff0c; 将代码复制…

常用存储器介绍

注意&#xff1a;"易失/非易失"是指存储器断电后&#xff0c;它存储的数据内容是否会丢失的特性。 &#xff08;一&#xff09;RAM和ROM 1.1 RAM RAM即随机存储器&#xff0c;它是指存储器中的数据被读入或者写入与信息所在位置无关&#xff0c;时间都是相同的 1…

TortoiseGit与github实现项目的上传

1. 下载并安装相关软件 这里主要涉及的软件包括msysgit和TortoiseGit。 msysgit的下载地址&#xff1a;http://msysgit.googlecode.com/files/Git-1.7.4-preview20110204.exe TortoiseGit的下载地址&#xff1a;http://code.google.com/p/tortoisegit/downloads/list&#xff0…

Uboot启动

&#xff08;一&#xff09;uboot 配置编译分析 u-boot源码是通过gcc和Makefile组织编译的&#xff0c;顶层目录下的Makefile可通过boards.cfg来设置开发板的定义 然后递归调用各级子目录下的Makefile&#xff0c;把编译过的程序连接成u-boot boards.cfg文件&#xff1a; 开发…