实验九1.doc

上传人:b****1 文档编号:236941 上传时间:2022-10-07 格式:DOC 页数:7 大小:67KB
下载 相关 举报
实验九1.doc_第1页
第1页 / 共7页
实验九1.doc_第2页
第2页 / 共7页
实验九1.doc_第3页
第3页 / 共7页
实验九1.doc_第4页
第4页 / 共7页
实验九1.doc_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

实验九1.doc

《实验九1.doc》由会员分享,可在线阅读,更多相关《实验九1.doc(7页珍藏版)》请在冰豆网上搜索。

实验九1.doc

实验九数组

(二)

数组是FORTRAN90最常用的结构数据类型之一,数组是求解许多复杂问题的有效工具。

FORTRAN90不但提供静态数组,而且还新增加了动态数组,为求解复杂问题和提高程序运行效率提供了方便。

FORTRAN90提供了丰富的有关数组运算的标准函数,为问题求解带来了极大方便。

本次实验是学习和掌握多维数组、动态数组的一次系统实验活动。

通过本次实验,能够设计和编写比较复杂的数组应用程序。

一.实验目的

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

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

3.掌握动态数组概念和动态数组的声明、存储分配的使用规则。

4.掌握设计和编写多维数组和动态数组应用程序。

二.实验内容1

1.问题描述

求m×n矩阵matrix中绝对值最大和最小元素所在的行、列位置。

并将绝对值最小元素与第1行第1列数组元素交换,将绝对值最大元素第m行第n列数组元素交换。

编写程序实现之。

25.535.238.515.3

matrix=15.212.029.518.5

20.314.530.517.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)输出交换前数组数据;

(8)绝对值最小元素与数组第1行第1列元素matrix(1,1)交换;

(9)绝对值最大元素与数组第m行第n列元素matrix(m,b)交换;

(10)输出交换后数组数据。

(11)结束

3.程序编写

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

!

班级:

?

?

?

!

姓名:

?

?

?

!

日期:

?

?

?

!

查询绝对值最小值和最大值

PROGRAMmain

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=

DOi=1,m

DOj=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

PRINT100,'最小元素',min,i_min,j_min

PRINT100,'最大元素',max,i_max,j_max

PRINT*,'交换前矩阵:

'

DOi=1,m

PRINT200,(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)=

ENDIF

PRINT*,'交换前矩阵:

'

DOi=1,m

PRINT200,(matrix(i,j),j=1,n)

ENDDO

100FORMAT(1X,'绝对值',A,':

',F4.1,2X,'行号:

',I2,2X,'列号:

',I2)

200FORMAT(1X,(F4.1,2X))

END

4.实验要求

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

l掌握二维数组声明、数组构造器、RESHAPE函数、隐含DO循环基本概念和使用规则。

l在D盘上创建新工作区:

shiyan09和新项目:

xm91。

l在项目xm91内创建源程序文件:

xm91.f90,同时在文件中编辑输入给定程序。

l在项目xm91内编译、构建、运行、调试程序。

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

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

运行程序,输入一组数组数据,获得运行结果。

5.实验步骤

l分析问题,理解算法和程序,完成程序填空,得到正确完整程序。

l启动软件开发环境MicrosoftDeveloperStudio。

l创建新工作区:

shiyan09。

l在工作区shiyan09内创建新项目:

xm91。

l在项目xm91内创建源程序文件xm91.f90,编辑输入源程序文本。

l编译、构建、运行、调试程序。

运行程序,得到输出结果。

l输出结果以注释形式编辑输入到源程序文件末尾。

l在工作区shiyan09内创建新项目:

xm911,在新项目内创建源程序文件xm911.f90,编辑输入已改写程序。

编译、构建、运行、调试程序。

输入自定数组数据,获得输出结果。

三.实验内容2

1.问题描述

生成“魔幻方阵。

魔幻方阵是指方阵的每一行、每一列、对角线元素之和均相等,其值为n(n2+1)/2,n代表方阵的行数和列数。

一个n阶奇数方阵由1到n2个自然数构成,其组成规律是:

(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)中。

以下是五阶魔幻方阵:

输出:

魔幻方阵A

结束

开始

初始化:

1Þi,3=j

m≤n2

i-1Þi,j+iÞj

初始化:

1ÞA(1,3),2Þm

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

图9-1程序框图

17241815

23571416

46132022

101219213

11182529

2.算法设计

问题中魔幻方阵数据符合数组定义,用一个n行n列二维整型数组A存储魔幻方阵数据。

根据魔幻方阵组成规律,设计算法,绘制框图,如图9-1所示。

3.程序编写

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

!

班级:

?

?

?

!

姓名:

?

?

?

!

时间:

?

?

?

!

生成魔幻方阵

PROGRAMmain

PARAMETER(n=5)

INTEGER:

:

A=0,i=1,j=3,m

A(i,j)=

m=2

DOWHILE(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

DOi=

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

ENDDO

END

4.实验要求

l分析问题,理解算法和程序,完成程序填空,得到正确完整程序。

l在工作区shiyan09内创建新项目:

xm92。

l在项目xm92内创建源程序文件:

xm92.f90,同时在文件中编辑输入给定程序。

l在项目xm92内编译、构建、运行、调试程序。

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

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

5.实验步骤

l分析问题,理解算法和程序,在程序下划线空白处填写正确内容。

l在工作区shiyan09内创建新项目:

xm92。

l在项目xm92内创建源程序文件xm92.f90,编辑输入源程序文本。

l编译、构建、运行、调试程序。

得到5阶魔幻方阵数据。

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

l在工作区shiyan09内创建新项目:

xm921,在新项目内创建源程序文件xm921.f90,编辑输入已改写程序。

编译、构建、运行、调试程序。

运行程序,分别输入3、5、7,获得输出结果。

四.实验内容3

1.问题描述

已知m×n矩阵,求每行元素之和,将和最大的行与第一行对调,输出对调前后矩阵。

使用动态数组,编写程序实现之。

2.算法设计

m×n的矩阵符合数组定义,用二维整型数组A保存,m、n和数组A数据从键盘输入。

m行数组元素之和,有m个数,用一维整型数组B保存。

数组A和B使用动态数组。

问题求解算法比较简单。

分析问题,自行设计算法和绘制框图。

3.程序编写

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

!

班级:

?

?

?

!

姓名:

?

?

?

!

日期:

?

?

?

!

数组元素对调

PROGRAMmain

INTEGER,ALLOCATABLE:

:

A(:

),B(:

INTEGERsum,max,m,n,p

PRINT*,'请输入m×n矩阵阶数m,n:

'

READ*,m,n

ALLOCATE(A,B)

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

'

DOI=

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1