二维数组习题总结
数据结构第4章 数组和广义表

第4章数组和广义表【例4-1】二维数组A的每一个元素是由6个字符组成的串,其行下标i=0,1,…,8,列下标j=1,2,…,10。
若A以行为主序存储元素,A[8][5]的物理地址与当A按列为主序存储时的元素()的物理地址相同。
设每个字符占一个字节。
A.A[8][5] B.A[3][10] C.A[5][8] D.A[0][9]解:二维数A是一个9行10列的矩阵,即A[9][10]。
按行存储时,A[8][5]是第85个元素存储的元素。
而按列存储时,第85个存储的元素是A[3][10]。
即正确答案为B。
【例4-2】若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[n(n+1)/2]中,则在B中确定的位置k的关系为()。
A.jii+-2)1(*B.ijj+-2)1(*C.jii++2)1(*D.ijj++2)1(*解:如果a ij按行存储,那么它的前面有i-1行,其有元素个数为:1+2+3+…+(i-1)=i(i-1)/2。
同时它又是所在行的第j列,因此它排列的顺序还得加上j,一维数组B[n(n+1)/2]中的位置k与其下标的关系是:jii+-2)1(*。
因此答案为A。
【例4-3】已知n阶下三角矩阵A,按照压缩存储的思想,可以将其主对角线以下所有元素(包括主对角线上元素)依次存放于一维数组B中。
请写出从第一列开始以列序为主序分配方式时在B中确定元素a ij的存放位置的公式。
解:如果a ij按列存储,那么它的前面有j-1列,共有元素:n+(n-1)+(n-2)+ …+[n-(j-2)]=(j-1)*n-2)1)(2(--jj而它又是所在列的第i行,因此在它前的元素个数还得加上i。
因此它在一维数组B中的存储顺序为:(j-1)*n-2)1)(2(--jj+i【例4-4】已知广义表L=((x,y,z),a,(u,t,w)),从L表中取出的原子项ASCII码最大的运算是()。
二维数组、字符数组习题

5.选择出正确的输入语句(其中:char s[5],c; int b;) A)scanf(“%s%c”,s,c); D B)scanf(“%%d%c”,&b,&c); C)scanf(“%d%%c”,b,&c); D)scanf(“%s%c”,s,&c);
。
6.设有定义:char s[12]={“string”};,则 A printf(“%d\n”,strlen(s));的输出是 。 A)6 B)7 C) 11 D) 12
16.设输入的字符串为:The Windows‟95 Operating System则输出的第一行和最 后一行分别是: 和 __ The erating main() { char a[4][10],j,k; for(j=0;j<4;j++) scanf("%s",a[j]); for(j=0;j<4;j++) { k=j; printf("%s\n",a[j++]+k); } }
9.函数调用”strcat(strcpy(str1,str2),str3)”的功能是 C 。 A 将字符串str1复制到字符串str2中后再连接到字符串 str3之后 B 将字符串str1连接到字符串str2之后再复制到字符串 str3之后 C 将字符串str2复制到字符串str1中后再将字符串str3连 接到字符串str1之后 D 将字符串str2连接到字符串str1之后再将字符串str1复 制到字符串str3中 10.定义如下变量的数组: int i; int x[3][3]={1,2,3,4,5,6,7,8,9}; C
10000 02000 00300 00040 00005
C语言知识点总结8【二维数组】

C语言知识点总结8【二维数组】一、二维数组的定义●一个3行,4列的二维数组。
其行号:0,1,2;其列号:0,1,2,3●最大下标的元素为a[2][3],没有a[3][4]这个元素●数组共有3行,每一行都是:4个元素的一维数组,每一行的数组名分别为:a[0],a[1],a[2]●从整体看,任何一个二维数组都可以看成是一个一维数组,只不过其数组元素又是一个一维数组。
●二维数组定义同时若有初始化,可以省略行号不写:如int a[][3]={1,2,3,4,5,6};系统会按照数据的个数,和规定的列数,来确定数据分几行?●二维数组定义同时若有初始化,可以省略行号不写,但列号不能省略:如int a[3][ ]={1,2,3,4,5};系统无法按照数据的个数,和规定的行数,来确定数据分几列。
二、二维数组的存储及地址关系二维数组在计算机中的存储是按行连续存储。
先保存第一行,在第一行末尾开始存第二行,依此类推。
这里,a是a[0]的地址,a[0]是数组元素a[0][0]的地址,则a是地址的地址,即二级地址三、 二维数组的初始化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、 部分元素赋值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};四、 二维数组的输出五、二维数组的输入六、二维数组的应用案例1:计算一个二维数组的主对角线元素之和主对角线元素的特点:行号与列号相同。
选择性求和。
反对角线元素的特点:?#include<stdio.h>void main(){int a[4][4]={{1,1,1,1},{2,2,2,2},{3,3,3,3},{4,4,4,4}};int i,j;int s=0;for(i=0;i<4;i++)for(j=0;j<4;j++)if(i==j)s=s+a[i][j];printf("%4d\n",s);}案例2:一共有5名同学,参加了3门课程的考试。
c语言二维数组经典例题

