C语言一维数组的定义和引用数组.ppt
合集下载
C语言第六章_数组_2

if (a[i]>a[i+1])
{temp=a[i];a[i]=a[i+1];a[i+1]=temp;14}
#include <stdio.h> main(){ /*对10个整数排序*/
int a[10]={9, 8, 5, 4, 2, 0, 6, 1, 3, 7}, i, k; for (k=1;k<10;k++)
f0=1 (n=0m) ain(){
f1=1
(n=1) int i; long f [20]={1,1};
0 f1n=fn-1f+[0f]n-2 (nfo2r) (i=2;i<20;i++)
1
1
f[1]
2
2
f[2]
f[i]=f[i-2]+f[i-1];
3
3
f[3]
for(i=0;i<20;i++)
4
数组是具有一定顺序的若干同数据类型变 量的集合体。数组要有名称,要有规模。
一.一维数组定义
类型说明符 数组名[常量];
例如:int a[6]; a = = &a[0]
a
内存映象:编译时分配一片连续的内 存空间,数组名为该空间的首地址— —常量地址。
0 a[0]
1 a[1]
2 a[2]
3 a[3]
1
4 a[4]
4
一行一行地存储所有的数组 5
a[0][1] a[0][2] a[0][3] a[1][0] a[1][1]
元素,数组名为该空间的首 6 a[1][2]
地址——地址常量。
7 a[1][3]
8
C语言一维数组

6
例题巩固
在C 语言中,引用数组元素时,其数组下标的 数据类型允许是 。 A)整型常量 B)整型表达式 C)整型常量或整型表达式 D)任何类型的表达式
C语言中,数组名代表 A.数组全部元素的值 B.数组首地址 C.数组第一个元素的值 D.数组元素的个数
合法的数组定义是 A.int a[ ]=”string”; B.int a[5]={0,1,2,3,4,5}; C.char a=”string”; D.char a[ ]={0,1,2,3,4,5};
以下程序的输出结果是________。 main( ) { int i,p=0,a[10]={1,5,9,0,-3,8,7,0,1,2}; for(i=1;i<10;i++) if(a[i]<a[p]) p=i; printf("%d,%d\n",a[p],p); } A) -3,4 B) 0,1 C) 9,2 D) 2,9
35
35
int a[5]
a[0] a[1] 第一轮 21 13 13 13 21 21
a[2] 90 90 90
a[3] a[4] 32 32 32 -1 -1 -1
13 13
21 21
32 32
90 -1
-1 90
第一轮的结果: 将最大的数移到了最后一个位置(n-1)。
int a[5]
a[0] a[1]
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] 0 1 2 3 4 5 6 7 8 a[9] 9
数组a
max = a[0];
32
32
定义
main()
{ int i, max, x[10];
高中信息技术 信息学奥赛C语言第八章 数组课件

• 一维数组初始化的定义形式为: 类型名 数组名[常量表达式或省略]={值0,值 1,……}; 其中,{}中各值是对应的数组元素初值,各值 之间用逗号隔开。例如:
int a[5]={0,1,2,3,4}; 也可以省略为:
int a[ ]={0,1,2,3,4};
说明:
1.可以只给部分数组元素赋初值。当{}中 值的个数少于数组元素个数时,则表示初 值只赋于数组开始的若干个元素,余下部 分元素为相应类型的缺省值,int为整型数0, 字符型为空格等。
二维数组存储结构是“按行存放,先行后列”,
说明:
(1)数组名是用户定义标识符
(2)数组名后面的两对方括号必不可少, 之间不能有空格。方括号中必须是常量表 达式,表达式1表示数组的行数,表达式2 表示数组的列数。其中必须是正的整型常 量,绝对不能是变量。
(3)定义后,a数组在内存中占用6个连续 的存储单元,按照行的顺序依次存储各个 元素。 见书p75图8-2、图8-3.
8.数组定义中,数组长度除多数情况下作显式说明 外,有两种情况下不必或不能用长度说明,而用[] 代替。
(1)给数组全体元素赋初值时,可省去数组长度说 明。
(2)数组名作为函数的参数,在函数的参数说明部 分,当指出参数是数组时,不能用长度说明。
二、一维数组的初始化
• 当系统为所定义的数组在内存中开辟一串连续的 存储单元时,这些存储单元中并没有确定的值,数 组的初始化就是指在定义数组时给数组元素赋初值。
为一维数组。 • 一维数组的定义方式为:
类型名 数组名[常量表达式]; 例如: int array[10];
它表示定义了一个名为array的数组, 此数组有10个元素,每个元素的数据类型 为整型。
一维数组定义的说明:
int a[5]={0,1,2,3,4}; 也可以省略为:
int a[ ]={0,1,2,3,4};
说明:
1.可以只给部分数组元素赋初值。当{}中 值的个数少于数组元素个数时,则表示初 值只赋于数组开始的若干个元素,余下部 分元素为相应类型的缺省值,int为整型数0, 字符型为空格等。
二维数组存储结构是“按行存放,先行后列”,
说明:
(1)数组名是用户定义标识符
(2)数组名后面的两对方括号必不可少, 之间不能有空格。方括号中必须是常量表 达式,表达式1表示数组的行数,表达式2 表示数组的列数。其中必须是正的整型常 量,绝对不能是变量。
(3)定义后,a数组在内存中占用6个连续 的存储单元,按照行的顺序依次存储各个 元素。 见书p75图8-2、图8-3.
8.数组定义中,数组长度除多数情况下作显式说明 外,有两种情况下不必或不能用长度说明,而用[] 代替。
(1)给数组全体元素赋初值时,可省去数组长度说 明。
(2)数组名作为函数的参数,在函数的参数说明部 分,当指出参数是数组时,不能用长度说明。
二、一维数组的初始化
• 当系统为所定义的数组在内存中开辟一串连续的 存储单元时,这些存储单元中并没有确定的值,数 组的初始化就是指在定义数组时给数组元素赋初值。
为一维数组。 • 一维数组的定义方式为:
类型名 数组名[常量表达式]; 例如: int array[10];
它表示定义了一个名为array的数组, 此数组有10个元素,每个元素的数据类型 为整型。
一维数组定义的说明:
《C语言程序设计课件》第四章-数组

提示:程序在读入数时将其存储在一个数组中, 然后通过数组反向开始一个接一个地显示出数组 元素。
#include <stdio.h> #define N 10 int main(void)
{ int a[N], i; printf("Enter %d numbers: ", N);
for (i = 0; i < N; i++)
for(i=0;i<1;i++) if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; }
a[0]
20
a[1]
02
a[2]
44
a[3]
55
a[4]
88
a[5]
99
for(i=0;i<5;i++) if (a[i]>a[i+1]) { ……}
for(i=0;i<4;i++) if (a[i]>a[i+1]) { ……}
4.2 一维数组
一维数组主要用来存储一组类型相同并且数量一定 的数据。其中,每个数据称为数组的一个元素。
4.2.1 一维数组定义 一维数组的定义形式如下: 类型名 数组名[常量表达式]; int x[100]; char string[10]; double data[10];
常量表达式给出了数组的长度,在C语 言中定义数组时必须确定数组的长度。
600
xxx[[[654]]]
700
xxx[[[765]]]
800
xxx[[[876]]]
900
xxx[[[987]]]
#include <stdio.h> #define N 10 int main(void)
{ int a[N], i; printf("Enter %d numbers: ", N);
for (i = 0; i < N; i++)
for(i=0;i<1;i++) if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; }
a[0]
20
a[1]
02
a[2]
44
a[3]
55
a[4]
88
a[5]
99
for(i=0;i<5;i++) if (a[i]>a[i+1]) { ……}
for(i=0;i<4;i++) if (a[i]>a[i+1]) { ……}
4.2 一维数组
一维数组主要用来存储一组类型相同并且数量一定 的数据。其中,每个数据称为数组的一个元素。
4.2.1 一维数组定义 一维数组的定义形式如下: 类型名 数组名[常量表达式]; int x[100]; char string[10]; double data[10];
常量表达式给出了数组的长度,在C语 言中定义数组时必须确定数组的长度。
600
xxx[[[654]]]
700
xxx[[[765]]]
800
xxx[[[876]]]
900
xxx[[[987]]]
c语言一维数组的定义

c语言一维数组的定义
在本文中,我们将讨论C语言中一维数组的定义以及其用途。
C语言中的数组可以用来存储数据和处理数据。
一维数组是最简单的数组形式,它由一组元素组成,这些元素具有相同的数据类型。
数组中每个元素通过一个下标访问,下标从0开始。
在C语言中,一维数组的定义方式为:类型数组名[元素数量],其中类型表示数组中存储的元素类型,数组名用于标识数组,而元素数量表示数组中元素的数量。
例如,定义一个由5个整数组成的数组:
int myArray[5];
这种定义方式创建了一个数组,其元素数量为5,每个元素的类型为整数。
在C语言中,数组元素可以使用下标表示。
例如,在上面定义的数组中,第一个元素的下标是0,第二个元素的下标是1,以此类推。
要访问数组元素,我们需要指定数组名和下标。
例如,以下代码将数组中的第三个元素设置为5:
myArray[2] = 5;
在C语言中,一维数组是一种重要的数据结构,它提供了可靠的数据存储和处理机制。
一维数组可以用于各种数据处理任务,如数据
搜索、排序和处理。
使用数组,我们可以轻松地处理大量数据,从而使程序具有更高的效率和性能。
总之,一维数组是C语言中最基本的数据结构之一,其定义方式相对简单,但使用范围非常广泛。
通过深入了解数组,我们可以使程序的性能和效率大大提高,从而实现更高效的数据处理和应用。
c语言程序设计第7章(谭浩强)PPT版本

如 int a[5]; static int a[5]={6,2,3}; int a[]={1,2,3,4,5,6}; 等价于: a[0]=6; a[1]=2;a[2]=3; a[3]=0; a[4]=0; 等价于:a[0]=0; a[1]=0; a[2]=0; a[3]=0; a[4]=0; 如 编译系统根据初值个数确定数组维数 int a[3]={6,2,3,5,1}; ()
例
38 49 49 38 65 76 97 13 97 76 97 27 13 30 97 27 97 30 初 始 关 键 字 n=8
38 49 65 13 76 27 76 13 30 76 27 76 30 97 第 一 趟
38 49 13 65 27 65 13 30 65 27 65 30
程序举例
#include <stdio.h> #define SIZE 10 例 读10个整数存入数组,找出其中最大值和最小值 main() { int x[SIZE],i,max,min; printf("Enter 10 integers:\n"); for(i=0;i<SIZE;i++) 步骤: { printf("%d:",i+1); 1. 输入:for循环输入10个整数 scanf("%d",&x[i]); 2. 处理: } (a) 先令max=min=x[0] max=min=x[0]; (b) 依次用x[i]和max,min比较(循环) for(i=1;i<SIZE;i++) 若max<x[i],令max=x[i]{ if(max<x[i]) max=x[i]; 若min>x[i],令min=x[i] if(min>x[i]) min=x[i]; 3. 输出:max和min } printf("Maximum value is %d\n",max); printf("Minimum value is %d\n",min); }
C语言程序设计第5章数组.ppt

冒泡法排序
2019/3/19
F
冒泡法排序 (续)
程序如下:
#define N 6 #include "stdio.h" void main( ) {int a[N]; int i,j,t; printf("请输入%d个成绩,用空格隔开:\n",N); for (i=0; i<N; i++) scanf("%d",&a[i]);
2019/3/19
5.2.2 数组元素的引用(续)
2.说明
① 下标从0开始(下界为0),数组的最大下标 (上界)是数组长度减1。 例如: int a[10],i; scanf ("%d",&a[10]); /* 下标越界 */ C编译系统不做越界检查。
2019/3/19
5.2.2 数组元素的引用(续)
【例5-4】用冒泡法(也称起泡法)对输入的一组 成绩按从低分到高分的顺序排序并输出。
例如将6个数:4、7、5、6、8、1按从小到大顺序用冒泡 法排序,方法如下: 在第一趟排序中, 6个数比较了5次,把6个数中 第一趟排序情况如下: 的最大数8排在最后。 4 7 5 6 8 1 第一次 4和7比较,不交换 4 7 5 6 8 1 第二次 7和5比较,交换 457681 第三次 7和6比较,交换 456781 第四次 7和8比较,不交换 4 5 6 7 8 1 第五次 8和1比较,交换 456718
2019/3/19
5.1概述(续)
2.数组与数组元素的概念
数组:是用一个名字表示的一组相同类型的数据的集合, 这个名字就称为数组名。 如定义:float a[10]; a是数组名。 下标变量(或数组元素):数组中的数据分别存储在用下 标区分的变量中,这些变量称为下标变量或数组元素。 如:a[0]、a[1]…a[i]。 每个下标变量相当于一个简单变量,数组的类型也就是该 数组的下标变量的数据类型。 数组属于构造类型。构造类型的数据是由基本类型数据按 一定规则构成的。
2019/3/19
F
冒泡法排序 (续)
程序如下:
#define N 6 #include "stdio.h" void main( ) {int a[N]; int i,j,t; printf("请输入%d个成绩,用空格隔开:\n",N); for (i=0; i<N; i++) scanf("%d",&a[i]);
2019/3/19
5.2.2 数组元素的引用(续)
2.说明
① 下标从0开始(下界为0),数组的最大下标 (上界)是数组长度减1。 例如: int a[10],i; scanf ("%d",&a[10]); /* 下标越界 */ C编译系统不做越界检查。
2019/3/19
5.2.2 数组元素的引用(续)
【例5-4】用冒泡法(也称起泡法)对输入的一组 成绩按从低分到高分的顺序排序并输出。
例如将6个数:4、7、5、6、8、1按从小到大顺序用冒泡 法排序,方法如下: 在第一趟排序中, 6个数比较了5次,把6个数中 第一趟排序情况如下: 的最大数8排在最后。 4 7 5 6 8 1 第一次 4和7比较,不交换 4 7 5 6 8 1 第二次 7和5比较,交换 457681 第三次 7和6比较,交换 456781 第四次 7和8比较,不交换 4 5 6 7 8 1 第五次 8和1比较,交换 456718
2019/3/19
5.1概述(续)
2.数组与数组元素的概念
数组:是用一个名字表示的一组相同类型的数据的集合, 这个名字就称为数组名。 如定义:float a[10]; a是数组名。 下标变量(或数组元素):数组中的数据分别存储在用下 标区分的变量中,这些变量称为下标变量或数组元素。 如:a[0]、a[1]…a[i]。 每个下标变量相当于一个简单变量,数组的类型也就是该 数组的下标变量的数据类型。 数组属于构造类型。构造类型的数据是由基本类型数据按 一定规则构成的。
C语言(第七章数组)

对部分元素赋初值(前面的连续元素)。如: int b[10]={0,1,2,3,4};
表示数组元素的值为:
b[0]=0; b[1]=1; b[2]=2; b[3]=3; b[4]=4; 后5个元素的初值为0。
注意:不能只对不连续部分元素或后面的连续
元素赋初值。 语句: int a[10]={, , , , ,1,2,3,4,5};
main ( ) { int a[2] [3]={{1, 2,3},{4, 5,6}}; int b[3] [2], i, j; printf("array a: \n"); for (i=0; i<=1; i++) { for (j=0; j<=2; j++) { printf("%5d", a[i][j]); b[j][i]=a[i][j]; } printf("\n"); } printf("array b:\n"); for (i=0; i<=2; i++) { for (j=0; j<=1; j++) printf("%5d", b[i]j]); printf("\n"); } }
运行结果如下:
1
1
2
3
5
8
89
13
144
21
133
34
377
55
610
987
1597
1584
4181
6765
四、简单预处理指令
1. 指令格式:
#define 符号常量
2. 指令作用
文本串
用整型表达式替换程序中所有的符号常量。
c语言第四章 数组和结构.ppt

