数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组

在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。

因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

数值数组

数组说明的一般形式为:类型说明符 数组名 [常量表达式],……;

其中,类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度。例如:int a[10]; 说明整型数组a,有10个元素。float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。char ch[20]; 说明字符数组ch,有20个元素。

对于数组类型说明应注意以下几点:1. 数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。

2. 数组名的书写规则应符合标识符的书写规定

3. 数组名不能与其它变量名相同,例如:

void main(){int a;float a[10];……}

是错误的。

4.方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为

a[0],a[1],a[2],a[3],a[4]。

5.不能在方括号中用变量来表示元素的个数, 但是可以是符号常数或常量表达式。例如:

#define FD 5void main(){int a[3+2],b[7+FD];……}

是合法的。但是下述说明方式是错误的。

void main(){int n=5;int a[n];……}

6.允许在同一个类型说明中,说明多个数组和多个变量
例如:

int a,b,c,d,k1[10],k2[20];

数组元素的表示方法

数组元素是组成数组的基本单元。数组元素也是一种变量, 其标识方法为数组名后跟一个下标。

下标表示了元素在数组中的顺序号。数组元素的一般形式为:数组名[下标] 其中的下标只能为整型常量或整型表达式。

如为小数时,C编译将自动取整。例如,a[5],a[i+j],a[i++]都是合法的数组元素。数组元素通常也称为下标变量。必须先定义数组, 才能使用下标变量。在C语言中只能逐个地使用下标变量, 而不能一次引用整个数组。

例如,输出有10 个元素的数组必须使用循环语句逐个输出各下标变量:for(i=0; i<10; i++)  printf("%d",a[i]); 而不能用一个语句输出整个数组,下面的写法是错误的:printf("%d",a);

void main(){  int i,a[10];  for(i=0;i<10;){     a[i++]=2*i+1;    }   for(i=9;i>=0;i--){     printf("%d\n",a[i]);      }  }

结果

2119171513119753

本例中用一个循环语句给a数组各元素送入奇数值,然后用第二个循环语句从大到小输出各个奇数。在第一个 for语句中,表达式3省略了。

在下标变量中使用了表达式i++,用以修改循环变量。当然第二个for语句也可以这样作, C语言允许用表达式表示下标。

程序中最后一个printf语句输出了两次a[5]的值, 可以看出当下标不为整数时将自动取整。

数组的赋值给数组赋值的方法除了用赋值语句对数组元素逐个赋值外, 还可采用初始化赋值和动态赋值的方法。

数组初始化赋值数组初始化赋值是指在数组说明时给数组元素赋予初值。数组初始化是在编译阶段进行的。这样将减少运行时间,提高效率。

初始化赋值的一般形式为:static 类型说明符 数组名[常量表达式]={值,值……值};其中static表示是静态存储类型, C语言规定只有静态存储数组和外部存储数组才可作初始化赋值 。

在{ }中的各数据值即为各元素的初值, 各值之间用逗号间隔。

例如:static int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相当于a[0]=0;a[1]=1...a[9]=9;

C语言对数组的初始赋值还有以下几点规定:1.可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:static int a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。

2.只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:static int a[10]=1;

3.如不给可初始化的数组赋初值,则全部元素均为0值。

4.如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如:static int a[5]={1,2,3,4,5};可写为:static int a[]={1,2,3,4,5};动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合

scanf函数逐个对数组元素赋值。

int main(){int i,max,a[10];printf("输入10个数:\n");  for(i=0;i<10;i++){  scanf("%d",&a[i]);  }  max=a[0];  for(i=1;i<10;i++){  if(a[i]>max) max=a[i];  }printf("最大值=%d",max);return 0}

结果

本例程序中第一个for语句逐个输入10个数到数组a中。然后把a[0]送入max中。在第二个for语句中,从a[1]到a[9]逐个与max中的内容比较,若比max的值大,则把该下标变量送入max中,因此max总是在已比较过的下标变量中为最大者。比较结束,输出max的值。

二维数组

  前面介绍的数组只有一个下标,称为一维数组, 其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的, 因此C语言允许构造多维数组。

多维数组元素有多个下标, 以标识它在数组中的位置,所以也称为多下标变量。本小节只介绍二维数组,多维数组可由二维数组类推而得到。二维数组类型说明二维数组类型说明的一般形式是:类型说明符 数组名[常量表达式1][常量表达式2]…;
其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。例如:

int a[3][4]; 说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有3×4个,即:

a[0][0],a[0][1],a[0][2],a[0][3]a[1][0],a[1][1],a[1][2],a[1][3]a[2][0],a[2][1],a[2][2],a[2][3]

   二维数组在概念上是二维的,即是说其下标在两个方向上变化, 下标变量在数组中的位置也处于一个平面之中, 而不是象一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的, 也就是说存储器单元是按一维线性排列的。

如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。

另一种是按列排列, 即放完一列之后再顺次放入第二列。