c语言二维数组经典例题题目:有一个3×4的二维数组,求该二维数组中的最大元素及其所在的行和列。
#include <stdio.h>int main() {int arr[3][4] = {{1, 5, 3, 4},{9, 2, 7, 8},{6, 3, 5, 2}};int max = arr[0][0];int row = 0, col = 0;// 遍历二维数组for (int i = 0; i < 3; i++) {for (int j = 0; j < 4; j++) {if (arr[i][j] > max) {max = arr[i][j];row = i;col = j;}}}printf("最大元素是 %d,位于第 %d行,第 %d列\n", max, row + 1, col + 1);return 0;}题目解析:1. 初始化二维数组- 首先定义并初始化了一个3×4的二维数组`arr`。
这个二维数组有3行4列,存储了一些整数元素。
2. 寻找最大元素- 先假设二维数组的第一个元素`arr[0][0]`为最大元素,将其赋值给变量`max`,并记录其行索引为0(`row = 0`),列索引为0(`col = 0`)。
- 然后使用嵌套的`for`循环遍历整个二维数组。
外层`for`循环控制行,内层`for`循环控制列。
- 在循环中,对于每个元素`arr[i][j]`,如果它大于当前的最大元素`max`,则更新`max`的值为`arr[i][j]`,同时更新`row`为当前行`i`,`col`为当前列`j`。
3. 输出结果- 根据找到的最大元素`max`以及其所在的行`row`和列`col`,输出结果。
需要注意的是,由于数组索引从0开始,而在实际生活中我们习惯从1开始计数行和列,所以在输出行和列的时候,我们输出`row + 1`和`col + 1`。
信息学奥赛 二维数组题

信息学奥赛二维数组题一、二维数组的创建与初始化二维数组可以看作是数组的数组,即由多个一维数组组成。
在大多数编程语言中,二维数组的创建与初始化可以通过指定行数和列数,以及元素初始值来实现。
例如,在C++中,可以这样创建一个3行2列的二维数组并初始化:int a[3][2] = {{1, 2}, {3, 4}, {5, 6}};这个二维数组有3行和2列,其元素值如下:1 23 45 6二、二维数组的遍历与元素访问遍历二维数组就是依次访问数组中的每个元素。
对于行优先的遍历方式,可以使用两个嵌套的循环来实现。
例如,在C++中,可以这样遍历上面的二维数组:for (int i = 0; i < 3; i++) {for (int j = 0; j < 2; j++) {cout << a[i][j] << " ";}cout << endl;}输出结果为:1 23 45 6三、二维数组的查找二维数组的查找可以通过遍历数组来实现。
具体来说,可以定义两个循环变量来依次访问数组中的每个元素,然后判断该元素是否为目标值。
如果找到了目标值,则返回该元素的位置;否则返回未找到。
例如,在C++中,可以这样查找上面的二维数组中是否包含某个值:bool find(int a[3][2], int target) {for (int i = 0; i < 3; i++) {for (int j = 0; j < 2; j++) {if (a[i][j] == target) {return true;}}}return false;}四、二维数组的排序二维数组的排序可以使用一维数组排序算法进行排序。
例如,可以使用冒泡排序算法对二维数组按照每一行的元素进行排序。
具体来说,可以定义一个一维数组来存储每一行的元素,然后对一维数组进行冒泡排序。
最后将排序后的一维数组合并回二维数组。
java二维数组练习题