C语言程序设计
10
任务4.2 筛法依据
方法的依据:
1到200这些自然数可以分为3类: (1)单位数,即1 (2)素数,大于1,且只能被1和它自身整除 (3)合数,除了1和自身,还有其他正因子 筛法实际上是筛去合数,留下素数 为了提高筛法效率,注意到: 如n为合数(这里是200),c为n的大于1的最
赋过初值后的ice变量如下图所示
C语言程序设计
22
4.2.3 二维数组中的元素存放顺序
在内存中二维数组中的元素是按行存放的。 如上例中的二维数组 ice,其元素的存放顺序 如下图所示。
•二维数组一经定义, 系统就为其分配了连 成一片的存储区域, 这个区域有个首地址, 即ice[0][0]的地址, C/C++规定数组名就是 这个首地址的符号地 址
(5)第二遍扫描后, a[4]位置已定,以 后也不需再与a[4] 交换
以此类推每遍扫描 后都有一个元素的 位置已定,以后不 需再与之进行比较
C语言程序设计
15
冒泡排序算法设计
为了表述方便,定义以下3个变量
–(1)待排序的数的个数n(此处为6) –(2)扫描遍数j(j=1,2,3,…n-1) –(3)每遍扫描时待比较元素的下标i(i=1,2,3,…n-j)
定义格式:
–类型标识符 数组名[一维数组个数][一维数组中元素 的个数]
用于描述冰山高度的二维数组的定义为:
–int ice[5][7];
–上面语句定义了名为ice的数组,它包含5个一维数组, ice[0],ice[1]…ice[4],每个一维数组含7个整型元
素。
二维数组是带两个下标的变量,第一个下标规定
h[4]=‘4’;
C语言数组学习课件

