实验九1

1970-01-01 08:00

实验九 数组(二)

数组是FORTRAN90最常用的结构数据类型之一,数组是求解许多复杂问题的有效工具。 FORTRAN90不但提供静态数组,而且还新增加了动态数组,为求解复杂问题和提高程序运行效率提供了方便。

FORTRAN90提供了丰富的有关数组运算的标准函数,为问题求解带来了极大方便。 本次实验是学习和掌握多维数组、动态数组的一次系统实验活动。通过本次实验,能够设计和编写比较复杂的数组应用程序。

一.实验目的

1. 进一步掌握数组声明、数组元素引用、数组输入输出、数组赋初值、数组构造器、隐含DO循环的使用规则。

2. 掌握有关数组运算的常用标准函数。

3. 掌握动态数组概念和动态数组的声明、存储分配的使用规则。 4. 掌握设计和编写多维数组和动态数组应用程序。

二.实验内容1

1.问题描述 求m×n矩阵matrix中绝对值最大和最小元素所在的行、列位置。并将绝对值最小元素与第1行第1列数组元素交换,将绝对值最大元素第m行第n列数组元素交换。编写程序实现之。

25.5 35.2 38.5 15.3 matrix= 15.2 12.0 29.5 18.5 20.3 14.5 30.5 17.8

2.算法设计 m×n矩阵符合数组定义,用二维实型数组matrix保存,用数组构造器赋初值。

算法基本思想:使用“计数型”二重循环结构求绝对值最小元素min和最大元素max所在的位置。然后将绝对值最小元素与第1行第1列数组元素matrix(1,1)交换,将绝对值最大元素第m行第n列数组元素matrix(m,n)交换。输出绝对值最小元素和最大元素所在的行号和列号,以及交换前后矩阵数据。

根据分析,设计算法如下: 算法:

(1) 给数组matrix赋初值;

(2) 给min赋初值:min=matrix(1,1), 位置赋初值:i_min=1,j_min=1; (3) 给max赋初值:max=matrix(m,n),位置赋初值:i_max=m,j_max=n;

(4) 使用“计数型”二重循环结构求绝对值最小元素min,所在位置i_min和j_min,最大元素max,所在位置i_max和j_max;

(5) 输出绝对值最小元素min,所在位置i_min和j_min; (6) 输出绝对值最大元素max,所在位置i_max和j_max; (7) 输出交换前数组数据;

-63-

(8) 绝对值最小元素与数组第1行第1列元素matrix(1,1)交换; (9) 绝对值最大元素与数组第m行第n列元素matrix(m,b)交换; (10)输出交换后数组数据。 (11)结束 3.程序编写

设计和编写程序如下(不完整,请在下划线空白处填充正确内容):

!班级:??? !姓名:??? !日期:???

!查询绝对值最小值和最大值 PROGRAM main PARAMETER(m=3,n=4)

REAL :: matrix(m,n),min,max,temp

INTEGER :: i_min=1,j_min=1,i_max=m,j_max=

matrix=RESHAPE((/25.5,15.2,20.3,35.2,12.0,14.5,38.5,29.5,&

& 30.5,15.3,18.5,17.8/),(/3,4/)) min=ABS(matrix(1,1)); max=

DO i=1,m DO j=1,N

IF (ABS(matrix(i,j))< ) THEN min=ABS(matrix(i,j)) i_min= ; j_min=j ENDIF

IF ( >max) THEN max= i_max=i; j_max=j ENDDO

PRINT 100, '最小元素', min, i_min, j_min PRINT 100, '最大元素', max, i_max, j_max PRINT *,'交换前矩阵:' DO i=1,m

PRINT 200,(matrix(i,j),j= ) ENDDO

IF (min/=matrix( )) THEN

=matrix(1,1); matrix(1,1)=min; matrix(i_min,j_min)=temp ENDIF

IF (max/=matrix( )) THEN

temp=matrix(m,n); matrix(m,n)=max; matrix(i_max,j_max)=

-64-

ENDIF

PRINT *,'交换前矩阵:' DO i=1,m

PRINT 200,(matrix(i,j),j=1,n) ENDDO

100 FORMAT(1X, '绝对值',A ,':' ,F4.1 , 2X , '行号:', I2 , 2X , '列号:' ,I2) 200 FORMAT(1X,(F4.1,2X)) END

4.实验要求

? 分析问题,理解算法和程序,将程序填写完整。

? 掌握二维数组声明、数组构造器、RESHAPE函数、隐含DO循环基本概念和使用规则。 ? 在D盘上创建新工作区:shiyan09和新项目:xm91。

? 在项目xm91内创建源程序文件:xm91.f90,同时在文件中编辑输入给定程序。 ? 在项目xm91内编译、构建、运行、调试程序。

? 将输出结果以注释形式编辑输入到源程序文件xm91.f90末尾。

? 改写程序,提高通用性(行数、列数和数组数据从键盘输入,绝对值最大元素与第1行第1列元素交换,绝对值最小元素与第m行第n列元素交换)。运行程序,输入一组数组数据,获得运行结果。