java二维数组练习题1) 数组的元素通过来访问,数组Array的长度为。
2) 数组复制时,”=“将一个数组的传递给另一个数组。
3) 没有显式引用变量的数组称为数组。
4) JVM将数组存储在中。
5) 数组的二分查找法运用的前提条件是数组已经。
6) 矩阵或表格一般用维数组表示。
7) 如果把二维数组看成一维数组,那么数组的元素是数组。
8) Java中数组的下标的数据类型是。
9) 不用下标变量就可以访问数组的方法是。
10) 数组最小的下标是。
11) arraycopy的最后一个参数指明。
12) 向方法传递数组参数时,传递的是数组的。
13) 线性查找法的平均查找长度为。
14) 数组初始化包括。
15) 数组下标访问超出索引范围时抛出异常16) 浮点型数组的默认值是。
17) 对象型数组的默认值是。
18) 对象类型的数组虽然被默认初始化,但是并没有构造函数。
19) 二维数组的行的长度不同。
20) 数组创建后其大小改变。
二选择题1. 下面错误的初始化语句是___A. char str[]=“hello”;B. char str[100]=“hello”;C. char str[]={‘h’,’e’,’l’,’l’,’o’};D. char str[]={‘hello’};2. 定义了一维int型数组a[10]后,下面错误的引用是___A.a[0]=1;B.a[10]=2;C.a[0]=5*2;D.a[1]=a[2]*a[0];3. 下面的二维数组初始化语句中,正确的是____A. float b[2][2]={0.1,0.2,0.3,0.4};B. int a[][]={{1,2},{3,4}};C. int a[2][]= {{1,2},{3,4}};D. float a[2][2]={0};4. 引用数组元素时,数组下标可以是____A.整型常量B.整型变量C.整型表达式D.以上均可5. 定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数为____A.4B.25C. 18D. 176. 下列初始化字符数组的语句中,正确的是____A. char str[5]=“hello”;B. char str[]={‘h’,’e’,’l’,’l’,’o’,’\0’};C. char str[5]={“hi”};D. char str[100]=““;7. 数组在Java中储存在中A.栈main{ B.队列 C.堆 D.链表. 下面程序的运行结果是____int x=30;int[] numbers=new int[x];x=60;System.out.println;}A.60B.20C.30D.509. 下面不是创建数组的正确语句A.float f[][]=new float[6][6];C.float f[][]=new float[][6];10. 下面不是数组复制方法的是A.用循环语句逐个复制数组C. 用”=“进行复制A.a 11. 数组a的第三个元素表示为B.a[3]C.aD.a[2]12. 当访问无效的数组下标时,会发生A. 中止程序B.抛出异常C. 系统崩溃D.直接跳过13. 使用arraycopy方法将数组a复制到b正确的是A. arraycopyB. arraycopyC.. arraycopyD. arraycopy14. 关于数组默认值,错误的是A. char--’”u0000’B. Boolean--trueC. float--0.0fD. int-- 015. 关于数组作为方法的参数时,向方法传递的是A. 数组的引用B.数组的栈地址C. 数组自身D.数组的元素16. 关于数组复制,下列说法错误的是A.”=“可以实现数组复制B. 运用循环语句进行数组复制必须两个数组长度相同C. arraycopy方法没有给目标数组分配内存空间D.数组复制是数组引用的传递17. 下列语句会造成数组new int[10]越界是A.a[0]+=9;B.a[9]=10;A. public static void main;B. public static void mainC. public static int mainD. public void main C.—a[9] D.for a[i]++; 18. main 方法是java Application 程序执行的入口点。
二维数组与多维数组以及练习题