选择法排序(由小到大)
基本思想:先选择要参加排序的数和要存放的位置。 具体做法:每一次在某个范围内先找到最小元素,再放到 相应位置。
for ( i = 0 ; i < n – 1 ; i ++ ) 在 a[i] ~ a[n-1] 范围内找 最小元素 a[mini] , 与 a[i] 互换 注意:要记下最小值 的位置mini。 1 a[0] a[1] a[2] a[3] a[4] 4 3 4
插入法排序
上网查资料,了解排序思想 写出程序 还有其他的排序法吗?上网查资料
一维数组编程举例
用“折半查找法”在有序数组中找某数。可能找得到,也可能找 不到。(sz_4End.c)
思路:与中间的数比较,决定是向上找还是向下找。 向上找就修改下限,向下找就修改上限。 算法 上下限赋初值: low=0; high=n-1; while(low<high) { 求出中间的位置mid = (low + high )/2; 与中间的数比较: if( n < a[mid] ) 向上找 else if ( n > a[mid] ) 向下找 else break ; (找到了,mid 就是对应的位置) } 输出信息
存放10个学生的成绩 int score[10]; 存放 n 个数,n 不多于10
int a[10]; scanf("%d",&n); int a[n]; scanf(“%d”, &n);
一维数组的引用
一维数组的引用
数组名[下标] 特别说明: 必须先定义,才能使用数组元素。 数组元素要一个一个地引用。(除字符串) 下标必须为整数,可以是常量,也可以是变量。 下标不许超出数组的长度!! 数组定义后,数组名代表数组的首地址,其中的元素 按照下标依次存放。
C语言第七章