5.实验步骤

? 分析问题,理解算法和程序,完成程序填空,得到正确完整程序。 ? 启动软件开发环境Microsoft Developer Studio。 ? 创建新工作区:shiyan09。

? 在工作区shiyan09内创建新项目:xm91。

? 在项目xm91内创建源程序文件xm91.f90,编辑输入源程序文本。 ? 编译、构建、运行、调试程序。运行程序,得到输出结果。 ? 输出结果以注释形式编辑输入到源程序文件末尾。

? 在工作区shiyan09内创建新项目:xm911,在新项目内创建源程序文件xm911.f90,编辑输入已改写程序。编译、构建、运行、调试程序。输入自定数组数据,获得输出结果。

三.实验内容2

1.问题描述

生成“魔幻方阵。魔幻方阵是指方阵的每一行、每一列、对角线元素之和均相等,其值

22

为n(n+1)/2,n代表方阵的行数和列数。一个n阶奇数方阵由1到n个自然数构成,其组成规律是:

(1)将1放在第1行的中间一列;

(2)由m=1开始依次从左下到右上方向放连续数,如m放在A(i,j),则m+1放在A(i-1,j+1);

(3)如果i-1<1,则i-1为n; (4)如果j+1>n,则j+1为1;

(5)如果A(i-1,j+1)已放数,则将数放在A(i+1,j)中。 以下是五阶魔幻方阵:

-65-

17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9

开始 初始化:1?i,3=j 初始化:1?A(1,3), 2?m m≤n 真 22.算法设计

问题中魔幻方阵数据符合数组定义,用一个n行n列二维整型数组A存储魔幻方阵数据。根据魔幻方阵组成规律,设计算法,绘制框图,如图9-1所示。

3.程序编写

设计和编写程序如下(不完整,请在下划线空白处填充正确内容):

!班级:??? !姓名:??? !时间:??? !生成魔幻方阵 PROGRAM main PARAMETER (n=5)

INTEGER :: A=0,i=1,j=3,m A(i,j)= m=2

DO WHILE (m<= ) i=i-1; j=j+1 IF (i<1) i= IF (j>n) j=

IF ( ) THEN A(i,j)=m m= ELSE

i= ;j=j-2 IF (i>n) i= IF (j<1) =j+n ENDDO

DO i=

PRINT '((I3,1X)) ',(A(i,j),j=1,n) ENDDO END

-66-

假 i-1?i,j+i?j 真 i<1 假 n?i 真 j>n 假 1?j 真 A(i,j)==0 假 m?A(i,j),m=m+1 真 i+3?i,j-2?j i>n 假 i-n?i 真 假 j<1 j+n?j 输出:魔幻方阵A 结束 图9-1 程序框图

4. 实验要求

? 分析问题,理解算法和程序,完成程序填空,得到正确完整程序。 ? 在工作区shiyan09内创建新项目:xm92。

? 在项目xm92内创建源程序文件:xm92.f90,同时在文件中编辑输入给定程序。 ? 在项目xm92内编译、构建、运行、调试程序。

? 将输入数据和输出结果以注释形式编辑输入到源程序文件xm92.f90末尾。

? 改写程序,提高程序通用性,将方阵阶数n从键盘输入,生成3、5、7阶魔幻方阵。 5.实验步骤

? 分析问题,理解算法和程序,在程序下划线空白处填写正确内容。 ? 在工作区shiyan09内创建新项目:xm92。

? 在项目xm92内创建源程序文件xm92.f90,编辑输入源程序文本。 ? 编译、构建、运行、调试程序。得到5阶魔幻方阵数据。 ? 将输出结果以注释形式编辑输入到源程序文件末尾。

? 在工作区shiyan09内创建新项目:xm921,在新项目内创建源程序文件xm921.f90,编辑输入已改写程序。编译、构建、运行、调试程序。运行程序,分别输入3、5、7,获得输出结果。

四.实验内容3

1.问题描述 已知m×n矩阵,求每行元素之和,将和最大的行与第一行对调,输出对调前后矩阵。使用动态数组,编写程序实现之。 2.算法设计 m×n的矩阵符合数组定义,用二维整型数组A保存,m、n和数组A数据从键盘输入。m行数组元素之和,有m个数,用一维整型数组B保存。数组A和B使用动态数组。

问题求解算法比较简单。

分析问题,自行设计算法和绘制框图。 3.程序编写

设计和编写程序如下(含有若干错误,请查找并改正错误):

!班级:??? !姓名:??? !日期:??? !数组元素对调 PROGRAM main

INTEGER,ALLOCATABLE :: A(:),B(:) INTEGER sum,max,m,n,p

PRINT*,'请输入m×n矩阵阶数m,n:' READ *,m,n ALLOCATE(A,B)

PRINT*,'按逻辑结构输入m×n矩阵数据(数据件之间用空格间隔):' DO I=

READ *,(A(I,J),J=1,n)

-67-


实验九1.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:必修二遗传学基础知识专题复习学案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: