二维数组
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数组
char str[5][20]=
{"China","Japan","USA","Russia","Canda" };
源自文库
通过使用str[i]来引用第i+1个字符串。
第 3章
数组
多个字符串的输入与输出可调用循环程序,按行 输入。如: char str[5][20]; int i; for(i=0;i<5;i++) gets(str[i]); 注意:此处str[i]代表第i+1行的整个字符串,是 一个地址的概念,不代表具体字符。
分行初始化
1 2 0 5 0 0
0 0 0 0 0 0
下列初始化是等价的: int a[3][4]={1,2,0,0,0,5}; int a[3][4]={{1,2,0,0},{0,5}}; 或 int a[3][4]={{1,2},{0,5}}; int a[ ][4]={1,2,0,0,0,5,0,0,0}; int a[ ][4]={{1,2},{0,5},{0}};
0
-34
10 32
4
-3
求矩阵的最小值及其所在的位置。
第 3章
数组
main() { int a[3][4]={{2,-8,20,0}, {9,5,-38,-34}, {10,32,4,-3}}; int i,j,row,col,min; 〖运行结果〗: min=a[0][0]; row=0; col=0; min=-38,row=2,col=3 for(i=0;i<3;i++) for(j=0;j<4;j++) if(min>a[i][j]) { min=a[i][j]; row=i; col=j; } printf("min=%d,row=%d,col=%d",min,row+1,col+1); }
第 3章
数组
3.4二维字符数组
主要用来存储字符串序列
例如:有一组字符串序列 “China”、“Japan”、 “USA”、“Russia”、“Canda” ,如何存储字符 串序列????? 每个字符串用一个字符数组来存储, 则M个字符串需要用M个字符数组即行数是M 的二维字符数组来存储。
第 3章
第 3章
数组
编写程序输出上述字符串中最短的那个字符串。 #include "string.h" main() { char str[5][20]= {"China","Japan","USA","Russia","Canda" }; int pos=0,i;
for(i=0;i<5;i++) if(strlen(str[pos])>strlen(str[i])) pos=i; puts(str[pos]); }
〖运行结果〗: 请输入一个四阶矩阵: 1 2 3 4↙ 5 6 7 8↙ 9 10 11 12 ↙ 13 14 15 16 ↙ sum=102
第 3章
数组
实验五 二维数组
有四个学生,每个学生学3门课程,已知所有 学生的各门课成绩,分别求每门课的平均成绩 和总成绩及每个学生的总成绩和平均成绩,并 统计出总成绩最高者。 语文 数学 外语 总成绩 平均成绩 学生1 78 86 92 Х Х 学生2 62 73 65 Х Х 学生3 90 93 95 Х Х 学生4 82 73 86 Х Х 总成绩 平均成绩 Х Х Х Х Х Х
第 3章
数组
二维数组的存储: a0 元素按先行后列(行优先)的顺序存放 (原因:内 a[0][0] 1 a[0][1] 存是一维的) 2 a[0][2] 如果定义int a[3][4];二维数组a的存储顺序如右下图。
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]
1 2 3 4 下列初始化是等价的: 5 6 7 8 int a[3][4]= {1,2,3,4,5,6,7,8,9,10,11,12}; 9 10 11 12 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};
}
第 3章
数组
main() { int a[4][4],i,j,sum; sum=0; printf("请输入一个四阶矩阵:\n"); /*读入数据到数组a*/ for(i=0;i<4;i++) for(j=0;j<4;j++) scanf("%d", &a[i][j] ); /*函数调用计算周边元素值之和*/ sum = EdgeSum(a,4,4); /*输出结果*/ printf("sum=%d\n",sum); }
int a[ ][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
省略行数 省略行数
序初始化
第 3章
数组
② 部分元素初始化 没初始化的元素,数值型数组时值为0,字符型数组 时值为’\0’。 此时,可以按元素排列顺序(行优先)初始化也可以用 花括号分行赋初值,通过{}的个数来确定行数。 按元素排列顺 序初始化 如:有一个二维矩阵如下,请为其定义一个二维数组:
3 4 5 6 7 8 9 10 11
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]
二维数组a的逻辑结构
二维数组a的存 储结构示意图
第 3章
数组
2.二维数组的初始化 ① 全部元素初始化 行数可以省略,列数不能省略。可以按元素排列顺序 (行优先)整体初始化也可以用花括号分行赋初值。 分行初始化 按元素排列顺 如:有一个二维矩阵如下,请为其定义一个二维数组:
第 3章
数组
3.3.1 二维数组的定义和初始化 1.二维数组的定义 列数 行数 二维数组定义的一般形式为: 类型标识符 数组名[常量表达式1][ 常量表达式2]
元素类型 代表整个二维数组的 元素个数=行数*列数 首地址的地址常量。 如: int a[3][4]; 定义了一个3 行4列的存放整型数据的二维数组a, 共有12个元素,分别为: 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]。 数组中的元素在使用时与同类型的变量相同。
第 3章
数组
3.3 二维数组
问题引出:
如果,并求总分最高者。假设全班有30名同 学,本学期共有6门课,编写程序要统计每 名同学总分,并求总分最高者,那么怎么存 储30名同学的6门课的成绩呢?
此处应定义为二维数组:第一维表示班级人数, 第二维表示每人共有6门课成绩,定义形式如 下: 总结:二维数组由两 int score[30][6]; 个[ ]组成,前面为第一 维,后面为第二维。
【例16】函数调用编程:计算4×4阶矩阵的周边 元素值之和。 例如:输入一个四阶矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
sum=102
第 3章
数组
int EdgeSum(int a[][4], int m, int n) { int i,j,sum; for(i=0;i<m;i++) for(j=0;j<n;j++) if(i==0||i==m-1||j==0||j==n-1) sum+= a[i][j] ; return sum;
省略行数时
第 3章
数组
3.3.2 二维数组元素的最直接的引用方法—下标法 方法一:下标法
数组名[行标] [列标]
下标的范围, 0≤行标≤行数-1,0≤列标≤列数-1 。
二维数组的编程特点:使用 双重循环,外循环控制“行”, 内循环控制“列”。
第 3章
数组
【例15】已知矩阵
2 -8
9 5
20
-38
第 3章
数组
3.3.3函数调用对二维数组编程
参数传递规则:是地址传递,是将主调函数中数组空 间的首地址传给形参变量
形参:使用指向一维数组的指针变量,通常定义成二
维数组形式(行数可以省略,但列数不能省略)
实参:数组名
注意二维数组元素的输入和输出:借助于两层循环, 对每个元素逐个进行操作。
第 3章
数组