4、strcpy(字符数组1,字符数组2):
例:main()
把“字符串2”的值拷贝到“字符串1”中。
{char str1[10]; char str2[ ]="Chinese"; strcpy(str1,str2); puts(str1); } 输出: Chinese 说明: (1)字符数组1的长度不应小于字符串2的长度。 (2)“字符数组1”必须写成数组名形式,“串2”可以是字符数 组名,也可以是一个字符串常量。如:strcpy(str1,“China”); (3)拷贝是‘\0‟一起拷贝。 (4)不能用赋值语句将一个字符常量或字符数组直接赋给一个 字符数组。 (5)可以用strcpy函数将字符串2中前面若干个字符拷贝到字符 数组1中去。 例如:strcpy(str1,str2,2);
3、部分元素赋值: int a[3][4] = {{1},{5},{9}}; 1 0 0 0 5 0 0 0 9 0 0 0
仅对a[0][0]、a[1][0]、a[2][0]赋值,编译器自动为未赋
值元素指定初值0。
4、如果对全部元素赋初值,则第一维的长度可以 不指定,但必须指定第二维的长度。 int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 与下面定义等价: int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
[例6.6]: main() { int i; char c1[ ] = {"How are you?"}; char c2[15]; scanf("%s", c2 ); for(i=0;i<12;i++) printf("%c", c2[i] ); printf("%s", c1 ); } 程序运行时:输入:abcdefghijklmno 结果:abcdefghijklHow are you?
《c语言程序设计教学资料》第8章---数组