在C语言中,二维数组是按行排列的。在图4.1中,按行顺次存放,先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四个元素也是依次存放。由于数组a说明为
int类型,该类型占两个字节的内存空间,所以每个元素均占有两个 字节

二维数组元素的表示方法

  二维数组的元素也称为双下标变量,其表示的形式为:数组名[下标][下标] 其中下标应为整型常量或整型表达式。例如:a[3][4] 表示a数组三行四列的元素。

下标变量和数组说明在形式中有些相似,但这两者具有完全不同的含义。数组说明的方括号中给出的是某一维的长度,即可取下标的最大值;而数组元素中的下标是该元素在数组中的位置标识。

前者只能是常量, 后者可以是常量,变量或表达式。

一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。

姓名 数学 c语言 数据库
80 75 92
61 65 71
59 63 70
85 87 90
76 77 95

   可设一个二维数组a[5][3]存放五个人三门课的成绩。再设一个一维数组v[3]存放所求得各分科平均成绩,设变量l为全组各科总平均成绩。编程如下:

int main(){int i,j,s=0,l,v[3],a[5][3];printf("输入分数\n");for(i=0;i<3;i++){  printf("第%d科5人成绩\n",i+1);  for(j=0;j<5;j++){     scanf("%d",&a[j][i]);    s=s+a[j][i];}    v[i]=s/5;    s=0;  }l=(v[0]+v[1]+v[2])/3;printf("数学:%d\n c语言:%d\n 数据库:%d\n",v[0],v[1],v[2]);printf("总平均分:%d\n",l);} 

结果

   程序中首先用了一个双重循环。在内循环中依次读入某一门课程的各个学生的成绩,并把这些成绩累加起来, 退出内循环后再把该累加成绩除以5送入v[i]之中,这就是该门课程的平均成绩。外循环共循环三次,分别求出三门课各自的平均成绩并存放在v数组之中。退出外循环之后,把v[0],v[1],v[2]相加除以3即得到各科总平均成绩。最后按题意输出各个成绩。

二维数组的初始化

   二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。例如对数组a[5][3]:

1.按行分段赋值可写为

static int a[5][3]={ {80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85} };

2.按行连续赋值可写为

static int a[5][3]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85 };

   这两种赋初值的结果是完全相同的。

int main(){ int i,j,s=0,l,v[3];static int a[5][3]={ {80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85} };for(i=0;i<3;i++){   for(j=0;j<5;j++){     s=s+a[j][i];    v[i]=s/5;    s=0;  }}   l=(v[0]+v[1]+v[2])/3;  printf("数学:%d\nc语言:%d\n数据库:%d\n",v[0],v[1],v[2]);  printf("总平均:%d",l);}

结果

对于二维数组初始化赋值还有以下说明:1.可以只对部分元素赋初值,未赋初值的元素自动取0值。

例如:static int a[3][3]={{1},{2},{3}}; 是对每一行的第一列元素赋值,未赋值的元素取0值。赋值后各元素的值为:1 0 02 0 03 0 0static int a [3][3]={{0,1},{0,0,2},{3}}; 赋值后的元素值为 0 1 00 0 23 0 0

2.如对全部元素赋初值,则第一维的长度可以不给出。

例如:static int a[3][3]={1,2,3,4,5,6,7,8,9}; 可以写为:static int a[][3]={1,2,3,4,5,6,7,8,9};  

字符数组

  用来存放字符量的数组称为字符数组。字符数组类型说明的形式与前面介绍的数值数组相同。

例如:char c[10]; 由于字符型和整型通用,也可以定义为int c[10]但这时每个数组元素占2个字节的内存单元。

字符数组也可以是二维或多维数组,例如:char c[5][10];即为二维字符数组。字符数组也允许在类型说明时作初始化赋值。

