实验七 二维数组程序设计

更新时间:2023-03-14 06:57:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验七 二维数组程序设计

一、实验学时 2学时 二、实验目的

(一)掌握二维数组的定义、赋值及输入输出的方法; (二)掌握与二维数组有关的算法如查找、矩阵转置等;

(三)掌握在程序设计中使用数组的方法。数组是非常重要的数据类型,循环中使用数组能更好地发挥循环的作用,有些问题不使用数组难以实现。

(四)掌握在VC++环境下上机调试二维数组程序的方法,并对结果进行分析。

三、预习要求

熟悉二维数组的定义、引用和相关算法(求最大值、最小值)的程序设计,同时要掌握在程序设计中利用双重循环来实现二维数组的输入和输出。

四、实验内容

(一)二维数组的初始化,即给二维数组的各个元素赋初值。下面的几个程序都能为数组元素赋值,请输入程序并运行,比较这些赋值方法有何异同。

1.在定义数组的同时对数组元素分行初始化。 /* c7-1.c */

/*二维数组的初始化(分行)*/ #include \void main( )

{ int i,j,a[2][3]={{1,2,3},{4,5,6}}; for(i=0; i<2; i++) { for(j=0; j<3; j++) printf(\printf(\} }

2.不分行的初始化。把{ }中的数据依次赋值给数组的各个元素。 /* c7-2.c */

/*二维数组的初始化(不分行)*/ #include \void main( )

{ int i,j,a[2][3]={1,2,3,4,5,6}; for(i=0;i<2;i++)

{ for(j=0;j<3;j++) printf(\printf(\} }

3.为部分数组元素初始化。

如:数组定义语句为:int i,j,a[2][3]={{1,2},{4}};

4.可以省略第一维的定义,但不能省略第二维的定义。 如:int a[ ][3]={1,2,3,4,5,6};

依次运行以上程序,比较这四种定义方式的不同之处。

(二)求一个4×4矩阵的主对角线元素之和,填空并运行程序。

编程提示: 1.定义一个4行4列的二维数组a。

2.可利用双重循环的嵌套为该二维数组的各个数组元素赋值,一般格式为: for(i=0; i<4; i++) for(j=0; j<4; j++) scanf(\

3.用循环求和,并注意矩阵对角上线元素的特征是:行下标和列下标相同。 4.输出对角线元素之和。 /* c7-3.c */

/*求一个4×4矩阵的主对角线元素之和*/ #include \void main( )

{ int a[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,sum=0; for(i=0; i<4; i++)

_____; /*把对角线元素的和放在变量sum中 */

printf(\输出对角线元素的和*/ }

(三)打印出以下的杨辉三角(要求打印出10行) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1

编程提示:

1.杨辉三角的特点是:第1列和对角线上的元素为1,其它各元素的值都是上一行上一列元素和上一行前一列元素之和。

2.定义一个10×10的二维数组a。

3.先用一个单层循环为第一列和对角线上的元素赋值。如:

for(i=0; i<10; i++) { a[i][i]=1;a[i][0]=1; } 4.再用一个双重循环嵌套为其它元素赋值。 for( ; i<10; i++)

for( ; ; j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; 想一想,划横线的地方应当填入什么内容?

5.计算之后再用一个双重循环嵌套输出杨辉三角。注意各层循环变量的初值和终值怎样确定。

(四)统计3个学生,每个学生4门课程的考试成绩,要求输出每个学生的总成绩,每个学生的平均成绩,3个学生的总平均成绩。填空并运行程序。

/* c7-4.c */ /*学生成绩处理 */ #include \void main( ) { int stu[3][4],i,j,t[3]; float sum=0,a[3];

for(i=0; i<3; i++) /* 输入三个学生的4门课程考试成绩 */ for(j=0; j<4; j++)

scanf(\ for(i=0; i<3; i++) { t[i]=0;

for(j=0; j<4; j++)

{ sum+=stu[i][j]; /* sum存放三个学生的4门课程总成绩 */ t[i]+=stu[i][j]; /* t[i]存放第i个学生的4门课程成绩 */ }

printf(\输出第i个学生的总成绩 */ ;

printf(\存放第i个学生的4门课程平均成绩*/ }

printf(\}

(五)已知二维数组a中的元素为: 4 4 34 37 3 12 5 6 5

求二维数组a中的最大值和最小值。程序的输出应为:The max is: 37 The min is: 3

填空并运行程序。 /* c7-5.c */

/*求二维数组中元素的最大值与最小值 */ #include \

void main( )

{ int a[3][3]={4,4,34,37,3,12,5,6,5},i,j,max,min; max=a[0][0];

; for( i=0; i<3; i++) for( j=0; j<3; j++)

{ if ( max < a[i][j] ) max = a[i][j]; if ( min > a[i][j] ) min = a[i][j]; }

printf(\ printf(\ }

(六)以下程序是查找二维数组a的最大元素及其下标,填空并运行程序。 /* c7-6.c */

/*求二维数组中元素的最大值及其下标 */ #include \void main()

{ int a[4][4]={{1,2,3,4},{3,4,5,6},{5,6,7,8},{7,8,9,10}};

int i,j,max,l,c; /* max存放最大值,l、c分别存放行和列的下标 */ max=a[0][0]; for(i=0; i<4; i++) for(j=0; j<4; j++)

if(max

(七)下面的程序是自动形成并输出如下矩阵,填空并运行程序。 1 2 3 4 5 1 1 6 7 8 1 1 1 9 10 1 1 1 1 11 1 1 1 1 1

/* c7-7.c */ /*生成指定的矩阵*/ #include \void main( )

{ int i,j,k,a[5][5]; k=2;

for(i=0; i<5; i++) /* 行循环 */ for(j=0; j<5; j++) /* 列循环 */

if( ) a[i][j]=1; /* 产生矩阵的下三角元素 */

else a[i][j]=k++; /* 产生矩阵的上三角元素 */ for(i=0; i<5; i++) { for(j=0; j<5; j++) printf(“M”,a[i][j]);

printf(“\\n”); /* 每输出一行后换行 */ }

}

(八)下面程序的功能是实现方阵(如:3行3列)的转置(即行列互换) 如:如果原来的矩阵:100 200 300 400 500 600 700 800 900 程序输出应为:

100 400 700 200 500 800 300 600 900 填空并运行程序。 /* c7-7.c */ /*矩阵转置*/

#include \void main( ) { int i,j,temp;

int array[3][3]={{100,200,300},{400,500,600},{700,800,900}}; printf(\原来的矩阵为:\\n\ for(i=0; i<3; i++)

{ for(j=0; j< ; j++) printf(\ printf(\ for(i=0; i<3; i++)

{ for(j=0; ;j++)

{temp=array[i][j];array[i][j]=array[j][i];array[j][i]=temp;} } printf(\转置后的矩阵为:\\n\ for(i=0; i<3; i++)

{ for(j=0; j<3; j++) printf(\ } /*输出一行后要换行*/ }

请将此矩阵转置程序与教材上的矩阵转置程序进行比较,各用于何种类型矩阵比较合适?

五、实验注意事项

(一)C规定,二维数组的行和列的下标都是从0开始的。

例如,有定义:int b[3][[5]; 则数组b的第一维下标的上界为2,第二维下标的上界为4。说明定义了一个整型二维数组b,它有3行5列共3*5=15个数组元素,行下标为0,1,2,

本文来源:https://www.bwwdw.com/article/zfvx.html

Top