printf(“%d”, a[i]);
一维数组的初始化
不为自动数组初始化,数组中的元素值是不确定的 不为静态或外部数组初始化,则对数值型数组元素, 初值为0,而对字符型数组元素,初值为空字符 ‘\0’ 对数组元素初始化的实现方法:
1.在定义数组时对数组元素赋以初值。
例如: int a[10]={0,1,2,3,4,5,6,7,8,9}; 将数组元素的初值依次放在一对花括弧内。经过上 面的定义和初始化之后,a[0]=0,a[1]=1,a[2]=2, a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8, a[9]=9。
0
30
b1]
1
34
b[2]
2
38
b[3]
3
3c
b[4]
4
40
c
52
44
a
61
48
i
14678910235
4c
b[8]
8
50
b[9]
9
54
b[10]
10
58
c和a的值因数组越界编辑p而pt 被破坏了 b[11]
11
5c
二维数组程序举例
例: 将一个二维数组行和列元素互换,存到另一个二维数 组中。
数组名 [下标] 下标可以是整型常量或整型表达式。例如: a[0]=a[5]+a[7]-a[2*3]
注意
定义数组时用到的“数组名[常量表达式]” 和引用数 组元素时用到的“数组名[下标]” 是有区别的。 例如∶ int a[10]; // 定义数组长度为10
t=a[6]; //引用a数组中序号为6的元素
sizeof(数组名)
编辑ppt
一维数组的初始化
不为自动数组初始化,数组中的元素值是不确定的 不为静态或外部数组初始化,则对数值型数组元素, 初值为0,而对字符型数组元素,初值为空字符 ‘\0’ 对数组元素初始化的实现方法:
1.在定义数组时对数组元素赋以初值。
例如: int a[10]={0,1,2,3,4,5,6,7,8,9}; 将数组元素的初值依次放在一对花括弧内。经过上 面的定义和初始化之后,a[0]=0,a[1]=1,a[2]=2, a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8, a[9]=9。
0
30
b1]
1
34
b[2]
2
38
b[3]
3
3c
b[4]
4
40
c
52
44
a
61
48
i
14678910235
4c
b[8]
8
50
b[9]
9
54
b[10]
10
58
c和a的值因数组越界编辑p而pt 被破坏了 b[11]
11
5c
二维数组程序举例
例: 将一个二维数组行和列元素互换,存到另一个二维数 组中。
数组名 [下标] 下标可以是整型常量或整型表达式。例如: a[0]=a[5]+a[7]-a[2*3]
注意
定义数组时用到的“数组名[常量表达式]” 和引用数 组元素时用到的“数组名[下标]” 是有区别的。 例如∶ int a[10]; // 定义数组长度为10
t=a[6]; //引用a数组中序号为6的元素
sizeof(数组名)
编辑ppt
《C语言程序设计》课件 第五章 数组

若二维数组名a代表的起始地址为5948,则它的三个元 素a[0]、a[1]和a[2]分别对应了起始地址5948、5956和 5964。
a(5948)
a[2](5964) a[1](5956) a[0](5948) 图 5-10
a[2][1] (5968) a[2][0] (5964) a[1][1] (5960) a[1][0] (5956) a[0][1] (5952) a[0][0](5948)
return 0;
}
5.1.4一维数组程序举例
3.用选择法对输入的n个学生的单科成绩进行 从小到大排序。
编程思路: 直接选择排序的过程是:首先在所有数据中找出值 最小(最大)的数据,把它与第1个数据交换,然后 在其余的数据中找出值最小(最大)的数据,与第2 个数据交换......依次类推,这样,n个数据经过n-1轮 交换后可得到有序结果。
printf("%3d ",a[i]); printf("\n"); return 0; }
5.1.3 一维数组的初始化 5.1.3 一维数组的初始化
数组初始化常见的格式:
1.用大括号括起来的常量表达式列表,常量表达式 之间用逗号进行分隔: int a[10]={1,2,3,4,5,6,7,8,9,10};
注意:
不要将a[i][j]写成a[i,j],否则编译系统会将逗号分隔 符作为逗号运算符处理,即将a[i,j]视为a[j]。
5.2.2二维数组元素的引用
可以将二维数组看成是特殊的一维数组。
例如,二维数组a[3][2]可以看成是长度为3的一维数组, 所含的3个数组元素分别为:a[0]、a[1]、a[2]
for(i=0;i<3;i++) for(j=0;j<5;j++)
a(5948)
a[2](5964) a[1](5956) a[0](5948) 图 5-10
a[2][1] (5968) a[2][0] (5964) a[1][1] (5960) a[1][0] (5956) a[0][1] (5952) a[0][0](5948)
return 0;
}
5.1.4一维数组程序举例
3.用选择法对输入的n个学生的单科成绩进行 从小到大排序。
编程思路: 直接选择排序的过程是:首先在所有数据中找出值 最小(最大)的数据,把它与第1个数据交换,然后 在其余的数据中找出值最小(最大)的数据,与第2 个数据交换......依次类推,这样,n个数据经过n-1轮 交换后可得到有序结果。
printf("%3d ",a[i]); printf("\n"); return 0; }
5.1.3 一维数组的初始化 5.1.3 一维数组的初始化
数组初始化常见的格式:
1.用大括号括起来的常量表达式列表,常量表达式 之间用逗号进行分隔: int a[10]={1,2,3,4,5,6,7,8,9,10};
注意:
不要将a[i][j]写成a[i,j],否则编译系统会将逗号分隔 符作为逗号运算符处理,即将a[i,j]视为a[j]。
5.2.2二维数组元素的引用
可以将二维数组看成是特殊的一维数组。
例如,二维数组a[3][2]可以看成是长度为3的一维数组, 所含的3个数组元素分别为:a[0]、a[1]、a[2]
for(i=0;i<3;i++) for(j=0;j<5;j++)
C语言编程课件数组

