(文末送书)每日一练之二维数组
Posted 静Yu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(文末送书)每日一练之二维数组相关的知识,希望对你有一定的参考价值。
二维数组
二维数组的定义
1.二维数组的一般定义形式
类型标识符 数组名 [行常量表达式] [列常量表达式];
例如:
int a[3][4],b[3][5];
定义了两个二维数组,数组a有3行4列共12个元素,而数组b有3行5列共15个元素。
2.二维数组说明
(1)二维数组的逻辑形式虽然由行、列组成,例如数组a[3][4]的逻辑形式如图8-6所示,
但实际上,二维数组元素在内存中也是顺序存放的,排列顺序是“按行存放”,即先顺序存放第一行的元素,再存放第二行,以此类推,如图8-7所示。
(2)通过图8-7可知,设有一个mn的数组s,则第i行第j列的元素s[i][j]在数组中的位置为:in+j。(注意:行号、列号均从0开始计数)
二维数组元素的引用
1.二维数组元素的引用形式为:
数组名 [行下标表达式][列下标表达式]
例如:
a[2][0]
应用的是数组的第2行第0列的元素。
2.说明
(1)“行下标表达式”和“列下标表达式”都应是整形表达式或符号常量。
例如:a[2-1][3-2]、a[1]['b'-'a']
等都是合法的二维元素引用。
(2)“行下标表达式”和“列下标表达式”的值都应在合法的范围内。
(3)对于二维数组元素的引用,不能写成a[2,1]或a(2,1)的形式。
(4)对于二维数组元素的输入输出操作可以使用双重循环完成,一般用外层循环的循环变量充当行下标,用内层循环的循环变量充当列下标。
例如:定义一个3×3二维数组,输入数组元素的值,并以3×3矩阵的形式输出数据。
程序如下:
#include <stdio.h>
main()
int a[3][3];
int i,j;
for(i=0;i<3;i++) /*为数组输入数据*/
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
printf("%4d",a[i][j]);
printf("\\n"); /*每输出一行换行*/
程序执行,输入数据:
1 2 3 4 5 6 7 8 9
输出结果:
1 2 3
4 5 6
7 8 9
二维数组元素的初始化
同一维数组一样,也可以在定义二维数组时对二维数组进行初始化。对二维数组初始化有以下几种形式:
(1)分行对二维数组元素赋初值
初始化形式为:
类型标识符 数组名[行常量表达式][列常量表达式]=第0行初值表,第1行初值表,···,最后1行初值表;
例如:
int a[3][4]=1,2,3,4,5,6,7,8,9,10,11,12;
(2)按二维数组在内存中的排列顺序给各元素赋初值
初始化形式为:
类型标识符 数组名[行常量表达式][列常量表达式]=初值表;
例如:
int a[3][4]=1,2,3,4,5,6,7,8,9,10,11,12;
(3)对每行的部分元素赋初值
初始化形式与第一种相似,但可以不给全部元素赋初值。例如:
int a[3][4]=1,0,3,8;
初始化后数组中各元素的值为:
第一行:1 0 0 0
第二行:0 3 0 0
第三行:8 0 0 0
这种形式对非0元素较少时,比较方便,不必将所有的零都写出,只需说明非必要的数据即可。
(4)如果对全部元素都赋初值,则定义时,“行常量表达式”可以省略。但“列常量表达式”不能省略。系统会根据给出的初值总数和列数计算出行数。
所以上面三种元素初始化形式,可以以下述形式出现:
int a[][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;
int a[][4]=1,0,3,8;
二维数组实例
对于矩阵A:
1
2
3
4
5
6
7
8
9
\\beginmatrix 1&2&3\\\\ 4&5&6\\\\ 7&8&9\\\\ \\endmatrix
147258369
则A的转置B,满足B=a(i,j)=a(i,j),记A`=B。
1
4
7
2
5
8
3
6
9
\\beginmatrix 1&4&7\\\\ 2&5&8\\\\ 3&6&9\\\\ \\endmatrix
123456789
程序如下:
#include <stdio.h>
void main()
int a[3][3]=1,2,3,4,5,6,7,8,9;
int b[3][3];
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
b[i][j]=a[j][i];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
printf("%3d",b[i][j]);
printf("\\n");
送书福利 |
★内容翔实:本书共1000多页,主体内容分为两部分,第一部分为基础篇,横向地全面讲解组件;第二部分为实战篇,纵向地分析App主体结构的搭建。
★衔接连贯:每一部分由简至详论述,结合实战案例,通过图文分析方式来帮助读者透彻理解。在本书的指引下,读者可以在Flutter 的开发中不断突破瓶颈,更上一层楼。
★丰富示例:由简至繁提供了300多个示例,读者可以一边阅读一边练习,以掌握Flutter开发中使用的常见组件功能。本书提供的源码基础架构,读者可以直接在此基础上搭建企业级的应用。
特别喜欢这本书的小伙伴可以自行购买:
京东
当当
注意事项
- 抽奖方式:评论区抽一条走心评论
- 开奖时间:2022.1.21中午12:00
- 领奖方式:提前添加微信Kcyu68,关注开奖信息,中奖者微信发送领奖地址
文末送书 |
以上是关于(文末送书)每日一练之二维数组的主要内容,如果未能解决你的问题,请参考以下文章