⼆维数组与多维数组以及练习题⼆维数组int[,]array=new int[3,2]{{1,2},{3,4},{5,6}};3表⽰有三个⼀维数组。
2表⽰每⼀个⼀维数组有两个元素如果把⼀维数组看作是⼀个点,那么⼆维数组就是⼀个⾯多维数组,多维数组就是[,,],的形式。
如果把⼆维数组看作是⼀个⾯,那么多位数组就是⼀个⽴体基本了解就⾏,很少⽤到多维数组下⾯我们来看⼏个⽤⼆维数组做的练习题——————————————————————————————————————————————————————-———————————————例⼀,请输⼊班级⼈数,然后输⼊每个⼈的语⽂数学和英语成绩,并且打印出语⽂的两个最⾼分,数学的两个最低分。
和英语的平均分Console.Write("请输⼊班级⼈数");int a = int.Parse(Console.ReadLine());double[,] s = new double[a, 3];for (int i = 0; i < a; i++){Console.Write("请输⼊第{0}个⼈的语⽂成绩", (i + 1));s[i, 0] = double.Parse(Console.ReadLine());Console.Write("请输⼊第{0}个⼈的数学成绩", (i + 1));s[i, 1] = double.Parse(Console.ReadLine());Console.Write("请输⼊第{0}个⼈的英语成绩", (i + 1));s[i, 2] = double.Parse(Console.ReadLine());}for (int i = 0; i < a; i++){for (int j = 0; j < 3; j++){Console.Write(s[i, j] + "\t");}Console.WriteLine();}for (int i = 0; i < a - 1; i++){for (int j = i+1; j < a; j++){if (s[i, 0] < s[j, 0]){double z = s[i, 0];s[i, 0] = s[j, 0];s[j, 0] = z;double z1=s[i,1];s[i,1]=s[j,1];s[j,1]=z1;double z2=s[i,2];s[i,2]=s[j,2];s[j,2]=z2;}}}Console.Write(s[0, 0]+","+s[1,0]);Console.WriteLine();for (int i = 0; i < a - 1; i++){for (int j = i + 1; j < a; j++){if (s[i, 0] < s[j, 0]){double z = s[i, 0];s[i, 0] = s[j, 0];s[j, 0] = z;double z1 = s[i, 1];s[i, 1] = s[j, 1];s[j, 1] = z1;double z2 = s[i, 2];s[i, 2] = s[j, 2];s[j, 2] = z2;}}Console.WriteLine(s[(a - 1), 1] + "," + s[(a - 2), 1]);double d = 0;for (int i = 0; i < a; i++){d += s[i, 2];}Console.WriteLine(d / a);Console.ReadLine();————————————————————————————————————————————————————————————————————————————————例⼆输⼊图形或者汉字。
二维数组 编程题

二维数组编程题题目:找出二维数组中的最大数编程要求:给定一个二维数组,编写一个函数来计算数组中的最大数并返回。
函数原型:int findMax(int arr[row][col], int row, int col)函数参数:- arr: 表示输入的二维数组- row: 表示二维数组的行数- col: 表示二维数组的列数函数返回:- 返回二维数组中的最大值示例:输入:int arr[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}};输出:12解题思路:首先将数组中第一个元素设为最大值,然后遍历数组中的每个元素,每次比较当前元素和最大值的大小,如果当前元素更大,就更新最大值。
最终返回最大值即可。
编程实现:```cpp#include <iostream>using namespace std;int findMax(int arr[row][col], int row, int col) {int maximum = arr[0][0];for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {if (arr[i][j] > maximum) {maximum = arr[i][j];}}}return maximum;}int main() {int arr[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}};int row = sizeof(arr) / sizeof(arr[0]);int col = sizeof(arr[0]) / sizeof(int);int maxNum = findMax(arr, row, col);cout << "最大数为:" << maxNum << endl;return 0;}```以上代码通过遍历二维数组找出最大元素,并输出结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.在M行N列的二维数组a中,找出每一行的最大值
#include <stdio.h>
#define M 3
#define N 4
int main()
{
int i,j,max,a[M][N];
for(i=0;i<M;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
for(i=0;i<M;i++)
{
max=a[i][0];
for(j=1;j<N;j++)
{
if(max<a[i][j])
max=a[i][j];
}
printf("The max of %d line is %d\n",i+1,max);
}
return 0;
}
2.输入一个2行3列数组,转置后得到新的数组并输出
#include <stdio.h>
int main()
{
int i,j,a[2][3],b[3][2];
printf("Input 6 numbers to fill a[2][3]:\n");
for(i=0;i<2;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
for(i=0;i<2;i++)
for(j=0;j<3;j++)
b[j][i]=a[i][j];
for(j=0;j<3;j++)
{
for(i=0;i<2;i++)
printf("%d ",b[j][i]);
putchar('\n');
}
return 0;
}
3.输出数组
2 0 0 0 0
4 6 0 0 0
8 10 12 0 0
14 16 18 20 0
22 24 26 28 30
#include <stdio.h>
int main()
{
int i,j,k=0,a[5][5];
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(i>=j) a[i][j]=k+=2;
else a[i][j]=0;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%2d ",a[i][j]);
putchar('\n');
}
return 0;
}
4.先从键盘上输入一个3行3列整型数组的各个元素的值,然后输出主对角线和次对角线元素之和。
#include <stdio.h>
int main()
{
int i,j,m=0,n=0,a[3][3];
printf("Input 9 words to fill a[3][3]:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++)
{
m+=a[i][i];
n+=a[i][2-i];
}
printf("主对角线元素之和=%d\n",m);
printf("次对角线元素之和=%d\n",n);
return 0;
}
5. 先从键盘上输入一个3行3列数组的各个元素的值,然后按主对角线进行转置,并输出转置后的数组。
例如:
原数组为:转置后为:
1 2 3 1 4 7
4 5 6 2 5 8
7 8 9 3 6 9
#include <stdio.h>
int main()
{
int i,j,t,a[3][3];
printf("Input 9 words to fill a[3][3]:\n");
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++)
if(i!=j&&i<j)
{ t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t; }
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",a[i][j]);
putchar('\n');
}
return 0;
}。