四、二维数组的初始化(按行存放) 1、按存放顺序赋值 如:int x[2][3]={1,2,3,4,5,6}; 结果为:x[0][0]=1,x[0][1]=2,x[0][2]=3 x[1][0]=4,x[1][1]=5,x[1][2]=6 2、按行赋值 如:int x[2][3]={{1,2,3},{4,5,6}}; 结果同上。 3、部分赋值 如:static int x[2][3]={1,2,4}; 结果为:x[0][0]=1,x[0][1]=2,x[0][2]=4 x[1][0]=0,x[1][1]=0,x[1][2]=0 如:static int x[2][3]={{1,2},{4}}; 结果为:x[0][0]=1,x[0][1]=2,x[0][2]=0 x[1][0]=4,x[1][1]=0,x[1][2]=0
3、若对全部数组元素赋初值时,可以不指定数组长度。 如:int c[]={1,2,3,4,5}; 自动定义c数组长度为5 注意:若被定义数组长度与提供初值的个数不相同, 则数组长度不能省略。 如:int a[10]={1,2,3,4};
#include <stdio.h> void main() {int a[5]={1,2,3,4,5}; int b[5]={1,2,3}; int c[ ]={1,2,3,4,5}; static int d[5]; int e[5]; int i; for(i=0;i<5;i++)printf(“%d”,a[i]);printf(“\n”); for(i=0;i<5;i++)printf(“%d”,b[i]);printf(“\n”); for(i=0;i<5;i++)printf(“%d”,c[i]);printf(“\n”); for(i=0;i<5;i++)printf(“%d”,d[i]);printf(“\n”); for(i=0;i<5;i++)printf(“%d”,e[i]);printf(“\n”); }
C语言 一维数组的定义和引用 数组幻灯片

}
运行结果: a[4]=4 a[3]=3 a[2]=2 a[1]=1 a[0]=0
5
7.1.3 一维数组的初始化 实现的方法有:
1.定义时对数组元素初始化 如: int a[5]={1, 2, 3, 4, 5};
2. 只给部分元素赋值 如: int a[5]={1, 3, 5};
3. 初始化时给全部元素赋0值 如:int a[5]={0,0,0,0,0}; 或 int a[5]={0};
编译指出:constant expression
required in function main (主函数
中要求常量表达式) 4
7.1.2 一维数组元素的引用
引用规则:1.先定义,后使用。 2.引用形式:数组名[下标] 下标可以是整、字符 型的常量、变量或表达式。
3.引用方法:针对元素而不是整个数组。 如:a[0]=a[‘b’ - ‘a’] + a[‘ b’ -96] +a[3] - a[2*2]
for(i=1; i<=6-j; i++) if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf (“the sorted numbers:\ n”); for(i=1;i<7;i++) printf(“%d _ _”,a[i]);
}
x a[0] 9 a[1] 8 a[2] 5 a[3] 4 a[4] 2 a[5] 0 a[6]
例T7-1. C 对数组a 顺序赋值,逆序输出
main( )
{int a[5],i; for(i=0; i<=4; i++)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
又如:int a[ ][4]={{0,0,3},{0},{0,10}};
12 3 a=
45 6
00 30 a= 0 0 0 0
0 10 0 0
7.2.4 二维数组程序举例 例T7-4 将一个二维数组的行和列元素互换, 存到另一个二维数组中 。
123 a=
456
14 b= 2 5
36
T7-4.c两数组行列互换 main( )
printf("a[%d][%d]=%f\n",i,j,a[i][j]);}
}
3.多维数组的定义和在内存中的存放顺 序:
如 int a[2][3][4]; 共24个元素,在内存中排列的顺序是 :第三维变化最快,用 形式:数组名[下标][下标] 其中:下标是整型或字符型的常量,变量或表 达式。(定义时不能使用变量)
2. 只给部分元素赋值 如: int a[5]={1, 3, 5};
3. 初始化时给全部元素赋0值 如:int a[5]={0,0,0,0,0}; 或 int a[5]={0};
4. 对全部元素赋初值时可以不指出长度 如:int a[5]={2,4,6,8,10};
或 int a[ ]={2,4,6,8,10}; 效果一样 。
printf (“a[5]=%d\t”,a[5]);
printf (“a[6]=%d\ n”,a[6]);
}
运行结果:
a[0]=1
a[1]=2
a[2]=3
a[3]=4
a[4]=5
a[5]=-30
a[6]=285
4.数组大小的定义只能是常量,而不能是变 量或动态地定义。 例7-0-2. C main( ) { int n=5,a[n];
3.引用方法:针对元素而不是整个数组。 如:a[0]=a[‘b’ - ‘a’] + a[‘ b’ -96] +a[3] - a[2*2]
例T7-1. C 对数组a 顺序赋值,逆序输出
main( )
{int a[5],i; for(i=0; i<=4; i++)
0 a[0] 1 a[1]
a[i]=i;
0 b[0][0] a[0][0]=1
1 b[1][0] a[0][1]=2
2 b[2][0] a[0][2]=3
0 b[0][1] a[1][0]=4
1 b[1][1] a[1][1]=5
2 b[2][1] a[1][2]=6
例T7-5.c 有3 × 4矩阵,求出其中最大元素所在的行号和列号 main( )
int a[5] a[0], a[1], a[2], a[3], a[4] 5个元素 ,下标从0 ~ 4
注意:
在Turbo C 中超过定义的数组下标元素是可以引用的,系 统不作检查。
例T7-0-1.c
main( )
{int i, a[5];
for(i=0;i<=4;i++)
printf (“a[%d]=%d\ n”,i,a[i]=i+1);
5444 4522 2250 0005
第三轮
42
24
2
00
0
4
2
第四轮 第五轮
此处:n=6 外层循环j(1~n-1)次
内层循环i (1~n-j)次
main( ) {int a[7]; int i, j , t; printf (“input 6 numbers:\ n”); for(i=1;i<7;i++) scanf(“%d”, &a[i ]; printf (“\ n”); for(j=1; j<=5; j++)
for(i=1; i<=6-j; i++) if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf (“the sorted numbers:\ n”); for(i=1;i<7;i++) printf(“%d _ _”,a[i]);
}
x a[0] 9 a[1] 8 a[2] 5 a[3] 4 a[4] 2 a[5] 0 a[6]
比较a[i][j]>max 吗 a[0][0]>max a[0][1]>max max 2, r=0, c=1 a[0][2]>max max 3, r=0, c=2 a[0][3]>max max 4, r=0, c=3 a[1][0]>max max 9, r=1, c=0 a[1][1]>max a[1][2]>max a[1][3]>max a[2][0]>max a[2][1]>max max 10, r=2, c=1 a[2][2]>max a[2][3]>max
例T7-1-1.c 定义时对数组元素初始化
main( )
{ int i; int a[5]={2,4,6,8,10};
运行结果: 2
for(i=0;i<=4;i++)
4
6
printf(“%d\n”,a[i]);
8
}
10
注意:static 存储类别,这和新ANSI新标准 一致, 若采用static,数组元素的值被存储在静态 区。
运行:input 6 numbers: 输入:9 8 5 4 2 0 输出:0 2 4 5 8 9
7.2 二维数组的定义和引用 7.2.1 二维数组的定义 1.一般形式:类型说明符 数组名[常量表达式][常量 表达式]
如:float a[3][4] 定义数组a具有三行四列 在C中,可将二维数组看着是特殊形式的一维数组。
如上述定义可看着是具有三个元素的一维数组, 而每个元素又可看作是包含四个元素的一维数组。
因此,上述定义相当于: float a[0][4], a[1][4], a[2][4]
注 :实际应用时若如此定义则被认为是重定义。 2.二维数组各个元素在内存中的存放顺序是:
按先行后列的顺序依次存放
例T7-3-1.c
1 23 a=
2.按数组元素排列的顺序赋初值
4 56
如:int
a[2][3]={1,2,3,4,5,6};
1 23
3.对部分元素赋初值,按行赋值 a=
较直观
4 56
如:int
a[2][3]={{2,5},{3}};
2 50
a=
3 00
4.全部元素赋值时,第一维下标可省略 如: int a[ ][3]={1,2,3,4,5,6};
for(i=0;i<2;i++)
for(j=0;j<3;j++) {scanf("%f",&k); a[i][j]=k; }
for(j=0;j<3;j++) scanf(“%f%f”,&a[0][j],&a[1][j])
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{printf("&a[%d][%d]=%x ",i,j,&a[i][j]);
{int i, j, r=0,c=0, max;
int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};
max=a[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=3;j++) if(a[i][j]>max) {max=a[i][j]; r=i;c=j}
如: a[1][2] a[i][j]
1.数组元素可出现在表达式中,如: a[1][2]=a[2][2]/2 2.使用数组元素时,应注意不要超出其定义的 范围;
如: int a[2][3]; a[2][3]=5;
7.2.3 二维数组的初始化
1.按行给二维数组赋初值
如: int
a[2][3]={{1,2,3},{4,5,6}};
{ if(i%5==0) printf (“\ n” );
printf (“%12d”,f[i]; 运行结果:
}
1
1
2
}
8
13
21
89 144 233
987 1597 2584
f[i]=f[i-2]+f[i-1] f[2]=f[1]+f[0]=2 f[3]=f[2]+f[1]=3 f[4]=f[3]+f[2]=5 f[5]=f[4]+f[3]=8 f[6]=f[5]+f[4]=13 f[7]=f[6]+f[5]=21
2 a[2]
for(i=4;i>=0;i- -)
3 a[3]
printf( “a[%d]=%d\n”, i, a[i ]); 4 a[4]
}
运行结果: a[4]=4 a[3]=3 a[2]=2 a[1]=1 a[0]=0
7.1.3 一维数组的初始化 实现的方法有:
1.定义时对数组元素初始化 如: int a[5]={1, 2, 3, 4, 5};
a[1]=100; printf (“a[1]=%d\n”,a[1]); }
编译指出:constant expression
required in function main (主函数
中要求常量表达式)
7.1.2 一维数组元素的引用
引用规则:1.先定义,后使用。 2.引用形式:数组名[下标] 下标可以是整、字符 型的常量、变量或表达式。
{ int a[2][3]={{1,2,3},{4,5,6}};
12 3 a=
45 6
00 30 a= 0 0 0 0
0 10 0 0
7.2.4 二维数组程序举例 例T7-4 将一个二维数组的行和列元素互换, 存到另一个二维数组中 。
123 a=
456
14 b= 2 5
36
T7-4.c两数组行列互换 main( )
printf("a[%d][%d]=%f\n",i,j,a[i][j]);}
}
3.多维数组的定义和在内存中的存放顺 序:
如 int a[2][3][4]; 共24个元素,在内存中排列的顺序是 :第三维变化最快,用 形式:数组名[下标][下标] 其中:下标是整型或字符型的常量,变量或表 达式。(定义时不能使用变量)
2. 只给部分元素赋值 如: int a[5]={1, 3, 5};
3. 初始化时给全部元素赋0值 如:int a[5]={0,0,0,0,0}; 或 int a[5]={0};
4. 对全部元素赋初值时可以不指出长度 如:int a[5]={2,4,6,8,10};
或 int a[ ]={2,4,6,8,10}; 效果一样 。
printf (“a[5]=%d\t”,a[5]);
printf (“a[6]=%d\ n”,a[6]);
}
运行结果:
a[0]=1
a[1]=2
a[2]=3
a[3]=4
a[4]=5
a[5]=-30
a[6]=285
4.数组大小的定义只能是常量,而不能是变 量或动态地定义。 例7-0-2. C main( ) { int n=5,a[n];
3.引用方法:针对元素而不是整个数组。 如:a[0]=a[‘b’ - ‘a’] + a[‘ b’ -96] +a[3] - a[2*2]
例T7-1. C 对数组a 顺序赋值,逆序输出
main( )
{int a[5],i; for(i=0; i<=4; i++)
0 a[0] 1 a[1]
a[i]=i;
0 b[0][0] a[0][0]=1
1 b[1][0] a[0][1]=2
2 b[2][0] a[0][2]=3
0 b[0][1] a[1][0]=4
1 b[1][1] a[1][1]=5
2 b[2][1] a[1][2]=6
例T7-5.c 有3 × 4矩阵,求出其中最大元素所在的行号和列号 main( )
int a[5] a[0], a[1], a[2], a[3], a[4] 5个元素 ,下标从0 ~ 4
注意:
在Turbo C 中超过定义的数组下标元素是可以引用的,系 统不作检查。
例T7-0-1.c
main( )
{int i, a[5];
for(i=0;i<=4;i++)
printf (“a[%d]=%d\ n”,i,a[i]=i+1);
5444 4522 2250 0005
第三轮
42
24
2
00
0
4
2
第四轮 第五轮
此处:n=6 外层循环j(1~n-1)次
内层循环i (1~n-j)次
main( ) {int a[7]; int i, j , t; printf (“input 6 numbers:\ n”); for(i=1;i<7;i++) scanf(“%d”, &a[i ]; printf (“\ n”); for(j=1; j<=5; j++)
for(i=1; i<=6-j; i++) if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf (“the sorted numbers:\ n”); for(i=1;i<7;i++) printf(“%d _ _”,a[i]);
}
x a[0] 9 a[1] 8 a[2] 5 a[3] 4 a[4] 2 a[5] 0 a[6]
比较a[i][j]>max 吗 a[0][0]>max a[0][1]>max max 2, r=0, c=1 a[0][2]>max max 3, r=0, c=2 a[0][3]>max max 4, r=0, c=3 a[1][0]>max max 9, r=1, c=0 a[1][1]>max a[1][2]>max a[1][3]>max a[2][0]>max a[2][1]>max max 10, r=2, c=1 a[2][2]>max a[2][3]>max
例T7-1-1.c 定义时对数组元素初始化
main( )
{ int i; int a[5]={2,4,6,8,10};
运行结果: 2
for(i=0;i<=4;i++)
4
6
printf(“%d\n”,a[i]);
8
}
10
注意:static 存储类别,这和新ANSI新标准 一致, 若采用static,数组元素的值被存储在静态 区。
运行:input 6 numbers: 输入:9 8 5 4 2 0 输出:0 2 4 5 8 9
7.2 二维数组的定义和引用 7.2.1 二维数组的定义 1.一般形式:类型说明符 数组名[常量表达式][常量 表达式]
如:float a[3][4] 定义数组a具有三行四列 在C中,可将二维数组看着是特殊形式的一维数组。
如上述定义可看着是具有三个元素的一维数组, 而每个元素又可看作是包含四个元素的一维数组。
因此,上述定义相当于: float a[0][4], a[1][4], a[2][4]
注 :实际应用时若如此定义则被认为是重定义。 2.二维数组各个元素在内存中的存放顺序是:
按先行后列的顺序依次存放
例T7-3-1.c
1 23 a=
2.按数组元素排列的顺序赋初值
4 56
如:int
a[2][3]={1,2,3,4,5,6};
1 23
3.对部分元素赋初值,按行赋值 a=
较直观
4 56
如:int
a[2][3]={{2,5},{3}};
2 50
a=
3 00
4.全部元素赋值时,第一维下标可省略 如: int a[ ][3]={1,2,3,4,5,6};
for(i=0;i<2;i++)
for(j=0;j<3;j++) {scanf("%f",&k); a[i][j]=k; }
for(j=0;j<3;j++) scanf(“%f%f”,&a[0][j],&a[1][j])
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{printf("&a[%d][%d]=%x ",i,j,&a[i][j]);
{int i, j, r=0,c=0, max;
int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};
max=a[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=3;j++) if(a[i][j]>max) {max=a[i][j]; r=i;c=j}
如: a[1][2] a[i][j]
1.数组元素可出现在表达式中,如: a[1][2]=a[2][2]/2 2.使用数组元素时,应注意不要超出其定义的 范围;
如: int a[2][3]; a[2][3]=5;
7.2.3 二维数组的初始化
1.按行给二维数组赋初值
如: int
a[2][3]={{1,2,3},{4,5,6}};
{ if(i%5==0) printf (“\ n” );
printf (“%12d”,f[i]; 运行结果:
}
1
1
2
}
8
13
21
89 144 233
987 1597 2584
f[i]=f[i-2]+f[i-1] f[2]=f[1]+f[0]=2 f[3]=f[2]+f[1]=3 f[4]=f[3]+f[2]=5 f[5]=f[4]+f[3]=8 f[6]=f[5]+f[4]=13 f[7]=f[6]+f[5]=21
2 a[2]
for(i=4;i>=0;i- -)
3 a[3]
printf( “a[%d]=%d\n”, i, a[i ]); 4 a[4]
}
运行结果: a[4]=4 a[3]=3 a[2]=2 a[1]=1 a[0]=0
7.1.3 一维数组的初始化 实现的方法有:
1.定义时对数组元素初始化 如: int a[5]={1, 2, 3, 4, 5};
a[1]=100; printf (“a[1]=%d\n”,a[1]); }
编译指出:constant expression
required in function main (主函数
中要求常量表达式)
7.1.2 一维数组元素的引用
引用规则:1.先定义,后使用。 2.引用形式:数组名[下标] 下标可以是整、字符 型的常量、变量或表达式。
{ int a[2][3]={{1,2,3},{4,5,6}};