例如:static char c[10]={`c`,` `,`p`,`r`,o`,g`,r`,`a`,`m`};赋值后各元素的值为:数组C c[0]c[1]c[2]c[3]c[4]c [5]c[6]c[7]c[8]c[9]其中c[9]未赋值,由系统自动赋予0值。

当对全体元素赋初值时也可以省去长度说明。

例如:static char c[]={`c`,` `,`p`,`r`,`o`,`g`,`r`,`a`,`m`};这时C数组的长度自动定为9。

int main(){  int i,j;  char a[][5]={{'B','A','S','I','C',},{'d','B','A','S','E'}};  for(i=0;i<=1;i++)  {    for(j=0;j<=4;j++)    printf("%c",a[i][j]);    printf("\n");  }}

   本例的二维字符数组由于在初始化时全部元素都赋以初值, 因此一维下标的长度可以不加以说明。字符串在C语言中没有专门的字符串变量, 通常用一个字符数组来存放一个字符串。

本章小结

1.数组是程序设计中最常用的数据结构。数组可分为数值数组(整数组,实数组),字符数组以及后面将要介绍的指针数组,结构数组等。

2.数组可以是一维的,二维的或多维的。

3.数组类型说明由类型说明符、数组名、数组长度 (数组元素个数)三部分组成。数组元素又称为下标变量。数组的类型是指下标变量取值的类型。

4.对数组的赋值可以用数组初始化赋值, 输入函数动态赋值和赋值语句赋值三种方法实现。对数值数组不能用赋值语句整体赋值、输入或输出,而必须用循环语句逐个对数组元素进行操作。

《c语言简明教程》

01-C语言的过去与未来

02-Dev C++  安装及使用方法教程

03-C语言的第一个简单实例

04-关键字与标识符-C语言

05-数据类型与常量变量-C语言

06-C语言运算符

07-if与循环-案例超经典-C语言

08-C语言中的循环结构

IT入门 感谢关注

程序员题库→程序员用的单词表→练习地址:www.520mg.com/it

access vba 常量数组赋值_09c语言数组详解相关推荐

  1. c语言 字节数组赋值,C语言数组赋值。

    这段程序应该每运行一次的结果都不完全一致.具体原因是这样:这个问题想说明白不太容易,我以下瞎说,你就瞎看吧. char s[] = "123456789", r[9]; 相当于定义 ...

  2. c语言 数组指针,C语言数组名及指向数组指针的小结

    相信不少的C语言初学者都知道,数组名相当于指针,指向数组的首地址,而函数名相当于函数指针,指向函数的入口地址. 现在有这样一个问题,如果对数组名取地址,那得到的会是什么呢?很多人立刻会想到:给指针取地 ...

  3. java从键盘为数组赋值,java给数组赋值

    java 动态数组赋值,java对象数组详解,java二维数组赋值,java给数组赋值 java数组动态赋值,从零学java笔录-第24篇 图解一维数组在内存中,java二维数组赋值,java给数组赋 ...

  4. 数组,异质结构以及指针的详解

    数组,异质结构以及指针的详解 前言 昨天看了一部韩国电影,老千2,看到凌晨5点,不过发现韩国的棒子们确实养眼,女的贼拉漂亮,还有大尺度哦~ 咱们上一次分析了过程(方法)的实现,其中精妙的栈帧占据了首要 ...

  5. C语言中可以用字符串常量来,C语言字符串详解

    原标题:C语言字符串详解 字符串是一种非常重要的数据类型,但是C语言不存在显式的字符串类型,C语言中的字符串都以字符串常量的形式出现或存储在字符数组中.同时,C 语言提供了一系列库函数来对操作字符串, ...

  6. php 打印对象详细信息,php打印显示数组与对象的函数详解

    php打印显示数组与对象的函数详解 发布于 2014-11-17 18:55:49 | 699 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext P ...

  7. 【Python】Numpy数组的切片、索引详解:取数组的特定行列

    [Python]Numpy数组的切片.索引详解:取数组的特定行列 文章目录 [Python]Numpy数组的切片.索引详解:取数组的特定行列 1. 介绍 2. 切片索引 2.1 切片索引先验知识 2. ...

  8. python数组相减_对Python 中矩阵或者数组相减的法则详解

    对Python 中矩阵或者数组相减的法则详解 最近在做编程练习,发现有些结果的值与答案相差较大,通过分析比较得出结论,大概过程如下: 定义了一个计算损失的函数: def error(yhat,labe ...

  9. ❤️导图整理数组6:四数组的四数之和,详解Counter类实现哈希表计数,力扣454❤️

    此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), ...

最新文章

  1. OpenvSwitch — 安装部署与基本操作
  2. python创建新文件-python创建和删除文件
  3. 游戏编程十年总结(下)(转)
  4. 模块mod_h323的编译
  5. 使用ThreadLocal不当可能会导致内存泄露
  6. 计算机右键菜单太多,电脑点击右键太多选项怎么办
  7. 万分之二用百分之怎么表示_红木家具怎么辨别真假
  8. Oracle11g 配置 ST_GEOMETRY
  9. faststart可以卸载吗_你的手机你做主!免 ROOT 卸载安卓手机预装APP
  10. Python 程序员如何防止数据被修改?
  11. 基本数据结构—Trie
  12. 三种常用的js数组去重方法
  13. emoji 表情图片解决方法
  14. Winform做一个仿360界面
  15. HTML+CSS错题整理
  16. 基于STM32设计的智慧浇花系统(华为云IOT)
  17. 以古为新 洒脱自然 ——魏沁的书法艺术
  18. 数学分析教程(科大)——1.5笔记+习题
  19. 足球赔率数据爬虫分析一体化的项目
  20. ChatGPT 中文 Prompt 提示词,常用、高频集合

热门文章

  1. 为什么很多人说Python简单呢?
  2. gittrack_Git 分支跟踪详解(remote branch tracking)
  3. swoft php怎么样,[原创]Swoole和Swoft的那些事 (Http/Rpc服务篇)
  4. Python: 函数参数传递机制
  5. 色差类染疵原因的详细分析
  6. 对软件研发项目管理的深入探讨
  7. c语言程序课程设计过程,C语言课程设计————写下流程图! 谢谢
  8. 018 HDFS中,namenode与datanode的交互
  9. python 学习资料
  10. NSCharacterSet 简单用法